summaryrefslogtreecommitdiffstats
path: root/nikola/plugins/compile/pandoc.py
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/compile/pandoc.py')
-rw-r--r--nikola/plugins/compile/pandoc.py31
1 files changed, 21 insertions, 10 deletions
diff --git a/nikola/plugins/compile/pandoc.py b/nikola/plugins/compile/pandoc.py
index 3030626..af14344 100644
--- a/nikola/plugins/compile/pandoc.py
+++ b/nikola/plugins/compile/pandoc.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright © 2012-2015 Roberto Alsina and others.
+# Copyright © 2012-2020 Roberto Alsina and others.
# Permission is hereby granted, free of charge, to any
# person obtaining a copy of this software and associated
@@ -24,12 +24,11 @@
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-"""Implementation of compile_html based on pandoc.
+"""Page compiler plugin for pandoc.
You will need, of course, to install pandoc
"""
-from __future__ import unicode_literals
import io
import os
@@ -40,7 +39,6 @@ from nikola.utils import req_missing, makedirs, write_metadata
class CompilePandoc(PageCompiler):
-
"""Compile markups into HTML using pandoc."""
name = "pandoc"
@@ -49,17 +47,32 @@ class CompilePandoc(PageCompiler):
def set_site(self, site):
"""Set Nikola site."""
self.config_dependencies = [str(site.config['PANDOC_OPTIONS'])]
- super(CompilePandoc, self).set_site(site)
+ super().set_site(site)
- def compile_html(self, source, dest, is_two_file=True):
- """Compile source file into HTML and save as dest."""
+ def compile(self, source, dest, is_two_file=True, post=None, lang=None):
+ """Compile the source file into HTML and save as dest."""
makedirs(os.path.dirname(dest))
try:
subprocess.check_call(['pandoc', '-o', dest, source] + self.site.config['PANDOC_OPTIONS'])
+ with open(dest, 'r', encoding='utf-8-sig') as inf:
+ output, shortcode_deps = self.site.apply_shortcodes(inf.read())
+ with open(dest, 'w', encoding='utf-8') as outf:
+ outf.write(output)
+ if post is None:
+ if shortcode_deps:
+ self.logger.error(
+ "Cannot save dependencies for post {0} (post unknown)",
+ source)
+ else:
+ post._depfile[dest] += shortcode_deps
except OSError as e:
if e.strreror == 'No such file or directory':
req_missing(['pandoc'], 'build this site (compile with pandoc)', python=False)
+ def compile_string(self, data, source_path=None, is_two_file=True, post=None, lang=None):
+ """Compile into HTML strings."""
+ raise ValueError("Pandoc compiler does not support compile_string due to multiple output formats")
+
def create_post(self, path, **kw):
"""Create a new post."""
content = kw.pop('content', None)
@@ -74,7 +87,5 @@ class CompilePandoc(PageCompiler):
content += '\n'
with io.open(path, "w+", encoding="utf8") as fd:
if onefile:
- fd.write('<!--\n')
- fd.write(write_metadata(metadata))
- fd.write('-->\n\n')
+ fd.write(write_metadata(metadata, comment_wrap=True, site=self.site, compiler=self))
fd.write(content)