xref: /btstack/doc/manual/html_postprocess_code_blocks.py (revision c8c342a60cecea7e71c1797120a10dfce0796d05)
1*c8c342a6SMilanka Ringwald#!/usr/bin/env python3
2*c8c342a6SMilanka Ringwald
3*c8c342a6SMilanka Ringwaldimport os, sys, shutil, re, pickle, getopt
4*c8c342a6SMilanka Ringwaldfrom pathlib import Path
5*c8c342a6SMilanka Ringwald
6*c8c342a6SMilanka Ringwalddef writeCodeBlock(aout, code, references):
7*c8c342a6SMilanka Ringwald    for function_name, url in references.items():
8*c8c342a6SMilanka Ringwald        html_link = '<a href="' + url + '">' + function_name + '</a>'
9*c8c342a6SMilanka Ringwald        #print "before:" + code + "\n\n"
10*c8c342a6SMilanka Ringwald        code = code.replace(function_name, html_link)
11*c8c342a6SMilanka Ringwald    aout.write(code)
12*c8c342a6SMilanka Ringwald
13*c8c342a6SMilanka Ringwald
14*c8c342a6SMilanka Ringwalddef main(argv):
15*c8c342a6SMilanka Ringwald    htmlfolder = "btstack/"
16*c8c342a6SMilanka Ringwald
17*c8c342a6SMilanka Ringwald    cmd = 'html_postprocess_code_blocks.py [-o <htmlkfolder>]'
18*c8c342a6SMilanka Ringwald
19*c8c342a6SMilanka Ringwald    try:
20*c8c342a6SMilanka Ringwald        opts, args = getopt.getopt(argv,"o:",["ofolder="])
21*c8c342a6SMilanka Ringwald    except getopt.GetoptError:
22*c8c342a6SMilanka Ringwald        print (cmd)
23*c8c342a6SMilanka Ringwald        sys.exit(2)
24*c8c342a6SMilanka Ringwald    for opt, arg in opts:
25*c8c342a6SMilanka Ringwald        if opt == '-h':
26*c8c342a6SMilanka Ringwald            print (cmd)
27*c8c342a6SMilanka Ringwald            sys.exit()
28*c8c342a6SMilanka Ringwald        elif opt in ("-o", "--ofolder"):
29*c8c342a6SMilanka Ringwald            htmlfolder = arg
30*c8c342a6SMilanka Ringwald
31*c8c342a6SMilanka Ringwald    html_path = htmlfolder + "examples/"
32*c8c342a6SMilanka Ringwald    html_tmppath = htmlfolder + "examples/tmp/"
33*c8c342a6SMilanka Ringwald
34*c8c342a6SMilanka Ringwald    html_in  = html_path + "examples/index.html"
35*c8c342a6SMilanka Ringwald    html_tmp = html_tmppath + "index.html"
36*c8c342a6SMilanka Ringwald    references = pickle.load(open( "references.p", "rb" ))
37*c8c342a6SMilanka Ringwald
38*c8c342a6SMilanka Ringwald    Path(html_tmppath).mkdir(parents=True, exist_ok=True)
39*c8c342a6SMilanka Ringwald
40*c8c342a6SMilanka Ringwald    codeblock = 0
41*c8c342a6SMilanka Ringwald    codeblock_end = 0
42*c8c342a6SMilanka Ringwald
43*c8c342a6SMilanka Ringwald    with open(html_in, 'r') as fin:
44*c8c342a6SMilanka Ringwald        with open(html_tmp, 'w') as fout:
45*c8c342a6SMilanka Ringwald            for line in fin:
46*c8c342a6SMilanka Ringwald                if not codeblock:
47*c8c342a6SMilanka Ringwald                    fout.write(line)
48*c8c342a6SMilanka Ringwald                    if re.match('.*<pre><code>.*',line):
49*c8c342a6SMilanka Ringwald                        codeblock = 1
50*c8c342a6SMilanka Ringwald                    continue
51*c8c342a6SMilanka Ringwald
52*c8c342a6SMilanka Ringwald                writeCodeBlock(fout,line, references)
53*c8c342a6SMilanka Ringwald                # check if codeblock ended
54*c8c342a6SMilanka Ringwald                if re.match('.*</code></pre>.*',line):
55*c8c342a6SMilanka Ringwald                    codeblock = 0
56*c8c342a6SMilanka Ringwald
57*c8c342a6SMilanka Ringwald
58*c8c342a6SMilanka Ringwald    shutil.copyfile(html_tmp, html_in)
59*c8c342a6SMilanka Ringwald    shutil.rmtree(html_tmppath)
60*c8c342a6SMilanka Ringwald
61*c8c342a6SMilanka Ringwaldif __name__ == "__main__":
62*c8c342a6SMilanka Ringwald   main(sys.argv[1:])
63