xref: /btstack/doc/manual/markdown2tex.py (revision 3789dc732d0bd1587ee05fb1030ee531996376e6)
1*3789dc73SMatthias 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:
63*3789dc73SMatthias Ringwald            doc = yaml.load(yin, Loader=yaml.SafeLoader)
644f9c2a86SMatthias Ringwald            for page in doc["pages"]:
65*3789dc73SMatthias Ringwald                title   = list(page.keys())[0]
66*3789dc73SMatthias Ringwald                md_file = list(page.values())[0]
674f9c2a86SMatthias Ringwald                with open(docs_folder +"/"+ md_file, 'r') as mdin:
684f9c2a86SMatthias Ringwald                    aout.write("\n\n#"+ title +"\n\n")
694f9c2a86SMatthias Ringwald                    for line in mdin:
704f9c2a86SMatthias Ringwald                        # remove path from section reference
714f9c2a86SMatthias Ringwald                        # e.g. [the SPP Counter example](examples/generated/#sec:sppcounterExample)
724f9c2a86SMatthias Ringwald                        # replace with [the SPP Counter example](#sec:sppcounterExample)
734f9c2a86SMatthias Ringwald                        section_ref = re.match('.*\(((.*)(#sec:.*))\).*',line)
744f9c2a86SMatthias Ringwald                        if section_ref:
754f9c2a86SMatthias Ringwald                            line = line.replace(section_ref.group(2),"")
764f9c2a86SMatthias Ringwald                        aout.write(line)
774f9c2a86SMatthias Ringwald
784f9c2a86SMatthias Ringwald    pandoc_cmd = "pandoc -f markdown -t latex --filter pandoc-fignos --filter pandoc-tablenos --listings latex/btstack_generated.md -o latex/btstack_generated.tex"
794f9c2a86SMatthias Ringwald    p = os.popen(pandoc_cmd,"r")
804f9c2a86SMatthias Ringwald    while 1:
814f9c2a86SMatthias Ringwald        line = p.readline()
824f9c2a86SMatthias Ringwald        if not line: break
83*3789dc73SMatthias Ringwald        print (line)
844f9c2a86SMatthias Ringwald
854f9c2a86SMatthias Ringwald
864f9c2a86SMatthias Ringwald    # btstatck_root_file = "latex/btstack_gettingstarted.tex"
874f9c2a86SMatthias Ringwald    btstack_generated_file = "latex/btstack_generated.tex"
884f9c2a86SMatthias Ringwald    btstack_final_file = "latex/btstack_final.tex"
894f9c2a86SMatthias Ringwald
904f9c2a86SMatthias Ringwald    with open(btstack_final_file, 'w') as aout:
914f9c2a86SMatthias Ringwald        aout.write("% !TEX root = btstack_gettingstarted.tex\n\n")
924f9c2a86SMatthias Ringwald
934f9c2a86SMatthias Ringwald        with open(btstack_generated_file, 'r') as fin:
944f9c2a86SMatthias Ringwald            for line in fin:
954f9c2a86SMatthias Ringwald                line = fix_empty_href(line)
964f9c2a86SMatthias Ringwald                line = fix_listing_after_section(line)
974f9c2a86SMatthias Ringwald                line = fix_listing_hyperref_into_ref(line)
984f9c2a86SMatthias Ringwald                line = fix_figure_width_and_type(line)
994f9c2a86SMatthias Ringwald                line = fix_appendix_pagebreak(line)
1004f9c2a86SMatthias Ringwald                line = fix_tightlist(line)
1014f9c2a86SMatthias Ringwald                aout.write(line)
1024f9c2a86SMatthias Ringwald
1034f9c2a86SMatthias Ringwald
1044f9c2a86SMatthias Ringwaldif __name__ == "__main__":
1054f9c2a86SMatthias Ringwald    main(sys.argv[1:])
106