From 55603857da61fbacc997fdd35f44d5fead74b713 Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Sun, 1 Apr 2018 12:38:09 +0100 Subject: [PATCH] Use a lua filter rather than a massive python script --- .circleci/config.yml | 8 +----- build.py | 68 -------------------------------------------- build.sh | 15 ++++++++++ second-pass.lua | 23 +++++++++++++++ wordcount.yaml | 4 --- 5 files changed, 39 insertions(+), 79 deletions(-) delete mode 100755 build.py create mode 100755 build.sh create mode 100644 second-pass.lua delete mode 100644 wordcount.yaml diff --git a/.circleci/config.yml b/.circleci/config.yml index 9470292..8271b10 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,12 +6,6 @@ jobs: working_directory: ~/tex-template steps: - checkout - - run: - name: Install Dependencies - command: apt-get install -y python-flake8 - - run: - name: Lint - command: flake8 build.py --ignore=E128,E501 - run: name: Test build - command: python3 build.py test/main.md + command: bash build.sh test/main.md diff --git a/build.py b/build.py deleted file mode 100755 index 0929c40..0000000 --- a/build.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import pathlib -import os -import subprocess -import re -import tempfile - - -CWD = pathlib.Path(os.getcwd()) -BASE_DIR = pathlib.Path(os.path.dirname(os.path.abspath(__file__))) -TEMPLATE_FILE = BASE_DIR / 'main.tex' -OUTPUT_FILE = CWD / 'output.pdf' -WORDCOUNT_TEMPLATE = BASE_DIR / 'wordcount.yaml' - - -def build(input_file, additional_args=None): - build_args = ['pandoc', str(input_file)] - - if additional_args is not None: - build_args.extend(additional_args) - - build_args.extend([ - '--template', - str(TEMPLATE_FILE), - '-o', - str(OUTPUT_FILE) - ]) - subprocess.check_output(build_args, cwd=str(BASE_DIR)) - - -def get_word_count(): - words = subprocess.check_output([ - 'pdftotext', str(OUTPUT_FILE), '-' - ], cwd=str(BASE_DIR)) - return len(re.findall(r'\w+', words.decode())) - - -def write_wordcount(): - _, out_file_path = tempfile.mkstemp(suffix='.yaml') - wordcount = get_word_count() - with open(out_file_path, 'w') as out_file: - with WORDCOUNT_TEMPLATE.open() as template: - out_file.write(template.read().format(wordcount=wordcount)) - return pathlib.Path(out_file_path) - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument("-v", "--verbose", help="Set verbosity level (repeat argument)", action="count", default=0) - parser.add_argument("input", help="Input File", action='store', type=pathlib.Path,) - parser.add_help = True - return parser.parse_args() - - -if __name__ == '__main__': - args = parse_args() - input_file = args.input.resolve() - operating_dir = input_file.parents[0] - context_file = operating_dir.joinpath('context.yaml') - if not input_file.is_file(): - raise ValueError("Failed to find {}".format(input_file)) - additional_args = [] - if context_file.exists(): - additional_args.append(str(context_file)) - build(input_file, additional_args) - additional_args.append(write_wordcount()) - build(input_file, additional_args) diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..6785f98 --- /dev/null +++ b/build.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + +INPUT_FILE=`realpath $1` +OUTPUT_FILE=output.pdf + +PANDOC_ARGS="$INPUT_FILE --template $SCRIPTPATH/main.tex -o $OUTPUT_FILE" + +echo "Building document..." +pandoc $PANDOC_ARGS + +echo "Running second pass..." +pandoc $PANDOC_ARGS --lua-filter=second-pass.lua diff --git a/second-pass.lua b/second-pass.lua new file mode 100644 index 0000000..ead68c2 --- /dev/null +++ b/second-pass.lua @@ -0,0 +1,23 @@ +function file_exists(name) + local f=io.open(name,"r") + if f~=nil then io.close(f) return true else return false end + end + + +local function countWords() + local rawText = pandoc.pipe("pdftotext", {"output.pdf", "-"}, "") + return pandoc.pipe("wc", {"-w"}, rawText) +end + + +return { + { + Meta = function(meta) + if file_exists("output.pdf") then + meta["wordcount"] = countWords() + meta["secondpass"] = true + end + return meta + end, + } +} diff --git a/wordcount.yaml b/wordcount.yaml deleted file mode 100644 index 7ccbbec..0000000 --- a/wordcount.yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- -wordcount: {wordcount} -secondpass: true -...