diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index 5f23d02..a26a6dc 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -11,7 +11,6 @@ actual values are kept in YAML files in order to version them with git. """ from argparse import ArgumentParser -import string import os,sys import yaml import pandas as pd @@ -40,6 +39,8 @@ class CourseBuilder: 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') parser.add_argument('-o','--out',type=str,default=None,help='set the output type') + parser.add_argument('--legacy',action="store_true",help="use legacy generator mode for compatibility") + parser.add_argument('--maxcol',type=int,default=28,help='maximum size of left column') @@ -122,25 +123,19 @@ class CourseBuilder: # TODO - something more processable for Pandas? draft = [ - { 'name' : 'Computergrafik' }, + { 'name' : 'Modulname', 'lang' : 'de' }, { 'credits' : '5 ECTS' }, ] - # get the dataframe - df = pd.DataFrame(table_items) + draft_2 = { + } - # use first column for - df.columns = df.iloc[0] - df = df[1:] + if args.legacy: + MarkdownGenerator.generate_table_legacy(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.maxcol) + else: + MarkdownGenerator.generate_table(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.maxcol) - if args.title != None: - print(args.title.format(df.columns[1]),'\n') - print(df.to_markdown(tablefmt='grid', index=False, maxcolwidths=[args.maxcol,None])) - print('\n') # always add a newline after the table - - if args.pagebreak: - print('\\pagebreak') # MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level) else: diff --git a/coursebuilder/markdowngenerator.py b/coursebuilder/markdowngenerator.py index 59f4323..c765dab 100644 --- a/coursebuilder/markdowngenerator.py +++ b/coursebuilder/markdowngenerator.py @@ -1,25 +1,47 @@ #!/usr/bin/env python -import textwrap,itertools +import itertools -# we need raw value maybe add a third item - tuple the input? -# alternative use a dictionary -# { name: XYZ } - -# or make it the class class MarkdownGenerator: @staticmethod def generate_tablerow() -> str: pass + + + @staticmethod + def generate_table(table_items,add_pagebreak = False,title_template = None,first_colwidth = 28): + + import pandas as pd + import tabulate + + # get the dataframe + df = pd.DataFrame(table_items) + + # use first column for + df.columns = df.iloc[0] + df = df[1:] + + if title_template != None: + print(title_template.format(df.columns[1]),'\n') + + print(df.to_markdown(tablefmt='grid', index=False, maxcolwidths=[first_colwidth,None])) + print('\n') # always add a newline after the table + + if add_pagebreak: + print('\\pagebreak') + + @staticmethod - def generate(ti,pagebreak = False,title = False,header_level = 1) -> str: + def generate_table_legacy(table_items,add_pagebreak = False,title_template = None,first_colwidth = 28): + + import textwrap line_length = 128 - column_ratio= 0.28 + column_ratio = float(first_colwidth) / 100 h_len = int(line_length * column_ratio) d_len = line_length-h_len @@ -27,8 +49,8 @@ class MarkdownGenerator: # # generate title (currently the first one) # - if title: - print('#' * header_level,ti[0][1],'\n') + if title_template != None: + print(title_template.format(table_items[0][1]),'\n') print(''.join(['+',"".ljust(h_len,'-'),'+',"".ljust(d_len,'-'),'+'])) @@ -40,7 +62,7 @@ class MarkdownGenerator: # test if this affected by a third item! - for k,v in ti: + for k,v in table_items: # if v == None: @@ -79,5 +101,5 @@ class MarkdownGenerator: # to control pagebreaks for pandoc - if pagebreak: + if add_pagebreak: print('\n\\newpage') \ No newline at end of file diff --git a/test/Makefile b/test/Makefile index cc6f0ff..b605d0b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -29,5 +29,9 @@ debug: python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml mod.test.yaml -p --title "## {}" -l de -f name credits goal content # | pandoc ${target_flags} -V lang:de -o ${target_de} +debug-legacy: + python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml mod.test.yaml -p --legacy --title "## {}" -l de -f name credits goal content + # | pandoc ${target_flags} -V lang:de -o ${target_de} + .PHONY: clean \ No newline at end of file