From 056b2f31016b444724d37ec8d8804b38bafb7888 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Mon, 7 Sep 2020 22:09:43 +0200 Subject: [PATCH 1/2] Dirty hack to parse pandoc-style metadata correctly --- README.md | 2 +- pandoc_reader.py | 34 ++++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 08055fc..a03e368 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Requirements ------------ - [pandoc] in $PATH - + - PyYaml for metadata loading Installation ------------ diff --git a/pandoc_reader.py b/pandoc_reader.py index 87c7735..25968bb 100644 --- a/pandoc_reader.py +++ b/pandoc_reader.py @@ -2,6 +2,13 @@ from pelican import signals from pelican.readers import BaseReader from pelican.utils import pelican_open +from yaml import load +try: + from yaml import CLoader as Loader +except ImportError: + from yaml import Loader + +from datetime import datetime class PandocReader(BaseReader): enabled = True @@ -9,17 +16,24 @@ class PandocReader(BaseReader): def read(self, filename): with pelican_open(filename) as fp: - text = list(fp.splitlines()) + text = tuple(fp.splitlines()) metadata = {} - for i, line in enumerate(text): - kv = line.split(':', 1) - if len(kv) == 2: - name, value = kv[0].lower(), kv[1].strip() - metadata[name] = self.process_metadata(name, value) - else: - content = "\n".join(text[i:]) - break + init = text.index("...") + end = text[init:].index("---") + init + + metatext = "\n".join(text[init+1:end]) + metadata = load(metatext, Loader=Loader) + + if "Date" in metadata: + # Back to string because PyYaml is way too clever + metadata["Date"] = metadata["Date"].isoformat() + + finalmeta = {} + for k,v in metadata.items(): + finalmeta[k.lower()] = self.process_metadata(k.lower(),v) + + content = "\n".join(text[:init] + text[end+1:]) extra_args = self.settings.get('PANDOC_ARGS', []) extensions = self.settings.get('PANDOC_EXTENSIONS', '') @@ -38,7 +52,7 @@ def read(self, filename): if status: raise subprocess.CalledProcessError(status, pandoc_cmd) - return output, metadata + return output, finalmeta def add_reader(readers): for ext in PandocReader.file_extensions: From 18999049ced3b8f4a4e59adc5b8c7b0b48d8021b Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Mon, 28 Sep 2020 00:01:13 +0200 Subject: [PATCH 2/2] Curly brackets because they are used by pelican --- pandoc_reader.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pandoc_reader.py b/pandoc_reader.py index 25968bb..7e295ee 100644 --- a/pandoc_reader.py +++ b/pandoc_reader.py @@ -52,6 +52,10 @@ def read(self, filename): if status: raise subprocess.CalledProcessError(status, pandoc_cmd) + # Need that to make {static} -like tags be available + output = output.replace("%7B", "{") + output = output.replace("%7D", "}") + return output, finalmeta def add_reader(readers):