13789dc73SMatthias Ringwald#!/usr/bin/env python3 24f9c2a86SMatthias Ringwald 34f9c2a86SMatthias Ringwaldimport sys, yaml 44f9c2a86SMatthias Ringwaldimport os, re 54f9c2a86SMatthias Ringwald 64f9c2a86SMatthias Ringwaldfigures = { 74f9c2a86SMatthias Ringwald 'btstack-architecture' : '1', 84f9c2a86SMatthias Ringwald 'singlethreading-btstack' : '0.3', 94f9c2a86SMatthias Ringwald 'multithreading-monolithic': '0.8', 104f9c2a86SMatthias Ringwald 'multithreading-btdaemon' : '0.8', 114f9c2a86SMatthias Ringwald 'btstack-protocols' : '0.8' 124f9c2a86SMatthias Ringwald} 134f9c2a86SMatthias Ringwald 144f9c2a86SMatthias Ringwald 154f9c2a86SMatthias Ringwalddef fix_empty_href(line): 164f9c2a86SMatthias Ringwald corr = re.match('.*(href{}).*',line) 174f9c2a86SMatthias Ringwald if corr: 184f9c2a86SMatthias Ringwald line = line.replace(corr.group(1), "path") 194f9c2a86SMatthias Ringwald return line 204f9c2a86SMatthias Ringwald 214f9c2a86SMatthias Ringwald 224f9c2a86SMatthias Ringwalddef fix_listing_after_section(line): 234f9c2a86SMatthias Ringwald corr = re.match('.*begin{lstlisting}',line) 244f9c2a86SMatthias Ringwald if corr: 254f9c2a86SMatthias Ringwald line = "\leavevmode" + line 264f9c2a86SMatthias Ringwald return line 274f9c2a86SMatthias Ringwald 284f9c2a86SMatthias Ringwalddef fix_listing_hyperref_into_ref(line): 294f9c2a86SMatthias Ringwald corr = re.match('(.*\\\\)hyperref\[(lst:.*)\]{.*}(.*)',line) 304f9c2a86SMatthias Ringwald if corr: 314f9c2a86SMatthias Ringwald line = corr.group(1)+"ref{" + corr.group(2) +"} " + corr.group(3) 324f9c2a86SMatthias Ringwald return line 334f9c2a86SMatthias Ringwald 344f9c2a86SMatthias Ringwald 354f9c2a86SMatthias Ringwalddef fix_figure_width_and_type(line): 364f9c2a86SMatthias Ringwald global figures 374f9c2a86SMatthias Ringwald for name, width in figures.items(): 384f9c2a86SMatthias Ringwald corr = re.match('(.*includegraphics)(.*'+name+'.*)',line) 394f9c2a86SMatthias Ringwald if corr: 404f9c2a86SMatthias Ringwald line = corr.group(1) + '[width='+width+'\\textwidth]' + corr.group(2).replace('png','pdf') 414f9c2a86SMatthias Ringwald return line 424f9c2a86SMatthias Ringwald 434f9c2a86SMatthias Ringwald 444f9c2a86SMatthias Ringwalddef fix_appendix_pagebreak(line): 454f9c2a86SMatthias Ringwald corr = re.match('.*section{APIs}.*',line) 464f9c2a86SMatthias Ringwald if corr: 474f9c2a86SMatthias Ringwald line = "\leavevmode\pagebreak\n" + line 484f9c2a86SMatthias Ringwald return line 494f9c2a86SMatthias Ringwald 504f9c2a86SMatthias Ringwalddef fix_tightlist(line): 514f9c2a86SMatthias Ringwald if 'tightlist' in line: 524f9c2a86SMatthias Ringwald return '' 534f9c2a86SMatthias Ringwald else: 544f9c2a86SMatthias Ringwald return line 554f9c2a86SMatthias Ringwald 564f9c2a86SMatthias Ringwalddef main(argv): 574f9c2a86SMatthias Ringwald docs_folder = "docs" 584f9c2a86SMatthias Ringwald yml_file = "mkdocs.yml" 594f9c2a86SMatthias Ringwald mk_file = "latex/btstack_generated.md" 604f9c2a86SMatthias Ringwald 614f9c2a86SMatthias Ringwald with open(mk_file, 'w') as aout: 624f9c2a86SMatthias Ringwald with open(yml_file, 'r') as yin: 633789dc73SMatthias Ringwald doc = yaml.load(yin, Loader=yaml.SafeLoader) 643c7822d8SMatthias Ringwald for page in doc["nav"]: 653789dc73SMatthias Ringwald title = list(page.keys())[0] 663789dc73SMatthias Ringwald md_file = list(page.values())[0] 674f9c2a86SMatthias Ringwald with open(docs_folder +"/"+ md_file, 'r') as mdin: 68*0db2ac53SMilanka Ringwald 694f9c2a86SMatthias Ringwald for line in mdin: 70*0db2ac53SMilanka Ringwald if line == "#\n": 71*0db2ac53SMilanka Ringwald aout.write("\n\n#"+ title +"\n\n") 72*0db2ac53SMilanka Ringwald continue 734f9c2a86SMatthias Ringwald # remove path from section reference 744f9c2a86SMatthias Ringwald # e.g. [the SPP Counter example](examples/generated/#sec:sppcounterExample) 754f9c2a86SMatthias Ringwald # replace with [the SPP Counter example](#sec:sppcounterExample) 764f9c2a86SMatthias Ringwald section_ref = re.match('.*\(((.*)(#sec:.*))\).*',line) 774f9c2a86SMatthias Ringwald if section_ref: 784f9c2a86SMatthias Ringwald line = line.replace(section_ref.group(2),"") 794f9c2a86SMatthias Ringwald aout.write(line) 804f9c2a86SMatthias Ringwald 814f9c2a86SMatthias Ringwald pandoc_cmd = "pandoc -f markdown -t latex --filter pandoc-fignos --filter pandoc-tablenos --listings latex/btstack_generated.md -o latex/btstack_generated.tex" 824f9c2a86SMatthias Ringwald p = os.popen(pandoc_cmd,"r") 834f9c2a86SMatthias Ringwald while 1: 844f9c2a86SMatthias Ringwald line = p.readline() 854f9c2a86SMatthias Ringwald if not line: break 863789dc73SMatthias Ringwald print (line) 874f9c2a86SMatthias Ringwald 884f9c2a86SMatthias Ringwald 894f9c2a86SMatthias Ringwald # btstatck_root_file = "latex/btstack_gettingstarted.tex" 904f9c2a86SMatthias Ringwald btstack_generated_file = "latex/btstack_generated.tex" 914f9c2a86SMatthias Ringwald btstack_final_file = "latex/btstack_final.tex" 924f9c2a86SMatthias Ringwald 934f9c2a86SMatthias Ringwald with open(btstack_final_file, 'w') as aout: 944f9c2a86SMatthias Ringwald aout.write("% !TEX root = btstack_gettingstarted.tex\n\n") 954f9c2a86SMatthias Ringwald 964f9c2a86SMatthias Ringwald with open(btstack_generated_file, 'r') as fin: 974f9c2a86SMatthias Ringwald for line in fin: 984f9c2a86SMatthias Ringwald line = fix_empty_href(line) 994f9c2a86SMatthias Ringwald line = fix_listing_after_section(line) 1004f9c2a86SMatthias Ringwald line = fix_listing_hyperref_into_ref(line) 1014f9c2a86SMatthias Ringwald line = fix_figure_width_and_type(line) 1024f9c2a86SMatthias Ringwald line = fix_appendix_pagebreak(line) 1034f9c2a86SMatthias Ringwald line = fix_tightlist(line) 1044f9c2a86SMatthias Ringwald aout.write(line) 1054f9c2a86SMatthias Ringwald 1064f9c2a86SMatthias Ringwald 1074f9c2a86SMatthias Ringwaldif __name__ == "__main__": 1084f9c2a86SMatthias Ringwald main(sys.argv[1:]) 109