1c8c342a6SMilanka Ringwald#!/usr/bin/env python3 2c8c342a6SMilanka Ringwaldimport os, sys, getopt, re, pickle 3c8c342a6SMilanka Ringwaldimport subprocess 4c8c342a6SMilanka Ringwald 5c8c342a6SMilanka Ringwaldclass State: 6d7ef0676SMilanka Ringwald SearchTitle = 0 7d7ef0676SMilanka Ringwald SearchEndTitle = 1 8d7ef0676SMilanka Ringwald SearchStartAPI = 2 9d7ef0676SMilanka Ringwald SearchEndAPI = 3 10d7ef0676SMilanka Ringwald DoneAPI = 4 11c8c342a6SMilanka Ringwald 124a400a05SMilanka Ringwaldheader_files = {} 13c8c342a6SMilanka Ringwaldfunctions = {} 14c8c342a6SMilanka Ringwaldtypedefs = {} 15c8c342a6SMilanka Ringwald 164a400a05SMilanka Ringwaldlinenr = 0 174a400a05SMilanka RingwaldtypedefFound = 0 184a400a05SMilanka Ringwaldmultiline_function_def = 0 194a400a05SMilanka Ringwaldstate = State.SearchStartAPI 20c8c342a6SMilanka Ringwald 214a400a05SMilanka Ringwald# if dash is used in api_header, the windmill theme will repeat the same API_TITLE twice in the menu (i.e: APIs/API_TITLE/API_TITLE) 224a400a05SMilanka Ringwald# if <h2> is used, this is avoided (i.e: APIs/API_TITLE), but reference {...} is not translated to HTML 234a400a05SMilanka Ringwaldapi_header = """ 244a400a05SMilanka Ringwald# API_TITLE API {#sec:API_LABEL_api} 25c8c342a6SMilanka Ringwald 26c8c342a6SMilanka Ringwald""" 272ea56b0cSMilanka Ringwald 2878fab72eSMilanka Ringwaldapi_subheader = """ 2978fab72eSMilanka Ringwald## API_TITLE API {#sec:API_LABEL_api} 3078fab72eSMilanka Ringwald 3178fab72eSMilanka Ringwald""" 32c8c342a6SMilanka Ringwald 332ea56b0cSMilanka Ringwaldapi_description = """ 342ea56b0cSMilanka Ringwald**FILENAME** DESCRIPTION 352ea56b0cSMilanka Ringwald 36c8c342a6SMilanka Ringwald""" 37c8c342a6SMilanka Ringwald 382d21ec19SMilanka Ringwaldcode_ref = """GITHUB/FPATH#LLINENR""" 39c8c342a6SMilanka Ringwald 40d7ef0676SMilanka Ringwalddef isEndOfComment(line): 41*367b47cfSMilanka Ringwald parts = re.match(r'\s*\*\/.*', line) 42*367b47cfSMilanka Ringwald if parts: 43*367b47cfSMilanka Ringwald return True 44*367b47cfSMilanka Ringwald return False 45d7ef0676SMilanka Ringwald 46d7ef0676SMilanka Ringwalddef isStartOfComment(line): 47*367b47cfSMilanka Ringwald parts = re.match(r'\s*\/\*\*.*', line) 48*367b47cfSMilanka Ringwald if parts: 49*367b47cfSMilanka Ringwald return True 50*367b47cfSMilanka Ringwald return False 51*367b47cfSMilanka Ringwald 52*367b47cfSMilanka Ringwalddef isComment(line): 53*367b47cfSMilanka Ringwald parts = re.match(r'\s*\/\/.*', line) 54*367b47cfSMilanka Ringwald if parts: 55*367b47cfSMilanka Ringwald return True 56*367b47cfSMilanka Ringwald parts = re.match(r'\s*\*.*', line) 57*367b47cfSMilanka Ringwald if parts: 58*367b47cfSMilanka Ringwald return True 59*367b47cfSMilanka Ringwald 60*367b47cfSMilanka Ringwald return isStartOfComment(line) or isEndOfComment(line) 61d7ef0676SMilanka Ringwald 62d7ef0676SMilanka Ringwalddef isTypedefStart(line): 63755a206fSMatthias Ringwald return re.match(r'.*typedef\s+struct.*', line) 64d7ef0676SMilanka Ringwald 652d21ec19SMilanka Ringwalddef codeReference(fname, githuburl, filename_without_extension, filepath, linenr): 66c8c342a6SMilanka Ringwald global code_ref 67c8c342a6SMilanka Ringwald ref = code_ref.replace("GITHUB", githuburl) 682d21ec19SMilanka Ringwald ref = ref.replace("FPATH", filename_without_extension) 69c8c342a6SMilanka Ringwald ref = ref.replace("LINENR", str(linenr)) 70c8c342a6SMilanka Ringwald return ref 71c8c342a6SMilanka Ringwald 724a400a05SMilanka Ringwalddef isTagAPI(line): 73755a206fSMatthias Ringwald return re.match(r'(.*)(-\s*\')(APIs).*',line) 744a400a05SMilanka Ringwald 754a400a05SMilanka Ringwalddef getSecondLevelIdentation(line): 764a400a05SMilanka Ringwald indentation = "" 77755a206fSMatthias Ringwald parts = re.match(r'(.*)(-\s*\')(APIs).*',line) 784a400a05SMilanka Ringwald if parts: 794a400a05SMilanka Ringwald # return double identation for the submenu 804a400a05SMilanka Ringwald indentation = parts.group(1) + parts.group(1) + "- " 814a400a05SMilanka Ringwald return indentation 824a400a05SMilanka Ringwald 834a400a05SMilanka Ringwalddef filename_stem(filepath): 844a400a05SMilanka Ringwald return os.path.splitext(os.path.basename(filepath))[0] 85c8c342a6SMilanka Ringwald 86d7ef0676SMilanka Ringwalddef writeAPI(fout, fin, mk_codeidentation): 87c8c342a6SMilanka Ringwald state = State.SearchStartAPI 88d7ef0676SMilanka Ringwald 89c8c342a6SMilanka Ringwald for line in fin: 90c8c342a6SMilanka Ringwald if state == State.SearchStartAPI: 91c8c342a6SMilanka Ringwald parts = re.match('.*API_START.*',line) 92c8c342a6SMilanka Ringwald if parts: 93c8c342a6SMilanka Ringwald state = State.SearchEndAPI 94c8c342a6SMilanka Ringwald continue 95c8c342a6SMilanka Ringwald 96c8c342a6SMilanka Ringwald if state == State.SearchEndAPI: 97c8c342a6SMilanka Ringwald parts = re.match('.*API_END.*',line) 98c8c342a6SMilanka Ringwald if parts: 99c8c342a6SMilanka Ringwald state = State.DoneAPI 100c8c342a6SMilanka Ringwald continue 101c8c342a6SMilanka Ringwald fout.write(mk_codeidentation + line) 102c8c342a6SMilanka Ringwald continue 103c8c342a6SMilanka Ringwald 104c8c342a6SMilanka Ringwald 105c8c342a6SMilanka Ringwald 1062d21ec19SMilanka Ringwalddef createIndex(fin, filename, api_filepath, api_title, api_label, githuburl): 107d7ef0676SMilanka Ringwald global typedefs, functions 108d7ef0676SMilanka Ringwald global linenr, multiline_function_def, typedefFound, state 109d7ef0676SMilanka Ringwald 110d7ef0676SMilanka Ringwald 111c8c342a6SMilanka Ringwald for line in fin: 112c8c342a6SMilanka Ringwald if state == State.DoneAPI: 113c8c342a6SMilanka Ringwald continue 114c8c342a6SMilanka Ringwald 115c8c342a6SMilanka Ringwald linenr = linenr + 1 116c8c342a6SMilanka Ringwald 117c8c342a6SMilanka Ringwald if state == State.SearchStartAPI: 118c8c342a6SMilanka Ringwald parts = re.match('.*API_START.*',line) 119c8c342a6SMilanka Ringwald if parts: 120c8c342a6SMilanka Ringwald state = State.SearchEndAPI 121c8c342a6SMilanka Ringwald continue 122c8c342a6SMilanka Ringwald 123c8c342a6SMilanka Ringwald if state == State.SearchEndAPI: 124c8c342a6SMilanka Ringwald parts = re.match('.*API_END.*',line) 125c8c342a6SMilanka Ringwald if parts: 126c8c342a6SMilanka Ringwald state = State.DoneAPI 127c8c342a6SMilanka Ringwald continue 128c8c342a6SMilanka Ringwald 129*367b47cfSMilanka Ringwald if isComment(line): 130c8c342a6SMilanka Ringwald continue 131c8c342a6SMilanka Ringwald 132c8c342a6SMilanka Ringwald param = re.match(".*@brief.*", line) 133c8c342a6SMilanka Ringwald if param: 134c8c342a6SMilanka Ringwald continue 135c8c342a6SMilanka Ringwald param = re.match(".*@param.*", line) 136c8c342a6SMilanka Ringwald if param: 137c8c342a6SMilanka Ringwald continue 138c8c342a6SMilanka Ringwald param = re.match(".*@return.*", line) 139c8c342a6SMilanka Ringwald if param: 140c8c342a6SMilanka Ringwald continue 14102d4336aSMilanka Ringwald param = re.match(".*@result.*", line) 14202d4336aSMilanka Ringwald if param: 14302d4336aSMilanka Ringwald continue 14402d4336aSMilanka Ringwald param = re.match(".*@note.*", line) 14502d4336aSMilanka Ringwald if param: 14602d4336aSMilanka Ringwald continue 147*367b47cfSMilanka Ringwald param = re.match(".*return.*", line) 148*367b47cfSMilanka Ringwald if param: 149*367b47cfSMilanka Ringwald continue 150c8c342a6SMilanka Ringwald 151c8c342a6SMilanka Ringwald # search typedef struct begin 152d7ef0676SMilanka Ringwald if isTypedefStart(line): 153c8c342a6SMilanka Ringwald typedefFound = 1 154c8c342a6SMilanka Ringwald 155c8c342a6SMilanka Ringwald # search typedef struct end 156c8c342a6SMilanka Ringwald if typedefFound: 157755a206fSMatthias Ringwald typedef = re.match(r'}\s*(.*);\n', line) 158c8c342a6SMilanka Ringwald if typedef: 159c8c342a6SMilanka Ringwald typedefFound = 0 1602d21ec19SMilanka Ringwald typedefs[typedef.group(1)] = codeReference(typedef.group(1), githuburl, filename, api_filepath, linenr) 161c8c342a6SMilanka Ringwald continue 162c8c342a6SMilanka Ringwald 163755a206fSMatthias Ringwald ref_function = re.match(r'.*typedef\s+void\s+\(\s*\*\s*(.*?)\)\(.*', line) 164c8c342a6SMilanka Ringwald if ref_function: 1652d21ec19SMilanka Ringwald functions[ref_function.group(1)] = codeReference(ref_function.group(1), githuburl, filename, api_filepath, linenr) 166c8c342a6SMilanka Ringwald continue 167c8c342a6SMilanka Ringwald 16802d4336aSMilanka Ringwald # filter callback 16902d4336aSMilanka Ringwald callback_function_definition = re.match(r'(.*?)\s*\(\s*\*.*\(*.*;\n', line) 17002d4336aSMilanka Ringwald if callback_function_definition: 17102d4336aSMilanka Ringwald continue 172d7ef0676SMilanka Ringwald 173755a206fSMatthias Ringwald one_line_function_definition = re.match(r'(.*?)\s*\(.*\(*.*;\n', line) 174d7ef0676SMilanka Ringwald if one_line_function_definition: 175d7ef0676SMilanka Ringwald parts = one_line_function_definition.group(1).split(" "); 176c8c342a6SMilanka Ringwald name = parts[len(parts)-1] 177c8c342a6SMilanka Ringwald if len(name) == 0: 178c8c342a6SMilanka Ringwald print(parts); 179c8c342a6SMilanka Ringwald sys.exit(10) 180e4b84d01SMatthias Ringwald # ignore typedef for callbacks 181e4b84d01SMatthias Ringwald if parts[0] == 'typedef': 182e4b84d01SMatthias Ringwald continue 1832d21ec19SMilanka Ringwald functions[name] = codeReference( name, githuburl, filename, api_filepath, linenr) 184c8c342a6SMilanka Ringwald continue 185c8c342a6SMilanka Ringwald 186755a206fSMatthias Ringwald multi_line_function_definition = re.match(r'.(.*?)\s*\(.*\(*.*', line) 187d7ef0676SMilanka Ringwald if multi_line_function_definition: 188d7ef0676SMilanka Ringwald parts = multi_line_function_definition.group(1).split(" "); 189d7ef0676SMilanka Ringwald 190d7ef0676SMilanka Ringwald name = parts[len(parts)-1] 191c8c342a6SMilanka Ringwald if len(name) == 0: 192c8c342a6SMilanka Ringwald print(parts); 193c8c342a6SMilanka Ringwald sys.exit(10) 194c8c342a6SMilanka Ringwald multiline_function_def = 1 1952d21ec19SMilanka Ringwald functions[name] = codeReference(name, githuburl, filename, api_filepath, linenr) 196c8c342a6SMilanka Ringwald 197c8c342a6SMilanka Ringwald 198d7ef0676SMilanka Ringwalddef findTitle(fin): 199d7ef0676SMilanka Ringwald title = None 200d7ef0676SMilanka Ringwald desc = "" 201d7ef0676SMilanka Ringwald state = State.SearchTitle 202d7ef0676SMilanka Ringwald 203d7ef0676SMilanka Ringwald for line in fin: 204d7ef0676SMilanka Ringwald if state == State.SearchTitle: 205d7ef0676SMilanka Ringwald if isStartOfComment(line): 206d7ef0676SMilanka Ringwald continue 207d7ef0676SMilanka Ringwald 208755a206fSMatthias Ringwald parts = re.match(r'.*(@title)(.*)', line) 209d7ef0676SMilanka Ringwald if parts: 210d7ef0676SMilanka Ringwald title = parts.group(2).strip() 211d7ef0676SMilanka Ringwald state = State.SearchEndTitle 212d7ef0676SMilanka Ringwald continue 213d7ef0676SMilanka Ringwald 214d7ef0676SMilanka Ringwald if state == State.SearchEndTitle: 215d7ef0676SMilanka Ringwald if (isEndOfComment(line)): 216d7ef0676SMilanka Ringwald state = State.DoneAPI 217d7ef0676SMilanka Ringwald break 218d7ef0676SMilanka Ringwald 219755a206fSMatthias Ringwald parts = re.match(r'(\s*\*\s*)(.*\n)',line) 220d7ef0676SMilanka Ringwald if parts: 221d7ef0676SMilanka Ringwald desc = desc + parts.group(2) 2224a400a05SMilanka Ringwald return [title, desc] 223d7ef0676SMilanka Ringwald 224c8c342a6SMilanka Ringwalddef main(argv): 225d7ef0676SMilanka Ringwald global linenr, multiline_function_def, typedefFound, state 226d7ef0676SMilanka Ringwald 227c8c342a6SMilanka Ringwald mk_codeidentation = " " 228c8c342a6SMilanka Ringwald git_branch_name = "master" 229c8c342a6SMilanka Ringwald btstackfolder = "../../" 2302d21ec19SMilanka Ringwald githuburl_template = "https://github.com/bluekitchen/btstack/blob/" 2312d21ec19SMilanka Ringwald githuburl = "master/src/" 232c8c342a6SMilanka Ringwald markdownfolder = "docs-markdown/" 233c8c342a6SMilanka Ringwald 234c8c342a6SMilanka Ringwald cmd = 'markdown_create_apis.py [-r <root_btstackfolder>] [-g <githuburl>] [-o <output_markdownfolder>]' 235c8c342a6SMilanka Ringwald try: 236c8c342a6SMilanka Ringwald opts, args = getopt.getopt(argv,"r:g:o:",["rfolder=","github=","ofolder="]) 237c8c342a6SMilanka Ringwald except getopt.GetoptError: 238c8c342a6SMilanka Ringwald print (cmd) 239c8c342a6SMilanka Ringwald sys.exit(2) 240c8c342a6SMilanka Ringwald for opt, arg in opts: 241c8c342a6SMilanka Ringwald if opt == '-h': 242c8c342a6SMilanka Ringwald print (cmd) 243c8c342a6SMilanka Ringwald sys.exit() 244c8c342a6SMilanka Ringwald elif opt in ("-r", "--rfolder"): 245c8c342a6SMilanka Ringwald btstackfolder = arg 246c8c342a6SMilanka Ringwald elif opt in ("-g", "--github"): 247c8c342a6SMilanka Ringwald githuburl = arg 248c8c342a6SMilanka Ringwald elif opt in ("-o", "--ofolder"): 249c8c342a6SMilanka Ringwald markdownfolder = arg 250c8c342a6SMilanka Ringwald 251c8c342a6SMilanka Ringwald apifile = markdownfolder + "appendix/apis.md" 252c8c342a6SMilanka Ringwald # indexfile = markdownfolder + "api_index.md" 253d7ef0676SMilanka Ringwald btstack_srcfolder = btstackfolder + "src/" 254c8c342a6SMilanka Ringwald 255c8c342a6SMilanka Ringwald try: 256c8c342a6SMilanka Ringwald output = subprocess.check_output("git symbolic-ref --short HEAD", stderr=subprocess.STDOUT, timeout=3, shell=True) 257c8c342a6SMilanka Ringwald git_branch_name = output.decode().rstrip() 258c8c342a6SMilanka Ringwald except subprocess.CalledProcessError as exc: 259c8c342a6SMilanka Ringwald print('GIT branch name: failed to get, use default value \"%s\"" ', git_branch_name, exc.returncode, exc.output) 260c8c342a6SMilanka Ringwald else: 261c8c342a6SMilanka Ringwald print ('GIT branch name : %s' % git_branch_name) 262c8c342a6SMilanka Ringwald 2632d21ec19SMilanka Ringwald githuburl = githuburl_template + git_branch_name 264c8c342a6SMilanka Ringwald 265d7ef0676SMilanka Ringwald print ('BTstack src folder is : ' + btstack_srcfolder) 266c8c342a6SMilanka Ringwald print ('API file is : ' + apifile) 267c8c342a6SMilanka Ringwald print ('Github URL is : ' + githuburl) 268c8c342a6SMilanka Ringwald 2694a400a05SMilanka Ringwald # create a dictionary of header files {file_path : [title, description]} 2704a400a05SMilanka Ringwald # title and desctiption are extracted from the file 271d7ef0676SMilanka Ringwald for root, dirs, files in os.walk(btstack_srcfolder, topdown=True): 272d7ef0676SMilanka Ringwald for f in files: 273d7ef0676SMilanka Ringwald if not f.endswith(".h"): 274d7ef0676SMilanka Ringwald continue 275d7ef0676SMilanka Ringwald 2764a400a05SMilanka Ringwald if not root.endswith("/"): 2774a400a05SMilanka Ringwald root = root + "/" 278d7ef0676SMilanka Ringwald 2794a400a05SMilanka Ringwald header_filepath = root + f 280d7ef0676SMilanka Ringwald 2814a400a05SMilanka Ringwald with open(header_filepath, 'rt') as fin: 2824a400a05SMilanka Ringwald [header_title, header_desc] = findTitle(fin) 283d7ef0676SMilanka Ringwald 2844a400a05SMilanka Ringwald if header_title: 2854a400a05SMilanka Ringwald header_files[header_filepath] = [header_title, header_desc] 2864a400a05SMilanka Ringwald else: 2874a400a05SMilanka Ringwald print("No @title flag found. Skip %s" % header_filepath) 288d7ef0676SMilanka Ringwald 2892ea56b0cSMilanka Ringwald # create an >md file, for each header file in header_files dictionary 2904a400a05SMilanka Ringwald for header_filepath in sorted(header_files.keys()): 2912d21ec19SMilanka Ringwald filename = str(header_filepath) 2922d21ec19SMilanka Ringwald filename = filename.split("../../")[1] 2932d21ec19SMilanka Ringwald 2942ea56b0cSMilanka Ringwald filename_without_extension = filename_stem(header_filepath) # file name without .h 2952ea56b0cSMilanka Ringwald filetitle = header_files[header_filepath][0] 2962ea56b0cSMilanka Ringwald description = header_files[header_filepath][1] 2972ea56b0cSMilanka Ringwald 2982ea56b0cSMilanka Ringwald if len(description) > 1: 2992ea56b0cSMilanka Ringwald description = ": " + description 3002ea56b0cSMilanka Ringwald 3012ea56b0cSMilanka Ringwald header_description = api_description.replace("FILENAME", filename).replace("DESCRIPTION", description) 3022ea56b0cSMilanka Ringwald 3032ea56b0cSMilanka Ringwald header_title = api_header.replace("API_TITLE", filetitle).replace("API_LABEL", filename_without_extension) 3042ea56b0cSMilanka Ringwald markdown_filepath = markdownfolder + "appendix/" + filename_without_extension + ".md" 305d7ef0676SMilanka Ringwald 3064a400a05SMilanka Ringwald with open(header_filepath, 'rt') as fin: 3074a400a05SMilanka Ringwald with open(markdown_filepath, 'wt') as fout: 3084a400a05SMilanka Ringwald fout.write(header_title) 3094a400a05SMilanka Ringwald fout.write(header_description) 310d7ef0676SMilanka Ringwald writeAPI(fout, fin, mk_codeidentation) 311d7ef0676SMilanka Ringwald 3124a400a05SMilanka Ringwald with open(header_filepath, 'rt') as fin: 313d7ef0676SMilanka Ringwald linenr = 0 314d7ef0676SMilanka Ringwald typedefFound = 0 315d7ef0676SMilanka Ringwald multiline_function_def = 0 316d7ef0676SMilanka Ringwald state = State.SearchStartAPI 3172d21ec19SMilanka Ringwald createIndex(fin, filename, markdown_filepath, header_title, filename_without_extension, githuburl) 318d7ef0676SMilanka Ringwald 3194a400a05SMilanka Ringwald # add API list to the navigation menu 3204a400a05SMilanka Ringwald with open("mkdocs-temp.yml", 'rt') as fin: 3214a400a05SMilanka Ringwald with open("mkdocs.yml", 'wt') as fout: 3224a400a05SMilanka Ringwald for line in fin: 3234a400a05SMilanka Ringwald fout.write(line) 3244a400a05SMilanka Ringwald 3254a400a05SMilanka Ringwald if not isTagAPI(line): 3264a400a05SMilanka Ringwald continue 3274a400a05SMilanka Ringwald 3284a400a05SMilanka Ringwald identation = getSecondLevelIdentation(line) 3294a400a05SMilanka Ringwald 3304a400a05SMilanka Ringwald for header_filepath in sorted(header_files.keys()): 3312ea56b0cSMilanka Ringwald header_title = os.path.basename(header_filepath) 3324a400a05SMilanka Ringwald markdown_reference = "appendix/" + filename_stem(header_filepath) + ".md" 3334a400a05SMilanka Ringwald 3344a400a05SMilanka Ringwald fout.write(identation + "'" + header_title + "': " + markdown_reference + "\n") 335c8c342a6SMilanka Ringwald 33678fab72eSMilanka Ringwald 3372ea56b0cSMilanka Ringwald # create mkdocs-latex.yml with single appendix/apis.md reference for pdf generation 33878fab72eSMilanka Ringwald with open("mkdocs-temp.yml", 'rt') as fin: 33978fab72eSMilanka Ringwald with open("mkdocs-latex.yml", 'wt') as fout: 34078fab72eSMilanka Ringwald for line in fin: 34178fab72eSMilanka Ringwald if not isTagAPI(line): 34278fab72eSMilanka Ringwald fout.write(line) 34378fab72eSMilanka Ringwald continue 34478fab72eSMilanka Ringwald 34578fab72eSMilanka Ringwald fout.write(" - 'APIs': appendix/apis.md\n") 34678fab72eSMilanka Ringwald 3472ea56b0cSMilanka Ringwald # create single appendix/apis.md file for pdf generation 34878fab72eSMilanka Ringwald markdown_filepath = markdownfolder + "appendix/apis.md" 34978fab72eSMilanka Ringwald with open(markdown_filepath, 'wt') as fout: 35078fab72eSMilanka Ringwald fout.write("\n# APIs\n\n") 35178fab72eSMilanka Ringwald for header_filepath in sorted(header_files.keys()): 3522ea56b0cSMilanka Ringwald filename = os.path.basename(header_filepath) 3532ea56b0cSMilanka Ringwald filename_without_extension = filename_stem(header_filepath) # file name without 3542ea56b0cSMilanka Ringwald filetitle = header_files[header_filepath][0] 35578fab72eSMilanka Ringwald 3562ea56b0cSMilanka Ringwald description = header_files[header_filepath][1] 3572ea56b0cSMilanka Ringwald 3582ea56b0cSMilanka Ringwald if len(description) > 1: 3592ea56b0cSMilanka Ringwald description = ": " + description 3602ea56b0cSMilanka Ringwald 3612ea56b0cSMilanka Ringwald header_description = api_description.replace("FILENAME", filename).replace("DESCRIPTION", description) 3622ea56b0cSMilanka Ringwald 3632ea56b0cSMilanka Ringwald subheader_title = api_subheader.replace("API_TITLE", filetitle).replace("API_LABEL", filename_without_extension) 36478fab72eSMilanka Ringwald with open(header_filepath, 'rt') as fin: 36578fab72eSMilanka Ringwald fout.write(subheader_title) 36678fab72eSMilanka Ringwald fout.write(header_description) 36778fab72eSMilanka Ringwald writeAPI(fout, fin, mk_codeidentation) 36878fab72eSMilanka Ringwald 369c8c342a6SMilanka Ringwald 370c8c342a6SMilanka Ringwald references = functions.copy() 371c8c342a6SMilanka Ringwald references.update(typedefs) 372c8c342a6SMilanka Ringwald 373*367b47cfSMilanka Ringwald for function_name, url in references.items(): 374*367b47cfSMilanka Ringwald print(function_name, url) 375*367b47cfSMilanka Ringwald 376c8c342a6SMilanka Ringwald # with open(indexfile, 'w') as fout: 377c8c342a6SMilanka Ringwald # for function, reference in references.items(): 378c8c342a6SMilanka Ringwald # fout.write("[" + function + "](" + reference + ")\n") 379c8c342a6SMilanka Ringwald 380c8c342a6SMilanka Ringwald pickle.dump(references, open("references.p", "wb" ) ) 381c8c342a6SMilanka Ringwald 382c8c342a6SMilanka Ringwaldif __name__ == "__main__": 383c8c342a6SMilanka Ringwald main(sys.argv[1:]) 384