import sys import xml.etree.ElementTree as ET tree = ET.parse(sys.argv[1]) old_doc=tree.getroot() tree = ET.parse(sys.argv[2]) new_doc=tree.getroot() f = file(sys.argv[3],"wb") tab=0 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 escape(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 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 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 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>") 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())) 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())) write_string(f,"</description>") methods = c.find("methods") if(methods!=None and len(list(methods))>0): write_string(f,"<methods>") inc_tab() for m in list(methods): qualifiers=get_tag(m,"qualifiers") write_string(f,'<method name="'+escape(m.attrib["name"])+'" ' +qualifiers+'>') inc_tab() 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") 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,'<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,'</description>'); dec_tab() write_string(f,"</method>") dec_tab() write_string(f,"</methods>") signals = c.find("signals") if(signals!=None and len(list(signals))>0): write_string(f,"<signals>") inc_tab() 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')