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: