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