58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
#! /usr/bin/env python
|
|
|
|
import io
|
|
import re
|
|
import sys
|
|
import os
|
|
import os.path
|
|
from six import print_
|
|
|
|
if len(sys.argv) == 2:
|
|
srcdir = sys.argv[1]
|
|
else:
|
|
srcdir = '.'
|
|
|
|
for root, dirs, files in os.walk(srcdir):
|
|
prefixes = list()
|
|
for file in files:
|
|
if file.endswith('.c'):
|
|
prefixes.append(os.path.splitext(file)[0])
|
|
for prefix in prefixes:
|
|
try:
|
|
header = io.open(os.path.join(root, prefix + '.h'), encoding='utf-8').read()
|
|
implementation = io.open(os.path.join(root, prefix + '.c'), encoding='utf-8').read()
|
|
exported_functions = re.findall('LASSO_EXPORT.*(lasso_\w*)', header)
|
|
normal_functions = sorted ([ x for x in exported_functions if not x.endswith('get_type') ])
|
|
get_type = [ x for x in exported_functions if x.endswith('get_type') ][0]
|
|
file_name = re.findall('lasso_(.*)_get_type', get_type)[0]
|
|
try:
|
|
macro_type = re.findall('LASSO_(\w*)_CLASS\(', header)[0]
|
|
except:
|
|
macro_type = None
|
|
try:
|
|
type = re.findall(r'^struct _(Lasso\w*)', header, re.MULTILINE)[0]
|
|
except:
|
|
type = None
|
|
types = re.findall('^} (Lasso\w*);', header)
|
|
def convert(x):
|
|
if '%s' in x:
|
|
return x % macro_type
|
|
else:
|
|
return x
|
|
if type and macro_type:
|
|
standard_decl = [ convert(x) for x in [ 'LASSO_%s', 'LASSO_IS_%s', 'LASSO_TYPE_%s', get_type, 'LASSO_%s_CLASS', 'LASSO_IS_%s_CLASS', 'LASSO_%s_GET_CLASS' ] ]
|
|
print_('')
|
|
print_('<SECTION>')
|
|
print_('<FILE>%s</FILE>' % file_name)
|
|
print_('<TITLE>%s</TITLE>' % type)
|
|
print_(type)
|
|
for x in types + normal_functions:
|
|
print_(x)
|
|
print_('<SUBSECTION Standard>')
|
|
for x in standard_decl:
|
|
print_(x)
|
|
print_('</SECTION>')
|
|
except:
|
|
continue
|
|
|