16ccd8248SMilanka Ringwald#!/usr/bin/env python3 28caefee3SMatthias Ringwaldimport os 38caefee3SMatthias Ringwaldimport re 48caefee3SMatthias Ringwaldimport sys 58caefee3SMatthias Ringwald 68caefee3SMatthias Ringwaldclass State: 78caefee3SMatthias Ringwald SearchStartAPI = 0 88caefee3SMatthias Ringwald RemoveEmptyLinesAfterAPIStart = 1 98caefee3SMatthias Ringwald SearchEndAPI = 2 108caefee3SMatthias Ringwald DoneAPI = 3 118caefee3SMatthias Ringwald 128caefee3SMatthias Ringwalddocs_folder = "docs/appendix/" 138caefee3SMatthias Ringwaldappendix_file = docs_folder + "apis.md" 148caefee3SMatthias Ringwaldbtstack_folder = "../../../" 158caefee3SMatthias Ringwaldcode_identation = " " 168caefee3SMatthias Ringwald 178caefee3SMatthias Ringwaldapi_header = """ 188caefee3SMatthias Ringwald 198caefee3SMatthias Ringwald## API_TITLE API 208caefee3SMatthias Ringwald<a name ="appendix:API_LABLE"></a> 218caefee3SMatthias Ringwald 228caefee3SMatthias Ringwald""" 238caefee3SMatthias Ringwald 248caefee3SMatthias Ringwaldapi_ending = """ 258caefee3SMatthias Ringwald""" 268caefee3SMatthias Ringwald 278caefee3SMatthias Ringwald# [file_name, api_title, api_lable] 288caefee3SMatthias Ringwaldlist_of_apis = [ 296dd60d27SMatthias Ringwald [btstack_folder+"port/arduino/BTstack.h", "BTstack", "api_btstack"], 308caefee3SMatthias Ringwald] 318caefee3SMatthias Ringwald 328caefee3SMatthias Ringwalddef replacePlaceholder(template, title, lable): 338caefee3SMatthias Ringwald api_title = title + " API" 348caefee3SMatthias Ringwald snippet = template.replace("API_TITLE", title).replace("API_LABLE", lable) 358caefee3SMatthias Ringwald return snippet 368caefee3SMatthias Ringwald 378caefee3SMatthias Ringwalddef writeAPI(fout, infile_name): 388caefee3SMatthias Ringwald global code_identation 398caefee3SMatthias Ringwald state = State.SearchStartAPI 40*3e90877dSMilanka Ringwald with open(infile_name, 'r') as fin: 418caefee3SMatthias Ringwald for line in fin: 428caefee3SMatthias Ringwald if state == State.SearchStartAPI: 438caefee3SMatthias Ringwald parts = re.match('\s*(/\*).*API_START.*(\*/)',line) 448caefee3SMatthias Ringwald if parts: 458caefee3SMatthias Ringwald state = State.RemoveEmptyLinesAfterAPIStart 468caefee3SMatthias Ringwald continue 478caefee3SMatthias Ringwald 488caefee3SMatthias Ringwald if state == State.RemoveEmptyLinesAfterAPIStart: 498caefee3SMatthias Ringwald if line == "" or line == "\n": 508caefee3SMatthias Ringwald continue 518caefee3SMatthias Ringwald state = State.SearchEndAPI 528caefee3SMatthias Ringwald 538caefee3SMatthias Ringwald if state == State.SearchEndAPI: 548caefee3SMatthias Ringwald parts = re.match('\s*(/\*).*API_END.*(\*/)',line) 558caefee3SMatthias Ringwald if parts: 568caefee3SMatthias Ringwald state = State.DoneAPI 578caefee3SMatthias Ringwald return 588caefee3SMatthias Ringwald fout.write(code_identation + line) 598caefee3SMatthias Ringwald 608caefee3SMatthias Ringwalddef process_and_write_api(fout, api_tuple): 618caefee3SMatthias Ringwald infile_name = api_tuple[0] 628caefee3SMatthias Ringwald if not infile_name: 638caefee3SMatthias Ringwald return 648caefee3SMatthias Ringwald 658caefee3SMatthias Ringwald api_title = api_tuple[1] 668caefee3SMatthias Ringwald api_lable = api_tuple[2] 678caefee3SMatthias Ringwald 688caefee3SMatthias Ringwald fout.write(replacePlaceholder(api_header, api_title, api_lable)) 698caefee3SMatthias Ringwald writeAPI(fout, infile_name) 708caefee3SMatthias Ringwald 718caefee3SMatthias Ringwald 728caefee3SMatthias Ringwaldwith open(appendix_file, 'w') as aout: 738caefee3SMatthias Ringwald for api_tuple in list_of_apis: 748caefee3SMatthias Ringwald infile_name = api_tuple[0] 758caefee3SMatthias Ringwald if not infile_name: 768caefee3SMatthias Ringwald continue 778caefee3SMatthias Ringwald process_and_write_api(aout, api_tuple) 788caefee3SMatthias Ringwald 79