13789dc73SMatthias Ringwald#!/usr/bin/env python3 24f9c2a86SMatthias Ringwald 34f9c2a86SMatthias Ringwaldimport sys, yaml 478fab72eSMilanka Ringwaldimport os, re, getopt 578fab72eSMilanka Ringwald 678fab72eSMilanka Ringwaldpandoc_cmd_template = """ 778fab72eSMilanka Ringwaldpandoc -f markdown -t latex --filter pandoc-fignos --filter pandoc-tablenos --listings LATEX_FOLDERbtstack_generated.md -o LATEX_FOLDERbtstack_generated.tex 878fab72eSMilanka Ringwald 978fab72eSMilanka Ringwald""" 104f9c2a86SMatthias Ringwald 114f9c2a86SMatthias Ringwaldfigures = { 124f9c2a86SMatthias Ringwald 'btstack-architecture' : '1', 134f9c2a86SMatthias Ringwald 'singlethreading-btstack' : '0.3', 144f9c2a86SMatthias Ringwald 'multithreading-monolithic': '0.8', 154f9c2a86SMatthias Ringwald 'multithreading-btdaemon' : '0.8', 164f9c2a86SMatthias Ringwald 'btstack-protocols' : '0.8' 174f9c2a86SMatthias Ringwald} 184f9c2a86SMatthias Ringwald 194f9c2a86SMatthias Ringwald 204f9c2a86SMatthias Ringwalddef fix_empty_href(line): 21755a206fSMatthias Ringwald corr = re.match(r'.*(href{}).*',line) 224f9c2a86SMatthias Ringwald if corr: 234f9c2a86SMatthias Ringwald line = line.replace(corr.group(1), "path") 244f9c2a86SMatthias Ringwald return line 254f9c2a86SMatthias Ringwald 264f9c2a86SMatthias Ringwald 274f9c2a86SMatthias Ringwalddef fix_listing_after_section(line): 28755a206fSMatthias Ringwald corr = re.match(r'.*begin{lstlisting}',line) 294f9c2a86SMatthias Ringwald if corr: 304f9c2a86SMatthias Ringwald line = "\leavevmode" + line 314f9c2a86SMatthias Ringwald return line 324f9c2a86SMatthias Ringwald 334f9c2a86SMatthias Ringwalddef fix_listing_hyperref_into_ref(line): 34*26a2227cSMatthias Ringwald corr = re.match(r'(.*\\)hyperref\[(lst:.*)\]{.*}(.*)',line) 354f9c2a86SMatthias Ringwald if corr: 364f9c2a86SMatthias Ringwald line = corr.group(1)+"ref{" + corr.group(2) +"} " + corr.group(3) 374f9c2a86SMatthias Ringwald return line 384f9c2a86SMatthias Ringwald 394f9c2a86SMatthias Ringwald 404f9c2a86SMatthias Ringwalddef fix_figure_width_and_type(line): 414f9c2a86SMatthias Ringwald global figures 424f9c2a86SMatthias Ringwald for name, width in figures.items(): 43755a206fSMatthias Ringwald corr = re.match(r'(.*includegraphics)(.*'+name+'.*)',line) 444f9c2a86SMatthias Ringwald if corr: 454f9c2a86SMatthias Ringwald line = corr.group(1) + '[width='+width+'\\textwidth]' + corr.group(2).replace('png','pdf') 464f9c2a86SMatthias Ringwald return line 474f9c2a86SMatthias Ringwald 484f9c2a86SMatthias Ringwald 494f9c2a86SMatthias Ringwalddef fix_appendix_pagebreak(line): 50755a206fSMatthias Ringwald corr = re.match(r'.*section{APIs}.*',line) 514f9c2a86SMatthias Ringwald if corr: 524f9c2a86SMatthias Ringwald line = "\leavevmode\pagebreak\n" + line 534f9c2a86SMatthias Ringwald return line 544f9c2a86SMatthias Ringwald 554f9c2a86SMatthias Ringwalddef fix_tightlist(line): 564f9c2a86SMatthias Ringwald if 'tightlist' in line: 574f9c2a86SMatthias Ringwald return '' 584f9c2a86SMatthias Ringwald else: 594f9c2a86SMatthias Ringwald return line 604f9c2a86SMatthias Ringwald 6178fab72eSMilanka Ringwalddef postprocess_file(markdown_filepath, fout, title): 6278fab72eSMilanka Ringwald with open(markdown_filepath, 'r') as fin: 6378fab72eSMilanka Ringwald for line in fin: 640db2ac53SMilanka Ringwald if line == "#\n": 6578fab72eSMilanka Ringwald fout.write("\n\n#"+ title +"\n\n") 660db2ac53SMilanka Ringwald continue 674f9c2a86SMatthias Ringwald # remove path from section reference 684f9c2a86SMatthias Ringwald # e.g. [the SPP Counter example](examples/generated/#sec:sppcounterExample) 694f9c2a86SMatthias Ringwald # replace with [the SPP Counter example](#sec:sppcounterExample) 70755a206fSMatthias Ringwald section_ref = re.match(r'.*\(((.*)(#sec:.*))\).*',line) 714f9c2a86SMatthias Ringwald if section_ref: 724f9c2a86SMatthias Ringwald line = line.replace(section_ref.group(2),"") 7378fab72eSMilanka Ringwald fout.write(line) 744f9c2a86SMatthias Ringwald 7578fab72eSMilanka Ringwalddef main(argv): 7678fab72eSMilanka Ringwald yml_file = "mkdocs.yml" 7778fab72eSMilanka Ringwald latexfolder = "latex/" 7878fab72eSMilanka Ringwald mkdocsfolder = "docs/" 7978fab72eSMilanka Ringwald 8078fab72eSMilanka Ringwald cmd = 'markdown2tex.py [-i <mkdocsfolder>] [-o <latexfolder>] ' 8178fab72eSMilanka Ringwald 8278fab72eSMilanka Ringwald try: 8378fab72eSMilanka Ringwald opts, args = getopt.getopt(argv,"i:o:",["ifolder=","ofolder="]) 8478fab72eSMilanka Ringwald except getopt.GetoptError: 8578fab72eSMilanka Ringwald print (cmd) 8678fab72eSMilanka Ringwald sys.exit(2) 8778fab72eSMilanka Ringwald for opt, arg in opts: 8878fab72eSMilanka Ringwald if opt == '-h': 8978fab72eSMilanka Ringwald print (cmd) 9078fab72eSMilanka Ringwald sys.exit() 9178fab72eSMilanka Ringwald elif opt in ("-i", "--ifolder"): 9278fab72eSMilanka Ringwald mkdocsfolder = arg 9378fab72eSMilanka Ringwald elif opt in ("-o", "--ofolder"): 9478fab72eSMilanka Ringwald latexfolder = arg 9578fab72eSMilanka Ringwald 9678fab72eSMilanka Ringwald latex_filepath = latexfolder + "btstack_generated.md" 9778fab72eSMilanka Ringwald 9878fab72eSMilanka Ringwald with open(latex_filepath, 'wt') as fout: 9978fab72eSMilanka Ringwald with open(yml_file, 'rt') as yin: 10078fab72eSMilanka Ringwald doc = yaml.load(yin, Loader=yaml.SafeLoader) 10178fab72eSMilanka Ringwald for page in doc["nav"]: 10278fab72eSMilanka Ringwald navigation_group_filepath = list(page.values())[0] 10378fab72eSMilanka Ringwald navigation_group_title = list(page.keys())[0] 10478fab72eSMilanka Ringwald markdown_filepath = mkdocsfolder + navigation_group_filepath 10578fab72eSMilanka Ringwald postprocess_file(markdown_filepath, fout, navigation_group_title) 10678fab72eSMilanka Ringwald 10778fab72eSMilanka Ringwald pandoc_cmd = pandoc_cmd_template.replace("LATEX_FOLDER", latexfolder) 10878fab72eSMilanka Ringwald 1094f9c2a86SMatthias Ringwald p = os.popen(pandoc_cmd,"r") 1104f9c2a86SMatthias Ringwald while 1: 1114f9c2a86SMatthias Ringwald line = p.readline() 1124f9c2a86SMatthias Ringwald if not line: break 1133789dc73SMatthias Ringwald print (line) 1144f9c2a86SMatthias Ringwald 1154f9c2a86SMatthias Ringwald 1164f9c2a86SMatthias Ringwald # btstatck_root_file = "latex/btstack_gettingstarted.tex" 11778fab72eSMilanka Ringwald btstack_generated_file = latexfolder + "btstack_generated.tex" 11878fab72eSMilanka Ringwald btstack_final_file = latexfolder + "btstack_final.tex" 1194f9c2a86SMatthias Ringwald 1204f9c2a86SMatthias Ringwald with open(btstack_final_file, 'w') as aout: 1214f9c2a86SMatthias Ringwald aout.write("% !TEX root = btstack_gettingstarted.tex\n\n") 1224f9c2a86SMatthias Ringwald 1234f9c2a86SMatthias Ringwald with open(btstack_generated_file, 'r') as fin: 1244f9c2a86SMatthias Ringwald for line in fin: 1254f9c2a86SMatthias Ringwald line = fix_empty_href(line) 1264f9c2a86SMatthias Ringwald line = fix_listing_after_section(line) 1274f9c2a86SMatthias Ringwald line = fix_listing_hyperref_into_ref(line) 1284f9c2a86SMatthias Ringwald line = fix_figure_width_and_type(line) 1294f9c2a86SMatthias Ringwald line = fix_appendix_pagebreak(line) 1304f9c2a86SMatthias Ringwald line = fix_tightlist(line) 1314f9c2a86SMatthias Ringwald aout.write(line) 1324f9c2a86SMatthias Ringwald 1334f9c2a86SMatthias Ringwald 1344f9c2a86SMatthias Ringwaldif __name__ == "__main__": 1354f9c2a86SMatthias Ringwald main(sys.argv[1:]) 136