فهرست منبع

Inheritance and static property/method support in Lua docs

Ivan Safrin 13 سال پیش
والد
کامیت
02c2a9fa44

+ 22 - 4
Bindings/Scripts/create_lua_library/create_lua_library.py

@@ -37,7 +37,7 @@ def template_quote(str):
 	return "\"%s\"" % str;
 
 def cleanDocs(docs):
-	return docs.replace("/*", "").replace("*/", "").replace("*", "").replace("\n", "").replace("\r", "").replace("::", ".")
+	return docs.replace("/*", "").replace("*/", "").replace("*", "").replace("\n", "").replace("\r", "").replace("::", ".").replace("\t", "")
 
 def toLuaType(t):
 	return t.replace("void", "nil").replace("int", "Integer").replace("bool", "Boolean")
@@ -197,7 +197,13 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 					print("Warning: Lua-binding class with less than two methods")
 					continue # FIXME: Remove this, move any non-compileable classes into ignore_classes
 
-				luaDocOut += "\t<class name=\"%s\">\n" % (ckey)
+				extendString = ""
+				if len(c["inherits"]) > 0:
+					if c["inherits"][0]["class"] != "PolyBase":
+						extendString = " extends=\"%s\"" % (c["inherits"][0]["class"])
+				
+				luaDocOut += "\t<class name=\"%s\"%s>\n" % (ckey, extendString)
+
 				if 'doxygen' in c:
 					luaDocOut += "\t\t<desc><![CDATA[%s]]></desc>\n" % (cleanDocs(c['doxygen']))
 
@@ -205,6 +211,7 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 				ignore_methods = ["readByte32", "readByte16", "getCustomEntitiesByType", "Core", "Renderer", "Shader", "Texture", "handleEvent", "secondaryHandler", "getSTLString"]
 				luaClassBindingOut += "\n\n"
 
+				luaDocOut += "\t\t<static_members>\n"
 				classProperties = [] # Def: List of found property structures ("properties" meaning "data members")
 				for pp in c["properties"]["public"]:
 					pp["type"] = pp["type"].replace("Polycode::", "")
@@ -214,11 +221,18 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 					if pp["type"].find("static ") != -1: # If static. FIXME: Static doesn't work?
 						if "defaltValue" in pp: # FIXME: defaltValue is misspelled.
 							luaClassBindingOut += "%s.%s = %s\n" % (ckey, pp["name"], pp["defaltValue"])
+							luaDocOut += "\t\t\t<static_member name=\"%s\" type=\"%s\" value=\"%s\">\n" % (pp["name"],  toLuaType(typeFilter(pp["type"])), pp["defaltValue"])
+							if 'doxygen' in pp:
+								luaDocOut += "\t\t\t\t<desc><![CDATA[%s]]></desc>\n" % (cleanDocs(pp['doxygen']))
+							luaDocOut += "\t\t\t</static_member>\n"
 					else: # FIXME: Nonstatic method ? variable ?? found.
 						#there are some bugs in the class parser that cause it to return junk
 						if pp["type"].find("*") == -1 and pp["type"].find("vector") == -1 and pp["name"] != "setScale" and pp["name"] != "setPosition" and pp["name"] != "BUFFER_CACHE_PRECISION" and not pp["name"].isdigit():
 							classProperties.append(pp)
 
+				luaDocOut += "\t\t</static_members>\n"
+
+
 				# Iterate over properties, creating getters
 				pidx = 0 # Def: Count of properties processed so far
 
@@ -378,11 +392,15 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 					if pm["name"] == "~"+ckey or pm["name"] == "CoreServices":
 						continue
 					
+					staticString = ""
+					if pm["rtnType"].find("static ") != -1:
+						staticString = " static=\"true\""
+					
 					if pm["rtnType"].find("std::vector") > -1:
 						vectorReturnClass = pm["rtnType"].replace("std::vector<", "").replace(">","").replace(" ", "")
-						luaDocOut += "\t\t\t<method name=\"%s\" return_array=\"true\" return_type=\"%s\">\n" % (pm["name"],  toLuaType(typeFilter(vectorReturnClass).replace("*", "")))
+						luaDocOut += "\t\t\t<method name=\"%s\" return_array=\"true\" return_type=\"%s\"%s>\n" % (pm["name"],  toLuaType(typeFilter(vectorReturnClass).replace("*", "")), staticString)
 					else:
-						luaDocOut += "\t\t\t<method name=\"%s\" return_type=\"%s\">\n" % (pm["name"],  toLuaType(typeFilter(pm["rtnType"].replace("*", ""))))
+						luaDocOut += "\t\t\t<method name=\"%s\" return_type=\"%s\"%s>\n" % (pm["name"],  toLuaType(typeFilter(pm["rtnType"].replace("*", ""))), staticString)
 
 					docs = None
 					if 'doxygen' in pm:

