Compare commits

...

2 commits

Author SHA1 Message Date
Hartmut Seichter
28378e3819 intermediate version 2024-05-01 08:10:27 +02:00
Hartmut Seichter
6f51fbf76c adding a proper exception handler to find actual problems in external files 2024-04-25 19:35:13 +02:00
6 changed files with 44 additions and 16 deletions

View file

@ -5,3 +5,4 @@
* [x] fix overlong table cells (pandoc longtable only deals with overlong tables but not cells) * [x] fix overlong table cells (pandoc longtable only deals with overlong tables but not cells)
* [ ] add a book mode for mixing input and headers (# Blah -m mod.cg.yaml) * [ ] add a book mode for mixing input and headers (# Blah -m mod.cg.yaml)
* [ ] table generator * [ ] table generator
* [ ] overlay of compulsory with other modes ...

View file

@ -13,18 +13,17 @@ actual values are kept in YAML files in order to version them with git.
from argparse import ArgumentParser from argparse import ArgumentParser
import yaml import yaml
import string import string
import os import os,sys
from tablegenerator import TableGenerator from tablegenerator import TableGenerator
from markdowngenerator import MarkdownGenerator from markdowngenerator import MarkdownGenerator
from templategenerator import TemplateGenerator
class CourseBuilder: class CourseBuilder:
def __init__(self) -> None: def __init__(self) -> None:
self.__schema = None self.__schema = None
def set_schema(self,schema = None): def set_schema(self,schema = None):
self.__schema = schema self.__schema = schema
@ -111,7 +110,7 @@ class CourseBuilder:
return [k,', '.join(parts)] return [k,', '.join(parts)]
def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1): def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1,template=None):
table_items = [] table_items = []
@ -123,8 +122,13 @@ class CourseBuilder:
case 'multinum' : table_items.append(self.process_multinum(meta,field,lang)) case 'multinum' : table_items.append(self.process_multinum(meta,field,lang))
case 'multikey': table_items.append(self.process_multikey(meta,field,lang)) case 'multikey': table_items.append(self.process_multikey(meta,field,lang))
mdg = MarkdownGenerator() if template != None:
mdg.generate_markdown(table_items,pagebreak,createTitle,header_level=header_level) # use template generator
TemplateGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
pass
else:
# conventional MD mode
MarkdownGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
def process_book_section(self,section,lang='de'): def process_book_section(self,section,lang='de'):
pass pass
@ -145,7 +149,10 @@ class CourseBuilder:
mod_path = os.path.join(os.path.dirname(bookpath),m) mod_path = os.path.join(os.path.dirname(bookpath),m)
with open(mod_path) as fm: with open(mod_path) as fm:
try:
self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level) self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level)
except:
print(f'Error in {mod_path}',file=sys.stderr)
@ -165,7 +172,7 @@ def main():
parser.add_argument('-b','--book',type=str,help="process a whole curriculum book with sections") parser.add_argument('-b','--book',type=str,help="process a whole curriculum book with sections")
parser.add_argument('--level',type=int,default=1,help="level of header tags") parser.add_argument('--level',type=int,default=1,help="level of header tags")
parser.add_argument('--table-gen',type=str,default=None,help='runs table generator') parser.add_argument('--table-gen',type=str,default=None,help='runs table generator')
parser.add_argument('--template',type=str,default=None,help='defines a template to be used with fields')
# get arguments # get arguments
args = parser.parse_args() args = parser.parse_args()
@ -211,7 +218,8 @@ def main():
for m in args.meta: for m in args.meta:
with open(m) as fm: with open(m) as fm:
cb.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=args.lang,pagebreak=args.pagebreak,createTitle=args.title,header_level=args.level)
cb.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=args.lang,pagebreak=args.pagebreak,createTitle=args.title,header_level=args.level,template=args.template)
else: else:
parser.print_help() parser.print_help()

View file

@ -4,11 +4,10 @@ import textwrap,itertools
class MarkdownGenerator: class MarkdownGenerator:
def __init__(self) -> None:
pass
def generate_markdown(self,ti,pagebreak = False,title = False,header_level = 1) -> str: @staticmethod
def generate(ti,pagebreak = False,title = False,header_level = 1) -> str:
line_length = 128 line_length = 128
column_ratio= 0.28 column_ratio= 0.28
@ -16,6 +15,9 @@ class MarkdownGenerator:
h_len = int(line_length * column_ratio) h_len = int(line_length * column_ratio)
d_len = line_length-h_len d_len = line_length-h_len
#
# generate title (currently the first one)
#
if title: if title:
print('#' * header_level,ti[0][1],'\n') print('#' * header_level,ti[0][1],'\n')
@ -26,7 +28,6 @@ class MarkdownGenerator:
# #
# this implements a Markdown Grid-Table # this implements a Markdown Grid-Table
# #
for k,v in ti: for k,v in ti:
if v == None: if v == None:

View file

@ -0,0 +1,11 @@
#!/usr/bin/env python
import textwrap,itertools
class TemplateGenerator:
@staticmethod
def generate(ti,pagebreak = False,title = False,header_level = 1) -> str:
print(ti)
pass

View file

@ -1,17 +1,22 @@
coursebuilder := ../../coursebuilder
table.en.pdf: table.en.pdf:
@echo "creating English version ..." @echo "creating English version ..."
python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l en -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.en.pdf python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l en -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.en.pdf
table.de.pdf: table.de.pdf:
@echo "creating German version ..." @echo "creating German version ..."
python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.de.pdf python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.de.pdf
all: table.en.pdf table.de.pdf all: table.en.pdf table.de.pdf
clean: clean:
rm -f table.en.pdf table.de.pdf rm -f table.en.pdf table.de.pdf
debug-list:
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits --template ""
debug: debug:
python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml

View file

@ -29,3 +29,5 @@ book:
- modules: - modules:
- mod.cg.yaml - mod.cg.yaml