1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/python
- import sys
- import xml.etree.ElementTree as ET
- import json
- import os
- def glob_path(path, pattern):
- import os, fnmatch
- result = []
- for root, _, files in os.walk(path):
- for filename in files:
- if fnmatch.fnmatch(filename, pattern):
- result.append(os.path.join(root, filename))
- return result
- 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 f in glob_path(sys.argv[1], "**.xml"):
- if f.find("/classes/") == -1 and f.find("/doc_classes/") == -1:
- continue
- tree = ET.parse(open(f, 'r'))
- cls = tree.getroot()
- dictCls = parseClass(cls)
- classes[dictCls['name']] = dictCls
- jsonContent = json.dumps({"classes": classes, "version": "3.0.4"}, ensure_ascii=False, indent=2)
- print(jsonContent)
- if __name__ == '__main__':
- main()
|