From 324b5ba4cc27b2691fab13cf35778d7cd03ca4e5 Mon Sep 17 00:00:00 2001 From: Hartmut Seichter <hartmut@gmail.com> Date: Sun, 5 Nov 2023 21:44:45 +0100 Subject: [PATCH] update with proper formating --- coursebuilder/__main__.py | 75 +++++++++++++++++++++++++++++++++------ test/simple/mod.cg.yaml | 53 +++++++++++++-------------- 2 files changed, 92 insertions(+), 36 deletions(-) diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index 4b52800..0e1b1e1 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -16,7 +16,7 @@ import os import textwrap config_file = 'modulhandbuch.yaml' -line_length = 80 +line_length = 128 column_ratio= 0.28 def build_curriculum(input_path,lang='de',pagebreak=False,title=False): @@ -101,23 +101,75 @@ class CourseBuilder: def set_schema(self,schema = None): self.__schema = schema - # print(self.__schema) - def process(self,meta = None,lang='en'): + + def generate_markdown(self,ti): + + h_len = int(line_length * column_ratio) + d_len = line_length-h_len + + # if title: + # print('#',desc[lang]['name'],'\n') + + print(''.join(['+',"".ljust(h_len,'-'),'+',"".ljust(d_len,'-'),'+'])) + + headline = False + + for k,v in ti: + + h = textwrap.wrap(k, h_len, break_long_words=False) + wrapper = textwrap.TextWrapper(d_len) + t = [wrapper.wrap(i) for i in v.split('\n') if i != ''] + t = list(itertools.chain.from_iterable(t)) + + # get rows + rows = list(itertools.zip_longest(h,t,fillvalue="")) + + # expand rows + for r in rows: + print(''.join(['|',r[0].ljust(h_len,' '),'|',r[1].ljust(d_len,' '),'|'])) + + if headline: + print(''.join(['+',"".ljust(h_len,'-'),'+',"".ljust(d_len,'-'),'+'])) + else: + print(''.join(['+',"".ljust(h_len,'='),'+',"".ljust(d_len,'='),'+'])) + headline = True + + # to control pagebreaks for pandoc + # if pagebreak: + # print('\n\\newpage') - fields = ['name','goal'] + + def process(self,meta,fields,lang): + + # fields = ['name','goal','form-of-exam'] + # fields = ['form-of-exam'] + + table_items = [] for field in fields: match self.__schema[field]['type']: - case 'str': self.process_str(meta,field,lang) + case 'str': table_items.append(self.process_str(meta,field,lang)) + case 'enum': table_items.append(self.process_enum(meta,field,lang)) + + # print(table_items) - def process_str(self,meta,field,lang='de'): - print(self.__schema[field]['label'][lang],':',meta[field][lang]) + self.generate_markdown(table_items) - def process_int(self,lang='de'): + + def process_label(self,field,lang='de'): pass - def process_enum(self): + def process_str(self,meta,field,lang='de'): + return [self.__schema[field]['label'][lang],meta[field][lang]] + # print(self.__schema[field]['label'][lang],':',meta[field][lang]) + + def process_enum(self,meta,field,lang='de'): + v = meta[field]['value'] + return [self.__schema[field]['label'][lang],self.__schema[field]['values'][v][lang]] + # print(self.__schema[field]['label'][lang],':',self.__schema[field]['values'][v][lang]) + + def process_int(self,lang='de'): pass @@ -132,6 +184,8 @@ def main(): parser.add_argument('-m','--meta',action="extend", nargs="+", type=str,help="course description(s) as YAML file(s)") parser.add_argument('-l','--lang',help="Language to parse from meta file (use de or en)",default='de') + parser.add_argument('-f','--fields',help="Fields to be used",action="extend", nargs="+", type=str) + # parser.add_argument('-c','--create',action='store_true',help="Create a meta file from description") # parser.add_argument('-n','--newpage',action='store_true',help="Create a pagebreak after each table") # parser.add_argument('-t','--title',action='store_true',help="Create a title ahead of each table") @@ -142,6 +196,7 @@ def main(): # get arguments args = parser.parse_args() + # only run debug if args.schema: @@ -152,7 +207,7 @@ def main(): for m in args.meta: with open(m) as fm: - cb.process(yaml.load(fm,Loader=yaml.Loader),lang=args.lang) + cb.process(yaml.load(fm,Loader=yaml.Loader),fields=args.fields,lang=args.lang) else: parser.print_help() diff --git a/test/simple/mod.cg.yaml b/test/simple/mod.cg.yaml index 48c5783..5566fcc 100644 --- a/test/simple/mod.cg.yaml +++ b/test/simple/mod.cg.yaml @@ -19,39 +19,41 @@ common: author-of-indenture: form: lecture # lecture, seminar, lecture_seminar, lecture_exersice, project +form-of-exam: + value: written -goal: { - de: "Computergrafik ist ein Schmelztiegel von Technologien in der Informatik mit dem Ziel visuelle +goal: + de: | + Computergrafik ist ein Schmelztiegel von Technologien in der Informatik mit dem Ziel visuelle Inhalte effizient zu generieren und dem Nutzer zu präsentieren. Studierende können den Zusammenhang von visuellen Technologien in der Informatik, den zugrunde liegenden mathematischen Konzepte und der Physiognomie des Menschen, insbesondere des Sehapparates herstellen. Sie können die Eigenschaften verschiedener Darstellungsformen und -techniken analysieren und bewerten. Sie lernen grundsätzliche Technologien der 3D Echtzeitdarstellung - kennen und wenden diese an.", - en: "Computer graphics is describing all techniques in computer science + kennen und wenden diese an. + en: | + Computer graphics is describing all techniques in computer science generating images perceivable by humans. Participants will have a broad overview of techniques and concepts of computer graphics. They will be - able to apply theoretical concepts in practice. " -} + able to apply theoretical concepts in practice. -content: { - de: " - * Grundkenntnisse der menschlichen Wahrnehmung - * Grundkonzepte der Bilderzeugung, Speicherung und Transformation - * Anwendungen von Computergrafik - * Technologien zur Bilddarstellung - * 3D Modelle, insbesondere Surface- und Volumemodelle - * Transformationspipeline - * Homogene Vektorräume und Transformationen - * Szenengraphen und Echtzeit Rendering APIs - * Bildsyntheseverfahren - * Geometrie und Bild Samplingverfahren und Anti-Aliasing Strategien - * Lichttransport, Physikalische Beleuchtungsmodelle - * Texturierungsverfahren - * Überblick Visualisierung - * Graphische Nutzeroberflächen und Systeme - ", - en: " +content: + de: | + * Grundkenntnisse der menschlichen Wahrnehmung + * Grundkonzepte der Bilderzeugung, Speicherung und Transformation + * Anwendungen von Computergrafik + * Technologien zur Bilddarstellung + * 3D Modelle, insbesondere Surface- und Volumemodelle + * Transformationspipeline + * Homogene Vektorräume und Transformationen + * Szenengraphen und Echtzeit Rendering APIs + * Bildsyntheseverfahren + * Geometrie und Bild Samplingverfahren und Anti-Aliasing Strategien + * Lichttransport, Physikalische Beleuchtungsmodelle + * Texturierungsverfahren + * Überblick Visualisierung + * Graphische Nutzeroberflächen und Systeme + en: | * Basics of human perception * Concepts of image storage and manipulation * Applications of computer graphics @@ -66,8 +68,7 @@ content: { * Texturing * Overview visualizations * Graphical User Interfaces - " -} + # German Variant de: