2
0

make_html.py 9.7 KB

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