+ 20 - 3
Documentation/Lua/html/css/docs.css

@@ -50,6 +50,19 @@ a {
 .class_name {
 	font-size: 32px;
 	margin: 0px 0px 30px 0px;
+	color: #b8b8b8;
+}
+
+.class_extends {
+	font-size: 24px;
+	margin: 0px 0px 30px 0px;
+	color: #4a4a4a;
+}
+
+.class_extends_class a {
+	font-size: 24px;
+	margin: 0px 0px 30px 0px;
+	color: #925381;
 }
 
 .class_desc {
@@ -58,7 +71,7 @@ a {
 	margin: 0px 0px 20px 0px;
 }
 
-.class_properies_list, .class_methods_list {
+.class_properties_list, .class_methods_list {
 	padding: 10px;
 	background-color: #1a1a1a;
 }
@@ -68,9 +81,9 @@ a {
 	margin: 0px 0px 10px 0px;
 }
 
-.class_properies_title, .class_methods_title {
+.class_properties_title, .class_methods_title {
 	margin: 10px 0px 10px 0px;
-	color: #363636;
+	color: #4a4a4a;
 	font-size: 24px;
 }
 
@@ -135,3 +148,7 @@ a {
 	color: #925381;
 	font-size: 12px;
 }
+
+.static_value {
+	color: #4a4a4a;
+}

+ 75 - 32
Documentation/Lua/scripts/make_html.py

@@ -31,39 +31,19 @@ globalFooter += "\t\t</div>\n"
 globalFooter += "\t</body>\n"
 globalFooter += "\t</html>\n"
 
-def makePage(item, classList):
-	html = globalHeader
-	html += classList
-
-	html += "\t\t\t\t<div class=\"class_main\">\n"
-	
-	html += "\t\t\t\t\t<div class=\"class_name\">%s</div>\n" % (item.attributes["name"].value)
-	desc = item.getElementsByTagName('desc')
-	descText = "No description."
-	if len(desc) > 0:
-		descText = desc[0].childNodes[0].data
-	html += "\t\t\t\t\t<div class=\"class_desc\">%s</div>\n" % descText
-
-	html += "\t\t\t\t\t<div class=\"class_properies\">\n"
-	html += "\t\t\t\t\t\t<div class=\"class_properies_title\">Properties</div>\n"
-	html += "\t\t\t\t\t\t<div class=\"class_properies_list\">\n"
-	for subitem in item.getElementsByTagName('member'):
-		html += "\t\t\t\t\t\t\t<div class=\"class_property\">\n"
-		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_name\">%s</div>\n" % (subitem.attributes["name"].value)
-		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_type\">%s</div>\n" % (subitem.attributes["type"].value)
-		desc = subitem.getElementsByTagName('desc')
-		descText = "No description."
-		if len(desc) > 0:
-			descText = desc[0].childNodes[0].data
-		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_desc\">%s</div>\n" % (descText)
-		html += "\t\t\t\t\t\t\t</div>\n"
-	html += "\t\t\t\t\t\t</div>\n"
-	html += "\t\t\t\t\t</div>\n"
-
+def createMethods(className, item, static):
+	html = ""
 	html += "\t\t\t\t\t<div class=\"class_methods\">\n"
-	html += "\t\t\t\t\t\t<div class=\"class_methods_title\">Functions</div>\n"
+	if static == True:
+		html += "\t\t\t\t\t\t<div class=\"class_methods_title\">Static Functions</div>\n"
+	else:
+		html += "\t\t\t\t\t\t<div class=\"class_methods_title\">Functions</div>\n"
 	html += "\t\t\t\t\t\t<div class=\"class_methods_list\">\n"
 	for subitem in item.getElementsByTagName('method'):
+		if static == True and subitem.hasAttribute("static") == False:
+			continue
+		if static == False and subitem.hasAttribute("static") == True:
+			continue
 		html += "\t\t\t\t\t\t\t<div class=\"class_method\">\n"
 		paramList = ""
 		paramIndex = 0
@@ -73,7 +53,10 @@ def makePage(item, classList):
 					paramList += ", "
 				paramList += " <span class=\"inline_type\">%s</span> <span class=\"inline_param\">%s</span> " % (param.attributes["type"].value, param.attributes["name"].value)
 				paramIndex = paramIndex + 1
-		html += "\t\t\t\t\t\t\t\t<div class=\"class_method_name\">%s (%s) </div>\n" % (subitem.attributes["name"].value, paramList)
+		if static == True:
+			html += "\t\t\t\t\t\t\t\t<div class=\"class_method_name\">%s.%s (%s) </div>\n" % (className, subitem.attributes["name"].value, paramList)
+		else:
+			html += "\t\t\t\t\t\t\t\t<div class=\"class_method_name\">%s (%s) </div>\n" % (subitem.attributes["name"].value, paramList)
 
 		html += "\t\t\t\t\t\t\t\t<div class=\"class_method_type\">%s</div>\n" % (subitem.attributes["return_type"].value)
 		desc = subitem.getElementsByTagName('desc')
@@ -102,6 +85,64 @@ def makePage(item, classList):
 
 	html += "\t\t\t\t\t\t</div>\n"
 	html += "\t\t\t\t\t</div>\n"
+	return html
+
+
+def makePage(item, classList, classListPlain, moduleName):
+	html = globalHeader
+	html += classList
+
+	html += "\t\t\t\t<div class=\"class_main\">\n"
+	
+	if item.hasAttribute("extends"):
+		extendModulePrefix = moduleName
+		if item.attributes["extends"].value not in classListPlain:
+			extendModulePrefix = "Polycode"
+		html += "\t\t\t\t\t<div class=\"class_name\">%s <span class=\"class_extends\">extends</span> <span class=\"class_extends_class\"><a href=\"../%s/%s.html\">%s</a></span></div>\n" % (item.attributes["name"].value, extendModulePrefix, item.attributes["extends"].value, item.attributes["extends"].value)
+	else:	
+		html += "\t\t\t\t\t<div class=\"class_name\">%s</div>\n" % (item.attributes["name"].value)
+
+	desc = item.getElementsByTagName('desc')
+	descText = "No description."
+	if len(desc) > 0:
+		descText = desc[0].childNodes[0].data
+	html += "\t\t\t\t\t<div class=\"class_desc\">%s</div>\n" % descText
+
+	html += "\t\t\t\t\t<div class=\"class_properties\">\n"
+	html += "\t\t\t\t\t\t<div class=\"class_properties_title\">Static Properties</div>\n"
+	html += "\t\t\t\t\t\t<div class=\"class_properties_list\">\n"
+	for subitem in item.getElementsByTagName('static_member'):
+		html += "\t\t\t\t\t\t\t<div class=\"class_property\">\n"
+		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_name\">%s.%s <span class=\"static_value\">= %s</span></div>\n" % (item.attributes["name"].value, subitem.attributes["name"].value, subitem.attributes["value"].value)
+		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_type\">%s</div>\n" % (subitem.attributes["type"].value)
+		desc = subitem.getElementsByTagName('desc')
+		descText = "No description."
+		if len(desc) > 0:
+			descText = desc[0].childNodes[0].data
+		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_desc\">%s</div>\n" % (descText)
+		html += "\t\t\t\t\t\t\t</div>\n"
+	html += "\t\t\t\t\t\t</div>\n"
+	html += "\t\t\t\t\t</div>\n"
+
+	html += "\t\t\t\t\t<div class=\"class_properties\">\n"
+	html += "\t\t\t\t\t\t<div class=\"class_properties_title\">Properties</div>\n"
+	html += "\t\t\t\t\t\t<div class=\"class_properties_list\">\n"
+	for subitem in item.getElementsByTagName('member'):
+		html += "\t\t\t\t\t\t\t<div class=\"class_property\">\n"
+		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_name\">%s</div>\n" % (subitem.attributes["name"].value)
+		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_type\">%s</div>\n" % (subitem.attributes["type"].value)
+		desc = subitem.getElementsByTagName('desc')
+		descText = "No description."
+		if len(desc) > 0:
+			descText = desc[0].childNodes[0].data
+		html += "\t\t\t\t\t\t\t\t<div class=\"class_property_desc\">%s</div>\n" % (descText)
+		html += "\t\t\t\t\t\t\t</div>\n"
+	html += "\t\t\t\t\t\t</div>\n"
+	html += "\t\t\t\t\t</div>\n"
+
+	html += createMethods(item.attributes["name"].value, item, True)
+	html += createMethods(item.attributes["name"].value, item, False)
+
 
 	html += "\t\t\t\t</div>\n"
 	return html
@@ -115,8 +156,10 @@ def makeHTML(fileName, moduleName):
 
 	classList = ""
 	classList += "\t\t\t<div id=\"class_list\">\n"
+	classListPlain = []
 	for item in dom.documentElement.getElementsByTagName('class'):
 		classList += "\t\t\t\t<div class=\"class_entry\"><a href=\"%s.html\">%s</a></div>\n" % (item.attributes["name"].value, item.attributes["name"].value)
+		classListPlain.append(item.attributes["name"].value)
 	classList += "\t\t\t</div>\n"
 	classList += "\n"
 
@@ -133,7 +176,7 @@ def makeHTML(fileName, moduleName):
 
 	for item in dom.documentElement.getElementsByTagName('class'):
 		f = open("../html/%s/%s.html" % (moduleName, item.attributes["name"].value), 'w')
-		html = makePage(item, classList)
+		html = makePage(item, classList, classListPlain, moduleName)
 		f.write(html)
 		f.close()