make_html.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import os
  2. from xml.dom.minidom import parse
  3. globalHeaderMain = ""
  4. globalHeaderMain += "<html>\n"
  5. globalHeaderMain += "\t<head>\n"
  6. globalHeaderMain += "\t\t<title>Polycode Documentation</title>\n"
  7. globalHeaderMain += "\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"css/docs.css\" />\n"
  8. globalHeaderMain += "\t\t<script type=\"text/javascript\" src=\"js/docs.js\"></script>"
  9. globalHeaderMain += "\t</head>\n"
  10. globalHeaderMain += "\t<body>\n"
  11. globalHeaderMain += "\t\t<div id=\"global_header\"><a href=\"index.html\"><img border=\"0\" src=\"images/docs_header.png\"/></a></div>\n"
  12. globalHeaderMain += "\t\t<div id=\"content\">\n"
  13. globalHeader = ""
  14. globalFooter = ""
  15. globalHeader += "<html>\n"
  16. globalHeader += "\t<head>\n"
  17. globalHeader += "\t\t<title>Polycode Documentation</title>\n"
  18. globalHeader += "\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/docs.css\" />\n"
  19. globalHeader += "\t\t<script type=\"text/javascript\" src=\"js/docs.js\"></script>"
  20. globalHeader += "\t</head>\n"
  21. globalHeader += "\t<body>\n"
  22. globalHeader += "\t\t<div id=\"global_header\"><a href=\"../index.html\"><img border=\"0\" src=\"../images/docs_header.png\"/></a></div>\n"
  23. globalHeader += "\t\t<div id=\"content\">\n"
  24. globalFooter += "\t\t</div>\n"
  25. globalFooter += "\t</body>\n"
  26. globalFooter += "\t</html>\n"
  27. def createMethods(className, item, static):
  28. html = ""
  29. html += "\t\t\t\t\t<div class=\"class_methods\">\n"
  30. if static == True:
  31. html += "\t\t\t\t\t\t<div class=\"class_methods_title\">Static Functions</div>\n"
  32. else:
  33. html += "\t\t\t\t\t\t<div class=\"class_methods_title\">Functions</div>\n"
  34. html += "\t\t\t\t\t\t<div class=\"class_methods_list\">\n"
  35. for subitem in item.getElementsByTagName('method'):
  36. if static == True and subitem.hasAttribute("static") == False:
  37. continue
  38. if static == False and subitem.hasAttribute("static") == True:
  39. continue
  40. html += "\t\t\t\t\t\t\t<div class=\"class_method\">\n"
  41. paramList = ""
  42. paramIndex = 0
  43. if len(subitem.getElementsByTagName('param')) > 0:
  44. for param in subitem.getElementsByTagName('param'):
  45. if paramIndex != 0:
  46. paramList += ", "
  47. paramList += " <span class=\"inline_type\">%s</span> <span class=\"inline_param\">%s</span> " % (param.attributes["type"].value, param.attributes["name"].value)
  48. paramIndex = paramIndex + 1
  49. if static == True:
  50. 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)
  51. else:
  52. html += "\t\t\t\t\t\t\t\t<div class=\"class_method_name\">%s (%s) </div>\n" % (subitem.attributes["name"].value, paramList)
  53. html += "\t\t\t\t\t\t\t\t<div class=\"class_method_type\">%s</div>\n" % (subitem.attributes["return_type"].value)
  54. desc = subitem.getElementsByTagName('desc')
  55. descText = "No description."
  56. if len(desc) > 0:
  57. descText = desc[0].childNodes[0].data
  58. html += "\t\t\t\t\t\t\t\t<div class=\"class_method_desc\">%s</div>\n" % (descText)
  59. if len(subitem.getElementsByTagName('param')) > 0:
  60. html += "\t\t\t\t\t\t\t\t<div class=\"class_method_params\">\n"
  61. html += "\t\t\t\t\t\t\t\t<div class=\"class_method_params_title\">Parameters</div>\n"
  62. for param in subitem.getElementsByTagName('param'):
  63. html += "\t\t\t\t\t\t\t\t<div class=\"class_method_param\">\n"
  64. html += "\t\t\t\t\t\t\t\t\t<div class=\"class_method_param_name\">%s</div>\n" % (param.attributes["name"].value)
  65. html += "\t\t\t\t\t\t\t\t\t<div class=\"class_method_param_type\">%s</div>\n" % (param.attributes["type"].value)
  66. desc = param.getElementsByTagName('desc')
  67. descText = "No description."
  68. if len(desc) > 0:
  69. if len(desc[0].childNodes) > 0:
  70. descText = desc[0].childNodes[0].data
  71. html += "\t\t\t\t\t\t\t\t\t<div class=\"class_method_param_desc\">%s</div>\n" % (descText)
  72. html += "\t\t\t\t\t\t\t\t</div>\n"
  73. html += "\t\t\t\t\t\t\t\t</div>\n"
  74. html += "\t\t\t\t\t\t\t</div>\n"
  75. html += "\t\t\t\t\t\t</div>\n"
  76. html += "\t\t\t\t\t</div>\n"
  77. return html
  78. def makePage(item, classList, classListPlain, moduleName):
  79. html = globalHeader
  80. html += classList
  81. html += "\t\t\t\t<div class=\"class_main\">\n"
  82. if item.hasAttribute("extends"):
  83. extendModulePrefix = moduleName
  84. if item.attributes["extends"].value not in classListPlain:
  85. extendModulePrefix = "Polycode"
  86. 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)
  87. else:
  88. html += "\t\t\t\t\t<div class=\"class_name\">%s</div>\n" % (item.attributes["name"].value)
  89. desc = item.getElementsByTagName('desc')
  90. descText = "No description."
  91. if len(desc) > 0:
  92. descText = desc[0].childNodes[0].data
  93. html += "\t\t\t\t\t<div class=\"class_desc\">%s</div>\n" % descText
  94. html += "\t\t\t\t\t<div class=\"class_properties\">\n"
  95. html += "\t\t\t\t\t\t<div class=\"class_properties_title\">Static Properties</div>\n"
  96. html += "\t\t\t\t\t\t<div class=\"class_properties_list\">\n"
  97. for subitem in item.getElementsByTagName('static_member'):
  98. html += "\t\t\t\t\t\t\t<div class=\"class_property\">\n"
  99. 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)
  100. html += "\t\t\t\t\t\t\t\t<div class=\"class_property_type\">%s</div>\n" % (subitem.attributes["type"].value)
  101. desc = subitem.getElementsByTagName('desc')
  102. descText = "No description."
  103. if len(desc) > 0:
  104. descText = desc[0].childNodes[0].data
  105. html += "\t\t\t\t\t\t\t\t<div class=\"class_property_desc\">%s</div>\n" % (descText)
  106. html += "\t\t\t\t\t\t\t</div>\n"
  107. html += "\t\t\t\t\t\t</div>\n"
  108. html += "\t\t\t\t\t</div>\n"
  109. html += "\t\t\t\t\t<div class=\"class_properties\">\n"
  110. html += "\t\t\t\t\t\t<div class=\"class_properties_title\">Properties</div>\n"
  111. html += "\t\t\t\t\t\t<div class=\"class_properties_list\">\n"
  112. for subitem in item.getElementsByTagName('member'):
  113. html += "\t\t\t\t\t\t\t<div class=\"class_property\">\n"
  114. html += "\t\t\t\t\t\t\t\t<div class=\"class_property_name\">%s</div>\n" % (subitem.attributes["name"].value)
  115. html += "\t\t\t\t\t\t\t\t<div class=\"class_property_type\">%s</div>\n" % (subitem.attributes["type"].value)
  116. desc = subitem.getElementsByTagName('desc')
  117. descText = "No description."
  118. if len(desc) > 0:
  119. descText = desc[0].childNodes[0].data
  120. html += "\t\t\t\t\t\t\t\t<div class=\"class_property_desc\">%s</div>\n" % (descText)
  121. html += "\t\t\t\t\t\t\t</div>\n"
  122. html += "\t\t\t\t\t\t</div>\n"
  123. html += "\t\t\t\t\t</div>\n"
  124. html += createMethods(item.attributes["name"].value, item, True)
  125. html += createMethods(item.attributes["name"].value, item, False)
  126. html += "\t\t\t\t</div>\n"
  127. return html
  128. def makeHTML(fileName, moduleName):
  129. print ("Parsing %s\n" % fileName)
  130. sourceXML = open(fileName)
  131. dom = parse(sourceXML)
  132. sourceXML.close()
  133. classList = ""
  134. classList += "\t\t\t<div id=\"class_list\">\n"
  135. classListPlain = []
  136. for item in dom.documentElement.getElementsByTagName('class'):
  137. 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)
  138. classListPlain.append(item.attributes["name"].value)
  139. classList += "\t\t\t</div>\n"
  140. classList += "\n"
  141. directory = "../html/%s" % (moduleName)
  142. if not os.path.exists(directory):
  143. os.makedirs(directory)
  144. html = globalHeader
  145. html += classList
  146. html += globalFooter
  147. f = open("../html/%s/index.html" % (moduleName), 'w')
  148. f.write(html)
  149. f.close()
  150. for item in dom.documentElement.getElementsByTagName('class'):
  151. f = open("../html/%s/%s.html" % (moduleName, item.attributes["name"].value), 'w')
  152. html = makePage(item, classList, classListPlain, moduleName)
  153. f.write(html)
  154. f.close()
  155. dirList = os.listdir("../xml")
  156. indexhtml = globalHeaderMain
  157. indexhtml += "\t<div id=\"module_links\">\n"
  158. for fname in dirList:
  159. if len(fname.split(".")) > 1:
  160. if fname.split(".")[1] == "xml":
  161. moduleName = fname.split(".")[0]
  162. makeHTML("../xml/%s" % (fname), moduleName)
  163. indexhtml += "\t\t\t<div class=\"module_link\"><a href=\"%s/index.html\">%s</a></div>\n" % (moduleName, moduleName)
  164. indexhtml += "\t</div>\n"
  165. f = open("../html/index.html", 'w')
  166. f.write(indexhtml)
  167. f.close()
  168. indexhtml += globalFooter