diff options
Diffstat (limited to 'texformat.py')
-rwxr-xr-x | texformat.py | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/texformat.py b/texformat.py deleted file mode 100755 index 36a07c3..0000000 --- a/texformat.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import os -import re -import sys - -HEADER = '\\documentclass[a4paper]{article}\n\n'\ - '\\author{} %%TODO\n'\ - '\\title{Huiswerk %s, week %d}\n\n'\ - '\\usepackage{enumitem}\n'\ - '\\usepackage[dutch]{babel}\n\n'\ - '\\begin{document}\n\n'\ - '\\maketitle\n' - -FOOTER = '\n\\end{document}' - -class ExercisesList: - STYLES = ['\\arabic*.', '(\\alph*)', '\\roman*.'] - - def __init__(self, indent=0, style=None): - self.indent = indent - self.style = style if style is not None else self.STYLES[self.indent] - self.exercises = [] - - def read(self, lines): - i = -1 - while i < len(lines) - 1: - i += 1 - line = lines[i] - - # Single item - m = re.search(r'^\t{%d}(\d+)$' % self.indent, line) - if m is not None: - self.exercises.append(int(m.group(1))) - continue - - # Range - m = re.search(r'^\t{%d}(\d+)-(\d+)$' % self.indent, line) - if m is not None: - self.exercises += range(int(m.group(1)), int(m.group(2)) + 1) - continue - - # Style - m = re.search(r'^\t{%d}(\S.*)$' % self.indent, line) - if m is not None: - self.style = m.group(1) - continue - - # Indent - if line[:self.indent + 1] == '\t' * (self.indent + 1): - sublist = ExercisesList(self.indent + 1) - i += sublist.read(lines[i:]) - 1 - self.exercises.append(sublist) - continue - - # This line is not for us - break - return i - - def to_latex(self): - latex = [] - indent = '\t' * self.indent * 2 - i = 1 - - latex.append(indent + '\\begin{enumerate}') - if self.style != self.STYLES[self.indent]: - latex[0] += '[label=%s]' % self.style - for item in self.exercises: - if type(item) is ExercisesList: - latex += item.to_latex() - else: - if item != i: - latex.append(indent + '\t\\setcounter{enumi%s}{%d}' % - ('i' * self.indent, item - 1)) - i = item - latex.append(indent + '\t\\item %TODO ' + str(item)) - i += 1 - latex.append(indent + '\\end{enumerate}') - return latex - - -def parse_args(): - """Parse command line arguments""" - pars = argparse.ArgumentParser(description='TeX format') - - pars.add_argument( - '-i', '--input', - type=argparse.FileType('r'), default=sys.stdin) - pars.add_argument( - '-o', '--output', - type=argparse.FileType('w'), default=sys.stdout) - - pars.add_argument('-c', '--course', type=str, required=True) - pars.add_argument('-w', '--week', type=int, required=True) - - return pars.parse_args() - -def main(): - args = parse_args() - - lines = [line[:-1] for line in args.input.readlines()] - - exercises = ExercisesList() - exercises.read(lines) - - print(HEADER % (args.course, args.week)) - print('\n'.join(exercises.to_latex())) - print(FOOTER) - -if __name__ == '__main__': - main() |