summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xrepo/www/generate-index.py21
-rwxr-xr-xrepo/www/generate-page.py9
-rw-r--r--repo/www/helpers.py44
3 files changed, 43 insertions, 31 deletions
diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py
index 16d1874..3fe1212 100755
--- a/repo/www/generate-index.py
+++ b/repo/www/generate-index.py
@@ -10,7 +10,7 @@ from tempfile import NamedTemporaryFile
from git import Repo
-from helpers import deserialize_directories, generate_crumbs, pandoc
+from helpers import deserialize_directories, generate_crumbs, PandocRunner
def parse_arguments():
@@ -103,6 +103,11 @@ def main(arguments):
if arguments.site_title is not None:
metadata['sitetitle'] = arguments.site_title
+ pandoc = PandocRunner(
+ arguments.output, arguments.template, arguments.filters,
+ stylesheets, variables
+ )
+
if readme is not None:
repo_top = Repo(search_parent_directories=True).working_dir
readme_path = Path(repo_top, target, readme)
@@ -117,11 +122,8 @@ def main(arguments):
toc.write(html_toc)
toc.flush()
- pandoc(
- readme_path, arguments.output,
- arguments.template, arguments.filters, stylesheets,
- include_after=(toc.name,),
- variables=variables, metadata=metadata
+ pandoc.run(
+ readme_path, include_after=(toc.name,), metadata=metadata
)
return
@@ -133,11 +135,8 @@ def main(arguments):
metadata['pagetitle'] = toc_title
metadata['title'] = 'Index'
- pandoc(
- dummy_readme.name, arguments.output,
- arguments.template, arguments.filters, stylesheets,
- include_after=(toc.name,),
- variables=variables, metadata=metadata
+ pandoc.run(
+ dummy_readme.name, include_after=(toc.name,), metadata=metadata
)
diff --git a/repo/www/generate-page.py b/repo/www/generate-page.py
index cb2317b..bbe1288 100755
--- a/repo/www/generate-page.py
+++ b/repo/www/generate-page.py
@@ -6,7 +6,7 @@ from pathlib import Path
from git import Repo
-from helpers import generate_crumbs, pandoc
+from helpers import generate_crumbs, PandocRunner
def parse_arguments():
@@ -44,13 +44,16 @@ def main(arguments):
page_path = Path(arguments.page).resolve().relative_to(repo_top)
- pandoc(
- arguments.page,
+ pandoc = PandocRunner(
arguments.output,
arguments.template,
arguments.filters,
stylesheets,
variables={'crumbs': generate_crumbs(page_path)},
+ )
+
+ pandoc.run(
+ arguments.page,
metadata={'pagetitle': arguments.title,
'sitetitle': arguments.site_title}
)
diff --git a/repo/www/helpers.py b/repo/www/helpers.py
index 48ebccf..dbab622 100644
--- a/repo/www/helpers.py
+++ b/repo/www/helpers.py
@@ -2,8 +2,9 @@ from collections import defaultdict
from dataclasses import dataclass, field
from itertools import chain
from os import environ, path
+from pathlib import Path
from subprocess import run
-from typing import Iterator
+from typing import Dict, Iterator, Union
@dataclass
@@ -56,26 +57,35 @@ def deserialize_directories(directories):
}
-def pandoc(page, output, template, filters, stylesheets, include_after=(),
- variables=None, metadata=None):
- cmd = (
- 'pandoc', '-s', page, '-o', output, '--template', template,
- *chain(*(('--lua-filter', f) for f in filters)),
- *chain(*(('--css', s) for s in stylesheets)),
- *chain(*(('--include-after-body', f) for f in include_after))
- )
+_PathArg = Union[Path, str, bytes]
+
+@dataclass
+class PandocRunner:
+ output: _PathArg
+ template: _PathArg
+ filters: Iterator[_PathArg]
+ stylesheets: Iterator[_PathArg]
+ variables: Dict[str, str] = field(default_factory=dict)
+
+ def run(self, page, include_after=(), metadata=None):
+ cmd = (
+ 'pandoc', '-s', page, '-o', self.output,
+ '--template', self.template,
+ *chain(*(('--lua-filter', f) for f in self.filters)),
+ *chain(*(('--css', s) for s in self.stylesheets)),
+ *chain(*(('--include-after-body', f) for f in include_after))
+ )
- if variables is not None:
- cmd += tuple(chain(
- *(('-V', f'{k}={v}') for k, v in variables.items())
- ))
- if metadata is not None:
cmd += tuple(chain(
- *(('-M', f'{k}={v}') for k, v in metadata.items())
+ *(('-V', f'{k}={v}') for k, v in self.variables.items())
))
+ if metadata is not None:
+ cmd += tuple(chain(
+ *(('-M', f'{k}={v}') for k, v in metadata.items())
+ ))
- environ['LUA_PATH'] = '.cache/?.lua;;'
- run(cmd, check=True)
+ environ['LUA_PATH'] = '.cache/?.lua;;'
+ run(cmd, check=True)
def generate_crumbs(target):