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