68 lines
2 KiB
Python
Executable file
68 lines
2 KiB
Python
Executable file
#!/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)
|