From 205b6d12ff5673bd8ae59f827f07b69771b9dfee Mon Sep 17 00:00:00 2001 From: Kévin Le Gouguec Date: Tue, 18 Aug 2020 22:14:48 +0200 Subject: Mutualize pandoc invocations Will be useful to avoid duplicating changes to Lua filters. --- repo/www/generate-index.py | 27 ++++++++++++--------------- repo/www/generate-page.py | 15 ++++++++------- repo/www/helpers.py | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 22 deletions(-) (limited to 'repo') diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py index c51bf98..7eed97a 100755 --- a/repo/www/generate-index.py +++ b/repo/www/generate-index.py @@ -5,10 +5,11 @@ from itertools import chain import json from pathlib import Path from subprocess import run +from tempfile import NamedTemporaryFile from git import Repo -from helpers import deserialize_directories +from helpers import deserialize_directories, pandoc def parse_arguments(): @@ -78,6 +79,8 @@ def list_pages(files): return pages, readme +# TODO: use pandoc's --include-after-body, so that this works with +# non-markdown READMEs. def format_index(target, directories, files): pages, readme = list_pages(files) @@ -99,22 +102,16 @@ def format_index(target, directories, files): return format_readme_index(intro, title, items) -def convert_page(content, output, site_title, template): - pandoc = ( - 'pandoc', '-s', '--lua-filter', 'convert-internal-links.lua', - '--template', template, '-o', output - ) - if site_title is not None: - pandoc += ('-T', site_title) - - run(pandoc, input=content, check=True, text=True) +def main(arguments): + target = arguments.target + folders, files = list_files(arguments.site_tree, target) + with NamedTemporaryFile(suffix='.md', mode='w+') as page: + page.write(format_index(target, folders, files)) + page.flush() -def main(arguments): - folders, files = list_files(arguments.site_tree, arguments.target) - index_page = format_index(arguments.target, folders, files) - convert_page(index_page, arguments.output, arguments.site_title, - arguments.template) + pandoc(page.name, arguments.output, arguments.template, + site_title=arguments.site_title) if __name__ == '__main__': diff --git a/repo/www/generate-page.py b/repo/www/generate-page.py index 9e0f57c..372e8a2 100755 --- a/repo/www/generate-page.py +++ b/repo/www/generate-page.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 from argparse import ArgumentParser -from subprocess import run + +from helpers import pandoc def parse_arguments(): @@ -25,13 +26,13 @@ def parse_arguments(): def main(arguments): - pandoc = ( - 'pandoc', '-s', arguments.page, '-o', arguments.output, - '--lua-filter', 'convert-internal-links.lua', - '--template', arguments.template, '-T', arguments.site_title, - '-M', f'title={arguments.title}' + pandoc( + arguments.page, + arguments.output, + arguments.template, + title=arguments.title, + site_title=arguments.site_title ) - run(pandoc, check=True) if __name__ == '__main__': diff --git a/repo/www/helpers.py b/repo/www/helpers.py index 6dc5bad..16cd496 100644 --- a/repo/www/helpers.py +++ b/repo/www/helpers.py @@ -1,6 +1,7 @@ from collections import defaultdict from dataclasses import dataclass, field from os import path +from subprocess import run from typing import Iterator @@ -52,3 +53,17 @@ def deserialize_directories(directories): return { k: Directory.deserialize(v) for k, v in directories.items() } + + +def pandoc(page, output, template, title=None, site_title=None): + cmd = ( + 'pandoc', '-s', page, '-o', output, '--template', template, + '--lua-filter', 'convert-internal-links.lua' + ) + + if title is not None: + cmd += ('-M', f'title={title}') + if site_title is not None: + cmd += ('-T', site_title) + + run(cmd, check=True) -- cgit v1.2.3