harfang3d/doc/doc_utils/api_tools.py
2021-10-13 14:40:31 +02:00

79 lines
1.4 KiB
Python

import xml.etree.ElementTree as ETree
from collections import OrderedDict
escaped_symbol_patterns = OrderedDict([
('|=', '_ior_op_'),
('&=', '_iand_op_'),
('+=', '_iadd_op_'),
('-=', '_isub_op_'),
('*=', '_imul_op_'),
('/=', '_idiv_op_'),
('::', '_namespace_'),
(':', '_col_'),
('<=', '_le_'),
('>=', '_ge_'),
('==', '_eq_'),
('!=', '_neq_'),
('+', '_add_'),
('-', '_sub_'),
('*', '_mul_'),
('/', '_div_'),
('<', '_lt_'),
('>', '_gt_'),
('=', '_copy_'),
('.', '_dot_'),
])
def escape_symbol(symbol):
for pattern, escaped in escaped_symbol_patterns.items():
symbol = symbol.replace(pattern, escaped)
if symbol.endswith('_'):
symbol = symbol[:-1]
return symbol
# list of UIDs we do not want to include in the documentation
# TODO load from a file
blacklist = [
'string',
'SurfaceShader_Create',
'Node_SetUid',
]
api_tag_symbols = [
'class',
'function',
'enum',
'constants'
]
api = None
api_parent_map = None
def load_tag(tag):
for child in tag:
if child.tag in api_tag_symbols:
uid = child.get('uid')
if uid and uid not in blacklist:
if uid not in api:
api[uid] = []
api[uid].append(child)
load_tag(child)
def load_api(path):
with open(path, "r") as file:
xml_root = ETree.fromstring(file.read())
global api
api = OrderedDict()
load_tag(xml_root)
global api_parent_map
api_parent_map = {c: p for p in xml_root.iter() for c in p}