xref: /btstack/doc/manual/markdown_create_ports.py (revision 755a206fbe3717216f0870fb1cf403304d39d032)
1c8c342a6SMilanka Ringwald#!/usr/bin/env python3
2c8c342a6SMilanka Ringwald
3c8c342a6SMilanka Ringwaldimport sys, os, shutil, re,  getopt
4c8c342a6SMilanka Ringwald
5c8c342a6SMilanka Ringwaldblacklist = []
6c8c342a6SMilanka Ringwald
7c8c342a6SMilanka Ringwaldport_item = """
8c8c342a6SMilanka Ringwald- [PORT_TITLE](#sec:PORT_LABELPort)"""
9c8c342a6SMilanka Ringwald
10c8c342a6SMilanka Ringwalddef get_readme_title(example_path):
11c8c342a6SMilanka Ringwald    title = ''
12c8c342a6SMilanka Ringwald    with open(example_path, 'r') as fin:
13c8c342a6SMilanka Ringwald        for line in fin:
14*755a206fSMatthias Ringwald            parts = re.match(r'(##\s)(.*)\n',line)
15c8c342a6SMilanka Ringwald            if parts:
16c8c342a6SMilanka Ringwald                title = parts.group(2)
17c8c342a6SMilanka Ringwald                continue
18c8c342a6SMilanka Ringwald    return title
19c8c342a6SMilanka Ringwald
20c8c342a6SMilanka Ringwald# write list of examples
21c8c342a6SMilanka Ringwalddef process_readmes(intro_file, port_folder, ports_file, ports_folder):
22c8c342a6SMilanka Ringwald    matches = {}
23c8c342a6SMilanka Ringwald    images  = {}
24c8c342a6SMilanka Ringwald
25c8c342a6SMilanka Ringwald    # iterate over port folders
26c8c342a6SMilanka Ringwald    ports = os.listdir(port_folder)
27c8c342a6SMilanka Ringwald    for port in ports:
28c8c342a6SMilanka Ringwald        if port not in blacklist:
29c8c342a6SMilanka Ringwald            readme_file = port_folder + "/" + port + "/" + "README.md"
30c8c342a6SMilanka Ringwald            if os.path.exists(readme_file):
31c8c342a6SMilanka Ringwald                matches[port] = readme_file
32c8c342a6SMilanka Ringwald                for file in os.listdir(port_folder + "/" + port):
33c7608bc0SMatthias Ringwald                    if file.endswith('.jpg') or file.endswith('.png'):
34c8c342a6SMilanka Ringwald                        images[file] =  port_folder + "/" + port + "/" + file
35c8c342a6SMilanka Ringwald
36c8c342a6SMilanka Ringwald    with open(ports_file, 'w') as ports:
37c8c342a6SMilanka Ringwald        with open(intro_file, 'r') as fin:
38c8c342a6SMilanka Ringwald            for line in fin:
39c8c342a6SMilanka Ringwald                ports.write(line)
40c8c342a6SMilanka Ringwald        fin.close()
41c8c342a6SMilanka Ringwald
42c8c342a6SMilanka Ringwald        for readme_dir, readme_file in sorted(matches.items()):
43c8c342a6SMilanka Ringwald            with open(readme_file, 'r') as fin:
44c8c342a6SMilanka Ringwald                for line in fin:
45c8c342a6SMilanka Ringwald                    # find title, add reference
46*755a206fSMatthias Ringwald                    title_parts = re.match(r'(#\s+)(.*)\n',line)
47c8c342a6SMilanka Ringwald                    if title_parts:
48c8c342a6SMilanka Ringwald                        title = title_parts.group(2)
49c8c342a6SMilanka Ringwald                        ports.write(port_item.replace("PORT_TITLE", title).replace("PORT_LABEL", readme_dir))
50c8c342a6SMilanka Ringwald                        break
51c8c342a6SMilanka Ringwald        fin.close()
52c8c342a6SMilanka Ringwald        ports.write("\n\n")
53c8c342a6SMilanka Ringwald
54c8c342a6SMilanka Ringwald        for readme_dir, readme_file in sorted(matches.items()):
55c8c342a6SMilanka Ringwald            with open(readme_file, 'r') as fin:
56c8c342a6SMilanka Ringwald                for line in fin:
57c8c342a6SMilanka Ringwald                    #increase level of indentation
58*755a206fSMatthias Ringwald                    parts = re.match(r'#(.*)\n',line)
59c8c342a6SMilanka Ringwald
60*755a206fSMatthias Ringwald                    title_parts_level1 = re.match(r'(#\s+)(.*)\n',line)
61*755a206fSMatthias Ringwald                    title_parts_level2 = re.match(r'(##\s+)(.*)\n',line)
62c8c342a6SMilanka Ringwald
63c8c342a6SMilanka Ringwald                    if parts and title_parts_level1:
64c8c342a6SMilanka Ringwald                        ports.write("## " + title_parts_level1.group(2) + " {" + "#sec:" + readme_dir + "Port}\n" )
65c8c342a6SMilanka Ringwald                    elif parts and title_parts_level2:
66c8c342a6SMilanka Ringwald                        ports.write("### " + title_parts_level2.group(2)+ "\n" )
67c8c342a6SMilanka Ringwald                    else:
68c8c342a6SMilanka Ringwald                        ports.write(line)
69c8c342a6SMilanka Ringwald
70c8c342a6SMilanka Ringwald        # copy images
71c8c342a6SMilanka Ringwald        for image_filename, image_path in images.items():
72c8c342a6SMilanka Ringwald            print('copy %s as %s' % (image_path, ports_folder + image_filename))
73c8c342a6SMilanka Ringwald            shutil.copy(image_path, ports_folder + image_filename)
74c8c342a6SMilanka Ringwald
75c8c342a6SMilanka Ringwald        fin.close()
76c8c342a6SMilanka Ringwald        ports.close()
77c8c342a6SMilanka Ringwald
78c8c342a6SMilanka Ringwalddef main(argv):
79c8c342a6SMilanka Ringwald    btstackfolder = "../../"
80c8c342a6SMilanka Ringwald    markdownfolder = "docs-markdown/"
81c8c342a6SMilanka Ringwald    templatefolder    = "docs-intro/"
82c8c342a6SMilanka Ringwald
83c8c342a6SMilanka Ringwald    cmd = 'markdown_create_ports.py [-r <root_btstackfolder>] [-t <templatefolder>] [-o <output_markdownfolder>]'
84c8c342a6SMilanka Ringwald
85c8c342a6SMilanka Ringwald    try:
86c8c342a6SMilanka Ringwald        opts, args = getopt.getopt(argv,"r:t:o:",["rfolder=","tfolder=","ofolder="])
87c8c342a6SMilanka Ringwald    except getopt.GetoptError:
88c8c342a6SMilanka Ringwald        print (cmd)
89c8c342a6SMilanka Ringwald        sys.exit(2)
90c8c342a6SMilanka Ringwald    for opt, arg in opts:
91c8c342a6SMilanka Ringwald        if opt == '-h':
92c8c342a6SMilanka Ringwald            print (cmd)
93c8c342a6SMilanka Ringwald            sys.exit()
94c8c342a6SMilanka Ringwald        elif opt in ("-r", "--rfolder"):
95c8c342a6SMilanka Ringwald            btstackfolder = arg
96c8c342a6SMilanka Ringwald        elif opt in ("-t", "--tfolder"):
97c8c342a6SMilanka Ringwald            templatefolder = arg
98c8c342a6SMilanka Ringwald        elif opt in ("-o", "--ofolder"):
99c8c342a6SMilanka Ringwald            markdownfolder = arg
100c8c342a6SMilanka Ringwald
101c8c342a6SMilanka Ringwald
102c8c342a6SMilanka Ringwald    inputfolder = btstackfolder   + "port/"
103c8c342a6SMilanka Ringwald    portsfolder = markdownfolder      + "ports/"
104c8c342a6SMilanka Ringwald    introfile   = templatefolder + "ports_intro.md"
105c8c342a6SMilanka Ringwald    outputfile  = portsfolder     + "existing_ports.md"
106c8c342a6SMilanka Ringwald
107c8c342a6SMilanka Ringwald    print ('Input folder: ', inputfolder)
108c8c342a6SMilanka Ringwald    print ('Intro file:   ', introfile)
109c8c342a6SMilanka Ringwald    print ('Output file:  ', outputfile)
110c8c342a6SMilanka Ringwald
111c8c342a6SMilanka Ringwald    process_readmes(introfile, inputfolder, outputfile, portsfolder)
112c8c342a6SMilanka Ringwald
113c8c342a6SMilanka Ringwaldif __name__ == "__main__":
114c8c342a6SMilanka Ringwald   main(sys.argv[1:])
115