diff options
Diffstat (limited to 'nikola/plugins/compile/markdown')
| -rw-r--r-- | nikola/plugins/compile/markdown/__init__.py | 49 | ||||
| -rw-r--r-- | nikola/plugins/compile/markdown/mdx_gist.plugin | 9 | ||||
| -rw-r--r-- | nikola/plugins/compile/markdown/mdx_gist.py | 18 | ||||
| -rw-r--r-- | nikola/plugins/compile/markdown/mdx_nikola.plugin | 9 | ||||
| -rw-r--r-- | nikola/plugins/compile/markdown/mdx_nikola.py | 24 | ||||
| -rw-r--r-- | nikola/plugins/compile/markdown/mdx_podcast.plugin | 9 | ||||
| -rw-r--r-- | nikola/plugins/compile/markdown/mdx_podcast.py | 14 |
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 = {} |
