aboutsummaryrefslogtreecommitdiffstats
path: root/nikola/plugins/compile/markdown
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/compile/markdown')
-rw-r--r--nikola/plugins/compile/markdown/__init__.py49
-rw-r--r--nikola/plugins/compile/markdown/mdx_gist.plugin9
-rw-r--r--nikola/plugins/compile/markdown/mdx_gist.py18
-rw-r--r--nikola/plugins/compile/markdown/mdx_nikola.plugin9
-rw-r--r--nikola/plugins/compile/markdown/mdx_nikola.py24
-rw-r--r--nikola/plugins/compile/markdown/mdx_podcast.plugin9
-rw-r--r--nikola/plugins/compile/markdown/mdx_podcast.py14
7 files changed, 92 insertions, 40 deletions
diff --git a/nikola/plugins/compile/markdown/__init__.py b/nikola/plugins/compile/markdown/__init__.py
index d0fa66a..4182626 100644
--- a/nikola/plugins/compile/markdown/__init__.py
+++ b/nikola/plugins/compile/markdown/__init__.py
@@ -34,30 +34,14 @@ import re
try:
from markdown import markdown
-
- from nikola.plugins.compile.markdown.mdx_nikola import NikolaExtension
- nikola_extension = NikolaExtension()
-
- from nikola.plugins.compile.markdown.mdx_gist import GistExtension
- gist_extension = GistExtension()
-
- from nikola.plugins.compile.markdown.mdx_podcast import PodcastExtension
- podcast_extension = PodcastExtension()
-
except ImportError:
markdown = None # NOQA
nikola_extension = None
gist_extension = None
podcast_extension = None
-
-try:
- from collections import OrderedDict
-except ImportError:
- OrderedDict = dict # NOQA
-
from nikola.plugin_categories import PageCompiler
-from nikola.utils import makedirs, req_missing
+from nikola.utils import makedirs, req_missing, write_metadata
class CompileMarkdown(PageCompiler):
@@ -65,9 +49,22 @@ class CompileMarkdown(PageCompiler):
name = "markdown"
demote_headers = True
- extensions = [gist_extension, nikola_extension, podcast_extension]
+ extensions = []
site = None
+ def set_site(self, site):
+ for plugin_info in site.plugin_manager.getPluginsOfCategory("MarkdownExtension"):
+ if plugin_info.name in site.config['DISABLED_PLUGINS']:
+ site.plugin_manager.removePluginFromCategory(plugin_info, "MarkdownExtension")
+ continue
+
+ site.plugin_manager.activatePluginByName(plugin_info.name)
+ plugin_info.plugin_object.set_site(site)
+ self.extensions.append(plugin_info.plugin_object)
+ plugin_info.plugin_object.short_help = plugin_info.description
+
+ return super(CompileMarkdown, self).set_site(site)
+
def compile_html(self, source, dest, is_two_file=True):
if markdown is None:
req_missing(['markdown'], 'build this site (compile Markdown)')
@@ -81,15 +78,21 @@ class CompileMarkdown(PageCompiler):
output = markdown(data, self.extensions)
out_file.write(output)
- def create_post(self, path, onefile=False, is_page=False, **kw):
- metadata = OrderedDict()
+ def create_post(self, path, **kw):
+ content = kw.pop('content', None)
+ onefile = kw.pop('onefile', False)
+ # is_page is not used by create_post as of now.
+ kw.pop('is_page', False)
+
+ metadata = {}
metadata.update(self.default_metadata)
metadata.update(kw)
makedirs(os.path.dirname(path))
+ if not content.endswith('\n'):
+ content += '\n'
with codecs.open(path, "wb+", "utf8") as fd:
if onefile:
fd.write('<!-- \n')
- for k, v in metadata.items():
- fd.write('.. {0}: {1}\n'.format(k, v))
+ fd.write(write_metadata(metadata))
fd.write('-->\n\n')
- fd.write("Write your {0} here.".format('page' if is_page else 'post'))
+ fd.write(content)
diff --git a/nikola/plugins/compile/markdown/mdx_gist.plugin b/nikola/plugins/compile/markdown/mdx_gist.plugin
new file mode 100644
index 0000000..0e5c578
--- /dev/null
+++ b/nikola/plugins/compile/markdown/mdx_gist.plugin
@@ -0,0 +1,9 @@
+[Core]
+Name = mdx_gist
+Module = mdx_gist
+
+[Documentation]
+Author = Roberto Alsina
+Version = 0.1
+Website = http://getnikola.com
+Description = Extension for embedding gists
diff --git a/nikola/plugins/compile/markdown/mdx_gist.py b/nikola/plugins/compile/markdown/mdx_gist.py
index d92295d..247478b 100644
--- a/nikola/plugins/compile/markdown/mdx_gist.py
+++ b/nikola/plugins/compile/markdown/mdx_gist.py
@@ -117,10 +117,18 @@ Error Case: non-existent file:
'''
from __future__ import unicode_literals, print_function
-from markdown.extensions import Extension
-from markdown.inlinepatterns import Pattern
-from markdown.util import AtomicString
-from markdown.util import etree
+
+try:
+ from markdown.extensions import Extension
+ from markdown.inlinepatterns import Pattern
+ from markdown.util import AtomicString
+ from markdown.util import etree
+except ImportError:
+ # No need to catch this, if you try to use this without Markdown,
+ # the markdown compiler will fail first
+ Extension = Pattern = object
+
+from nikola.plugin_categories import MarkdownExtension
from nikola.utils import get_logger, req_missing, STDERR_HANDLER
LOGGER = get_logger('compile_markdown.mdx_gist', STDERR_HANDLER)
@@ -209,7 +217,7 @@ class GistPattern(Pattern):
return gist_elem
-class GistExtension(Extension):
+class GistExtension(MarkdownExtension, Extension):
def __init__(self, configs={}):
# set extension defaults
self.config = {}
diff --git a/nikola/plugins/compile/markdown/mdx_nikola.plugin b/nikola/plugins/compile/markdown/mdx_nikola.plugin
new file mode 100644
index 0000000..7af52a4
--- /dev/null
+++ b/nikola/plugins/compile/markdown/mdx_nikola.plugin
@@ -0,0 +1,9 @@
+[Core]
+Name = mdx_nikola
+Module = mdx_nikola
+
+[Documentation]
+Author = Roberto Alsina
+Version = 0.1
+Website = http://getnikola.com
+Description = Nikola-specific Markdown extensions
diff --git a/nikola/plugins/compile/markdown/mdx_nikola.py b/nikola/plugins/compile/markdown/mdx_nikola.py
index b7c29a5..ca67511 100644
--- a/nikola/plugins/compile/markdown/mdx_nikola.py
+++ b/nikola/plugins/compile/markdown/mdx_nikola.py
@@ -27,23 +27,31 @@
"""Markdown Extension for Nikola-specific post-processing"""
from __future__ import unicode_literals
import re
-from markdown.postprocessors import Postprocessor
-from markdown.extensions import Extension
+try:
+ from markdown.postprocessors import Postprocessor
+ from markdown.extensions import Extension
+except ImportError:
+ # No need to catch this, if you try to use this without Markdown,
+ # the markdown compiler will fail first
+ Postprocessor = Extension = object
+
+from nikola.plugin_categories import MarkdownExtension
+
+# FIXME: duplicated with listings.py
+CODERE = re.compile('<div class="codehilite"><pre>(.*?)</pre></div>', flags=re.MULTILINE | re.DOTALL)
class NikolaPostProcessor(Postprocessor):
def run(self, text):
output = text
- # python-markdown's highlighter uses the class 'codehilite' to wrap
- # code, instead of the standard 'code'. None of the standard
- # pygments stylesheets use this class, so swap it to be 'code'
- output = re.sub(r'(<div[^>]+class="[^"]*)codehilite([^>]+)',
- r'\1code\2', output)
+ # python-markdown's highlighter uses <div class="codehilite"><pre>
+ # for code. We switch it to reST's <pre class="code">.
+ output = CODERE.sub('<pre class="code literal-block">\\1</pre>', output)
return output
-class NikolaExtension(Extension):
+class NikolaExtension(MarkdownExtension, Extension):
def extendMarkdown(self, md, md_globals):
pp = NikolaPostProcessor()
md.postprocessors.add('nikola_post_processor', pp, '_end')
diff --git a/nikola/plugins/compile/markdown/mdx_podcast.plugin b/nikola/plugins/compile/markdown/mdx_podcast.plugin
new file mode 100644
index 0000000..dc16044
--- /dev/null
+++ b/nikola/plugins/compile/markdown/mdx_podcast.plugin
@@ -0,0 +1,9 @@
+[Core]
+Name = mdx_podcast
+Module = mdx_podcast
+
+[Documentation]
+Author = Roberto Alsina
+Version = 0.1
+Website = http://getnikola.com
+Description = Markdown extensions for embedding podcasts and other audio files
diff --git a/nikola/plugins/compile/markdown/mdx_podcast.py b/nikola/plugins/compile/markdown/mdx_podcast.py
index b38b969..9a67910 100644
--- a/nikola/plugins/compile/markdown/mdx_podcast.py
+++ b/nikola/plugins/compile/markdown/mdx_podcast.py
@@ -39,9 +39,15 @@ Basic Example:
<p><audio src="http://archive.org/download/Rebeldes_Stereotipos/rs20120609_1.mp3"></audio></p>
'''
-from markdown.extensions import Extension
-from markdown.inlinepatterns import Pattern
-from markdown.util import etree
+from nikola.plugin_categories import MarkdownExtension
+try:
+ from markdown.extensions import Extension
+ from markdown.inlinepatterns import Pattern
+ from markdown.util import etree
+except ImportError:
+ # No need to catch this, if you try to use this without Markdown,
+ # the markdown compiler will fail first
+ Pattern = Extension = object
PODCAST_RE = r'\[podcast\](?P<url>.+)\[/podcast\]'
@@ -62,7 +68,7 @@ class PodcastPattern(Pattern):
return audio_elem
-class PodcastExtension(Extension):
+class PodcastExtension(MarkdownExtension, Extension):
def __init__(self, configs={}):
# set extension defaults
self.config = {}