coursebuilder/coursebuilder/tablegenerator.py
2023-11-23 22:14:25 +01:00

82 lines
No EOL
2.4 KiB
Python

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"
def generate_table(self,data,lang='de'):
rows = [" & ".join(self.__cols_map[lang].values()) + '\\\\']
for token in data.split(','):
t = tuple(token.split(':')[:2])
row = [t[0]]
for k in list(self.__cols_map[lang].keys())[1:]:
if k in t[1]:
row.append(self.__checkmark)
else:
row.append(' ')
rows.append(' & '.join(row) + '\\\\')
self.run_template(rows=rows)
def run_template(self,rows = [],lang = 'de'):
t = string.Template(self.get_latex_template())
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:
# 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]' +
'\\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}')
#
# Kompetenz & Kennen & Wertung \\
# 1 & Pandoc & +++ \\
# 2 & Latex & ++ \\
# 3 & Writer & +- \\
#
# latex image.tex;dvisvgm image.dvi