xref: /btstack/port/arduino/docs/update_apis.py (revision 3e90877db8cb17795c6b27a3cef2cb84d0aa93cf)
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