refactoring previous Markdown generator into a legacy mode

This commit is contained in:
Hartmut Seichter 2024-05-16 08:40:09 +02:00
parent e9407a6b6e
commit df1cff80d8
3 changed files with 47 additions and 26 deletions

View file

@ -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:

View file

@ -1,13 +1,8 @@
#!/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:
@ -15,11 +10,38 @@ class MarkdownGenerator:
def generate_tablerow() -> str:
pass
@staticmethod
def generate(ti,pagebreak = False,title = False,header_level = 1) -> str:
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_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')

View file

@ -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