12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/usr/bin/python
- import sys
- import xml.etree.ElementTree as ET
- import json
- import os
- 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 :
- if os.path.isdir(sys.argv[1]):
- classes = {}
- for fname in os.listdir(sys.argv[1]):
- f = os.path.join(sys.argv[1], fname)
- tree = ET.parse(open(f, 'r'))
- cls = tree.getroot()
- dictCls = parseClass(cls)
- classes[dictCls['name']] = dictCls
- jsonContent = json.dumps({"classes": classes, "version": "3.0.alpha"}, ensure_ascii=False, indent=2)
- print(jsonContent)
- if __name__ == '__main__':
- main()
|