diff --git a/coursebuilder/tablegenerator.py b/coursebuilder/tablegenerator.py index e86d81b..3bdc6f5 100644 --- a/coursebuilder/tablegenerator.py +++ b/coursebuilder/tablegenerator.py @@ -1,60 +1,72 @@ import token import string +import tempfile +import subprocess +import os class TableGenerator: + """ + Really hacky method to create latex > dvi > SVG to create images to include + """ + def __init__(self) -> None: self.__cols_map = { "de": {'': 'Thema ', 'A': " Erkennen", 'B': ' Verstehen', 'C': ' Anwenden', 'D' : ' Analysiseren', 'E' : ' Synthetisieren' } } - self.__checkmark = "X" + self.__checkmark = "x" def generate_table(self,data,lang='de'): - header = False + rows = [" & ".join(self.__cols_map[lang].values()) + '\\\\'] + for token in data.split(','): - if not header: - head_str = "| " + " | ".join(self.__cols_map[lang].values()) + " |" - print(head_str) - - ruler = ['-' * len(s) for s in self.__cols_map[lang].values()] - ruler_str = "| " + " | ".join(ruler) + " |" - - print(ruler_str) - - header = True - - t = tuple(token.split(':')[:2]) - + t = tuple(token.split(':')[:2]) row = [t[0]] - for k in self.__cols_map[lang].keys(): + for k in list(self.__cols_map[lang].keys())[1:]: if k in t[1]: row.append(self.__checkmark) else: row.append(' ') - print(' | '.join(row)) + rows.append(' & '.join(row) + '\\\\') - self.run_template() + self.run_template(rows=rows) - def run_template(self): + def run_template(self,rows = [],lang = 'de'): + t = string.Template(self.get_latex_template()) - print(t.substitute({ 'value' : "Test"})) + + with tempfile.NamedTemporaryFile('w',delete=False,prefix='cb-') as fp: + fp.write(t.substitute({ 'th' : ''.join(rows[:1]), 'td' : '\n'.join(rows[1:]) })) + fp.close() + subprocess.run(["latex",fp.name]) + subprocess.run(["dvisvgm",os.path.basename(fp.name) + '.dvi']) + # subprocess.run(["mv",os.path.basename(fp.name) + '.svg','.']) + + def get_latex_template(self,lang = 'de') -> str: - def get_latex_template(self) -> str: + # tabular formating + layout = ['l'] + ['c' for _ in range(len(self.__cols_map[lang]))] return (r'\documentclass{article}' r'\usepackage[utf8]{inputenc}' r'\usepackage[]{tabularx}' + r'\usepackage[default,oldstyle,scale=0.95]{opensans}' + r'\usepackage[T1]{fontenc}' r'\usepackage[margin=0.7in]{geometry}' r'\begin{document}' - r'\begin{table}[ht]' - r'\begin{tabular}{l c c}' - r'${value}' + r'\begin{table}[ht]' + + '\\begin{{tabular}} {{ {0} }}'.format(' '.join(layout)) + + r'\hline' + r' ${th}' + r'\hline' + r' ${td}' + + r'\hline' r'\end{tabular}' r'\end{table}' r'\end{document}')