#!/usr/bin/python # -*- coding: utf-8 -*- 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,'') write_string(f,'') 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,'') inc_tab() write_string(f,"") 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,"") write_string(f,"") 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,"") methods = c.find("methods") if(methods!=None and len(list(methods))>0): write_string(f,"") inc_tab() for m in list(methods): qualifiers=get_tag(m,"qualifiers") write_string(f,'') inc_tab() for a in list(m): if (a.tag=="return"): typ=get_tag(a,"type") write_string(f,''); write_string(f,''); elif (a.tag=="argument"): default=get_tag(a,"default") write_string(f,''); write_string(f,''); write_string(f,''); 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,''); dec_tab() write_string(f,"") dec_tab() write_string(f,"") signals = c.find("signals") if(signals!=None and len(list(signals))>0): write_string(f,"") inc_tab() for m in list(signals): write_string(f,'') inc_tab() for a in list(m): if (a.tag=="argument"): write_string(f,''); write_string(f,''); write_string(f,''); 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,''); dec_tab() write_string(f,"") dec_tab() write_string(f,"") constants = c.find("constants") if(constants!=None and len(list(constants))>0): write_string(f,"") inc_tab() for m in list(constants): write_string(f,'') 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,"") dec_tab() write_string(f,"") dec_tab() write_string(f,"") for c in list(old_doc): old_classes[c.attrib["name"]]=c for c in list(new_doc): write_class(c) write_string(f,'\n')