mirror of
https://github.com/godotengine/godot-vscode-plugin.git
synced 2025-12-31 13:48:24 +03:00
67 lines
2.4 KiB
Python
Executable File
67 lines
2.4 KiB
Python
Executable File
#!/usr/bin/python
|
|
import sys
|
|
import xml.etree.ElementTree as ET
|
|
import json
|
|
|
|
def parseClass(data):
|
|
dictCls = dict(data.attrib)
|
|
dictCls['brief_description'] = data.find("brief_description").text.strip()
|
|
dictCls['description'] = data.find("description").text.strip()
|
|
dictCls['methods'] = []
|
|
for m in data.find("methods"):
|
|
dictCls['methods'].append(parseMethod(m))
|
|
dictCls['signals'] = []
|
|
for s in (data.find("signals") if data.find("signals") is not None else []):
|
|
dictCls['signals'].append(parseMethod(s))
|
|
dictCls['constants'] = []
|
|
for c in (data.find("constants") if data.find("constants") is not None else []):
|
|
dictCls['constants'].append(parseConstant(c))
|
|
dictCls['properties'] = []
|
|
for m in (data.find("members") if data.find("members") is not None else []):
|
|
dictCls['properties'].append(parseProperty(m))
|
|
dictCls['theme_properties'] = []
|
|
for thi in (data.find("theme_items") if data.find("theme_items") is not None else []):
|
|
dictCls['theme_properties'].append(parseProperty(thi))
|
|
return dictCls
|
|
|
|
def parseMethod(data):
|
|
dictMethod = dict(data.attrib)
|
|
dictMethod['description'] = data.find("description").text.strip()
|
|
dictMethod['return_type'] = data.find("return").attrib["type"] if data.find("return") is not None else ""
|
|
if "qualifiers" not in dictMethod: dictMethod["qualifiers"] = ""
|
|
dictMethod["arguments"] = []
|
|
for arg in data.iter('argument'):
|
|
dictMethod["arguments"].append(parseArgument(arg))
|
|
return dictMethod
|
|
|
|
def parseArgument(data):
|
|
dictArg = dict(data.attrib)
|
|
if "dictArg" in dictArg: dictArg.pop("index")
|
|
dictArg["default_value"] = dictArg["default"] if "default" in dictArg else ""
|
|
if "default" in dictArg: dictArg.pop("default")
|
|
return dictArg
|
|
|
|
def parseConstant(data):
|
|
dictConst = dict(data.attrib)
|
|
dictConst["description"] = data.text.strip()
|
|
return dictConst
|
|
|
|
def parseProperty(data):
|
|
dictProp = dict(data.attrib)
|
|
dictProp["description"] = data.text.strip()
|
|
return dictProp
|
|
|
|
def main():
|
|
if len(sys.argv) >=2 :
|
|
tree = ET.parse(open(sys.argv[1], 'r'))
|
|
classes = {}
|
|
for cls in tree.getroot():
|
|
dictCls = parseClass(cls)
|
|
classes[dictCls['name']] = dictCls
|
|
jsonContent = json.dumps({"classes": classes, "version": "2.1.4"}, ensure_ascii=False, indent=2)
|
|
print(jsonContent)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|