btstack/port/arduino/docs/update_apis.py
2016-03-04 15:10:05 +01:00

79 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
import os
import re
import sys
class State:
SearchStartAPI = 0
RemoveEmptyLinesAfterAPIStart = 1
SearchEndAPI = 2
DoneAPI = 3
docs_folder = "docs/appendix/"
appendix_file = docs_folder + "apis.md"
btstack_folder = "../../../"
code_identation = " "
api_header = """
## API_TITLE API
<a name ="appendix:API_LABLE"></a>
"""
api_ending = """
"""
# [file_name, api_title, api_lable]
list_of_apis = [
[btstack_folder+"port/arduino/BTstack.h", "BTstack", "api_btstack"],
]
def replacePlaceholder(template, title, lable):
api_title = title + " API"
snippet = template.replace("API_TITLE", title).replace("API_LABLE", lable)
return snippet
def writeAPI(fout, infile_name):
global code_identation
state = State.SearchStartAPI
with open(infile_name, 'rb') as fin:
for line in fin:
if state == State.SearchStartAPI:
parts = re.match('\s*(/\*).*API_START.*(\*/)',line)
if parts:
state = State.RemoveEmptyLinesAfterAPIStart
continue
if state == State.RemoveEmptyLinesAfterAPIStart:
if line == "" or line == "\n":
continue
state = State.SearchEndAPI
if state == State.SearchEndAPI:
parts = re.match('\s*(/\*).*API_END.*(\*/)',line)
if parts:
state = State.DoneAPI
return
fout.write(code_identation + line)
def process_and_write_api(fout, api_tuple):
infile_name = api_tuple[0]
if not infile_name:
return
api_title = api_tuple[1]
api_lable = api_tuple[2]
fout.write(replacePlaceholder(api_header, api_title, api_lable))
writeAPI(fout, infile_name)
with open(appendix_file, 'w') as aout:
for api_tuple in list_of_apis:
infile_name = api_tuple[0]
if not infile_name:
continue
process_and_write_api(aout, api_tuple)