1*4f9c2a86SMatthias Ringwald#!/usr/bin/env python 2*4f9c2a86SMatthias Ringwald 3*4f9c2a86SMatthias Ringwaldimport sys, yaml 4*4f9c2a86SMatthias Ringwaldimport os, re 5*4f9c2a86SMatthias Ringwald 6*4f9c2a86SMatthias Ringwaldfigures = { 7*4f9c2a86SMatthias Ringwald 'btstack-architecture' : '1', 8*4f9c2a86SMatthias Ringwald 'singlethreading-btstack' : '0.3', 9*4f9c2a86SMatthias Ringwald 'multithreading-monolithic': '0.8', 10*4f9c2a86SMatthias Ringwald 'multithreading-btdaemon' : '0.8', 11*4f9c2a86SMatthias Ringwald 'btstack-protocols' : '0.8' 12*4f9c2a86SMatthias Ringwald} 13*4f9c2a86SMatthias Ringwald 14*4f9c2a86SMatthias Ringwald 15*4f9c2a86SMatthias Ringwalddef fix_empty_href(line): 16*4f9c2a86SMatthias Ringwald corr = re.match('.*(href{}).*',line) 17*4f9c2a86SMatthias Ringwald if corr: 18*4f9c2a86SMatthias Ringwald line = line.replace(corr.group(1), "path") 19*4f9c2a86SMatthias Ringwald return line 20*4f9c2a86SMatthias Ringwald 21*4f9c2a86SMatthias Ringwald 22*4f9c2a86SMatthias Ringwalddef fix_listing_after_section(line): 23*4f9c2a86SMatthias Ringwald corr = re.match('.*begin{lstlisting}',line) 24*4f9c2a86SMatthias Ringwald if corr: 25*4f9c2a86SMatthias Ringwald line = "\leavevmode" + line 26*4f9c2a86SMatthias Ringwald return line 27*4f9c2a86SMatthias Ringwald 28*4f9c2a86SMatthias Ringwalddef fix_listing_hyperref_into_ref(line): 29*4f9c2a86SMatthias Ringwald corr = re.match('(.*\\\\)hyperref\[(lst:.*)\]{.*}(.*)',line) 30*4f9c2a86SMatthias Ringwald if corr: 31*4f9c2a86SMatthias Ringwald line = corr.group(1)+"ref{" + corr.group(2) +"} " + corr.group(3) 32*4f9c2a86SMatthias Ringwald return line 33*4f9c2a86SMatthias Ringwald 34*4f9c2a86SMatthias Ringwald 35*4f9c2a86SMatthias Ringwalddef fix_figure_width_and_type(line): 36*4f9c2a86SMatthias Ringwald global figures 37*4f9c2a86SMatthias Ringwald for name, width in figures.items(): 38*4f9c2a86SMatthias Ringwald corr = re.match('(.*includegraphics)(.*'+name+'.*)',line) 39*4f9c2a86SMatthias Ringwald if corr: 40*4f9c2a86SMatthias Ringwald line = corr.group(1) + '[width='+width+'\\textwidth]' + corr.group(2).replace('png','pdf') 41*4f9c2a86SMatthias Ringwald return line 42*4f9c2a86SMatthias Ringwald 43*4f9c2a86SMatthias Ringwald 44*4f9c2a86SMatthias Ringwalddef fix_appendix_pagebreak(line): 45*4f9c2a86SMatthias Ringwald corr = re.match('.*section{APIs}.*',line) 46*4f9c2a86SMatthias Ringwald if corr: 47*4f9c2a86SMatthias Ringwald line = "\leavevmode\pagebreak\n" + line 48*4f9c2a86SMatthias Ringwald return line 49*4f9c2a86SMatthias Ringwald 50*4f9c2a86SMatthias Ringwalddef fix_tightlist(line): 51*4f9c2a86SMatthias Ringwald if 'tightlist' in line: 52*4f9c2a86SMatthias Ringwald return '' 53*4f9c2a86SMatthias Ringwald else: 54*4f9c2a86SMatthias Ringwald return line 55*4f9c2a86SMatthias Ringwald 56*4f9c2a86SMatthias Ringwalddef main(argv): 57*4f9c2a86SMatthias Ringwald docs_folder = "docs" 58*4f9c2a86SMatthias Ringwald yml_file = "mkdocs.yml" 59*4f9c2a86SMatthias Ringwald mk_file = "latex/btstack_generated.md" 60*4f9c2a86SMatthias Ringwald 61*4f9c2a86SMatthias Ringwald with open(mk_file, 'w') as aout: 62*4f9c2a86SMatthias Ringwald with open(yml_file, 'r') as yin: 63*4f9c2a86SMatthias Ringwald doc = yaml.load(yin) 64*4f9c2a86SMatthias Ringwald for page in doc["pages"]: 65*4f9c2a86SMatthias Ringwald md_file = page[0] 66*4f9c2a86SMatthias Ringwald title = page[1] 67*4f9c2a86SMatthias Ringwald with open(docs_folder +"/"+ md_file, 'r') as mdin: 68*4f9c2a86SMatthias Ringwald aout.write("\n\n#"+ title +"\n\n") 69*4f9c2a86SMatthias Ringwald for line in mdin: 70*4f9c2a86SMatthias Ringwald # remove path from section reference 71*4f9c2a86SMatthias Ringwald # e.g. [the SPP Counter example](examples/generated/#sec:sppcounterExample) 72*4f9c2a86SMatthias Ringwald # replace with [the SPP Counter example](#sec:sppcounterExample) 73*4f9c2a86SMatthias Ringwald section_ref = re.match('.*\(((.*)(#sec:.*))\).*',line) 74*4f9c2a86SMatthias Ringwald if section_ref: 75*4f9c2a86SMatthias Ringwald line = line.replace(section_ref.group(2),"") 76*4f9c2a86SMatthias Ringwald aout.write(line) 77*4f9c2a86SMatthias Ringwald 78*4f9c2a86SMatthias Ringwald pandoc_cmd = "pandoc -f markdown -t latex --filter pandoc-fignos --filter pandoc-tablenos --listings latex/btstack_generated.md -o latex/btstack_generated.tex" 79*4f9c2a86SMatthias Ringwald p = os.popen(pandoc_cmd,"r") 80*4f9c2a86SMatthias Ringwald while 1: 81*4f9c2a86SMatthias Ringwald line = p.readline() 82*4f9c2a86SMatthias Ringwald if not line: break 83*4f9c2a86SMatthias Ringwald print line 84*4f9c2a86SMatthias Ringwald 85*4f9c2a86SMatthias Ringwald 86*4f9c2a86SMatthias Ringwald # btstatck_root_file = "latex/btstack_gettingstarted.tex" 87*4f9c2a86SMatthias Ringwald btstack_generated_file = "latex/btstack_generated.tex" 88*4f9c2a86SMatthias Ringwald btstack_final_file = "latex/btstack_final.tex" 89*4f9c2a86SMatthias Ringwald 90*4f9c2a86SMatthias Ringwald with open(btstack_final_file, 'w') as aout: 91*4f9c2a86SMatthias Ringwald aout.write("% !TEX root = btstack_gettingstarted.tex\n\n") 92*4f9c2a86SMatthias Ringwald 93*4f9c2a86SMatthias Ringwald with open(btstack_generated_file, 'r') as fin: 94*4f9c2a86SMatthias Ringwald for line in fin: 95*4f9c2a86SMatthias Ringwald line = fix_empty_href(line) 96*4f9c2a86SMatthias Ringwald line = fix_listing_after_section(line) 97*4f9c2a86SMatthias Ringwald line = fix_listing_hyperref_into_ref(line) 98*4f9c2a86SMatthias Ringwald line = fix_figure_width_and_type(line) 99*4f9c2a86SMatthias Ringwald line = fix_appendix_pagebreak(line) 100*4f9c2a86SMatthias Ringwald line = fix_tightlist(line) 101*4f9c2a86SMatthias Ringwald aout.write(line) 102*4f9c2a86SMatthias Ringwald 103*4f9c2a86SMatthias Ringwald 104*4f9c2a86SMatthias Ringwaldif __name__ == "__main__": 105*4f9c2a86SMatthias Ringwald main(sys.argv[1:]) 106