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