mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-03 23:21:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			211 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/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')
 | 
						|
 | 
						|
 |