123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- #!/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,'<?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')
|