diff options
Diffstat (limited to 'nikola/plugins/compile_rest/__init__.py')
| -rw-r--r-- | nikola/plugins/compile_rest/__init__.py | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/nikola/plugins/compile_rest/__init__.py b/nikola/plugins/compile_rest/__init__.py index b0a0c00..3d41571 100644 --- a/nikola/plugins/compile_rest/__init__.py +++ b/nikola/plugins/compile_rest/__init__.py @@ -26,26 +26,28 @@ from __future__ import unicode_literals import codecs import os -import docutils.core -import docutils.io -from docutils.parsers.rst import directives - -from .pygments_code_block_directive import ( - code_block_directive, - listings_directive) -directives.register_directive('code-block', code_block_directive) -directives.register_directive('listing', listings_directive) - -from .youtube import youtube -directives.register_directive('youtube', youtube) -from .vimeo import vimeo -directives.register_directive('vimeo', vimeo) -from .slides import slides -directives.register_directive('slides', slides) -from .gist_directive import GitHubGist -directives.register_directive('gist', GitHubGist) -from .soundcloud import soundcloud -directives.register_directive('soundcloud', soundcloud) +try: + import docutils.core + import docutils.io + from docutils.parsers.rst import directives + + from .listing import Listing, CodeBlock + directives.register_directive('code-block', CodeBlock) + directives.register_directive('sourcecode', CodeBlock) + directives.register_directive('listing', Listing) + from .youtube import Youtube + directives.register_directive('youtube', Youtube) + from .vimeo import Vimeo + directives.register_directive('vimeo', Vimeo) + from .slides import Slides + directives.register_directive('slides', Slides) + from .gist_directive import GitHubGist + directives.register_directive('gist', GitHubGist) + from .soundcloud import SoundCloud + directives.register_directive('soundcloud', SoundCloud) + has_docutils = True +except ImportError: + has_docutils = False from nikola.plugin_categories import PageCompiler @@ -57,6 +59,9 @@ class CompileRest(PageCompiler): def compile_html(self, source, dest): """Compile reSt into HTML.""" + if not has_docutils: + raise Exception('To build this site, you need to install the ' + '"docutils" package.') try: os.makedirs(os.path.dirname(dest)) except: @@ -65,24 +70,38 @@ class CompileRest(PageCompiler): with codecs.open(dest, "w+", "utf8") as out_file: with codecs.open(source, "r", "utf8") as in_file: data = in_file.read() - output, error_level = rst2html( - data, settings_overrides={'initial_header_level': 2}) + output, error_level, deps = rst2html( + data, settings_overrides={ + 'initial_header_level': 2, + 'record_dependencies': True, + 'stylesheet_path': None, + 'link_stylesheet': True, + 'syntax_highlight': 'short', + }) out_file.write(output) + deps_path = dest + '.dep' + if deps.list: + with codecs.open(deps_path, "wb+", "utf8") as deps_file: + deps_file.write('\n'.join(deps.list)) + else: + if os.path.isfile(deps_path): + os.unlink(deps_path) if error_level < 3: return True else: return False - def create_post(self, path, onefile=False, title="", slug="", date="", - tags=""): + def create_post(self, path, onefile=False, **kw): + metadata = {} + metadata.update(self.default_metadata) + metadata.update(kw) + d_name = os.path.dirname(path) + if not os.path.isdir(d_name): + os.makedirs(os.path.dirname(path)) with codecs.open(path, "wb+", "utf8") as fd: if onefile: - fd.write('.. title: {0}\n'.format(title)) - fd.write('.. slug: {0}\n'.format(slug)) - fd.write('.. date: {0}\n'.format(date)) - fd.write('.. tags: {0}\n'.format(tags)) - fd.write('.. link: \n') - fd.write('.. description: \n\n') + for k, v in metadata.items(): + fd.write('.. {0}: {1}\n'.format(k, v)) fd.write("\nWrite your post here.") @@ -116,4 +135,4 @@ def rst2html(source, source_path=None, source_class=docutils.io.StringInput, settings_overrides=settings_overrides, config_section=config_section, enable_exit_status=enable_exit_status) - return pub.writer.parts['fragment'], pub.document.reporter.max_level + return pub.writer.parts['fragment'], pub.document.reporter.max_level, pub.settings.record_dependencies |
