123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/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()
|