aboutsummaryrefslogtreecommitdiffstats
path: root/nikola/plugins/compile_rest/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/compile_rest/__init__.py')
-rw-r--r--nikola/plugins/compile_rest/__init__.py81
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