diff --git a/README.md b/README.md index fd5b767..ec5f847 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # CourseBuilder - Coursebuilder is a preprocessor tool for [pandoc](https://pandoc.org) to generate multi-lingual curricula documentation tables from structured representations as a flatfile database. Data scheme and @@ -10,7 +9,8 @@ actual values are kept in YAML files in order to version them with git. ```sh $> python coursebuilder -usage: [-h] [-m META [META ...]] [-l LANG] [-f FIELDS [FIELDS ...]] [-s SCHEMA] [-p] [-t] [-b BOOK] +usage: [-h] [-m META [META ...]] [-l LANG] [-f FIELDS [FIELDS ...]] [-s SCHEMA] [-p] [-t] [-b BOOK] [--level LEVEL] + [--table-gen TABLE_GEN] versatile curricula generator @@ -26,11 +26,14 @@ options: -p, --pagebreak add a pagebreak after each module -t, --title take first value in list as title -b BOOK, --book BOOK process a whole curriculum book with sections + --level LEVEL level of header tags + --table-gen TABLE_GEN + runs table generator ``` # Author -(c) Copyright 2020-2023 Hartmut Seichter +© Copyright 2020-2024 Hartmut Seichter # Licence diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index 2234625..d92d24d 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -78,11 +78,21 @@ class CourseBuilder: else: return [self.process_label(field,lang),enum_val] - def process_int(self,meta,field,lang='de'): + def process_num(self,meta,field,lang='de'): v = meta[field]['value'] t = string.Template(self.get_template(field,lang)) return [self.process_label(field,lang),t.substitute({'value' : v})] + def process_multinum(self,meta,field,lang='de'): + v = meta[field]['value'] + t = string.Template(self.get_template(field,lang)) + if hasattr(v, "__len__"): + vv = [t.substitute({'value' : ev}) for ev in v] + return [self.process_label(field,lang),', '.join(vv)] + else: + return self.process_num(meta=meta,field=field,lang=lang) + + def process_multikey(self,meta,field,lang='de'): """ multikey need to assign a numeric value to a key @@ -109,7 +119,8 @@ class CourseBuilder: match self.__schema[field]['type']: case 'str': table_items.append(self.process_str(meta,field,lang)) case 'enum': table_items.append(self.process_enum(meta,field,lang)) - case 'int': table_items.append(self.process_int(meta,field,lang)) + case ['int', 'num'] : table_items.append(self.process_num(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)) mdg = MarkdownGenerator() @@ -154,7 +165,7 @@ def main(): 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('--table-gen',type=str,default=None,help='runs table generator') - + # get arguments args = parser.parse_args() diff --git a/test/simple/Makefile b/test/simple/Makefile index 1c46c26..8ea5c11 100644 --- a/test/simple/Makefile +++ b/test/simple/Makefile @@ -9,4 +9,9 @@ table.de.pdf: all: table.en.pdf table.de.pdf clean: - rm table.en.pdf table.de.pdf \ No newline at end of file + rm -f table.en.pdf table.de.pdf + + +debug: + python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml + diff --git a/test/simple/mod.cg.yaml b/test/simple/mod.cg.yaml index 6a1e04b..55d76c4 100644 --- a/test/simple/mod.cg.yaml +++ b/test/simple/mod.cg.yaml @@ -16,7 +16,7 @@ form-of-instruction: value: { 'lecture': 2, 'exersise': 1 } term: - value: 1 + value: [1, 3] duration: value: 1 diff --git a/test/simple/schema.yaml b/test/simple/schema.yaml index 9186a4a..9a46893 100644 --- a/test/simple/schema.yaml +++ b/test/simple/schema.yaml @@ -181,12 +181,12 @@ workload: # # credits/ECTS # -credits: +credits: + type: num label: { en: "credits and weight of mark", de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote" } - type: int template: de: "${value}CP Gewichtung: ${value}CP von 120CP " en: "${value}CP weight: ${value} / 120 " @@ -229,7 +229,7 @@ term: de: "Semester", en: "term" } - type: int + type: multinum template: de: " ${value}. Semester" en: " ${value}. semester"