diff options
Diffstat (limited to 'doc/tools/doc_merge.py')
-rw-r--r-- | doc/tools/doc_merge.py | 316 |
1 files changed, 160 insertions, 156 deletions
diff --git a/doc/tools/doc_merge.py b/doc/tools/doc_merge.py index 536770bee4..57ac4bdcdd 100644 --- a/doc/tools/doc_merge.py +++ b/doc/tools/doc_merge.py @@ -6,206 +6,210 @@ import xml.etree.ElementTree as ET tree = ET.parse(sys.argv[1]) -old_doc=tree.getroot() +old_doc = tree.getroot() tree = ET.parse(sys.argv[2]) -new_doc=tree.getroot() +new_doc = tree.getroot() -f = file(sys.argv[3],"wb") -tab=0 +f = file(sys.argv[3], "wb") +tab = 0 -old_classes={} +old_classes = {} + + +def write_string(_f, text, newline=True): + for t in range(tab): + _f.write("\t") + _f.write(text) + if (newline): + _f.write("\n") -def write_string(_f, text,newline=True): - for t in range(tab): - _f.write("\t") - _f.write(text) - if (newline): - _f.write("\n") def escape(ret): - ret=ret.replace("&","&"); - ret=ret.replace("<",">"); - ret=ret.replace(">","<"); - ret=ret.replace("'","'"); - ret=ret.replace("\"","""); - return ret + ret = ret.replace("&", "&") + ret = ret.replace("<", ">") + ret = ret.replace(">", "<") + ret = ret.replace("'", "'") + ret = ret.replace("\"", """) + return ret def inc_tab(): - global tab - tab+=1 + global tab + tab += 1 + def dec_tab(): - global tab - tab-=1 - -write_string(f,'<?xml version="1.0" encoding="UTF-8" ?>') -write_string(f,'<doc version="'+new_doc.attrib["version"]+'">') - -def get_tag(node,name): - tag="" - if (name in node.attrib): - tag=' '+name+'="'+escape(node.attrib[name])+'" ' - return tag - -def find_method_descr(old_class,name): - - methods = old_class.find("methods") - if(methods!=None and len(list(methods))>0): - for m in list(methods): - if (m.attrib["name"]==name): - description=m.find("description") - if (description!=None and description.text.strip()!=""): - return description.text - - return None - -def find_signal_descr(old_class,name): - - signals = old_class.find("signals") - if(signals!=None and len(list(signals))>0): - for m in list(signals): - if (m.attrib["name"]==name): - description=m.find("description") - if (description!=None and description.text.strip()!=""): - return description.text - - return None - -def find_constant_descr(old_class,name): - - if (old_class==None): - return None - constants = old_class.find("constants") - if(constants!=None and len(list(constants))>0): - for m in list(constants): - if (m.attrib["name"]==name): - if (m.text.strip()!=""): - return m.text - return None + global tab + tab -= 1 + +write_string(f, '<?xml version="1.0" encoding="UTF-8" ?>') +write_string(f, '<doc version="' + new_doc.attrib["version"] + '">') -def write_class(c): - class_name = c.attrib["name"] - print("Parsing Class: "+class_name) - if (class_name in old_classes): - old_class=old_classes[class_name] - else: - old_class=None +def get_tag(node, name): + tag = "" + if (name in node.attrib): + tag = ' ' + name + '="' + escape(node.attrib[name]) + '" ' + return tag - category=get_tag(c,"category") - inherits=get_tag(c,"inherits") - write_string(f,'<class name="'+class_name+'" '+category+inherits+'>') - inc_tab() - write_string(f,"<brief_description>") +def find_method_descr(old_class, name): - if (old_class!=None): - old_brief_descr=old_class.find("brief_description") - if (old_brief_descr!=None): - write_string(f,escape(old_brief_descr.text.strip())) + methods = old_class.find("methods") + if(methods != None and len(list(methods)) > 0): + for m in list(methods): + if (m.attrib["name"] == name): + description = m.find("description") + if (description != None and description.text.strip() != ""): + return description.text + return None - write_string(f,"</brief_description>") - write_string(f,"<description>") - if (old_class!=None): - old_descr=old_class.find("description") - if (old_descr!=None): - write_string(f,escape(old_descr.text.strip())) +def find_signal_descr(old_class, name): - write_string(f,"</description>") + signals = old_class.find("signals") + if(signals != None and len(list(signals)) > 0): + for m in list(signals): + if (m.attrib["name"] == name): + description = m.find("description") + if (description != None and description.text.strip() != ""): + return description.text - methods = c.find("methods") - if(methods!=None and len(list(methods))>0): + return None - write_string(f,"<methods>") - inc_tab() - for m in list(methods): - qualifiers=get_tag(m,"qualifiers") +def find_constant_descr(old_class, name): - write_string(f,'<method name="'+escape(m.attrib["name"])+'" ' +qualifiers+'>') - inc_tab() + if (old_class == None): + return None + constants = old_class.find("constants") + if(constants != None and len(list(constants)) > 0): + for m in list(constants): + if (m.attrib["name"] == name): + if (m.text.strip() != ""): + return m.text + return None - for a in list(m): - if (a.tag=="return"): - typ=get_tag(a,"type") - write_string(f,'<return'+typ+'>'); - write_string(f,'</return>'); - elif (a.tag=="argument"): - default=get_tag(a,"default") +def write_class(c): + class_name = c.attrib["name"] + print("Parsing Class: " + class_name) + if (class_name in old_classes): + old_class = old_classes[class_name] + else: + old_class = None - write_string(f,'<argument index="'+a.attrib["index"]+'" name="'+escape(a.attrib["name"])+'" type="'+a.attrib["type"]+'"' +default+'>'); - write_string(f,'</argument>'); + category = get_tag(c, "category") + inherits = get_tag(c, "inherits") + write_string(f, '<class name="' + class_name + '" ' + category + inherits + '>') + inc_tab() - write_string(f,'<description>'); - if (old_class!=None): - old_method_descr=find_method_descr(old_class,m.attrib["name"]) - if (old_method_descr): - write_string(f,escape(escape(old_method_descr.strip()))) + write_string(f, "<brief_description>") - write_string(f,'</description>'); - dec_tab() - write_string(f,"</method>") - dec_tab() - write_string(f,"</methods>") + if (old_class != None): + old_brief_descr = old_class.find("brief_description") + if (old_brief_descr != None): + write_string(f, escape(old_brief_descr.text.strip())) - signals = c.find("signals") - if(signals!=None and len(list(signals))>0): + write_string(f, "</brief_description>") - write_string(f,"<signals>") - inc_tab() + write_string(f, "<description>") + if (old_class != None): + old_descr = old_class.find("description") + if (old_descr != None): + write_string(f, escape(old_descr.text.strip())) - for m in list(signals): + write_string(f, "</description>") - write_string(f,'<signal name="'+escape(m.attrib["name"])+'">') - inc_tab() + methods = c.find("methods") + if(methods != None and len(list(methods)) > 0): - for a in list(m): - if (a.tag=="argument"): + write_string(f, "<methods>") + inc_tab() - write_string(f,'<argument index="'+a.attrib["index"]+'" name="'+escape(a.attrib["name"])+'" type="'+a.attrib["type"]+'">'); - write_string(f,'</argument>'); + for m in list(methods): + qualifiers = get_tag(m, "qualifiers") - write_string(f,'<description>'); - if (old_class!=None): - old_signal_descr=find_signal_descr(old_class,m.attrib["name"]) - if (old_signal_descr): - write_string(f,escape(old_signal_descr.strip())) - write_string(f,'</description>'); - dec_tab() - write_string(f,"</signal>") - dec_tab() - write_string(f,"</signals>") + write_string(f, '<method name="' + escape(m.attrib["name"]) + '" ' + qualifiers + '>') + inc_tab() - constants = c.find("constants") - if(constants!=None and len(list(constants))>0): + for a in list(m): + if (a.tag == "return"): + typ = get_tag(a, "type") + write_string(f, '<return' + typ + '>') + write_string(f, '</return>') + elif (a.tag == "argument"): - write_string(f,"<constants>") - inc_tab() + default = get_tag(a, "default") - for m in list(constants): + write_string(f, '<argument index="' + a.attrib["index"] + '" name="' + escape(a.attrib["name"]) + '" type="' + a.attrib["type"] + '"' + default + '>') + write_string(f, '</argument>') - write_string(f,'<constant name="'+escape(m.attrib["name"])+'" value="'+m.attrib["value"]+'">') - old_constant_descr=find_constant_descr(old_class,m.attrib["name"]) - if (old_constant_descr): - write_string(f,escape(old_constant_descr.strip())) - write_string(f,"</constant>") + write_string(f, '<description>') + if (old_class != None): + old_method_descr = find_method_descr(old_class, m.attrib["name"]) + if (old_method_descr): + write_string(f, escape(escape(old_method_descr.strip()))) - dec_tab() - write_string(f,"</constants>") + write_string(f, '</description>') + dec_tab() + write_string(f, "</method>") + dec_tab() + write_string(f, "</methods>") - dec_tab() - write_string(f,"</class>") + signals = c.find("signals") + if(signals != None and len(list(signals)) > 0): -for c in list(old_doc): - old_classes[c.attrib["name"]]=c + write_string(f, "<signals>") + inc_tab() -for c in list(new_doc): - write_class(c) -write_string(f,'</doc>\n') + for m in list(signals): + + write_string(f, '<signal name="' + escape(m.attrib["name"]) + '">') + inc_tab() + + for a in list(m): + if (a.tag == "argument"): + write_string(f, '<argument index="' + a.attrib["index"] + '" name="' + escape(a.attrib["name"]) + '" type="' + a.attrib["type"] + '">') + write_string(f, '</argument>') + write_string(f, '<description>') + if (old_class != None): + old_signal_descr = find_signal_descr(old_class, m.attrib["name"]) + if (old_signal_descr): + write_string(f, escape(old_signal_descr.strip())) + write_string(f, '</description>') + dec_tab() + write_string(f, "</signal>") + dec_tab() + write_string(f, "</signals>") + + constants = c.find("constants") + if(constants != None and len(list(constants)) > 0): + + write_string(f, "<constants>") + inc_tab() + + for m in list(constants): + + write_string(f, '<constant name="' + escape(m.attrib["name"]) + '" value="' + m.attrib["value"] + '">') + old_constant_descr = find_constant_descr(old_class, m.attrib["name"]) + if (old_constant_descr): + write_string(f, escape(old_constant_descr.strip())) + write_string(f, "</constant>") + + dec_tab() + write_string(f, "</constants>") + + dec_tab() + write_string(f, "</class>") + +for c in list(old_doc): + old_classes[c.attrib["name"]] = c + +for c in list(new_doc): + write_class(c) +write_string(f, '</doc>\n') |