xref: /btstack/doc/manual/markdown2tex.py (revision 4f9c2a860130fe88bc96e212e516377b0a640c2d)
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