rubyfox-server 2.3.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (993) hide show
  1. data/.gitignore +17 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +3 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +23 -0
  6. data/Rakefile +1 -0
  7. data/bin/smartfox +7 -0
  8. data/lib/rubyfox/server/cli.rb +59 -0
  9. data/lib/rubyfox/server/data/config/.keep +0 -0
  10. data/lib/rubyfox/server/data/config/_backups/.keep +0 -0
  11. data/lib/rubyfox/server/data/config/ascii/boot.txt +5 -0
  12. data/lib/rubyfox/server/data/config/ascii/ready.txt +9 -0
  13. data/lib/rubyfox/server/data/config/core.xml +44 -0
  14. data/lib/rubyfox/server/data/config/crossdomain.xml +10 -0
  15. data/lib/rubyfox/server/data/config/descriptors/.keep +0 -0
  16. data/lib/rubyfox/server/data/config/descriptors/config_room.txt +323 -0
  17. data/lib/rubyfox/server/data/config/descriptors/config_server.txt +621 -0
  18. data/lib/rubyfox/server/data/config/descriptors/config_zone.txt +1021 -0
  19. data/lib/rubyfox/server/data/config/descriptors/runtime_game.txt +63 -0
  20. data/lib/rubyfox/server/data/config/descriptors/runtime_room.txt +377 -0
  21. data/lib/rubyfox/server/data/config/descriptors/runtime_user.txt +589 -0
  22. data/lib/rubyfox/server/data/config/descriptors/runtime_zone.txt +354 -0
  23. data/lib/rubyfox/server/data/config/jetty/.keep +0 -0
  24. data/lib/rubyfox/server/data/config/jetty/jetty.xml +214 -0
  25. data/lib/rubyfox/server/data/config/jetty/realm.properties +21 -0
  26. data/lib/rubyfox/server/data/config/jetty/webdefault.xml +410 -0
  27. data/lib/rubyfox/server/data/config/log4j.properties +75 -0
  28. data/lib/rubyfox/server/data/config/myprop.properties +5 -0
  29. data/lib/rubyfox/server/data/config/server.xml +65 -0
  30. data/lib/rubyfox/server/data/config/templates/sfs2x.unix.txt +12 -0
  31. data/lib/rubyfox/server/data/config/templates/sfs2x.windows.txt +1 -0
  32. data/lib/rubyfox/server/data/config/templates/vmoptions.txt +3 -0
  33. data/lib/rubyfox/server/data/config/wordsFile.txt +13 -0
  34. data/lib/rubyfox/server/data/data/bannedusers/.keep +0 -0
  35. data/lib/rubyfox/server/data/data/bannedusers/users.bin +0 -0
  36. data/lib/rubyfox/server/data/data/buddylists/.keep +0 -0
  37. data/lib/rubyfox/server/data/data/buddylists/BasicExamples/7364666773646667 +0 -0
  38. data/lib/rubyfox/server/data/extensions/.keep +0 -0
  39. data/lib/rubyfox/server/data/extensions/__lib__/.keep +0 -0
  40. data/lib/rubyfox/server/data/lib/Jetty/.keep +0 -0
  41. data/lib/rubyfox/server/data/lib/Jetty/ant-1.6.5.jar +0 -0
  42. data/lib/rubyfox/server/data/lib/Jetty/core-3.1.1.jar +0 -0
  43. data/lib/rubyfox/server/data/lib/Jetty/jetty-6.1.26.jar +0 -0
  44. data/lib/rubyfox/server/data/lib/Jetty/jetty-util-6.1.26.jar +0 -0
  45. data/lib/rubyfox/server/data/lib/Jetty/jsp-2.1-glassfish-2.1.v20091210.jar +0 -0
  46. data/lib/rubyfox/server/data/lib/Jetty/jsp-2.1-jetty-6.1.26.jar +0 -0
  47. data/lib/rubyfox/server/data/lib/Jetty/jsp-api-2.1-glassfish-2.1.v20091210.jar +0 -0
  48. data/lib/rubyfox/server/data/lib/Jetty/servlet-api-2.5-20081211.jar +0 -0
  49. data/lib/rubyfox/server/data/lib/Lib/BaseHTTPServer.py +484 -0
  50. data/lib/rubyfox/server/data/lib/Lib/CGIHTTPServer.py +325 -0
  51. data/lib/rubyfox/server/data/lib/Lib/ConfigParser.py +472 -0
  52. data/lib/rubyfox/server/data/lib/Lib/Cookie.py +742 -0
  53. data/lib/rubyfox/server/data/lib/Lib/HTMLParser.py +383 -0
  54. data/lib/rubyfox/server/data/lib/Lib/MimeWriter.py +181 -0
  55. data/lib/rubyfox/server/data/lib/Lib/Queue.py +151 -0
  56. data/lib/rubyfox/server/data/lib/Lib/SimpleHTTPServer.py +198 -0
  57. data/lib/rubyfox/server/data/lib/Lib/SimpleXMLRPCServer.py +274 -0
  58. data/lib/rubyfox/server/data/lib/Lib/SocketServer.py +576 -0
  59. data/lib/rubyfox/server/data/lib/Lib/StringIO.py +239 -0
  60. data/lib/rubyfox/server/data/lib/Lib/UserDict$py.class +0 -0
  61. data/lib/rubyfox/server/data/lib/Lib/UserDict.py +60 -0
  62. data/lib/rubyfox/server/data/lib/Lib/UserList.py +94 -0
  63. data/lib/rubyfox/server/data/lib/Lib/UserString.py +182 -0
  64. data/lib/rubyfox/server/data/lib/Lib/__future__$py.class +0 -0
  65. data/lib/rubyfox/server/data/lib/Lib/__future__.py +104 -0
  66. data/lib/rubyfox/server/data/lib/Lib/aifc.py +961 -0
  67. data/lib/rubyfox/server/data/lib/Lib/anydbm.py +86 -0
  68. data/lib/rubyfox/server/data/lib/Lib/atexit.py +50 -0
  69. data/lib/rubyfox/server/data/lib/Lib/base64.py +77 -0
  70. data/lib/rubyfox/server/data/lib/Lib/bdb.py +563 -0
  71. data/lib/rubyfox/server/data/lib/Lib/binhex.py +531 -0
  72. data/lib/rubyfox/server/data/lib/Lib/bisect.py +78 -0
  73. data/lib/rubyfox/server/data/lib/Lib/calendar.py +246 -0
  74. data/lib/rubyfox/server/data/lib/Lib/cgi.py +1040 -0
  75. data/lib/rubyfox/server/data/lib/Lib/chunk.py +167 -0
  76. data/lib/rubyfox/server/data/lib/Lib/cmd.py +336 -0
  77. data/lib/rubyfox/server/data/lib/Lib/code$py.class +0 -0
  78. data/lib/rubyfox/server/data/lib/Lib/code.py +311 -0
  79. data/lib/rubyfox/server/data/lib/Lib/codecs$py.class +0 -0
  80. data/lib/rubyfox/server/data/lib/Lib/codecs.py +636 -0
  81. data/lib/rubyfox/server/data/lib/Lib/codeop$py.class +0 -0
  82. data/lib/rubyfox/server/data/lib/Lib/codeop.py +131 -0
  83. data/lib/rubyfox/server/data/lib/Lib/colorsys.py +123 -0
  84. data/lib/rubyfox/server/data/lib/Lib/commands.py +84 -0
  85. data/lib/rubyfox/server/data/lib/Lib/compileall.py +148 -0
  86. data/lib/rubyfox/server/data/lib/Lib/copy.py +330 -0
  87. data/lib/rubyfox/server/data/lib/Lib/copy_reg$py.class +0 -0
  88. data/lib/rubyfox/server/data/lib/Lib/copy_reg.py +78 -0
  89. data/lib/rubyfox/server/data/lib/Lib/datetime$py.class +0 -0
  90. data/lib/rubyfox/server/data/lib/Lib/datetime.py +2007 -0
  91. data/lib/rubyfox/server/data/lib/Lib/dbexts.py +726 -0
  92. data/lib/rubyfox/server/data/lib/Lib/difflib.py +1088 -0
  93. data/lib/rubyfox/server/data/lib/Lib/dircache.py +44 -0
  94. data/lib/rubyfox/server/data/lib/Lib/doctest.py +1173 -0
  95. data/lib/rubyfox/server/data/lib/Lib/dospath.py +341 -0
  96. data/lib/rubyfox/server/data/lib/Lib/dumbdbm.py +170 -0
  97. data/lib/rubyfox/server/data/lib/Lib/email/Charset.py +393 -0
  98. data/lib/rubyfox/server/data/lib/Lib/email/Encoders.py +94 -0
  99. data/lib/rubyfox/server/data/lib/Lib/email/Errors.py +26 -0
  100. data/lib/rubyfox/server/data/lib/Lib/email/Generator.py +378 -0
  101. data/lib/rubyfox/server/data/lib/Lib/email/Header.py +515 -0
  102. data/lib/rubyfox/server/data/lib/Lib/email/Iterators.py +25 -0
  103. data/lib/rubyfox/server/data/lib/Lib/email/MIMEAudio.py +71 -0
  104. data/lib/rubyfox/server/data/lib/Lib/email/MIMEBase.py +24 -0
  105. data/lib/rubyfox/server/data/lib/Lib/email/MIMEImage.py +45 -0
  106. data/lib/rubyfox/server/data/lib/Lib/email/MIMEMessage.py +32 -0
  107. data/lib/rubyfox/server/data/lib/Lib/email/MIMEMultipart.py +37 -0
  108. data/lib/rubyfox/server/data/lib/Lib/email/MIMENonMultipart.py +24 -0
  109. data/lib/rubyfox/server/data/lib/Lib/email/MIMEText.py +45 -0
  110. data/lib/rubyfox/server/data/lib/Lib/email/Message.py +837 -0
  111. data/lib/rubyfox/server/data/lib/Lib/email/Parser.py +292 -0
  112. data/lib/rubyfox/server/data/lib/Lib/email/Utils.py +340 -0
  113. data/lib/rubyfox/server/data/lib/Lib/email/__init__.py +72 -0
  114. data/lib/rubyfox/server/data/lib/Lib/email/_compat21.py +69 -0
  115. data/lib/rubyfox/server/data/lib/Lib/email/_compat22.py +70 -0
  116. data/lib/rubyfox/server/data/lib/Lib/email/_parseaddr.py +480 -0
  117. data/lib/rubyfox/server/data/lib/Lib/email/base64MIME.py +184 -0
  118. data/lib/rubyfox/server/data/lib/Lib/email/quopriMIME.py +323 -0
  119. data/lib/rubyfox/server/data/lib/Lib/email/test/__init__.py +2 -0
  120. data/lib/rubyfox/server/data/lib/Lib/email/test/data/PyBanner048.gif +0 -0
  121. data/lib/rubyfox/server/data/lib/Lib/email/test/data/audiotest.au +0 -0
  122. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_01.txt +19 -0
  123. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_02.txt +135 -0
  124. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_03.txt +16 -0
  125. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_04.txt +37 -0
  126. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_05.txt +28 -0
  127. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_06.txt +33 -0
  128. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_07.txt +83 -0
  129. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_08.txt +24 -0
  130. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_09.txt +24 -0
  131. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_10.txt +32 -0
  132. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_11.txt +7 -0
  133. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_12.txt +36 -0
  134. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_13.txt +94 -0
  135. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_14.txt +23 -0
  136. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_15.txt +52 -0
  137. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_16.txt +123 -0
  138. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_17.txt +12 -0
  139. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_18.txt +6 -0
  140. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_19.txt +43 -0
  141. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_20.txt +22 -0
  142. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_21.txt +20 -0
  143. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_22.txt +46 -0
  144. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_23.txt +8 -0
  145. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_24.txt +10 -0
  146. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_25.txt +117 -0
  147. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_26.txt +45 -0
  148. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_27.txt +15 -0
  149. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_28.txt +25 -0
  150. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_29.txt +22 -0
  151. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_30.txt +23 -0
  152. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_31.txt +15 -0
  153. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_32.txt +14 -0
  154. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_33.txt +29 -0
  155. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_34.txt +19 -0
  156. data/lib/rubyfox/server/data/lib/Lib/email/test/data/msg_35.txt +4 -0
  157. data/lib/rubyfox/server/data/lib/Lib/email/test/test_email.py +2718 -0
  158. data/lib/rubyfox/server/data/lib/Lib/email/test/test_email_codecs.py +68 -0
  159. data/lib/rubyfox/server/data/lib/Lib/email/test/test_email_torture.py +136 -0
  160. data/lib/rubyfox/server/data/lib/Lib/encodings/__init__$py.class +0 -0
  161. data/lib/rubyfox/server/data/lib/Lib/encodings/__init__.py +97 -0
  162. data/lib/rubyfox/server/data/lib/Lib/encodings/aliases$py.class +0 -0
  163. data/lib/rubyfox/server/data/lib/Lib/encodings/aliases.py +115 -0
  164. data/lib/rubyfox/server/data/lib/Lib/encodings/ascii.py +35 -0
  165. data/lib/rubyfox/server/data/lib/Lib/encodings/base64_codec.py +62 -0
  166. data/lib/rubyfox/server/data/lib/Lib/encodings/charmap.py +51 -0
  167. data/lib/rubyfox/server/data/lib/Lib/encodings/cp037.py +280 -0
  168. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1006.py +138 -0
  169. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1026.py +280 -0
  170. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1140.py +45 -0
  171. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1250.py +123 -0
  172. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1251.py +157 -0
  173. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1252.py +76 -0
  174. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1253.py +151 -0
  175. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1254.py +82 -0
  176. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1255.py +143 -0
  177. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1256.py +129 -0
  178. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1257.py +131 -0
  179. data/lib/rubyfox/server/data/lib/Lib/encodings/cp1258.py +90 -0
  180. data/lib/rubyfox/server/data/lib/Lib/encodings/cp424.py +280 -0
  181. data/lib/rubyfox/server/data/lib/Lib/encodings/cp437.py +172 -0
  182. data/lib/rubyfox/server/data/lib/Lib/encodings/cp500.py +280 -0
  183. data/lib/rubyfox/server/data/lib/Lib/encodings/cp737.py +172 -0
  184. data/lib/rubyfox/server/data/lib/Lib/encodings/cp775.py +172 -0
  185. data/lib/rubyfox/server/data/lib/Lib/encodings/cp850.py +172 -0
  186. data/lib/rubyfox/server/data/lib/Lib/encodings/cp852.py +172 -0
  187. data/lib/rubyfox/server/data/lib/Lib/encodings/cp855.py +172 -0
  188. data/lib/rubyfox/server/data/lib/Lib/encodings/cp856.py +172 -0
  189. data/lib/rubyfox/server/data/lib/Lib/encodings/cp857.py +171 -0
  190. data/lib/rubyfox/server/data/lib/Lib/encodings/cp860.py +172 -0
  191. data/lib/rubyfox/server/data/lib/Lib/encodings/cp861.py +172 -0
  192. data/lib/rubyfox/server/data/lib/Lib/encodings/cp862.py +172 -0
  193. data/lib/rubyfox/server/data/lib/Lib/encodings/cp863.py +172 -0
  194. data/lib/rubyfox/server/data/lib/Lib/encodings/cp864.py +170 -0
  195. data/lib/rubyfox/server/data/lib/Lib/encodings/cp865.py +172 -0
  196. data/lib/rubyfox/server/data/lib/Lib/encodings/cp866.py +172 -0
  197. data/lib/rubyfox/server/data/lib/Lib/encodings/cp869.py +172 -0
  198. data/lib/rubyfox/server/data/lib/Lib/encodings/cp874.py +171 -0
  199. data/lib/rubyfox/server/data/lib/Lib/encodings/cp875.py +281 -0
  200. data/lib/rubyfox/server/data/lib/Lib/encodings/hex_codec.py +62 -0
  201. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_1.py +44 -0
  202. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_10.py +90 -0
  203. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_13.py +100 -0
  204. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_14.py +75 -0
  205. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_15.py +52 -0
  206. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_2.py +101 -0
  207. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_3.py +79 -0
  208. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_4.py +94 -0
  209. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_5.py +138 -0
  210. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_6.py +137 -0
  211. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_7.py +124 -0
  212. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_8.py +112 -0
  213. data/lib/rubyfox/server/data/lib/Lib/encodings/iso8859_9.py +50 -0
  214. data/lib/rubyfox/server/data/lib/Lib/encodings/koi8_r.py +172 -0
  215. data/lib/rubyfox/server/data/lib/Lib/encodings/koi8_u.py +54 -0
  216. data/lib/rubyfox/server/data/lib/Lib/encodings/latin_1.py +35 -0
  217. data/lib/rubyfox/server/data/lib/Lib/encodings/mac_cyrillic.py +167 -0
  218. data/lib/rubyfox/server/data/lib/Lib/encodings/mac_greek.py +170 -0
  219. data/lib/rubyfox/server/data/lib/Lib/encodings/mac_iceland.py +166 -0
  220. data/lib/rubyfox/server/data/lib/Lib/encodings/mac_latin2.py +170 -0
  221. data/lib/rubyfox/server/data/lib/Lib/encodings/mac_roman.py +167 -0
  222. data/lib/rubyfox/server/data/lib/Lib/encodings/mac_turkish.py +167 -0
  223. data/lib/rubyfox/server/data/lib/Lib/encodings/mbcs.py +36 -0
  224. data/lib/rubyfox/server/data/lib/Lib/encodings/quopri_codec.py +58 -0
  225. data/lib/rubyfox/server/data/lib/Lib/encodings/raw_unicode_escape.py +30 -0
  226. data/lib/rubyfox/server/data/lib/Lib/encodings/rot_13.py +105 -0
  227. data/lib/rubyfox/server/data/lib/Lib/encodings/undefined.py +34 -0
  228. data/lib/rubyfox/server/data/lib/Lib/encodings/unicode_escape.py +30 -0
  229. data/lib/rubyfox/server/data/lib/Lib/encodings/unicode_internal.py +30 -0
  230. data/lib/rubyfox/server/data/lib/Lib/encodings/utf_16.py +61 -0
  231. data/lib/rubyfox/server/data/lib/Lib/encodings/utf_16_be.py +31 -0
  232. data/lib/rubyfox/server/data/lib/Lib/encodings/utf_16_le.py +31 -0
  233. data/lib/rubyfox/server/data/lib/Lib/encodings/utf_7.py +27 -0
  234. data/lib/rubyfox/server/data/lib/Lib/encodings/utf_8$py.class +0 -0
  235. data/lib/rubyfox/server/data/lib/Lib/encodings/utf_8.py +31 -0
  236. data/lib/rubyfox/server/data/lib/Lib/encodings/uu_codec.py +112 -0
  237. data/lib/rubyfox/server/data/lib/Lib/encodings/zlib_codec.py +63 -0
  238. data/lib/rubyfox/server/data/lib/Lib/fileinput.py +349 -0
  239. data/lib/rubyfox/server/data/lib/Lib/fnmatch.py +107 -0
  240. data/lib/rubyfox/server/data/lib/Lib/formatter.py +454 -0
  241. data/lib/rubyfox/server/data/lib/Lib/fpformat.py +142 -0
  242. data/lib/rubyfox/server/data/lib/Lib/ftplib.py +804 -0
  243. data/lib/rubyfox/server/data/lib/Lib/getopt.py +143 -0
  244. data/lib/rubyfox/server/data/lib/Lib/glob.py +56 -0
  245. data/lib/rubyfox/server/data/lib/Lib/gopherlib.py +205 -0
  246. data/lib/rubyfox/server/data/lib/Lib/gzip.py +390 -0
  247. data/lib/rubyfox/server/data/lib/Lib/hmac.py +99 -0
  248. data/lib/rubyfox/server/data/lib/Lib/htmlentitydefs.py +257 -0
  249. data/lib/rubyfox/server/data/lib/Lib/htmllib.py +475 -0
  250. data/lib/rubyfox/server/data/lib/Lib/httplib.py +1238 -0
  251. data/lib/rubyfox/server/data/lib/Lib/imaplib.py +1208 -0
  252. data/lib/rubyfox/server/data/lib/Lib/imghdr.py +154 -0
  253. data/lib/rubyfox/server/data/lib/Lib/inspect$py.class +0 -0
  254. data/lib/rubyfox/server/data/lib/Lib/inspect.py +787 -0
  255. data/lib/rubyfox/server/data/lib/Lib/isql.py +238 -0
  256. data/lib/rubyfox/server/data/lib/Lib/javaos$py.class +0 -0
  257. data/lib/rubyfox/server/data/lib/Lib/javaos.py +395 -0
  258. data/lib/rubyfox/server/data/lib/Lib/javapath$py.class +0 -0
  259. data/lib/rubyfox/server/data/lib/Lib/javapath.py +349 -0
  260. data/lib/rubyfox/server/data/lib/Lib/javashell.py +194 -0
  261. data/lib/rubyfox/server/data/lib/Lib/jreload.py +119 -0
  262. data/lib/rubyfox/server/data/lib/Lib/jxxload_help/DiscardHelp.java +59 -0
  263. data/lib/rubyfox/server/data/lib/Lib/jxxload_help/JavaLoaderFactory.java +9 -0
  264. data/lib/rubyfox/server/data/lib/Lib/jxxload_help/PackageManager.java +58 -0
  265. data/lib/rubyfox/server/data/lib/Lib/jxxload_help/PathVFS.java +98 -0
  266. data/lib/rubyfox/server/data/lib/Lib/jxxload_help/PathVFSJavaLoader.java +49 -0
  267. data/lib/rubyfox/server/data/lib/Lib/keyword.py +97 -0
  268. data/lib/rubyfox/server/data/lib/Lib/linecache$py.class +0 -0
  269. data/lib/rubyfox/server/data/lib/Lib/linecache.py +101 -0
  270. data/lib/rubyfox/server/data/lib/Lib/macpath.py +242 -0
  271. data/lib/rubyfox/server/data/lib/Lib/macurl2path.py +95 -0
  272. data/lib/rubyfox/server/data/lib/Lib/mailbox.py +313 -0
  273. data/lib/rubyfox/server/data/lib/Lib/mailcap.py +255 -0
  274. data/lib/rubyfox/server/data/lib/Lib/markupbase.py +317 -0
  275. data/lib/rubyfox/server/data/lib/Lib/marshal.py +315 -0
  276. data/lib/rubyfox/server/data/lib/Lib/mhlib.py +1003 -0
  277. data/lib/rubyfox/server/data/lib/Lib/mimetools.py +226 -0
  278. data/lib/rubyfox/server/data/lib/Lib/mimetypes.py +435 -0
  279. data/lib/rubyfox/server/data/lib/Lib/mimify.py +464 -0
  280. data/lib/rubyfox/server/data/lib/Lib/multifile.py +160 -0
  281. data/lib/rubyfox/server/data/lib/Lib/mutex.py +51 -0
  282. data/lib/rubyfox/server/data/lib/Lib/netrc.py +108 -0
  283. data/lib/rubyfox/server/data/lib/Lib/nntplib.py +575 -0
  284. data/lib/rubyfox/server/data/lib/Lib/ntpath.py +482 -0
  285. data/lib/rubyfox/server/data/lib/Lib/nturl2path.py +66 -0
  286. data/lib/rubyfox/server/data/lib/Lib/pawt/__init__.py +35 -0
  287. data/lib/rubyfox/server/data/lib/Lib/pawt/colors.py +144 -0
  288. data/lib/rubyfox/server/data/lib/Lib/pawt/swing.py +42 -0
  289. data/lib/rubyfox/server/data/lib/Lib/pdb.py +979 -0
  290. data/lib/rubyfox/server/data/lib/Lib/pickle.py +990 -0
  291. data/lib/rubyfox/server/data/lib/Lib/pipes.py +297 -0
  292. data/lib/rubyfox/server/data/lib/Lib/popen2.py +304 -0
  293. data/lib/rubyfox/server/data/lib/Lib/poplib.py +335 -0
  294. data/lib/rubyfox/server/data/lib/Lib/posixfile.py +240 -0
  295. data/lib/rubyfox/server/data/lib/Lib/posixpath.py +414 -0
  296. data/lib/rubyfox/server/data/lib/Lib/pprint.py +310 -0
  297. data/lib/rubyfox/server/data/lib/Lib/profile.py +556 -0
  298. data/lib/rubyfox/server/data/lib/Lib/pstats.py +641 -0
  299. data/lib/rubyfox/server/data/lib/Lib/pyclbr.py +337 -0
  300. data/lib/rubyfox/server/data/lib/Lib/quopri.py +237 -0
  301. data/lib/rubyfox/server/data/lib/Lib/random$py.class +0 -0
  302. data/lib/rubyfox/server/data/lib/Lib/random.py +779 -0
  303. data/lib/rubyfox/server/data/lib/Lib/re$py.class +0 -0
  304. data/lib/rubyfox/server/data/lib/Lib/re.py +11 -0
  305. data/lib/rubyfox/server/data/lib/Lib/reconvert.py +192 -0
  306. data/lib/rubyfox/server/data/lib/Lib/reindex$py.class +0 -0
  307. data/lib/rubyfox/server/data/lib/Lib/repr.py +95 -0
  308. data/lib/rubyfox/server/data/lib/Lib/rfc822.py +1010 -0
  309. data/lib/rubyfox/server/data/lib/Lib/sched.py +106 -0
  310. data/lib/rubyfox/server/data/lib/Lib/select.py +211 -0
  311. data/lib/rubyfox/server/data/lib/Lib/servlet-api-2.5-20081211.jar +0 -0
  312. data/lib/rubyfox/server/data/lib/Lib/setsfactory.py +10 -0
  313. data/lib/rubyfox/server/data/lib/Lib/sfs2x-lms.jar +0 -0
  314. data/lib/rubyfox/server/data/lib/Lib/sgmllib.py +516 -0
  315. data/lib/rubyfox/server/data/lib/Lib/shelve.py +158 -0
  316. data/lib/rubyfox/server/data/lib/Lib/shlex.py +209 -0
  317. data/lib/rubyfox/server/data/lib/Lib/shutil$py.class +0 -0
  318. data/lib/rubyfox/server/data/lib/Lib/shutil.py +138 -0
  319. data/lib/rubyfox/server/data/lib/Lib/site.py +263 -0
  320. data/lib/rubyfox/server/data/lib/Lib/smtplib.py +729 -0
  321. data/lib/rubyfox/server/data/lib/Lib/sndhdr.py +228 -0
  322. data/lib/rubyfox/server/data/lib/Lib/socket.py +902 -0
  323. data/lib/rubyfox/server/data/lib/Lib/sre$py.class +0 -0
  324. data/lib/rubyfox/server/data/lib/Lib/sre.py +311 -0
  325. data/lib/rubyfox/server/data/lib/Lib/sre_compile$py.class +0 -0
  326. data/lib/rubyfox/server/data/lib/Lib/sre_compile.py +455 -0
  327. data/lib/rubyfox/server/data/lib/Lib/sre_constants$py.class +0 -0
  328. data/lib/rubyfox/server/data/lib/Lib/sre_constants.py +259 -0
  329. data/lib/rubyfox/server/data/lib/Lib/sre_parse$py.class +0 -0
  330. data/lib/rubyfox/server/data/lib/Lib/sre_parse.py +738 -0
  331. data/lib/rubyfox/server/data/lib/Lib/stat$py.class +0 -0
  332. data/lib/rubyfox/server/data/lib/Lib/stat.py +86 -0
  333. data/lib/rubyfox/server/data/lib/Lib/string$py.class +0 -0
  334. data/lib/rubyfox/server/data/lib/Lib/string.py +437 -0
  335. data/lib/rubyfox/server/data/lib/Lib/symbol.py +95 -0
  336. data/lib/rubyfox/server/data/lib/Lib/telnetlib.py +662 -0
  337. data/lib/rubyfox/server/data/lib/Lib/tempfile.py +255 -0
  338. data/lib/rubyfox/server/data/lib/Lib/test/Graph.py +62 -0
  339. data/lib/rubyfox/server/data/lib/Lib/test/README +372 -0
  340. data/lib/rubyfox/server/data/lib/Lib/test/__init__.py +1 -0
  341. data/lib/rubyfox/server/data/lib/Lib/test/audiotest.au +0 -0
  342. data/lib/rubyfox/server/data/lib/Lib/test/autotest.py +6 -0
  343. data/lib/rubyfox/server/data/lib/Lib/test/badsyntax_future3.py +10 -0
  344. data/lib/rubyfox/server/data/lib/Lib/test/badsyntax_future4.py +10 -0
  345. data/lib/rubyfox/server/data/lib/Lib/test/badsyntax_future5.py +12 -0
  346. data/lib/rubyfox/server/data/lib/Lib/test/badsyntax_future6.py +10 -0
  347. data/lib/rubyfox/server/data/lib/Lib/test/badsyntax_future7.py +11 -0
  348. data/lib/rubyfox/server/data/lib/Lib/test/badsyntax_nocaret.py +2 -0
  349. data/lib/rubyfox/server/data/lib/Lib/test/blob.jar +0 -0
  350. data/lib/rubyfox/server/data/lib/Lib/test/bugs/bugs100.py +139 -0
  351. data/lib/rubyfox/server/data/lib/Lib/test/bugs/bugs101.py +57 -0
  352. data/lib/rubyfox/server/data/lib/Lib/test/bugs/jdkbugs.py +10 -0
  353. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr101.py +59 -0
  354. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr104.py +9 -0
  355. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr112.py +14 -0
  356. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr119.py +16 -0
  357. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr127.py +10 -0
  358. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr133/__init__.py +1 -0
  359. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr133/test.py +2 -0
  360. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr133.py +12 -0
  361. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr134.py +9 -0
  362. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr139.py +7 -0
  363. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr142.py +1 -0
  364. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr144.py +2 -0
  365. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr148.py +2 -0
  366. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr149.py +7 -0
  367. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr155.py +13 -0
  368. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr170.py +7 -0
  369. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr171.py +9 -0
  370. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr174.py +9 -0
  371. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr178.py +10 -0
  372. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr183.py +5 -0
  373. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr186.py +10 -0
  374. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr191.py +5 -0
  375. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr192.py +81 -0
  376. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr195.py +11 -0
  377. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr208.py +26 -0
  378. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr233.py +8 -0
  379. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr234.py +16 -0
  380. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr235.py +14 -0
  381. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr239.py +6 -0
  382. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr241.py +16 -0
  383. data/lib/rubyfox/server/data/lib/Lib/test/bugs/pr242.py +12 -0
  384. data/lib/rubyfox/server/data/lib/Lib/test/data/PyBanner048.gif +0 -0
  385. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_01.txt +19 -0
  386. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_02.txt +135 -0
  387. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_03.txt +16 -0
  388. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_04.txt +37 -0
  389. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_05.txt +28 -0
  390. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_06.txt +33 -0
  391. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_07.txt +83 -0
  392. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_08.txt +24 -0
  393. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_09.txt +24 -0
  394. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_10.txt +32 -0
  395. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_11.txt +7 -0
  396. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_12.txt +36 -0
  397. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_13.txt +94 -0
  398. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_14.txt +23 -0
  399. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_15.txt +52 -0
  400. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_16.txt +123 -0
  401. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_17.txt +12 -0
  402. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_18.txt +6 -0
  403. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_19.txt +43 -0
  404. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_20.txt +22 -0
  405. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_21.txt +22 -0
  406. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_22.txt +46 -0
  407. data/lib/rubyfox/server/data/lib/Lib/test/data/msg_23.txt +8 -0
  408. data/lib/rubyfox/server/data/lib/Lib/test/double_const.py +30 -0
  409. data/lib/rubyfox/server/data/lib/Lib/test/greyrgb.uue +1547 -0
  410. data/lib/rubyfox/server/data/lib/Lib/test/javatests/AnonInner.java +20 -0
  411. data/lib/rubyfox/server/data/lib/Lib/test/javatests/Foo.java +3 -0
  412. data/lib/rubyfox/server/data/lib/Lib/test/javatests/JOverload.java +132 -0
  413. data/lib/rubyfox/server/data/lib/Lib/test/javatests/ListTest.java +638 -0
  414. data/lib/rubyfox/server/data/lib/Lib/test/javatests/SubFoo.java +3 -0
  415. data/lib/rubyfox/server/data/lib/Lib/test/javatests/TestSupport.java +49 -0
  416. data/lib/rubyfox/server/data/lib/Lib/test/javatests/__init__.py +0 -0
  417. data/lib/rubyfox/server/data/lib/Lib/test/jser2_classes.py +47 -0
  418. data/lib/rubyfox/server/data/lib/Lib/test/output/test_MimeWriter +110 -0
  419. data/lib/rubyfox/server/data/lib/Lib/test/output/test_array +4 -0
  420. data/lib/rubyfox/server/data/lib/Lib/test/output/test_asynchat +3 -0
  421. data/lib/rubyfox/server/data/lib/Lib/test/output/test_augassign +51 -0
  422. data/lib/rubyfox/server/data/lib/Lib/test/output/test_binascii +29 -0
  423. data/lib/rubyfox/server/data/lib/Lib/test/output/test_builtin +53 -0
  424. data/lib/rubyfox/server/data/lib/Lib/test/output/test_cfgparser +9 -0
  425. data/lib/rubyfox/server/data/lib/Lib/test/output/test_cgi +29 -0
  426. data/lib/rubyfox/server/data/lib/Lib/test/output/test_charmapcodec +16 -0
  427. data/lib/rubyfox/server/data/lib/Lib/test/output/test_class +101 -0
  428. data/lib/rubyfox/server/data/lib/Lib/test/output/test_coercion +1054 -0
  429. data/lib/rubyfox/server/data/lib/Lib/test/output/test_compare +101 -0
  430. data/lib/rubyfox/server/data/lib/Lib/test/output/test_compile +7 -0
  431. data/lib/rubyfox/server/data/lib/Lib/test/output/test_cookie +32 -0
  432. data/lib/rubyfox/server/data/lib/Lib/test/output/test_exceptions +52 -0
  433. data/lib/rubyfox/server/data/lib/Lib/test/output/test_extcall +112 -0
  434. data/lib/rubyfox/server/data/lib/Lib/test/output/test_frozen +4 -0
  435. data/lib/rubyfox/server/data/lib/Lib/test/output/test_future +9 -0
  436. data/lib/rubyfox/server/data/lib/Lib/test/output/test_gettext +46 -0
  437. data/lib/rubyfox/server/data/lib/Lib/test/output/test_global +5 -0
  438. data/lib/rubyfox/server/data/lib/Lib/test/output/test_grammar +66 -0
  439. data/lib/rubyfox/server/data/lib/Lib/test/output/test_httplib +10 -0
  440. data/lib/rubyfox/server/data/lib/Lib/test/output/test_janoninner +5 -0
  441. data/lib/rubyfox/server/data/lib/Lib/test/output/test_javalist +6 -0
  442. data/lib/rubyfox/server/data/lib/Lib/test/output/test_jbasic +13 -0
  443. data/lib/rubyfox/server/data/lib/Lib/test/output/test_jser +12 -0
  444. data/lib/rubyfox/server/data/lib/Lib/test/output/test_jsubclass +5 -0
  445. data/lib/rubyfox/server/data/lib/Lib/test/output/test_linuxaudiodev +7 -0
  446. data/lib/rubyfox/server/data/lib/Lib/test/output/test_longexp +2 -0
  447. data/lib/rubyfox/server/data/lib/Lib/test/output/test_math +26 -0
  448. data/lib/rubyfox/server/data/lib/Lib/test/output/test_md5 +9 -0
  449. data/lib/rubyfox/server/data/lib/Lib/test/output/test_methods +6 -0
  450. data/lib/rubyfox/server/data/lib/Lib/test/output/test_mimetools +5 -0
  451. data/lib/rubyfox/server/data/lib/Lib/test/output/test_mmap +34 -0
  452. data/lib/rubyfox/server/data/lib/Lib/test/output/test_new +7 -0
  453. data/lib/rubyfox/server/data/lib/Lib/test/output/test_nis +2 -0
  454. data/lib/rubyfox/server/data/lib/Lib/test/output/test_opcodes +4 -0
  455. data/lib/rubyfox/server/data/lib/Lib/test/output/test_openpty +2 -0
  456. data/lib/rubyfox/server/data/lib/Lib/test/output/test_operations +28 -0
  457. data/lib/rubyfox/server/data/lib/Lib/test/output/test_pkg +45 -0
  458. data/lib/rubyfox/server/data/lib/Lib/test/output/test_poll +17 -0
  459. data/lib/rubyfox/server/data/lib/Lib/test/output/test_popen2 +9 -0
  460. data/lib/rubyfox/server/data/lib/Lib/test/output/test_posixpath +2 -0
  461. data/lib/rubyfox/server/data/lib/Lib/test/output/test_pow +17 -0
  462. data/lib/rubyfox/server/data/lib/Lib/test/output/test_profile +17 -0
  463. data/lib/rubyfox/server/data/lib/Lib/test/output/test_pty +3 -0
  464. data/lib/rubyfox/server/data/lib/Lib/test/output/test_pwd +7 -0
  465. data/lib/rubyfox/server/data/lib/Lib/test/output/test_pyexpat +110 -0
  466. data/lib/rubyfox/server/data/lib/Lib/test/output/test_re +15 -0
  467. data/lib/rubyfox/server/data/lib/Lib/test/output/test_regex +29 -0
  468. data/lib/rubyfox/server/data/lib/Lib/test/output/test_rgbimg +2 -0
  469. data/lib/rubyfox/server/data/lib/Lib/test/output/test_richcmp +187 -0
  470. data/lib/rubyfox/server/data/lib/Lib/test/output/test_rotor +5 -0
  471. data/lib/rubyfox/server/data/lib/Lib/test/output/test_scope +24 -0
  472. data/lib/rubyfox/server/data/lib/Lib/test/output/test_signal +2 -0
  473. data/lib/rubyfox/server/data/lib/Lib/test/output/test_string +18 -0
  474. data/lib/rubyfox/server/data/lib/Lib/test/output/test_thread +4 -0
  475. data/lib/rubyfox/server/data/lib/Lib/test/output/test_threadedtempfile +5 -0
  476. data/lib/rubyfox/server/data/lib/Lib/test/output/test_time +9 -0
  477. data/lib/rubyfox/server/data/lib/Lib/test/output/test_tokenize +648 -0
  478. data/lib/rubyfox/server/data/lib/Lib/test/output/test_types +15 -0
  479. data/lib/rubyfox/server/data/lib/Lib/test/output/test_ucn +7 -0
  480. data/lib/rubyfox/server/data/lib/Lib/test/output/test_unicode +21 -0
  481. data/lib/rubyfox/server/data/lib/Lib/test/output/test_unicode_file +2 -0
  482. data/lib/rubyfox/server/data/lib/Lib/test/output/test_unicodedata +5 -0
  483. data/lib/rubyfox/server/data/lib/Lib/test/output/test_unpack +15 -0
  484. data/lib/rubyfox/server/data/lib/Lib/test/output/test_urlparse +47 -0
  485. data/lib/rubyfox/server/data/lib/Lib/test/output/test_winreg +3 -0
  486. data/lib/rubyfox/server/data/lib/Lib/test/output/test_winsound +2 -0
  487. data/lib/rubyfox/server/data/lib/Lib/test/output/test_xreadline +4 -0
  488. data/lib/rubyfox/server/data/lib/Lib/test/pickletester.py +285 -0
  489. data/lib/rubyfox/server/data/lib/Lib/test/pydocfodder.py +210 -0
  490. data/lib/rubyfox/server/data/lib/Lib/test/pystone.py +252 -0
  491. data/lib/rubyfox/server/data/lib/Lib/test/re_tests.py +590 -0
  492. data/lib/rubyfox/server/data/lib/Lib/test/regex_tests.py +287 -0
  493. data/lib/rubyfox/server/data/lib/Lib/test/regrtest.py +1096 -0
  494. data/lib/rubyfox/server/data/lib/Lib/test/reperf.py +23 -0
  495. data/lib/rubyfox/server/data/lib/Lib/test/sortperf.py +141 -0
  496. data/lib/rubyfox/server/data/lib/Lib/test/string_tests.py +265 -0
  497. data/lib/rubyfox/server/data/lib/Lib/test/test.xml +115 -0
  498. data/lib/rubyfox/server/data/lib/Lib/test/test.xml.out +115 -0
  499. data/lib/rubyfox/server/data/lib/Lib/test/test_MimeWriter.py +170 -0
  500. data/lib/rubyfox/server/data/lib/Lib/test/test_SimpleXMLRPCServer.py +88 -0
  501. data/lib/rubyfox/server/data/lib/Lib/test/test_StringIO.py +113 -0
  502. data/lib/rubyfox/server/data/lib/Lib/test/test___all__.py +158 -0
  503. data/lib/rubyfox/server/data/lib/Lib/test/test___future__.py +59 -0
  504. data/lib/rubyfox/server/data/lib/Lib/test/test_al.py +23 -0
  505. data/lib/rubyfox/server/data/lib/Lib/test/test_array.py +438 -0
  506. data/lib/rubyfox/server/data/lib/Lib/test/test_asynchat.py +58 -0
  507. data/lib/rubyfox/server/data/lib/Lib/test/test_atexit.py +66 -0
  508. data/lib/rubyfox/server/data/lib/Lib/test/test_audioop.py +264 -0
  509. data/lib/rubyfox/server/data/lib/Lib/test/test_augassign.py +261 -0
  510. data/lib/rubyfox/server/data/lib/Lib/test/test_b1.py +632 -0
  511. data/lib/rubyfox/server/data/lib/Lib/test/test_b2.py +365 -0
  512. data/lib/rubyfox/server/data/lib/Lib/test/test_base64.py +53 -0
  513. data/lib/rubyfox/server/data/lib/Lib/test/test_bastion.py +3 -0
  514. data/lib/rubyfox/server/data/lib/Lib/test/test_binascii.py +119 -0
  515. data/lib/rubyfox/server/data/lib/Lib/test/test_binhex.py +50 -0
  516. data/lib/rubyfox/server/data/lib/Lib/test/test_binop.py +328 -0
  517. data/lib/rubyfox/server/data/lib/Lib/test/test_bisect.py +127 -0
  518. data/lib/rubyfox/server/data/lib/Lib/test/test_bsddb.py +76 -0
  519. data/lib/rubyfox/server/data/lib/Lib/test/test_bufio.py +60 -0
  520. data/lib/rubyfox/server/data/lib/Lib/test/test_bugfixes.py +31 -0
  521. data/lib/rubyfox/server/data/lib/Lib/test/test_builtin.py +13 -0
  522. data/lib/rubyfox/server/data/lib/Lib/test/test_calendar.py +61 -0
  523. data/lib/rubyfox/server/data/lib/Lib/test/test_call.py +131 -0
  524. data/lib/rubyfox/server/data/lib/Lib/test/test_capi.py +16 -0
  525. data/lib/rubyfox/server/data/lib/Lib/test/test_cd.py +26 -0
  526. data/lib/rubyfox/server/data/lib/Lib/test/test_cfgparser.py +284 -0
  527. data/lib/rubyfox/server/data/lib/Lib/test/test_cgi.py +188 -0
  528. data/lib/rubyfox/server/data/lib/Lib/test/test_charmapcodec.py +43 -0
  529. data/lib/rubyfox/server/data/lib/Lib/test/test_cl.py +78 -0
  530. data/lib/rubyfox/server/data/lib/Lib/test/test_class.py +317 -0
  531. data/lib/rubyfox/server/data/lib/Lib/test/test_cmath.py +35 -0
  532. data/lib/rubyfox/server/data/lib/Lib/test/test_codecs.py +31 -0
  533. data/lib/rubyfox/server/data/lib/Lib/test/test_codeop.py +190 -0
  534. data/lib/rubyfox/server/data/lib/Lib/test/test_coercion.py +118 -0
  535. data/lib/rubyfox/server/data/lib/Lib/test/test_commands.py +52 -0
  536. data/lib/rubyfox/server/data/lib/Lib/test/test_compare.py +56 -0
  537. data/lib/rubyfox/server/data/lib/Lib/test/test_compile.py +129 -0
  538. data/lib/rubyfox/server/data/lib/Lib/test/test_complex.py +68 -0
  539. data/lib/rubyfox/server/data/lib/Lib/test/test_contains.py +133 -0
  540. data/lib/rubyfox/server/data/lib/Lib/test/test_cookie.py +47 -0
  541. data/lib/rubyfox/server/data/lib/Lib/test/test_copy_reg.py +30 -0
  542. data/lib/rubyfox/server/data/lib/Lib/test/test_cpickle.py +81 -0
  543. data/lib/rubyfox/server/data/lib/Lib/test/test_crypt.py +11 -0
  544. data/lib/rubyfox/server/data/lib/Lib/test/test_curses.py +210 -0
  545. data/lib/rubyfox/server/data/lib/Lib/test/test_datetime.py +2958 -0
  546. data/lib/rubyfox/server/data/lib/Lib/test/test_dbm.py +43 -0
  547. data/lib/rubyfox/server/data/lib/Lib/test/test_descr.py +4094 -0
  548. data/lib/rubyfox/server/data/lib/Lib/test/test_descrtut.py +501 -0
  549. data/lib/rubyfox/server/data/lib/Lib/test/test_difflib.py +2 -0
  550. data/lib/rubyfox/server/data/lib/Lib/test/test_dircache.py +74 -0
  551. data/lib/rubyfox/server/data/lib/Lib/test/test_dl.py +33 -0
  552. data/lib/rubyfox/server/data/lib/Lib/test/test_doctest.py +2 -0
  553. data/lib/rubyfox/server/data/lib/Lib/test/test_doctest2.py +108 -0
  554. data/lib/rubyfox/server/data/lib/Lib/test/test_dospath.py +61 -0
  555. data/lib/rubyfox/server/data/lib/Lib/test/test_dumbdbm.py +79 -0
  556. data/lib/rubyfox/server/data/lib/Lib/test/test_email.py +13 -0
  557. data/lib/rubyfox/server/data/lib/Lib/test/test_email_codecs.py +11 -0
  558. data/lib/rubyfox/server/data/lib/Lib/test/test_enumerate.py +150 -0
  559. data/lib/rubyfox/server/data/lib/Lib/test/test_errno.py +49 -0
  560. data/lib/rubyfox/server/data/lib/Lib/test/test_exceptions.py +206 -0
  561. data/lib/rubyfox/server/data/lib/Lib/test/test_extcall.py +268 -0
  562. data/lib/rubyfox/server/data/lib/Lib/test/test_fcntl.py +53 -0
  563. data/lib/rubyfox/server/data/lib/Lib/test/test_file.py +63 -0
  564. data/lib/rubyfox/server/data/lib/Lib/test/test_fileinput.py +159 -0
  565. data/lib/rubyfox/server/data/lib/Lib/test/test_fnmatch.py +46 -0
  566. data/lib/rubyfox/server/data/lib/Lib/test/test_fork1.py +75 -0
  567. data/lib/rubyfox/server/data/lib/Lib/test/test_format.py +218 -0
  568. data/lib/rubyfox/server/data/lib/Lib/test/test_fpformat.py +75 -0
  569. data/lib/rubyfox/server/data/lib/Lib/test/test_frozen.py +26 -0
  570. data/lib/rubyfox/server/data/lib/Lib/test/test_funcattrs.py +384 -0
  571. data/lib/rubyfox/server/data/lib/Lib/test/test_future.py +47 -0
  572. data/lib/rubyfox/server/data/lib/Lib/test/test_future1.py +11 -0
  573. data/lib/rubyfox/server/data/lib/Lib/test/test_future2.py +10 -0
  574. data/lib/rubyfox/server/data/lib/Lib/test/test_future3.py +11 -0
  575. data/lib/rubyfox/server/data/lib/Lib/test/test_gc.py +346 -0
  576. data/lib/rubyfox/server/data/lib/Lib/test/test_gdbm.py +46 -0
  577. data/lib/rubyfox/server/data/lib/Lib/test/test_generators.py +1385 -0
  578. data/lib/rubyfox/server/data/lib/Lib/test/test_getargs.py +26 -0
  579. data/lib/rubyfox/server/data/lib/Lib/test/test_getopt.py +110 -0
  580. data/lib/rubyfox/server/data/lib/Lib/test/test_gettext.py +200 -0
  581. data/lib/rubyfox/server/data/lib/Lib/test/test_gl.py +150 -0
  582. data/lib/rubyfox/server/data/lib/Lib/test/test_glob.py +115 -0
  583. data/lib/rubyfox/server/data/lib/Lib/test/test_global.py +51 -0
  584. data/lib/rubyfox/server/data/lib/Lib/test/test_grammar.py +732 -0
  585. data/lib/rubyfox/server/data/lib/Lib/test/test_grp.py +27 -0
  586. data/lib/rubyfox/server/data/lib/Lib/test/test_gzip.py +82 -0
  587. data/lib/rubyfox/server/data/lib/Lib/test/test_hash.py +36 -0
  588. data/lib/rubyfox/server/data/lib/Lib/test/test_hmac.py +108 -0
  589. data/lib/rubyfox/server/data/lib/Lib/test/test_hotshot.py +117 -0
  590. data/lib/rubyfox/server/data/lib/Lib/test/test_htmllib.py +42 -0
  591. data/lib/rubyfox/server/data/lib/Lib/test/test_htmlparser.py +294 -0
  592. data/lib/rubyfox/server/data/lib/Lib/test/test_httplib.py +58 -0
  593. data/lib/rubyfox/server/data/lib/Lib/test/test_imageop.py +171 -0
  594. data/lib/rubyfox/server/data/lib/Lib/test/test_imgfile.py +116 -0
  595. data/lib/rubyfox/server/data/lib/Lib/test/test_import.py +71 -0
  596. data/lib/rubyfox/server/data/lib/Lib/test/test_importhooks.py +215 -0
  597. data/lib/rubyfox/server/data/lib/Lib/test/test_inspect.py +365 -0
  598. data/lib/rubyfox/server/data/lib/Lib/test/test_iter.py +784 -0
  599. data/lib/rubyfox/server/data/lib/Lib/test/test_janoninner.py +15 -0
  600. data/lib/rubyfox/server/data/lib/Lib/test/test_javalist.py +53 -0
  601. data/lib/rubyfox/server/data/lib/Lib/test/test_javashell.py +182 -0
  602. data/lib/rubyfox/server/data/lib/Lib/test/test_jbasic.py +119 -0
  603. data/lib/rubyfox/server/data/lib/Lib/test/test_joverload.py +138 -0
  604. data/lib/rubyfox/server/data/lib/Lib/test/test_jreload.py +33 -0
  605. data/lib/rubyfox/server/data/lib/Lib/test/test_jser.py +57 -0
  606. data/lib/rubyfox/server/data/lib/Lib/test/test_jser2.py +93 -0
  607. data/lib/rubyfox/server/data/lib/Lib/test/test_jsubclass.py +49 -0
  608. data/lib/rubyfox/server/data/lib/Lib/test/test_jy_compile.py +168 -0
  609. data/lib/rubyfox/server/data/lib/Lib/test/test_jy_generators.py +165 -0
  610. data/lib/rubyfox/server/data/lib/Lib/test/test_jy_internals.py +130 -0
  611. data/lib/rubyfox/server/data/lib/Lib/test/test_largefile.py +169 -0
  612. data/lib/rubyfox/server/data/lib/Lib/test/test_linuxaudiodev.py +89 -0
  613. data/lib/rubyfox/server/data/lib/Lib/test/test_locale.py +44 -0
  614. data/lib/rubyfox/server/data/lib/Lib/test/test_long.py +445 -0
  615. data/lib/rubyfox/server/data/lib/Lib/test/test_long_future.py +55 -0
  616. data/lib/rubyfox/server/data/lib/Lib/test/test_long_int_args.py +61 -0
  617. data/lib/rubyfox/server/data/lib/Lib/test/test_longexp.py +16 -0
  618. data/lib/rubyfox/server/data/lib/Lib/test/test_mailbox.py +113 -0
  619. data/lib/rubyfox/server/data/lib/Lib/test/test_marshal.py +44 -0
  620. data/lib/rubyfox/server/data/lib/Lib/test/test_math.py +153 -0
  621. data/lib/rubyfox/server/data/lib/Lib/test/test_md5.py +30 -0
  622. data/lib/rubyfox/server/data/lib/Lib/test/test_methods.py +62 -0
  623. data/lib/rubyfox/server/data/lib/Lib/test/test_mhlib.py +353 -0
  624. data/lib/rubyfox/server/data/lib/Lib/test/test_mimetools.py +18 -0
  625. data/lib/rubyfox/server/data/lib/Lib/test/test_mimetypes.py +59 -0
  626. data/lib/rubyfox/server/data/lib/Lib/test/test_minidom.py +648 -0
  627. data/lib/rubyfox/server/data/lib/Lib/test/test_mmap.py +317 -0
  628. data/lib/rubyfox/server/data/lib/Lib/test/test_module.py +77 -0
  629. data/lib/rubyfox/server/data/lib/Lib/test/test_multifile.py +66 -0
  630. data/lib/rubyfox/server/data/lib/Lib/test/test_mutants.py +285 -0
  631. data/lib/rubyfox/server/data/lib/Lib/test/test_netrc.py +42 -0
  632. data/lib/rubyfox/server/data/lib/Lib/test/test_new.py +108 -0
  633. data/lib/rubyfox/server/data/lib/Lib/test/test_nis.py +32 -0
  634. data/lib/rubyfox/server/data/lib/Lib/test/test_ntpath.py +114 -0
  635. data/lib/rubyfox/server/data/lib/Lib/test/test_opcodes.py +65 -0
  636. data/lib/rubyfox/server/data/lib/Lib/test/test_openpty.py +21 -0
  637. data/lib/rubyfox/server/data/lib/Lib/test/test_operations.py +475 -0
  638. data/lib/rubyfox/server/data/lib/Lib/test/test_operator.py +218 -0
  639. data/lib/rubyfox/server/data/lib/Lib/test/test_os.py +187 -0
  640. data/lib/rubyfox/server/data/lib/Lib/test/test_parser.py +383 -0
  641. data/lib/rubyfox/server/data/lib/Lib/test/test_pep247.py +50 -0
  642. data/lib/rubyfox/server/data/lib/Lib/test/test_pickle.py +40 -0
  643. data/lib/rubyfox/server/data/lib/Lib/test/test_pkg.py +259 -0
  644. data/lib/rubyfox/server/data/lib/Lib/test/test_pkgimport.py +84 -0
  645. data/lib/rubyfox/server/data/lib/Lib/test/test_poll.py +3 -0
  646. data/lib/rubyfox/server/data/lib/Lib/test/test_popen2.py +72 -0
  647. data/lib/rubyfox/server/data/lib/Lib/test/test_posixpath.py +40 -0
  648. data/lib/rubyfox/server/data/lib/Lib/test/test_pow.py +107 -0
  649. data/lib/rubyfox/server/data/lib/Lib/test/test_pprint.py +104 -0
  650. data/lib/rubyfox/server/data/lib/Lib/test/test_profile.py +86 -0
  651. data/lib/rubyfox/server/data/lib/Lib/test/test_profilehooks.py +360 -0
  652. data/lib/rubyfox/server/data/lib/Lib/test/test_pty.py +98 -0
  653. data/lib/rubyfox/server/data/lib/Lib/test/test_pwd.py +71 -0
  654. data/lib/rubyfox/server/data/lib/Lib/test/test_pyclbr.py +154 -0
  655. data/lib/rubyfox/server/data/lib/Lib/test/test_pyexpat.py +202 -0
  656. data/lib/rubyfox/server/data/lib/Lib/test/test_queue.py +158 -0
  657. data/lib/rubyfox/server/data/lib/Lib/test/test_quopri.py +157 -0
  658. data/lib/rubyfox/server/data/lib/Lib/test/test_random.py +19 -0
  659. data/lib/rubyfox/server/data/lib/Lib/test/test_re.py +304 -0
  660. data/lib/rubyfox/server/data/lib/Lib/test/test_regex.py +113 -0
  661. data/lib/rubyfox/server/data/lib/Lib/test/test_repr.py +278 -0
  662. data/lib/rubyfox/server/data/lib/Lib/test/test_rfc822.py +211 -0
  663. data/lib/rubyfox/server/data/lib/Lib/test/test_rgbimg.py +63 -0
  664. data/lib/rubyfox/server/data/lib/Lib/test/test_richcmp.py +261 -0
  665. data/lib/rubyfox/server/data/lib/Lib/test/test_rotor.py +28 -0
  666. data/lib/rubyfox/server/data/lib/Lib/test/test_sax.py +727 -0
  667. data/lib/rubyfox/server/data/lib/Lib/test/test_scope.py +530 -0
  668. data/lib/rubyfox/server/data/lib/Lib/test/test_select.py +228 -0
  669. data/lib/rubyfox/server/data/lib/Lib/test/test_select_new.py +229 -0
  670. data/lib/rubyfox/server/data/lib/Lib/test/test_sets.py +793 -0
  671. data/lib/rubyfox/server/data/lib/Lib/test/test_sgmllib.py +314 -0
  672. data/lib/rubyfox/server/data/lib/Lib/test/test_sha.py +52 -0
  673. data/lib/rubyfox/server/data/lib/Lib/test/test_signal.py +66 -0
  674. data/lib/rubyfox/server/data/lib/Lib/test/test_socket.py +1116 -0
  675. data/lib/rubyfox/server/data/lib/Lib/test/test_socket_ssl.py +27 -0
  676. data/lib/rubyfox/server/data/lib/Lib/test/test_socketserver.py +165 -0
  677. data/lib/rubyfox/server/data/lib/Lib/test/test_sre.py +434 -0
  678. data/lib/rubyfox/server/data/lib/Lib/test/test_str2unicode.py +90 -0
  679. data/lib/rubyfox/server/data/lib/Lib/test/test_strftime.py +146 -0
  680. data/lib/rubyfox/server/data/lib/Lib/test/test_string.py +223 -0
  681. data/lib/rubyfox/server/data/lib/Lib/test/test_strop.py +133 -0
  682. data/lib/rubyfox/server/data/lib/Lib/test/test_struct.py +441 -0
  683. data/lib/rubyfox/server/data/lib/Lib/test/test_structseq.py +28 -0
  684. data/lib/rubyfox/server/data/lib/Lib/test/test_subclasses.py +204 -0
  685. data/lib/rubyfox/server/data/lib/Lib/test/test_sunaudiodev.py +28 -0
  686. data/lib/rubyfox/server/data/lib/Lib/test/test_sundry.py +102 -0
  687. data/lib/rubyfox/server/data/lib/Lib/test/test_support.py +265 -0
  688. data/lib/rubyfox/server/data/lib/Lib/test/test_symtable.py +8 -0
  689. data/lib/rubyfox/server/data/lib/Lib/test/test_tempfile.py +10 -0
  690. data/lib/rubyfox/server/data/lib/Lib/test/test_thread.py +116 -0
  691. data/lib/rubyfox/server/data/lib/Lib/test/test_threaded_import.py +56 -0
  692. data/lib/rubyfox/server/data/lib/Lib/test/test_threadedtempfile.py +86 -0
  693. data/lib/rubyfox/server/data/lib/Lib/test/test_threading.py +55 -0
  694. data/lib/rubyfox/server/data/lib/Lib/test/test_time.py +47 -0
  695. data/lib/rubyfox/server/data/lib/Lib/test/test_timing.py +21 -0
  696. data/lib/rubyfox/server/data/lib/Lib/test/test_tokenize.py +9 -0
  697. data/lib/rubyfox/server/data/lib/Lib/test/test_trace.py +219 -0
  698. data/lib/rubyfox/server/data/lib/Lib/test/test_traceback.py +49 -0
  699. data/lib/rubyfox/server/data/lib/Lib/test/test_types.py +762 -0
  700. data/lib/rubyfox/server/data/lib/Lib/test/test_ucn.py +113 -0
  701. data/lib/rubyfox/server/data/lib/Lib/test/test_unary.py +58 -0
  702. data/lib/rubyfox/server/data/lib/Lib/test/test_unicode.py +815 -0
  703. data/lib/rubyfox/server/data/lib/Lib/test/test_unicode_file.py +95 -0
  704. data/lib/rubyfox/server/data/lib/Lib/test/test_unicodedata.py +125 -0
  705. data/lib/rubyfox/server/data/lib/Lib/test/test_unpack.py +105 -0
  706. data/lib/rubyfox/server/data/lib/Lib/test/test_urllib.py +109 -0
  707. data/lib/rubyfox/server/data/lib/Lib/test/test_urllib2.py +31 -0
  708. data/lib/rubyfox/server/data/lib/Lib/test/test_urlparse.py +94 -0
  709. data/lib/rubyfox/server/data/lib/Lib/test/test_userdict.py +120 -0
  710. data/lib/rubyfox/server/data/lib/Lib/test/test_userlist.py +269 -0
  711. data/lib/rubyfox/server/data/lib/Lib/test/test_userstring.py +43 -0
  712. data/lib/rubyfox/server/data/lib/Lib/test/test_uu.py +158 -0
  713. data/lib/rubyfox/server/data/lib/Lib/test/test_wave.py +34 -0
  714. data/lib/rubyfox/server/data/lib/Lib/test/test_weakref.py +573 -0
  715. data/lib/rubyfox/server/data/lib/Lib/test/test_winreg.py +151 -0
  716. data/lib/rubyfox/server/data/lib/Lib/test/test_winsound.py +6 -0
  717. data/lib/rubyfox/server/data/lib/Lib/test/test_xmllib.py +35 -0
  718. data/lib/rubyfox/server/data/lib/Lib/test/test_xmlrpc.py +37 -0
  719. data/lib/rubyfox/server/data/lib/Lib/test/test_xreadline.py +43 -0
  720. data/lib/rubyfox/server/data/lib/Lib/test/test_zipfile.py +78 -0
  721. data/lib/rubyfox/server/data/lib/Lib/test/test_zlib.py +482 -0
  722. data/lib/rubyfox/server/data/lib/Lib/test/testall.py +43 -0
  723. data/lib/rubyfox/server/data/lib/Lib/test/testcodec.py +48 -0
  724. data/lib/rubyfox/server/data/lib/Lib/test/testimg.uue +1170 -0
  725. data/lib/rubyfox/server/data/lib/Lib/test/testimgr.uue +1170 -0
  726. data/lib/rubyfox/server/data/lib/Lib/test/testrgb.uue +971 -0
  727. data/lib/rubyfox/server/data/lib/Lib/test/tokenize_tests.py +175 -0
  728. data/lib/rubyfox/server/data/lib/Lib/test/whrandom.py +96 -0
  729. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/dbextstest.py +266 -0
  730. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/jndi.py +33 -0
  731. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/runner.py +204 -0
  732. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/sptest.py +227 -0
  733. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/test.xml +363 -0
  734. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/test_zxjdbc_dbapi20.py +26 -0
  735. data/lib/rubyfox/server/data/lib/Lib/test/zxjdbc/zxtest.py +1242 -0
  736. data/lib/rubyfox/server/data/lib/Lib/this.py +28 -0
  737. data/lib/rubyfox/server/data/lib/Lib/threading.py +698 -0
  738. data/lib/rubyfox/server/data/lib/Lib/token$py.class +0 -0
  739. data/lib/rubyfox/server/data/lib/Lib/token.py +140 -0
  740. data/lib/rubyfox/server/data/lib/Lib/tokenize$py.class +0 -0
  741. data/lib/rubyfox/server/data/lib/Lib/tokenize.py +287 -0
  742. data/lib/rubyfox/server/data/lib/Lib/traceback$py.class +0 -0
  743. data/lib/rubyfox/server/data/lib/Lib/traceback.py +301 -0
  744. data/lib/rubyfox/server/data/lib/Lib/tzparse.py +98 -0
  745. data/lib/rubyfox/server/data/lib/Lib/unittest.py +723 -0
  746. data/lib/rubyfox/server/data/lib/Lib/urllib.py +1465 -0
  747. data/lib/rubyfox/server/data/lib/Lib/urllib2.py +1144 -0
  748. data/lib/rubyfox/server/data/lib/Lib/urlparse.py +276 -0
  749. data/lib/rubyfox/server/data/lib/Lib/user.py +45 -0
  750. data/lib/rubyfox/server/data/lib/Lib/uu.py +195 -0
  751. data/lib/rubyfox/server/data/lib/Lib/warnings$py.class +0 -0
  752. data/lib/rubyfox/server/data/lib/Lib/warnings.py +258 -0
  753. data/lib/rubyfox/server/data/lib/Lib/weakref.py +280 -0
  754. data/lib/rubyfox/server/data/lib/Lib/whichdb.py +87 -0
  755. data/lib/rubyfox/server/data/lib/Lib/whrandom.py +140 -0
  756. data/lib/rubyfox/server/data/lib/Lib/xdrlib.py +285 -0
  757. data/lib/rubyfox/server/data/lib/Lib/xml/FtCore.py +58 -0
  758. data/lib/rubyfox/server/data/lib/Lib/xml/Uri.py +380 -0
  759. data/lib/rubyfox/server/data/lib/Lib/xml/__init__.py +41 -0
  760. data/lib/rubyfox/server/data/lib/Lib/xml/dom/MessageSource.py +54 -0
  761. data/lib/rubyfox/server/data/lib/Lib/xml/dom/NodeFilter.py +27 -0
  762. data/lib/rubyfox/server/data/lib/Lib/xml/dom/__init__.py +232 -0
  763. data/lib/rubyfox/server/data/lib/Lib/xml/dom/domreg.py +99 -0
  764. data/lib/rubyfox/server/data/lib/Lib/xml/dom/minicompat.py +184 -0
  765. data/lib/rubyfox/server/data/lib/Lib/xml/dom/minidom.py +1943 -0
  766. data/lib/rubyfox/server/data/lib/Lib/xml/dom/pulldom.py +350 -0
  767. data/lib/rubyfox/server/data/lib/Lib/xml/dom/xmlbuilder.py +388 -0
  768. data/lib/rubyfox/server/data/lib/Lib/xml/sax/__init__.py +102 -0
  769. data/lib/rubyfox/server/data/lib/Lib/xml/sax/_exceptions.py +127 -0
  770. data/lib/rubyfox/server/data/lib/Lib/xml/sax/drivers2/__init__.py +1 -0
  771. data/lib/rubyfox/server/data/lib/Lib/xml/sax/drivers2/drv_javasax.py +333 -0
  772. data/lib/rubyfox/server/data/lib/Lib/xml/sax/handler.py +345 -0
  773. data/lib/rubyfox/server/data/lib/Lib/xml/sax/saxlib.py +430 -0
  774. data/lib/rubyfox/server/data/lib/Lib/xml/sax/saxutils.py +813 -0
  775. data/lib/rubyfox/server/data/lib/Lib/xml/sax/xmlreader.py +378 -0
  776. data/lib/rubyfox/server/data/lib/Lib/xmllib.py +926 -0
  777. data/lib/rubyfox/server/data/lib/Lib/xmlrpclib.py +1019 -0
  778. data/lib/rubyfox/server/data/lib/Lib/zipfile.py +586 -0
  779. data/lib/rubyfox/server/data/lib/Lib/zlib.py +156 -0
  780. data/lib/rubyfox/server/data/lib/boot.jar +0 -0
  781. data/lib/rubyfox/server/data/lib/cachedir/.keep +0 -0
  782. data/lib/rubyfox/server/data/lib/commons-beanutils-1.7.0.jar +0 -0
  783. data/lib/rubyfox/server/data/lib/commons-collections-3.2.1.jar +0 -0
  784. data/lib/rubyfox/server/data/lib/commons-dbcp-1.4.jar +0 -0
  785. data/lib/rubyfox/server/data/lib/commons-io-1.4.jar +0 -0
  786. data/lib/rubyfox/server/data/lib/commons-lang-2.4.jar +0 -0
  787. data/lib/rubyfox/server/data/lib/commons-logging-1.1.1.jar +0 -0
  788. data/lib/rubyfox/server/data/lib/commons-pool-1.5.4.jar +0 -0
  789. data/lib/rubyfox/server/data/lib/commons-vfs-1.0.jar +0 -0
  790. data/lib/rubyfox/server/data/lib/ezmorph-1.0.6.jar +0 -0
  791. data/lib/rubyfox/server/data/lib/httpclient-4.0.3.jar +0 -0
  792. data/lib/rubyfox/server/data/lib/httpcore-4.0.1.jar +0 -0
  793. data/lib/rubyfox/server/data/lib/imap.jar +0 -0
  794. data/lib/rubyfox/server/data/lib/jconsole/COPYING.txt +504 -0
  795. data/lib/rubyfox/server/data/lib/jconsole/bug_test_case.py +49 -0
  796. data/lib/rubyfox/server/data/lib/jconsole/console$py.class +0 -0
  797. data/lib/rubyfox/server/data/lib/jconsole/console.py +439 -0
  798. data/lib/rubyfox/server/data/lib/jconsole/history$py.class +0 -0
  799. data/lib/rubyfox/server/data/lib/jconsole/history.py +82 -0
  800. data/lib/rubyfox/server/data/lib/jconsole/history_test_case.py +133 -0
  801. data/lib/rubyfox/server/data/lib/jconsole/introspect$py.class +0 -0
  802. data/lib/rubyfox/server/data/lib/jconsole/introspect.py +373 -0
  803. data/lib/rubyfox/server/data/lib/jconsole/introspect_test_case.py +19 -0
  804. data/lib/rubyfox/server/data/lib/jconsole/issue_17_test_case.py +36 -0
  805. data/lib/rubyfox/server/data/lib/jconsole/jintrospect$py.class +0 -0
  806. data/lib/rubyfox/server/data/lib/jconsole/jintrospect.py +316 -0
  807. data/lib/rubyfox/server/data/lib/jconsole/jintrospect_test_case.py +107 -0
  808. data/lib/rubyfox/server/data/lib/jconsole/popup$py.class +0 -0
  809. data/lib/rubyfox/server/data/lib/jconsole/popup.py +178 -0
  810. data/lib/rubyfox/server/data/lib/jconsole/run_tests.py +8 -0
  811. data/lib/rubyfox/server/data/lib/jconsole/static_test_case.py +36 -0
  812. data/lib/rubyfox/server/data/lib/jconsole/testcase.py +38 -0
  813. data/lib/rubyfox/server/data/lib/jconsole/tip$py.class +0 -0
  814. data/lib/rubyfox/server/data/lib/jconsole/tip.py +47 -0
  815. data/lib/rubyfox/server/data/lib/jmx-util-1.2.3.jar +0 -0
  816. data/lib/rubyfox/server/data/lib/joda-time-1.6.jar +0 -0
  817. data/lib/rubyfox/server/data/lib/js.jar +0 -0
  818. data/lib/rubyfox/server/data/lib/json-lib-2.2.3-jdk15.jar +0 -0
  819. data/lib/rubyfox/server/data/lib/jython.jar +0 -0
  820. data/lib/rubyfox/server/data/lib/log4j-1.2.15.jar +0 -0
  821. data/lib/rubyfox/server/data/lib/logs-backup-app.jar +0 -0
  822. data/lib/rubyfox/server/data/lib/mailapi.jar +0 -0
  823. data/lib/rubyfox/server/data/lib/pop3.jar +0 -0
  824. data/lib/rubyfox/server/data/lib/scala-library.jar +0 -0
  825. data/lib/rubyfox/server/data/lib/sfs2x-admin.jar +0 -0
  826. data/lib/rubyfox/server/data/lib/sfs2x-core.jar +0 -0
  827. data/lib/rubyfox/server/data/lib/sfs2x-util.jar +0 -0
  828. data/lib/rubyfox/server/data/lib/sfs2x.jar +0 -0
  829. data/lib/rubyfox/server/data/lib/slf4j-api-1.5.10.jar +0 -0
  830. data/lib/rubyfox/server/data/lib/slf4j-log4j12.jar +0 -0
  831. data/lib/rubyfox/server/data/lib/smtp.jar +0 -0
  832. data/lib/rubyfox/server/data/lib/terracotta-api-1.1.1.jar +0 -0
  833. data/lib/rubyfox/server/data/lib/ws-engine.jar +0 -0
  834. data/lib/rubyfox/server/data/lib/xpp3_min-1.1.4c.jar +0 -0
  835. data/lib/rubyfox/server/data/lib/xstream-1.3.1.jar +0 -0
  836. data/lib/rubyfox/server/data/logs/.keep +0 -0
  837. data/lib/rubyfox/server/data/logs/bluebox/.keep +0 -0
  838. data/lib/rubyfox/server/data/logs/boot/.keep +0 -0
  839. data/lib/rubyfox/server/data/logs/http/.keep +0 -0
  840. data/lib/rubyfox/server/data/logs/smartfox.log +295 -0
  841. data/lib/rubyfox/server/data/root/.keep +0 -0
  842. data/lib/rubyfox/server/data/root/_css_/default.css +170 -0
  843. data/lib/rubyfox/server/data/root/_css_/reset.css +49 -0
  844. data/lib/rubyfox/server/data/root/_images_/background_gradient.png +0 -0
  845. data/lib/rubyfox/server/data/root/_images_/background_logo.png +0 -0
  846. data/lib/rubyfox/server/data/root/_images_/favicon.png +0 -0
  847. data/lib/rubyfox/server/data/root/_images_/logo_smartfoxserver.png +0 -0
  848. data/lib/rubyfox/server/data/root/admin/.keep +0 -0
  849. data/lib/rubyfox/server/data/root/admin/AdminTool.html +108 -0
  850. data/lib/rubyfox/server/data/root/admin/AdminTool.swf +0 -0
  851. data/lib/rubyfox/server/data/root/admin/ReleaseNotes.txt +29 -0
  852. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/adobeFlashPlayer.png +0 -0
  853. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/advanced.png +0 -0
  854. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/banManager.png +0 -0
  855. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/bannedIPs.png +0 -0
  856. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/bannedUsernames.png +0 -0
  857. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/bookmarks.png +0 -0
  858. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/bootLog.png +0 -0
  859. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/buddyList.png +0 -0
  860. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/buddyProperties.png +0 -0
  861. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/connection.png +0 -0
  862. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/databaseManager.png +0 -0
  863. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/floodFilter.png +0 -0
  864. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/gameSettings.png +0 -0
  865. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/general.png +0 -0
  866. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/globalServerStatus.png +0 -0
  867. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/iPFilter.png +0 -0
  868. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/jVMSettings.png +0 -0
  869. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/logsDownload.png +0 -0
  870. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/mailer.png +0 -0
  871. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/permissionsAndEvents.png +0 -0
  872. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/privilegeManager.png +0 -0
  873. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/remoteAdmin.png +0 -0
  874. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/roomExtension.png +0 -0
  875. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/roomVariables.png +0 -0
  876. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/roomsAndGroups.png +0 -0
  877. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/runtimeLog.png +0 -0
  878. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/runtimeRoomSettings.png +0 -0
  879. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/runtimeUserSettings.png +0 -0
  880. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/runtimeZoneSettings.png +0 -0
  881. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/systemQueueStatus.png +0 -0
  882. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/userManagement.png +0 -0
  883. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/userVariables.png +0 -0
  884. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/usersTraffic.png +0 -0
  885. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/webServer.png +0 -0
  886. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/wordsFilter.png +0 -0
  887. data/lib/rubyfox/server/data/root/admin/assets/icons/tabs/zoneExtension.png +0 -0
  888. data/lib/rubyfox/server/data/root/admin/index.html +108 -0
  889. data/lib/rubyfox/server/data/root/admin/modules/BanManager/BanManager.swf +0 -0
  890. data/lib/rubyfox/server/data/root/admin/modules/BanManager/icon.png +0 -0
  891. data/lib/rubyfox/server/data/root/admin/modules/BlueBoxMonitor/BlueBoxMonitor.swf +0 -0
  892. data/lib/rubyfox/server/data/root/admin/modules/BlueBoxMonitor/icon.png +0 -0
  893. data/lib/rubyfox/server/data/root/admin/modules/LicenseManager/LicenseManager.swf +0 -0
  894. data/lib/rubyfox/server/data/root/admin/modules/LicenseManager/icon.png +0 -0
  895. data/lib/rubyfox/server/data/root/admin/modules/LogViewer/LogViewer.swf +0 -0
  896. data/lib/rubyfox/server/data/root/admin/modules/LogViewer/icon.png +0 -0
  897. data/lib/rubyfox/server/data/root/admin/modules/RuntimeStatistics/RuntimeStatistics.swf +0 -0
  898. data/lib/rubyfox/server/data/root/admin/modules/RuntimeStatistics/icon.png +0 -0
  899. data/lib/rubyfox/server/data/root/admin/modules/ServerConfigurator/ServerConfigurator.swf +0 -0
  900. data/lib/rubyfox/server/data/root/admin/modules/ServerConfigurator/icon.png +0 -0
  901. data/lib/rubyfox/server/data/root/admin/modules/ZoneConfigurator/ZoneConfigurator.swf +0 -0
  902. data/lib/rubyfox/server/data/root/admin/modules/ZoneConfigurator/icon.png +0 -0
  903. data/lib/rubyfox/server/data/root/admin/modules/ZoneMonitor/ZoneMonitor.swf +0 -0
  904. data/lib/rubyfox/server/data/root/admin/modules/ZoneMonitor/icon.png +0 -0
  905. data/lib/rubyfox/server/data/root/admin/modules/config.xml +12 -0
  906. data/lib/rubyfox/server/data/root/admin/playerProductInstall.swf +0 -0
  907. data/lib/rubyfox/server/data/root/admin/swfobject.js +777 -0
  908. data/lib/rubyfox/server/data/root/crossdomain.xml +6 -0
  909. data/lib/rubyfox/server/data/root/index.html +63 -0
  910. data/lib/rubyfox/server/data/sfs2x-service +435 -0
  911. data/lib/rubyfox/server/data/sfs2x-service.vmoptions +5 -0
  912. data/lib/rubyfox/server/data/sfs2x.sh +12 -0
  913. data/lib/rubyfox/server/data/www/.keep +0 -0
  914. data/lib/rubyfox/server/data/www/BlueBox.war +0 -0
  915. data/lib/rubyfox/server/data/www/root/_css_/default.css +170 -0
  916. data/lib/rubyfox/server/data/www/root/_css_/reset.css +49 -0
  917. data/lib/rubyfox/server/data/www/root/_images_/background_gradient.png +0 -0
  918. data/lib/rubyfox/server/data/www/root/_images_/background_logo.png +0 -0
  919. data/lib/rubyfox/server/data/www/root/_images_/favicon.png +0 -0
  920. data/lib/rubyfox/server/data/www/root/_images_/logo_smartfoxserver.png +0 -0
  921. data/lib/rubyfox/server/data/www/root/admin/.keep +0 -0
  922. data/lib/rubyfox/server/data/www/root/admin/AdminTool.html +108 -0
  923. data/lib/rubyfox/server/data/www/root/admin/AdminTool.swf +0 -0
  924. data/lib/rubyfox/server/data/www/root/admin/ReleaseNotes.txt +63 -0
  925. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/adobeFlashPlayer.png +0 -0
  926. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/advanced.png +0 -0
  927. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/banManager.png +0 -0
  928. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bannedIPs.png +0 -0
  929. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bannedUsernames.png +0 -0
  930. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bookmarks.png +0 -0
  931. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bootLog.png +0 -0
  932. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/buddyList.png +0 -0
  933. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/buddyProperties.png +0 -0
  934. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/connection.png +0 -0
  935. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/databaseManager.png +0 -0
  936. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/floodFilter.png +0 -0
  937. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/gameSettings.png +0 -0
  938. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/general.png +0 -0
  939. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/globalServerStatus.png +0 -0
  940. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/hTML5WebSockets.png +0 -0
  941. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/iPFilter.png +0 -0
  942. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/jVMSettings.png +0 -0
  943. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/logsDownload.png +0 -0
  944. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/mailer.png +0 -0
  945. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/permissionsAndEvents.png +0 -0
  946. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/privilegeManager.png +0 -0
  947. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/remoteAdmin.png +0 -0
  948. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomExtension.png +0 -0
  949. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomVariables.png +0 -0
  950. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomsAndGroups.png +0 -0
  951. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeLog.png +0 -0
  952. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeRoomSettings.png +0 -0
  953. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeUserSettings.png +0 -0
  954. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeZoneSettings.png +0 -0
  955. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/systemQueueStatus.png +0 -0
  956. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/userManagement.png +0 -0
  957. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/userVariables.png +0 -0
  958. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/usersTraffic.png +0 -0
  959. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/webServer.png +0 -0
  960. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/wordsFilter.png +0 -0
  961. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/zoneExtension.png +0 -0
  962. data/lib/rubyfox/server/data/www/root/admin/index.html +108 -0
  963. data/lib/rubyfox/server/data/www/root/admin/modules/BanManager/BanManager.swf +0 -0
  964. data/lib/rubyfox/server/data/www/root/admin/modules/BanManager/icon.png +0 -0
  965. data/lib/rubyfox/server/data/www/root/admin/modules/BlueBoxMonitor/BlueBoxMonitor.swf +0 -0
  966. data/lib/rubyfox/server/data/www/root/admin/modules/BlueBoxMonitor/icon.png +0 -0
  967. data/lib/rubyfox/server/data/www/root/admin/modules/Dashboard/Dashboard.swf +0 -0
  968. data/lib/rubyfox/server/data/www/root/admin/modules/Dashboard/icon.png +0 -0
  969. data/lib/rubyfox/server/data/www/root/admin/modules/LicenseManager/LicenseManager.swf +0 -0
  970. data/lib/rubyfox/server/data/www/root/admin/modules/LicenseManager/icon.png +0 -0
  971. data/lib/rubyfox/server/data/www/root/admin/modules/LogViewer/LogViewer.swf +0 -0
  972. data/lib/rubyfox/server/data/www/root/admin/modules/LogViewer/icon.png +0 -0
  973. data/lib/rubyfox/server/data/www/root/admin/modules/RuntimeStatistics/RuntimeStatistics.swf +0 -0
  974. data/lib/rubyfox/server/data/www/root/admin/modules/RuntimeStatistics/icon.png +0 -0
  975. data/lib/rubyfox/server/data/www/root/admin/modules/ServerConfigurator/ServerConfigurator.swf +0 -0
  976. data/lib/rubyfox/server/data/www/root/admin/modules/ServerConfigurator/icon.png +0 -0
  977. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneConfigurator/ZoneConfigurator.swf +0 -0
  978. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneConfigurator/icon.png +0 -0
  979. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneMonitor/ZoneMonitor.swf +0 -0
  980. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneMonitor/icon.png +0 -0
  981. data/lib/rubyfox/server/data/www/root/admin/modules/config.xml +12 -0
  982. data/lib/rubyfox/server/data/www/root/admin/playerProductInstall.swf +0 -0
  983. data/lib/rubyfox/server/data/www/root/admin/swfobject.js +777 -0
  984. data/lib/rubyfox/server/data/www/root/crossdomain.xml +6 -0
  985. data/lib/rubyfox/server/data/www/root/examples/.keep +0 -0
  986. data/lib/rubyfox/server/data/www/root/examples/index.html +43 -0
  987. data/lib/rubyfox/server/data/www/root/index.html +63 -0
  988. data/lib/rubyfox/server/data/zones/.keep +0 -0
  989. data/lib/rubyfox/server/environment.rb +31 -0
  990. data/lib/rubyfox/server/version.rb +5 -0
  991. data/lib/rubyfox/server.rb +9 -0
  992. data/rubyfox-server.gemspec +22 -0
  993. metadata +1076 -0
@@ -0,0 +1,1943 @@
1
+ """\
2
+ minidom.py -- a lightweight DOM implementation.
3
+
4
+ parse("foo.xml")
5
+
6
+ parseString("<foo><bar/></foo>")
7
+
8
+ Todo:
9
+ =====
10
+ * convenience methods for getting elements and text.
11
+ * more testing
12
+ * bring some of the writer and linearizer code into conformance with this
13
+ interface
14
+ * SAX 2 namespaces
15
+ """
16
+
17
+ import xml.dom
18
+
19
+ from xml.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE, domreg
20
+ from xml.dom.minicompat import *
21
+ from xml.dom.xmlbuilder import DOMImplementationLS, DocumentLS
22
+
23
+ _TupleType = type(())
24
+
25
+ # This is used by the ID-cache invalidation checks; the list isn't
26
+ # actually complete, since the nodes being checked will never be the
27
+ # DOCUMENT_NODE or DOCUMENT_FRAGMENT_NODE. (The node being checked is
28
+ # the node being added or removed, not the node being modified.)
29
+ #
30
+ _nodeTypes_with_children = (xml.dom.Node.ELEMENT_NODE,
31
+ xml.dom.Node.ENTITY_REFERENCE_NODE)
32
+
33
+
34
+ class Node(xml.dom.Node, GetattrMagic):
35
+ namespaceURI = None # this is non-null only for elements and attributes
36
+ parentNode = None
37
+ ownerDocument = None
38
+ nextSibling = None
39
+ previousSibling = None
40
+
41
+ prefix = EMPTY_PREFIX # non-null only for NS elements and attributes
42
+
43
+ def __nonzero__(self):
44
+ return True
45
+
46
+ def toxml(self, encoding = None):
47
+ return self.toprettyxml("", "", encoding)
48
+
49
+ def toprettyxml(self, indent="\t", newl="\n", encoding = None):
50
+ # indent = the indentation string to prepend, per level
51
+ # newl = the newline string to append
52
+ writer = _get_StringIO()
53
+ if encoding is not None:
54
+ import codecs
55
+ # Can't use codecs.getwriter to preserve 2.0 compatibility
56
+ writer = codecs.lookup(encoding)[3](writer)
57
+ if self.nodeType == Node.DOCUMENT_NODE:
58
+ # Can pass encoding only to document, to put it into XML header
59
+ self.writexml(writer, "", indent, newl, encoding)
60
+ else:
61
+ self.writexml(writer, "", indent, newl)
62
+ return writer.getvalue()
63
+
64
+ def hasAttributes(self):
65
+ return False
66
+
67
+ def hasChildNodes(self):
68
+ if self.childNodes:
69
+ return True
70
+ else:
71
+ return False
72
+
73
+ def _get_childNodes(self):
74
+ return self.childNodes
75
+
76
+ def _get_firstChild(self):
77
+ if self.childNodes:
78
+ return self.childNodes[0]
79
+
80
+ def _get_lastChild(self):
81
+ if self.childNodes:
82
+ return self.childNodes[-1]
83
+
84
+ def insertBefore(self, newChild, refChild):
85
+ if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE:
86
+ for c in tuple(newChild.childNodes):
87
+ self.insertBefore(c, refChild)
88
+ ### The DOM does not clearly specify what to return in this case
89
+ return newChild
90
+ if newChild.nodeType not in self._child_node_types:
91
+ raise xml.dom.HierarchyRequestErr(
92
+ "%s cannot be child of %s" % (repr(newChild), repr(self)))
93
+ if newChild.parentNode is not None:
94
+ newChild.parentNode.removeChild(newChild)
95
+ if refChild is None:
96
+ self.appendChild(newChild)
97
+ else:
98
+ try:
99
+ index = self.childNodes.index(refChild)
100
+ except ValueError:
101
+ raise xml.dom.NotFoundErr()
102
+ if newChild.nodeType in _nodeTypes_with_children:
103
+ _clear_id_cache(self)
104
+ self.childNodes.insert(index, newChild)
105
+ newChild.nextSibling = refChild
106
+ refChild.previousSibling = newChild
107
+ if index:
108
+ node = self.childNodes[index-1]
109
+ node.nextSibling = newChild
110
+ newChild.previousSibling = node
111
+ else:
112
+ newChild.previousSibling = None
113
+ newChild.parentNode = self
114
+ return newChild
115
+
116
+ def appendChild(self, node):
117
+ if node.nodeType == self.DOCUMENT_FRAGMENT_NODE:
118
+ for c in tuple(node.childNodes):
119
+ self.appendChild(c)
120
+ ### The DOM does not clearly specify what to return in this case
121
+ return node
122
+ if node.nodeType not in self._child_node_types:
123
+ raise xml.dom.HierarchyRequestErr(
124
+ "%s cannot be child of %s" % (repr(node), repr(self)))
125
+ elif node.nodeType in _nodeTypes_with_children:
126
+ _clear_id_cache(self)
127
+ if node.parentNode is not None:
128
+ node.parentNode.removeChild(node)
129
+ _append_child(self, node)
130
+ node.nextSibling = None
131
+ return node
132
+
133
+ def replaceChild(self, newChild, oldChild):
134
+ if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE:
135
+ refChild = oldChild.nextSibling
136
+ self.removeChild(oldChild)
137
+ return self.insertBefore(newChild, refChild)
138
+ if newChild.nodeType not in self._child_node_types:
139
+ raise xml.dom.HierarchyRequestErr(
140
+ "%s cannot be child of %s" % (repr(newChild), repr(self)))
141
+ if newChild.parentNode is not None:
142
+ newChild.parentNode.removeChild(newChild)
143
+ if newChild is oldChild:
144
+ return
145
+ try:
146
+ index = self.childNodes.index(oldChild)
147
+ except ValueError:
148
+ raise xml.dom.NotFoundErr()
149
+ if (newChild.nodeType in _nodeTypes_with_children
150
+ or oldChild.nodeType in _nodeTypes_with_children):
151
+ _clear_id_cache(self)
152
+ self.childNodes[index] = newChild
153
+ newChild.parentNode = self
154
+ oldChild.parentNode = None
155
+ newChild.nextSibling = oldChild.nextSibling
156
+ newChild.previousSibling = oldChild.previousSibling
157
+ oldChild.nextSibling = None
158
+ oldChild.previousSibling = None
159
+ if newChild.previousSibling:
160
+ newChild.previousSibling.nextSibling = newChild
161
+ if newChild.nextSibling:
162
+ newChild.nextSibling.previousSibling = newChild
163
+ return oldChild
164
+
165
+ def removeChild(self, oldChild):
166
+ try:
167
+ self.childNodes.remove(oldChild)
168
+ except ValueError:
169
+ raise xml.dom.NotFoundErr()
170
+ if oldChild.nextSibling is not None:
171
+ oldChild.nextSibling.previousSibling = oldChild.previousSibling
172
+ if oldChild.previousSibling is not None:
173
+ oldChild.previousSibling.nextSibling = oldChild.nextSibling
174
+ oldChild.nextSibling = oldChild.previousSibling = None
175
+ if oldChild.nodeType in _nodeTypes_with_children:
176
+ _clear_id_cache(self)
177
+
178
+ oldChild.parentNode = None
179
+ return oldChild
180
+
181
+ def normalize(self):
182
+ L = []
183
+ for child in self.childNodes:
184
+ if child.nodeType == Node.TEXT_NODE:
185
+ data = child.data
186
+ if data and L and L[-1].nodeType == child.nodeType:
187
+ # collapse text node
188
+ node = L[-1]
189
+ node.data = node.data + child.data
190
+ node.nextSibling = child.nextSibling
191
+ child.unlink()
192
+ elif data:
193
+ if L:
194
+ L[-1].nextSibling = child
195
+ child.previousSibling = L[-1]
196
+ else:
197
+ child.previousSibling = None
198
+ L.append(child)
199
+ else:
200
+ # empty text node; discard
201
+ child.unlink()
202
+ else:
203
+ if L:
204
+ L[-1].nextSibling = child
205
+ child.previousSibling = L[-1]
206
+ else:
207
+ child.previousSibling = None
208
+ L.append(child)
209
+ if child.nodeType == Node.ELEMENT_NODE:
210
+ child.normalize()
211
+ if self.childNodes:
212
+ self.childNodes[:] = L
213
+ return
214
+
215
+ def cloneNode(self, deep):
216
+ return _clone_node(self, deep, self.ownerDocument or self)
217
+
218
+ def isSupported(self, feature, version):
219
+ return self.ownerDocument.implementation.hasFeature(feature, version)
220
+
221
+ def _get_localName(self):
222
+ # Overridden in Element and Attr where localName can be Non-Null
223
+ return None
224
+
225
+ # Node interfaces from Level 3 (WD 9 April 2002)
226
+
227
+ def isSameNode(self, other):
228
+ return self is other
229
+
230
+ def getInterface(self, feature):
231
+ if self.isSupported(feature, None):
232
+ return self
233
+ else:
234
+ return None
235
+
236
+ # The "user data" functions use a dictionary that is only present
237
+ # if some user data has been set, so be careful not to assume it
238
+ # exists.
239
+
240
+ def getUserData(self, key):
241
+ try:
242
+ return self._user_data[key][0]
243
+ except (AttributeError, KeyError):
244
+ return None
245
+
246
+ def setUserData(self, key, data, handler):
247
+ old = None
248
+ try:
249
+ d = self._user_data
250
+ except AttributeError:
251
+ d = {}
252
+ self._user_data = d
253
+ if d.has_key(key):
254
+ old = d[key][0]
255
+ if data is None:
256
+ # ignore handlers passed for None
257
+ handler = None
258
+ if old is not None:
259
+ del d[key]
260
+ else:
261
+ d[key] = (data, handler)
262
+ return old
263
+
264
+ def _call_user_data_handler(self, operation, src, dst):
265
+ if hasattr(self, "_user_data"):
266
+ for key, (data, handler) in self._user_data.items():
267
+ if handler is not None:
268
+ handler.handle(operation, key, data, src, dst)
269
+
270
+ # minidom-specific API:
271
+
272
+ def unlink(self):
273
+ self.parentNode = self.ownerDocument = None
274
+ if self.childNodes:
275
+ for child in self.childNodes:
276
+ child.unlink()
277
+ self.childNodes = NodeList()
278
+ self.previousSibling = None
279
+ self.nextSibling = None
280
+
281
+ defproperty(Node, "firstChild", doc="First child node, or None.")
282
+ defproperty(Node, "lastChild", doc="Last child node, or None.")
283
+ defproperty(Node, "localName", doc="Namespace-local name of this node.")
284
+
285
+
286
+ def _append_child(self, node):
287
+ # fast path with less checks; usable by DOM builders if careful
288
+ childNodes = self.childNodes
289
+ if childNodes:
290
+ last = childNodes[-1]
291
+ node.__dict__["previousSibling"] = last
292
+ last.__dict__["nextSibling"] = node
293
+ childNodes.append(node)
294
+ node.__dict__["parentNode"] = self
295
+
296
+ def _in_document(node):
297
+ # return True iff node is part of a document tree
298
+ while node is not None:
299
+ if node.nodeType == Node.DOCUMENT_NODE:
300
+ return True
301
+ node = node.parentNode
302
+ return False
303
+
304
+ def _write_data(writer, data):
305
+ "Writes datachars to writer."
306
+ data = data.replace("&", "&amp;").replace("<", "&lt;")
307
+ data = data.replace("\"", "&quot;").replace(">", "&gt;")
308
+ writer.write(data)
309
+
310
+ def _get_elements_by_tagName_helper(parent, name, rc):
311
+ for node in parent.childNodes:
312
+ if node.nodeType == Node.ELEMENT_NODE and \
313
+ (name == "*" or node.tagName == name):
314
+ rc.append(node)
315
+ _get_elements_by_tagName_helper(node, name, rc)
316
+ return rc
317
+
318
+ def _get_elements_by_tagName_ns_helper(parent, nsURI, localName, rc):
319
+ for node in parent.childNodes:
320
+ if node.nodeType == Node.ELEMENT_NODE:
321
+ if ((localName == "*" or node.localName == localName) and
322
+ (nsURI == "*" or node.namespaceURI == nsURI)):
323
+ rc.append(node)
324
+ _get_elements_by_tagName_ns_helper(node, nsURI, localName, rc)
325
+ return rc
326
+
327
+ class DocumentFragment(Node):
328
+ nodeType = Node.DOCUMENT_FRAGMENT_NODE
329
+ nodeName = "#document-fragment"
330
+ nodeValue = None
331
+ attributes = None
332
+ parentNode = None
333
+ _child_node_types = (Node.ELEMENT_NODE,
334
+ Node.TEXT_NODE,
335
+ Node.CDATA_SECTION_NODE,
336
+ Node.ENTITY_REFERENCE_NODE,
337
+ Node.PROCESSING_INSTRUCTION_NODE,
338
+ Node.COMMENT_NODE,
339
+ Node.NOTATION_NODE)
340
+
341
+ def __init__(self):
342
+ self.childNodes = NodeList()
343
+
344
+
345
+ class Attr(Node):
346
+ nodeType = Node.ATTRIBUTE_NODE
347
+ attributes = None
348
+ ownerElement = None
349
+ specified = False
350
+ _is_id = False
351
+
352
+ _child_node_types = (Node.TEXT_NODE, Node.ENTITY_REFERENCE_NODE)
353
+
354
+ def __init__(self, qName, namespaceURI=EMPTY_NAMESPACE, localName=None,
355
+ prefix=None):
356
+ # skip setattr for performance
357
+ d = self.__dict__
358
+ d["nodeName"] = d["name"] = qName
359
+ d["namespaceURI"] = namespaceURI
360
+ d["prefix"] = prefix
361
+ d['childNodes'] = NodeList()
362
+
363
+ # Add the single child node that represents the value of the attr
364
+ self.childNodes.append(Text())
365
+
366
+ # nodeValue and value are set elsewhere
367
+
368
+ def _get_localName(self):
369
+ return self.nodeName.split(":", 1)[-1]
370
+
371
+ def _get_name(self):
372
+ return self.name
373
+
374
+ def _get_specified(self):
375
+ return self.specified
376
+
377
+ def __setattr__(self, name, value):
378
+ d = self.__dict__
379
+ if name in ("value", "nodeValue"):
380
+ d["value"] = d["nodeValue"] = value
381
+ d2 = self.childNodes[0].__dict__
382
+ d2["data"] = d2["nodeValue"] = value
383
+ if self.ownerElement is not None:
384
+ _clear_id_cache(self.ownerElement)
385
+ elif name in ("name", "nodeName"):
386
+ d["name"] = d["nodeName"] = value
387
+ if self.ownerElement is not None:
388
+ _clear_id_cache(self.ownerElement)
389
+ else:
390
+ d[name] = value
391
+
392
+ def _set_prefix(self, prefix):
393
+ nsuri = self.namespaceURI
394
+ if prefix == "xmlns":
395
+ if nsuri and nsuri != XMLNS_NAMESPACE:
396
+ raise xml.dom.NamespaceErr(
397
+ "illegal use of 'xmlns' prefix for the wrong namespace")
398
+ d = self.__dict__
399
+ d['prefix'] = prefix
400
+ if prefix is None:
401
+ newName = self.localName
402
+ else:
403
+ newName = "%s:%s" % (prefix, self.localName)
404
+ if self.ownerElement:
405
+ _clear_id_cache(self.ownerElement)
406
+ d['nodeName'] = d['name'] = newName
407
+
408
+ def _set_value(self, value):
409
+ d = self.__dict__
410
+ d['value'] = d['nodeValue'] = value
411
+ if self.ownerElement:
412
+ _clear_id_cache(self.ownerElement)
413
+ self.childNodes[0].data = value
414
+
415
+ def unlink(self):
416
+ # This implementation does not call the base implementation
417
+ # since most of that is not needed, and the expense of the
418
+ # method call is not warranted. We duplicate the removal of
419
+ # children, but that's all we needed from the base class.
420
+ elem = self.ownerElement
421
+ if elem is not None:
422
+ del elem._attrs[self.nodeName]
423
+ del elem._attrsNS[(self.namespaceURI, self.localName)]
424
+ if self._is_id:
425
+ self._is_id = False
426
+ elem._magic_id_nodes -= 1
427
+ self.ownerDocument._magic_id_count -= 1
428
+ for child in self.childNodes:
429
+ child.unlink()
430
+ del self.childNodes[:]
431
+
432
+ def _get_isId(self):
433
+ if self._is_id:
434
+ return True
435
+ doc = self.ownerDocument
436
+ elem = self.ownerElement
437
+ if doc is None or elem is None:
438
+ return False
439
+
440
+ info = doc._get_elem_info(elem)
441
+ if info is None:
442
+ return False
443
+ if self.namespaceURI:
444
+ return info.isIdNS(self.namespaceURI, self.localName)
445
+ else:
446
+ return info.isId(self.nodeName)
447
+
448
+ def _get_schemaType(self):
449
+ doc = self.ownerDocument
450
+ elem = self.ownerElement
451
+ if doc is None or elem is None:
452
+ return _no_type
453
+
454
+ info = doc._get_elem_info(elem)
455
+ if info is None:
456
+ return _no_type
457
+ if self.namespaceURI:
458
+ return info.getAttributeTypeNS(self.namespaceURI, self.localName)
459
+ else:
460
+ return info.getAttributeType(self.nodeName)
461
+
462
+ defproperty(Attr, "isId", doc="True if this attribute is an ID.")
463
+ defproperty(Attr, "localName", doc="Namespace-local name of this attribute.")
464
+ defproperty(Attr, "schemaType", doc="Schema type for this attribute.")
465
+
466
+
467
+ class NamedNodeMap(NewStyle, GetattrMagic):
468
+ """The attribute list is a transient interface to the underlying
469
+ dictionaries. Mutations here will change the underlying element's
470
+ dictionary.
471
+
472
+ Ordering is imposed artificially and does not reflect the order of
473
+ attributes as found in an input document.
474
+ """
475
+
476
+ __slots__ = ('_attrs', '_attrsNS', '_ownerElement')
477
+
478
+ def __init__(self, attrs, attrsNS, ownerElement):
479
+ self._attrs = attrs
480
+ self._attrsNS = attrsNS
481
+ self._ownerElement = ownerElement
482
+
483
+ def _get_length(self):
484
+ return len(self._attrs)
485
+
486
+ def item(self, index):
487
+ try:
488
+ return self[self._attrs.keys()[index]]
489
+ except IndexError:
490
+ return None
491
+
492
+ def items(self):
493
+ L = []
494
+ for node in self._attrs.values():
495
+ L.append((node.nodeName, node.value))
496
+ return L
497
+
498
+ def itemsNS(self):
499
+ L = []
500
+ for node in self._attrs.values():
501
+ L.append(((node.namespaceURI, node.localName), node.value))
502
+ return L
503
+
504
+ def has_key(self, key):
505
+ if isinstance(key, StringTypes):
506
+ return self._attrs.has_key(key)
507
+ else:
508
+ return self._attrsNS.has_key(key)
509
+
510
+ def keys(self):
511
+ return self._attrs.keys()
512
+
513
+ def keysNS(self):
514
+ return self._attrsNS.keys()
515
+
516
+ def values(self):
517
+ return self._attrs.values()
518
+
519
+ def get(self, name, value=None):
520
+ return self._attrs.get(name, value)
521
+
522
+ __len__ = _get_length
523
+
524
+ def __cmp__(self, other):
525
+ if self._attrs is getattr(other, "_attrs", None):
526
+ return 0
527
+ else:
528
+ return cmp(id(self), id(other))
529
+
530
+ def __getitem__(self, attname_or_tuple):
531
+ if isinstance(attname_or_tuple, _TupleType):
532
+ return self._attrsNS[attname_or_tuple]
533
+ else:
534
+ return self._attrs[attname_or_tuple]
535
+
536
+ # same as set
537
+ def __setitem__(self, attname, value):
538
+ if isinstance(value, StringTypes):
539
+ try:
540
+ node = self._attrs[attname]
541
+ except KeyError:
542
+ node = Attr(attname)
543
+ node.ownerDocument = self._ownerElement.ownerDocument
544
+ self.setNamedItem(node)
545
+ node.value = value
546
+ else:
547
+ if not isinstance(value, Attr):
548
+ raise TypeError, "value must be a string or Attr object"
549
+ node = value
550
+ self.setNamedItem(node)
551
+
552
+ def getNamedItem(self, name):
553
+ try:
554
+ return self._attrs[name]
555
+ except KeyError:
556
+ return None
557
+
558
+ def getNamedItemNS(self, namespaceURI, localName):
559
+ try:
560
+ return self._attrsNS[(namespaceURI, localName)]
561
+ except KeyError:
562
+ return None
563
+
564
+ def removeNamedItem(self, name):
565
+ n = self.getNamedItem(name)
566
+ if n is not None:
567
+ _clear_id_cache(self._ownerElement)
568
+ del self._attrs[n.nodeName]
569
+ del self._attrsNS[(n.namespaceURI, n.localName)]
570
+ if n.__dict__.has_key('ownerElement'):
571
+ n.__dict__['ownerElement'] = None
572
+ return n
573
+ else:
574
+ raise xml.dom.NotFoundErr()
575
+
576
+ def removeNamedItemNS(self, namespaceURI, localName):
577
+ n = self.getNamedItemNS(namespaceURI, localName)
578
+ if n is not None:
579
+ _clear_id_cache(self._ownerElement)
580
+ del self._attrsNS[(n.namespaceURI, n.localName)]
581
+ del self._attrs[n.nodeName]
582
+ if n.__dict__.has_key('ownerElement'):
583
+ n.__dict__['ownerElement'] = None
584
+ return n
585
+ else:
586
+ raise xml.dom.NotFoundErr()
587
+
588
+ def setNamedItem(self, node):
589
+ if not isinstance(node, Attr):
590
+ raise xml.dom.HierarchyRequestErr(
591
+ "%s cannot be child of %s" % (repr(node), repr(self)))
592
+ old = self._attrs.get(node.name)
593
+ if old:
594
+ old.unlink()
595
+ old.ownerDocument = self._ownerElement.ownerDocument
596
+ self._attrs[node.name] = node
597
+ self._attrsNS[(node.namespaceURI, node.localName)] = node
598
+ node.ownerElement = self._ownerElement
599
+ _clear_id_cache(node.ownerElement)
600
+ return old
601
+
602
+ def setNamedItemNS(self, node):
603
+ return self.setNamedItem(node)
604
+
605
+ def __delitem__(self, attname_or_tuple):
606
+ node = self[attname_or_tuple]
607
+ _clear_id_cache(node.ownerElement)
608
+ node.unlink()
609
+
610
+ def __getstate__(self):
611
+ return self._attrs, self._attrsNS, self._ownerElement
612
+
613
+ def __setstate__(self, state):
614
+ self._attrs, self._attrsNS, self._ownerElement = state
615
+
616
+ defproperty(NamedNodeMap, "length",
617
+ doc="Number of nodes in the NamedNodeMap.")
618
+
619
+ AttributeList = NamedNodeMap
620
+
621
+
622
+ class TypeInfo(NewStyle):
623
+ __slots__ = 'namespace', 'name'
624
+
625
+ def __init__(self, namespace, name):
626
+ self.namespace = namespace
627
+ self.name = name
628
+
629
+ def __repr__(self):
630
+ if self.namespace:
631
+ return "<TypeInfo %s (from %s)>" % (`self.name`, `self.namespace`)
632
+ else:
633
+ return "<TypeInfo %s>" % `self.name`
634
+
635
+ def _get_name(self):
636
+ return self.name
637
+
638
+ def _get_namespace(self):
639
+ return self.namespace
640
+
641
+ _no_type = TypeInfo(None, None)
642
+
643
+ class Element(Node):
644
+ nodeType = Node.ELEMENT_NODE
645
+ nodeValue = None
646
+ schemaType = _no_type
647
+
648
+ _magic_id_nodes = 0
649
+
650
+ _child_node_types = (Node.ELEMENT_NODE,
651
+ Node.PROCESSING_INSTRUCTION_NODE,
652
+ Node.COMMENT_NODE,
653
+ Node.TEXT_NODE,
654
+ Node.CDATA_SECTION_NODE,
655
+ Node.ENTITY_REFERENCE_NODE)
656
+
657
+ def __init__(self, tagName, namespaceURI=EMPTY_NAMESPACE, prefix=None,
658
+ localName=None):
659
+ self.tagName = self.nodeName = tagName
660
+ self.prefix = prefix
661
+ self.namespaceURI = namespaceURI
662
+ self.childNodes = NodeList()
663
+
664
+ self._attrs = {} # attributes are double-indexed:
665
+ self._attrsNS = {} # tagName -> Attribute
666
+ # URI,localName -> Attribute
667
+ # in the future: consider lazy generation
668
+ # of attribute objects this is too tricky
669
+ # for now because of headaches with
670
+ # namespaces.
671
+
672
+ def _get_localName(self):
673
+ return self.tagName.split(":", 1)[-1]
674
+
675
+ def _get_tagName(self):
676
+ return self.tagName
677
+
678
+ def unlink(self):
679
+ for attr in self._attrs.values():
680
+ attr.unlink()
681
+ self._attrs = None
682
+ self._attrsNS = None
683
+ Node.unlink(self)
684
+
685
+ def getAttribute(self, attname):
686
+ try:
687
+ return self._attrs[attname].value
688
+ except KeyError:
689
+ return ""
690
+
691
+ def getAttributeNS(self, namespaceURI, localName):
692
+ try:
693
+ return self._attrsNS[(namespaceURI, localName)].value
694
+ except KeyError:
695
+ return ""
696
+
697
+ def setAttribute(self, attname, value):
698
+ attr = self.getAttributeNode(attname)
699
+ if attr is None:
700
+ attr = Attr(attname)
701
+ # for performance
702
+ d = attr.__dict__
703
+ d["value"] = d["nodeValue"] = value
704
+ d["ownerDocument"] = self.ownerDocument
705
+ self.setAttributeNode(attr)
706
+ elif value != attr.value:
707
+ d = attr.__dict__
708
+ d["value"] = d["nodeValue"] = value
709
+ if attr.isId:
710
+ _clear_id_cache(self)
711
+
712
+ def setAttributeNS(self, namespaceURI, qualifiedName, value):
713
+ prefix, localname = _nssplit(qualifiedName)
714
+ attr = self.getAttributeNodeNS(namespaceURI, localname)
715
+ if attr is None:
716
+ # for performance
717
+ attr = Attr(qualifiedName, namespaceURI, localname, prefix)
718
+ d = attr.__dict__
719
+ d["prefix"] = prefix
720
+ d["nodeName"] = qualifiedName
721
+ d["value"] = d["nodeValue"] = value
722
+ d["ownerDocument"] = self.ownerDocument
723
+ self.setAttributeNode(attr)
724
+ else:
725
+ d = attr.__dict__
726
+ if value != attr.value:
727
+ d["value"] = d["nodeValue"] = value
728
+ if attr.isId:
729
+ _clear_id_cache(self)
730
+ if attr.prefix != prefix:
731
+ d["prefix"] = prefix
732
+ d["nodeName"] = qualifiedName
733
+
734
+ def getAttributeNode(self, attrname):
735
+ return self._attrs.get(attrname)
736
+
737
+ def getAttributeNodeNS(self, namespaceURI, localName):
738
+ return self._attrsNS.get((namespaceURI, localName))
739
+
740
+ def setAttributeNode(self, attr):
741
+ if attr.ownerElement not in (None, self):
742
+ raise xml.dom.InuseAttributeErr("attribute node already owned")
743
+ old1 = self._attrs.get(attr.name, None)
744
+ if old1 is not None:
745
+ self.removeAttributeNode(old1)
746
+ old2 = self._attrsNS.get((attr.namespaceURI, attr.localName), None)
747
+ if old2 is not None and old2 is not old1:
748
+ self.removeAttributeNode(old2)
749
+ _set_attribute_node(self, attr)
750
+
751
+ if old1 is not attr:
752
+ # It might have already been part of this node, in which case
753
+ # it doesn't represent a change, and should not be returned.
754
+ return old1
755
+ if old2 is not attr:
756
+ return old2
757
+
758
+ setAttributeNodeNS = setAttributeNode
759
+
760
+ def removeAttribute(self, name):
761
+ try:
762
+ attr = self._attrs[name]
763
+ except KeyError:
764
+ raise xml.dom.NotFoundErr()
765
+ self.removeAttributeNode(attr)
766
+
767
+ def removeAttributeNS(self, namespaceURI, localName):
768
+ try:
769
+ attr = self._attrsNS[(namespaceURI, localName)]
770
+ except KeyError:
771
+ raise xml.dom.NotFoundErr()
772
+ self.removeAttributeNode(attr)
773
+
774
+ def removeAttributeNode(self, node):
775
+ if node is None:
776
+ raise xml.dom.NotFoundErr()
777
+ try:
778
+ self._attrs[node.name]
779
+ except KeyError:
780
+ raise xml.dom.NotFoundErr()
781
+ _clear_id_cache(self)
782
+ node.unlink()
783
+ # Restore this since the node is still useful and otherwise
784
+ # unlinked
785
+ node.ownerDocument = self.ownerDocument
786
+ return node
787
+
788
+ removeAttributeNodeNS = removeAttributeNode
789
+
790
+ def hasAttribute(self, name):
791
+ return self._attrs.has_key(name)
792
+
793
+ def hasAttributeNS(self, namespaceURI, localName):
794
+ return self._attrsNS.has_key((namespaceURI, localName))
795
+
796
+ def getElementsByTagName(self, name):
797
+ return _get_elements_by_tagName_helper(self, name, NodeList())
798
+
799
+ def getElementsByTagNameNS(self, namespaceURI, localName):
800
+ return _get_elements_by_tagName_ns_helper(
801
+ self, namespaceURI, localName, NodeList())
802
+
803
+ def __repr__(self):
804
+ return "<DOM Element: %s at %#x>" % (self.tagName, id(self))
805
+
806
+ def writexml(self, writer, indent="", addindent="", newl=""):
807
+ # indent = current indentation
808
+ # addindent = indentation to add to higher levels
809
+ # newl = newline string
810
+ writer.write(indent+"<" + self.tagName)
811
+
812
+ attrs = self._get_attributes()
813
+ a_names = attrs.keys()
814
+ a_names.sort()
815
+
816
+ for a_name in a_names:
817
+ writer.write(" %s=\"" % a_name)
818
+ _write_data(writer, attrs[a_name].value)
819
+ writer.write("\"")
820
+ if self.childNodes:
821
+ writer.write(">%s"%(newl))
822
+ for node in self.childNodes:
823
+ node.writexml(writer,indent+addindent,addindent,newl)
824
+ writer.write("%s</%s>%s" % (indent,self.tagName,newl))
825
+ else:
826
+ writer.write("/>%s"%(newl))
827
+
828
+ def _get_attributes(self):
829
+ return NamedNodeMap(self._attrs, self._attrsNS, self)
830
+
831
+ def hasAttributes(self):
832
+ if self._attrs:
833
+ return True
834
+ else:
835
+ return False
836
+
837
+ # DOM Level 3 attributes, based on the 22 Oct 2002 draft
838
+
839
+ def setIdAttribute(self, name):
840
+ idAttr = self.getAttributeNode(name)
841
+ self.setIdAttributeNode(idAttr)
842
+
843
+ def setIdAttributeNS(self, namespaceURI, localName):
844
+ idAttr = self.getAttributeNodeNS(namespaceURI, localName)
845
+ self.setIdAttributeNode(idAttr)
846
+
847
+ def setIdAttributeNode(self, idAttr):
848
+ if idAttr is None or not self.isSameNode(idAttr.ownerElement):
849
+ raise xml.dom.NotFoundErr()
850
+ if _get_containing_entref(self) is not None:
851
+ raise xml.dom.NoModificationAllowedErr()
852
+ if not idAttr._is_id:
853
+ idAttr.__dict__['_is_id'] = True
854
+ self._magic_id_nodes += 1
855
+ self.ownerDocument._magic_id_count += 1
856
+ _clear_id_cache(self)
857
+
858
+ defproperty(Element, "attributes",
859
+ doc="NamedNodeMap of attributes on the element.")
860
+ defproperty(Element, "localName",
861
+ doc="Namespace-local name of this element.")
862
+
863
+
864
+ def _set_attribute_node(element, attr):
865
+ _clear_id_cache(element)
866
+ element._attrs[attr.name] = attr
867
+ element._attrsNS[(attr.namespaceURI, attr.localName)] = attr
868
+
869
+ # This creates a circular reference, but Element.unlink()
870
+ # breaks the cycle since the references to the attribute
871
+ # dictionaries are tossed.
872
+ attr.__dict__['ownerElement'] = element
873
+
874
+
875
+ class Childless:
876
+ """Mixin that makes childless-ness easy to implement and avoids
877
+ the complexity of the Node methods that deal with children.
878
+ """
879
+
880
+ attributes = None
881
+ childNodes = EmptyNodeList()
882
+ firstChild = None
883
+ lastChild = None
884
+
885
+ def _get_firstChild(self):
886
+ return None
887
+
888
+ def _get_lastChild(self):
889
+ return None
890
+
891
+ def appendChild(self, node):
892
+ raise xml.dom.HierarchyRequestErr(
893
+ self.nodeName + " nodes cannot have children")
894
+
895
+ def hasChildNodes(self):
896
+ return False
897
+
898
+ def insertBefore(self, newChild, refChild):
899
+ raise xml.dom.HierarchyRequestErr(
900
+ self.nodeName + " nodes do not have children")
901
+
902
+ def removeChild(self, oldChild):
903
+ raise xml.dom.NotFoundErr(
904
+ self.nodeName + " nodes do not have children")
905
+
906
+ def replaceChild(self, newChild, oldChild):
907
+ raise xml.dom.HierarchyRequestErr(
908
+ self.nodeName + " nodes do not have children")
909
+
910
+
911
+ class ProcessingInstruction(Childless, Node):
912
+ nodeType = Node.PROCESSING_INSTRUCTION_NODE
913
+
914
+ def __init__(self, target, data):
915
+ self.target = self.nodeName = target
916
+ self.data = self.nodeValue = data
917
+
918
+ def _get_data(self):
919
+ return self.data
920
+ def _set_data(self, value):
921
+ d = self.__dict__
922
+ d['data'] = d['nodeValue'] = value
923
+
924
+ def _get_target(self):
925
+ return self.target
926
+ def _set_target(self, value):
927
+ d = self.__dict__
928
+ d['target'] = d['nodeName'] = value
929
+
930
+ def __setattr__(self, name, value):
931
+ if name == "data" or name == "nodeValue":
932
+ self.__dict__['data'] = self.__dict__['nodeValue'] = value
933
+ elif name == "target" or name == "nodeName":
934
+ self.__dict__['target'] = self.__dict__['nodeName'] = value
935
+ else:
936
+ self.__dict__[name] = value
937
+
938
+ def writexml(self, writer, indent="", addindent="", newl=""):
939
+ writer.write("%s<?%s %s?>%s" % (indent,self.target, self.data, newl))
940
+
941
+
942
+ class CharacterData(Childless, Node):
943
+ def _get_length(self):
944
+ return len(self.data)
945
+ __len__ = _get_length
946
+
947
+ def _get_data(self):
948
+ return self.__dict__['data']
949
+ def _set_data(self, data):
950
+ d = self.__dict__
951
+ d['data'] = d['nodeValue'] = data
952
+
953
+ _get_nodeValue = _get_data
954
+ _set_nodeValue = _set_data
955
+
956
+ def __setattr__(self, name, value):
957
+ if name == "data" or name == "nodeValue":
958
+ self.__dict__['data'] = self.__dict__['nodeValue'] = value
959
+ else:
960
+ self.__dict__[name] = value
961
+
962
+ def __repr__(self):
963
+ data = self.data
964
+ if len(data) > 10:
965
+ dotdotdot = "..."
966
+ else:
967
+ dotdotdot = ""
968
+ return "<DOM %s node \"%s%s\">" % (
969
+ self.__class__.__name__, data[0:10], dotdotdot)
970
+
971
+ def substringData(self, offset, count):
972
+ if offset < 0:
973
+ raise xml.dom.IndexSizeErr("offset cannot be negative")
974
+ if offset > len(self.data):
975
+ raise xml.dom.IndexSizeErr("offset cannot be beyond end of data")
976
+ if count < 0:
977
+ raise xml.dom.IndexSizeErr("count cannot be negative")
978
+ return self.data[offset:offset+count]
979
+
980
+ def appendData(self, arg):
981
+ self.data = self.data + arg
982
+
983
+ def insertData(self, offset, arg):
984
+ if offset < 0:
985
+ raise xml.dom.IndexSizeErr("offset cannot be negative")
986
+ if offset > len(self.data):
987
+ raise xml.dom.IndexSizeErr("offset cannot be beyond end of data")
988
+ if arg:
989
+ self.data = "%s%s%s" % (
990
+ self.data[:offset], arg, self.data[offset:])
991
+
992
+ def deleteData(self, offset, count):
993
+ if offset < 0:
994
+ raise xml.dom.IndexSizeErr("offset cannot be negative")
995
+ if offset > len(self.data):
996
+ raise xml.dom.IndexSizeErr("offset cannot be beyond end of data")
997
+ if count < 0:
998
+ raise xml.dom.IndexSizeErr("count cannot be negative")
999
+ if count:
1000
+ self.data = self.data[:offset] + self.data[offset+count:]
1001
+
1002
+ def replaceData(self, offset, count, arg):
1003
+ if offset < 0:
1004
+ raise xml.dom.IndexSizeErr("offset cannot be negative")
1005
+ if offset > len(self.data):
1006
+ raise xml.dom.IndexSizeErr("offset cannot be beyond end of data")
1007
+ if count < 0:
1008
+ raise xml.dom.IndexSizeErr("count cannot be negative")
1009
+ if count:
1010
+ self.data = "%s%s%s" % (
1011
+ self.data[:offset], arg, self.data[offset+count:])
1012
+
1013
+ defproperty(CharacterData, "length", doc="Length of the string data.")
1014
+
1015
+
1016
+ class Text(CharacterData):
1017
+
1018
+ # This class doesn't have an __init__() by design; the intent is
1019
+ # to speed construction of new instances. Once an instance is
1020
+ # created, the .data and .ownerDocument attributes will need to be
1021
+ # initialized. Subclasses may add an __init__() and initialize
1022
+ # those members there or require them to be initialized later.
1023
+
1024
+ nodeType = Node.TEXT_NODE
1025
+ nodeName = "#text"
1026
+ attributes = None
1027
+
1028
+ def splitText(self, offset):
1029
+ if offset < 0 or offset > len(self.data):
1030
+ raise xml.dom.IndexSizeErr("illegal offset value")
1031
+ newText = self.__class__()
1032
+ newText.data = self.data[offset:]
1033
+ newText.ownerDocument = self.ownerDocument
1034
+ next = self.nextSibling
1035
+ if self.parentNode and self in self.parentNode.childNodes:
1036
+ if next is None:
1037
+ self.parentNode.appendChild(newText)
1038
+ else:
1039
+ self.parentNode.insertBefore(newText, next)
1040
+ self.data = self.data[:offset]
1041
+ return newText
1042
+
1043
+ def writexml(self, writer, indent="", addindent="", newl=""):
1044
+ _write_data(writer, "%s%s%s"%(indent, self.data, newl))
1045
+
1046
+ # DOM Level 3 (WD 9 April 2002)
1047
+
1048
+ def _get_wholeText(self):
1049
+ L = [self.data]
1050
+ n = self.previousSibling
1051
+ while n is not None:
1052
+ if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE):
1053
+ L.insert(0, n.data)
1054
+ n = n.previousSibling
1055
+ else:
1056
+ break
1057
+ n = self.nextSibling
1058
+ while n is not None:
1059
+ if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE):
1060
+ L.append(n.data)
1061
+ n = n.nextSibling
1062
+ else:
1063
+ break
1064
+ return ''.join(L)
1065
+
1066
+ def replaceWholeText(self, content):
1067
+ # XXX This needs to be seriously changed if minidom ever
1068
+ # supports EntityReference nodes.
1069
+ parent = self.parentNode
1070
+ n = self.previousSibling
1071
+ while n is not None:
1072
+ if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE):
1073
+ next = n.previousSibling
1074
+ parent.removeChild(n)
1075
+ n = next
1076
+ else:
1077
+ break
1078
+ n = self.nextSibling
1079
+ if not content:
1080
+ parent.removeChild(self)
1081
+ while n is not None:
1082
+ if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE):
1083
+ next = n.nextSibling
1084
+ parent.removeChild(n)
1085
+ n = next
1086
+ else:
1087
+ break
1088
+ if content:
1089
+ d = self.__dict__
1090
+ d['data'] = content
1091
+ d['nodeValue'] = content
1092
+ return self
1093
+ else:
1094
+ return None
1095
+
1096
+ def _get_isWhitespaceInElementContent(self):
1097
+ if self.data.strip():
1098
+ return False
1099
+ elem = _get_containing_element(self)
1100
+ if elem is None:
1101
+ return False
1102
+ info = self.ownerDocument._get_elem_info(elem)
1103
+ if info is None:
1104
+ return False
1105
+ else:
1106
+ return info.isElementContent()
1107
+
1108
+ defproperty(Text, "isWhitespaceInElementContent",
1109
+ doc="True iff this text node contains only whitespace"
1110
+ " and is in element content.")
1111
+ defproperty(Text, "wholeText",
1112
+ doc="The text of all logically-adjacent text nodes.")
1113
+
1114
+
1115
+ def _get_containing_element(node):
1116
+ c = node.parentNode
1117
+ while c is not None:
1118
+ if c.nodeType == Node.ELEMENT_NODE:
1119
+ return c
1120
+ c = c.parentNode
1121
+ return None
1122
+
1123
+ def _get_containing_entref(node):
1124
+ c = node.parentNode
1125
+ while c is not None:
1126
+ if c.nodeType == Node.ENTITY_REFERENCE_NODE:
1127
+ return c
1128
+ c = c.parentNode
1129
+ return None
1130
+
1131
+
1132
+ class Comment(Childless, CharacterData):
1133
+ nodeType = Node.COMMENT_NODE
1134
+ nodeName = "#comment"
1135
+
1136
+ def __init__(self, data):
1137
+ self.data = self.nodeValue = data
1138
+
1139
+ def writexml(self, writer, indent="", addindent="", newl=""):
1140
+ writer.write("%s<!--%s-->%s" % (indent, self.data, newl))
1141
+
1142
+
1143
+ class CDATASection(Text):
1144
+ nodeType = Node.CDATA_SECTION_NODE
1145
+ nodeName = "#cdata-section"
1146
+
1147
+ def writexml(self, writer, indent="", addindent="", newl=""):
1148
+ if self.data.find("]]>") >= 0:
1149
+ raise ValueError("']]>' not allowed in a CDATA section")
1150
+ writer.write("<![CDATA[%s]]>" % self.data)
1151
+
1152
+
1153
+ class ReadOnlySequentialNamedNodeMap(NewStyle, GetattrMagic):
1154
+ __slots__ = '_seq',
1155
+
1156
+ def __init__(self, seq=()):
1157
+ # seq should be a list or tuple
1158
+ self._seq = seq
1159
+
1160
+ def __len__(self):
1161
+ return len(self._seq)
1162
+
1163
+ def _get_length(self):
1164
+ return len(self._seq)
1165
+
1166
+ def getNamedItem(self, name):
1167
+ for n in self._seq:
1168
+ if n.nodeName == name:
1169
+ return n
1170
+
1171
+ def getNamedItemNS(self, namespaceURI, localName):
1172
+ for n in self._seq:
1173
+ if n.namespaceURI == namespaceURI and n.localName == localName:
1174
+ return n
1175
+
1176
+ def __getitem__(self, name_or_tuple):
1177
+ if isinstance(name_or_tuple, _TupleType):
1178
+ node = self.getNamedItemNS(*name_or_tuple)
1179
+ else:
1180
+ node = self.getNamedItem(name_or_tuple)
1181
+ if node is None:
1182
+ raise KeyError, name_or_tuple
1183
+ return node
1184
+
1185
+ def item(self, index):
1186
+ if index < 0:
1187
+ return None
1188
+ try:
1189
+ return self._seq[index]
1190
+ except IndexError:
1191
+ return None
1192
+
1193
+ def removeNamedItem(self, name):
1194
+ raise xml.dom.NoModificationAllowedErr(
1195
+ "NamedNodeMap instance is read-only")
1196
+
1197
+ def removeNamedItemNS(self, namespaceURI, localName):
1198
+ raise xml.dom.NoModificationAllowedErr(
1199
+ "NamedNodeMap instance is read-only")
1200
+
1201
+ def setNamedItem(self, node):
1202
+ raise xml.dom.NoModificationAllowedErr(
1203
+ "NamedNodeMap instance is read-only")
1204
+
1205
+ def setNamedItemNS(self, node):
1206
+ raise xml.dom.NoModificationAllowedErr(
1207
+ "NamedNodeMap instance is read-only")
1208
+
1209
+ def __getstate__(self):
1210
+ return [self._seq]
1211
+
1212
+ def __setstate__(self, state):
1213
+ assert len(state) == 1
1214
+ self._seq = state[0]
1215
+
1216
+ defproperty(ReadOnlySequentialNamedNodeMap, "length",
1217
+ doc="Number of entries in the NamedNodeMap.")
1218
+
1219
+
1220
+ class Identified:
1221
+ """Mix-in class that supports the publicId and systemId attributes."""
1222
+
1223
+ def _identified_mixin_init(self, publicId, systemId):
1224
+ self.publicId = publicId
1225
+ self.systemId = systemId
1226
+
1227
+ def _get_publicId(self):
1228
+ return self.publicId
1229
+
1230
+ def _get_systemId(self):
1231
+ return self.systemId
1232
+
1233
+ class DocumentType(Identified, Childless, Node):
1234
+ nodeType = Node.DOCUMENT_TYPE_NODE
1235
+ nodeValue = None
1236
+ name = None
1237
+ publicId = None
1238
+ systemId = None
1239
+ internalSubset = None
1240
+
1241
+ def __init__(self, qualifiedName):
1242
+ self.entities = ReadOnlySequentialNamedNodeMap()
1243
+ self.notations = ReadOnlySequentialNamedNodeMap()
1244
+ if qualifiedName:
1245
+ prefix, localname = _nssplit(qualifiedName)
1246
+ self.name = localname
1247
+ self.nodeName = self.name
1248
+
1249
+ def _get_internalSubset(self):
1250
+ return self.internalSubset
1251
+
1252
+ def cloneNode(self, deep):
1253
+ if self.ownerDocument is None:
1254
+ # it's ok
1255
+ clone = DocumentType(None)
1256
+ clone.name = self.name
1257
+ clone.nodeName = self.name
1258
+ operation = xml.dom.UserDataHandler.NODE_CLONED
1259
+ if deep:
1260
+ clone.entities._seq = []
1261
+ clone.notations._seq = []
1262
+ for n in self.notations._seq:
1263
+ notation = Notation(n.nodeName, n.publicId, n.systemId)
1264
+ clone.notations._seq.append(notation)
1265
+ n._call_user_data_handler(operation, n, notation)
1266
+ for e in self.entities._seq:
1267
+ entity = Entity(e.nodeName, e.publicId, e.systemId,
1268
+ e.notationName)
1269
+ entity.actualEncoding = e.actualEncoding
1270
+ entity.encoding = e.encoding
1271
+ entity.version = e.version
1272
+ clone.entities._seq.append(entity)
1273
+ e._call_user_data_handler(operation, n, entity)
1274
+ self._call_user_data_handler(operation, self, clone)
1275
+ return clone
1276
+ else:
1277
+ return None
1278
+
1279
+ def writexml(self, writer, indent="", addindent="", newl=""):
1280
+ writer.write("<!DOCTYPE ")
1281
+ writer.write(self.name)
1282
+ if self.publicId:
1283
+ writer.write("\n PUBLIC '%s'\n '%s'"
1284
+ % (self.publicId, self.systemId))
1285
+ elif self.systemId:
1286
+ writer.write("\n SYSTEM '%s'" % self.systemId)
1287
+ if self.internalSubset is not None:
1288
+ writer.write(" [")
1289
+ writer.write(self.internalSubset)
1290
+ writer.write("]")
1291
+ writer.write(">\n")
1292
+
1293
+ class Entity(Identified, Node):
1294
+ attributes = None
1295
+ nodeType = Node.ENTITY_NODE
1296
+ nodeValue = None
1297
+
1298
+ actualEncoding = None
1299
+ encoding = None
1300
+ version = None
1301
+
1302
+ def __init__(self, name, publicId, systemId, notation):
1303
+ self.nodeName = name
1304
+ self.notationName = notation
1305
+ self.childNodes = NodeList()
1306
+ self._identified_mixin_init(publicId, systemId)
1307
+
1308
+ def _get_actualEncoding(self):
1309
+ return self.actualEncoding
1310
+
1311
+ def _get_encoding(self):
1312
+ return self.encoding
1313
+
1314
+ def _get_version(self):
1315
+ return self.version
1316
+
1317
+ def appendChild(self, newChild):
1318
+ raise xml.dom.HierarchyRequestErr(
1319
+ "cannot append children to an entity node")
1320
+
1321
+ def insertBefore(self, newChild, refChild):
1322
+ raise xml.dom.HierarchyRequestErr(
1323
+ "cannot insert children below an entity node")
1324
+
1325
+ def removeChild(self, oldChild):
1326
+ raise xml.dom.HierarchyRequestErr(
1327
+ "cannot remove children from an entity node")
1328
+
1329
+ def replaceChild(self, newChild, oldChild):
1330
+ raise xml.dom.HierarchyRequestErr(
1331
+ "cannot replace children of an entity node")
1332
+
1333
+ class Notation(Identified, Childless, Node):
1334
+ nodeType = Node.NOTATION_NODE
1335
+ nodeValue = None
1336
+
1337
+ def __init__(self, name, publicId, systemId):
1338
+ self.nodeName = name
1339
+ self._identified_mixin_init(publicId, systemId)
1340
+
1341
+
1342
+ class DOMImplementation(DOMImplementationLS):
1343
+ _features = [("core", "1.0"),
1344
+ ("core", "2.0"),
1345
+ ("core", "3.0"),
1346
+ ("core", None),
1347
+ ("xml", "1.0"),
1348
+ ("xml", "2.0"),
1349
+ ("xml", "3.0"),
1350
+ ("xml", None),
1351
+ ("ls-load", "3.0"),
1352
+ ("ls-load", None),
1353
+ ]
1354
+
1355
+ def hasFeature(self, feature, version):
1356
+ if version == "":
1357
+ version = None
1358
+ return (feature.lower(), version) in self._features
1359
+
1360
+ def createDocument(self, namespaceURI, qualifiedName, doctype):
1361
+ if doctype and doctype.parentNode is not None:
1362
+ raise xml.dom.WrongDocumentErr(
1363
+ "doctype object owned by another DOM tree")
1364
+ doc = self._create_document()
1365
+
1366
+ add_root_element = not (namespaceURI is None
1367
+ and qualifiedName is None
1368
+ and doctype is None)
1369
+
1370
+ if not qualifiedName and add_root_element:
1371
+ # The spec is unclear what to raise here; SyntaxErr
1372
+ # would be the other obvious candidate. Since Xerces raises
1373
+ # InvalidCharacterErr, and since SyntaxErr is not listed
1374
+ # for createDocument, that seems to be the better choice.
1375
+ # XXX: need to check for illegal characters here and in
1376
+ # createElement.
1377
+
1378
+ # DOM Level III clears this up when talking about the return value
1379
+ # of this function. If namespaceURI, qName and DocType are
1380
+ # Null the document is returned without a document element
1381
+ # Otherwise if doctype or namespaceURI are not None
1382
+ # Then we go back to the above problem
1383
+ raise xml.dom.InvalidCharacterErr("Element with no name")
1384
+
1385
+ if add_root_element:
1386
+ prefix, localname = _nssplit(qualifiedName)
1387
+ if prefix == "xml" \
1388
+ and namespaceURI != "http://www.w3.org/XML/1998/namespace":
1389
+ raise xml.dom.NamespaceErr("illegal use of 'xml' prefix")
1390
+ if prefix and not namespaceURI:
1391
+ raise xml.dom.NamespaceErr(
1392
+ "illegal use of prefix without namespaces")
1393
+ element = doc.createElementNS(namespaceURI, qualifiedName)
1394
+ if doctype:
1395
+ doc.appendChild(doctype)
1396
+ doc.appendChild(element)
1397
+
1398
+ if doctype:
1399
+ doctype.parentNode = doctype.ownerDocument = doc
1400
+
1401
+ doc.doctype = doctype
1402
+ doc.implementation = self
1403
+ return doc
1404
+
1405
+ def createDocumentType(self, qualifiedName, publicId, systemId):
1406
+ doctype = DocumentType(qualifiedName)
1407
+ doctype.publicId = publicId
1408
+ doctype.systemId = systemId
1409
+ return doctype
1410
+
1411
+ # DOM Level 3 (WD 9 April 2002)
1412
+
1413
+ def getInterface(self, feature):
1414
+ if self.hasFeature(feature, None):
1415
+ return self
1416
+ else:
1417
+ return None
1418
+
1419
+ # internal
1420
+ def _create_document(self):
1421
+ return Document()
1422
+
1423
+ class ElementInfo(NewStyle):
1424
+ """Object that represents content-model information for an element.
1425
+
1426
+ This implementation is not expected to be used in practice; DOM
1427
+ builders should provide implementations which do the right thing
1428
+ using information available to it.
1429
+
1430
+ """
1431
+
1432
+ __slots__ = 'tagName',
1433
+
1434
+ def __init__(self, name):
1435
+ self.tagName = name
1436
+
1437
+ def getAttributeType(self, aname):
1438
+ return _no_type
1439
+
1440
+ def getAttributeTypeNS(self, namespaceURI, localName):
1441
+ return _no_type
1442
+
1443
+ def isElementContent(self):
1444
+ return False
1445
+
1446
+ def isEmpty(self):
1447
+ """Returns true iff this element is declared to have an EMPTY
1448
+ content model."""
1449
+ return False
1450
+
1451
+ def isId(self, aname):
1452
+ """Returns true iff the named attribte is a DTD-style ID."""
1453
+ return False
1454
+
1455
+ def isIdNS(self, namespaceURI, localName):
1456
+ """Returns true iff the identified attribute is a DTD-style ID."""
1457
+ return False
1458
+
1459
+ def __getstate__(self):
1460
+ return self.tagName
1461
+
1462
+ def __setstate__(self, state):
1463
+ self.tagName = state
1464
+
1465
+ def _clear_id_cache(node):
1466
+ if node.nodeType == Node.DOCUMENT_NODE:
1467
+ node._id_cache.clear()
1468
+ node._id_search_stack = None
1469
+ elif _in_document(node):
1470
+ node.ownerDocument._id_cache.clear()
1471
+ node.ownerDocument._id_search_stack= None
1472
+
1473
+ class Document(Node, DocumentLS):
1474
+ _child_node_types = (Node.ELEMENT_NODE, Node.PROCESSING_INSTRUCTION_NODE,
1475
+ Node.COMMENT_NODE, Node.DOCUMENT_TYPE_NODE)
1476
+
1477
+ nodeType = Node.DOCUMENT_NODE
1478
+ nodeName = "#document"
1479
+ nodeValue = None
1480
+ attributes = None
1481
+ doctype = None
1482
+ parentNode = None
1483
+ previousSibling = nextSibling = None
1484
+
1485
+ implementation = DOMImplementation()
1486
+
1487
+ # Document attributes from Level 3 (WD 9 April 2002)
1488
+
1489
+ actualEncoding = None
1490
+ encoding = None
1491
+ standalone = None
1492
+ version = None
1493
+ strictErrorChecking = False
1494
+ errorHandler = None
1495
+ documentURI = None
1496
+
1497
+ _magic_id_count = 0
1498
+
1499
+ def __init__(self):
1500
+ self.childNodes = NodeList()
1501
+ # mapping of (namespaceURI, localName) -> ElementInfo
1502
+ # and tagName -> ElementInfo
1503
+ self._elem_info = {}
1504
+ self._id_cache = {}
1505
+ self._id_search_stack = None
1506
+
1507
+ def _get_elem_info(self, element):
1508
+ if element.namespaceURI:
1509
+ key = element.namespaceURI, element.localName
1510
+ else:
1511
+ key = element.tagName
1512
+ return self._elem_info.get(key)
1513
+
1514
+ def _get_actualEncoding(self):
1515
+ return self.actualEncoding
1516
+
1517
+ def _get_doctype(self):
1518
+ return self.doctype
1519
+
1520
+ def _get_documentURI(self):
1521
+ return self.documentURI
1522
+
1523
+ def _get_encoding(self):
1524
+ return self.encoding
1525
+
1526
+ def _get_errorHandler(self):
1527
+ return self.errorHandler
1528
+
1529
+ def _get_standalone(self):
1530
+ return self.standalone
1531
+
1532
+ def _get_strictErrorChecking(self):
1533
+ return self.strictErrorChecking
1534
+
1535
+ def _get_version(self):
1536
+ return self.version
1537
+
1538
+ def appendChild(self, node):
1539
+ if node.nodeType not in self._child_node_types:
1540
+ raise xml.dom.HierarchyRequestErr(
1541
+ "%s cannot be child of %s" % (repr(node), repr(self)))
1542
+ if node.parentNode is not None:
1543
+ # This needs to be done before the next test since this
1544
+ # may *be* the document element, in which case it should
1545
+ # end up re-ordered to the end.
1546
+ node.parentNode.removeChild(node)
1547
+
1548
+ if node.nodeType == Node.ELEMENT_NODE \
1549
+ and self._get_documentElement():
1550
+ raise xml.dom.HierarchyRequestErr(
1551
+ "two document elements disallowed")
1552
+ return Node.appendChild(self, node)
1553
+
1554
+ def removeChild(self, oldChild):
1555
+ try:
1556
+ self.childNodes.remove(oldChild)
1557
+ except ValueError:
1558
+ raise xml.dom.NotFoundErr()
1559
+ oldChild.nextSibling = oldChild.previousSibling = None
1560
+ oldChild.parentNode = None
1561
+ if self.documentElement is oldChild:
1562
+ self.documentElement = None
1563
+
1564
+ return oldChild
1565
+
1566
+ def _get_documentElement(self):
1567
+ for node in self.childNodes:
1568
+ if node.nodeType == Node.ELEMENT_NODE:
1569
+ return node
1570
+
1571
+ def unlink(self):
1572
+ if self.doctype is not None:
1573
+ self.doctype.unlink()
1574
+ self.doctype = None
1575
+ Node.unlink(self)
1576
+
1577
+ def cloneNode(self, deep):
1578
+ if not deep:
1579
+ return None
1580
+ clone = self.implementation.createDocument(None, None, None)
1581
+ clone.encoding = self.encoding
1582
+ clone.standalone = self.standalone
1583
+ clone.version = self.version
1584
+ for n in self.childNodes:
1585
+ childclone = _clone_node(n, deep, clone)
1586
+ assert childclone.ownerDocument.isSameNode(clone)
1587
+ clone.childNodes.append(childclone)
1588
+ if childclone.nodeType == Node.DOCUMENT_NODE:
1589
+ assert clone.documentElement is None
1590
+ elif childclone.nodeType == Node.DOCUMENT_TYPE_NODE:
1591
+ assert clone.doctype is None
1592
+ clone.doctype = childclone
1593
+ childclone.parentNode = clone
1594
+ self._call_user_data_handler(xml.dom.UserDataHandler.NODE_CLONED,
1595
+ self, clone)
1596
+ return clone
1597
+
1598
+ def createDocumentFragment(self):
1599
+ d = DocumentFragment()
1600
+ d.ownerDocument = self
1601
+ return d
1602
+
1603
+ def createElement(self, tagName):
1604
+ e = Element(tagName)
1605
+ e.ownerDocument = self
1606
+ return e
1607
+
1608
+ def createTextNode(self, data):
1609
+ if not isinstance(data, StringTypes):
1610
+ raise TypeError, "node contents must be a string"
1611
+ t = Text()
1612
+ t.data = data
1613
+ t.ownerDocument = self
1614
+ return t
1615
+
1616
+ def createCDATASection(self, data):
1617
+ if not isinstance(data, StringTypes):
1618
+ raise TypeError, "node contents must be a string"
1619
+ c = CDATASection()
1620
+ c.data = data
1621
+ c.ownerDocument = self
1622
+ return c
1623
+
1624
+ def createComment(self, data):
1625
+ c = Comment(data)
1626
+ c.ownerDocument = self
1627
+ return c
1628
+
1629
+ def createProcessingInstruction(self, target, data):
1630
+ p = ProcessingInstruction(target, data)
1631
+ p.ownerDocument = self
1632
+ return p
1633
+
1634
+ def createAttribute(self, qName):
1635
+ a = Attr(qName)
1636
+ a.ownerDocument = self
1637
+ a.value = ""
1638
+ return a
1639
+
1640
+ def createElementNS(self, namespaceURI, qualifiedName):
1641
+ prefix, localName = _nssplit(qualifiedName)
1642
+ e = Element(qualifiedName, namespaceURI, prefix)
1643
+ e.ownerDocument = self
1644
+ return e
1645
+
1646
+ def createAttributeNS(self, namespaceURI, qualifiedName):
1647
+ prefix, localName = _nssplit(qualifiedName)
1648
+ a = Attr(qualifiedName, namespaceURI, localName, prefix)
1649
+ a.ownerDocument = self
1650
+ a.value = ""
1651
+ return a
1652
+
1653
+ # A couple of implementation-specific helpers to create node types
1654
+ # not supported by the W3C DOM specs:
1655
+
1656
+ def _create_entity(self, name, publicId, systemId, notationName):
1657
+ e = Entity(name, publicId, systemId, notationName)
1658
+ e.ownerDocument = self
1659
+ return e
1660
+
1661
+ def _create_notation(self, name, publicId, systemId):
1662
+ n = Notation(name, publicId, systemId)
1663
+ n.ownerDocument = self
1664
+ return n
1665
+
1666
+ def getElementById(self, id):
1667
+ if self._id_cache.has_key(id):
1668
+ return self._id_cache[id]
1669
+ if not (self._elem_info or self._magic_id_count):
1670
+ return None
1671
+
1672
+ stack = self._id_search_stack
1673
+ if stack is None:
1674
+ # we never searched before, or the cache has been cleared
1675
+ stack = [self.documentElement]
1676
+ self._id_search_stack = stack
1677
+ elif not stack:
1678
+ # Previous search was completed and cache is still valid;
1679
+ # no matching node.
1680
+ return None
1681
+
1682
+ result = None
1683
+ while stack:
1684
+ node = stack.pop()
1685
+ # add child elements to stack for continued searching
1686
+ stack.extend([child for child in node.childNodes
1687
+ if child.nodeType in _nodeTypes_with_children])
1688
+ # check this node
1689
+ info = self._get_elem_info(node)
1690
+ if info:
1691
+ # We have to process all ID attributes before
1692
+ # returning in order to get all the attributes set to
1693
+ # be IDs using Element.setIdAttribute*().
1694
+ for attr in node.attributes.values():
1695
+ if attr.namespaceURI:
1696
+ if info.isIdNS(attr.namespaceURI, attr.localName):
1697
+ self._id_cache[attr.value] = node
1698
+ if attr.value == id:
1699
+ result = node
1700
+ elif not node._magic_id_nodes:
1701
+ break
1702
+ elif info.isId(attr.name):
1703
+ self._id_cache[attr.value] = node
1704
+ if attr.value == id:
1705
+ result = node
1706
+ elif not node._magic_id_nodes:
1707
+ break
1708
+ elif attr._is_id:
1709
+ self._id_cache[attr.value] = node
1710
+ if attr.value == id:
1711
+ result = node
1712
+ elif node._magic_id_nodes == 1:
1713
+ break
1714
+ elif node._magic_id_nodes:
1715
+ for attr in node.attributes.values():
1716
+ if attr._is_id:
1717
+ self._id_cache[attr.value] = node
1718
+ if attr.value == id:
1719
+ result = node
1720
+ if result is not None:
1721
+ break
1722
+ return result
1723
+
1724
+ def getElementsByTagName(self, name):
1725
+ return _get_elements_by_tagName_helper(self, name, NodeList())
1726
+
1727
+ def getElementsByTagNameNS(self, namespaceURI, localName):
1728
+ return _get_elements_by_tagName_ns_helper(
1729
+ self, namespaceURI, localName, NodeList())
1730
+
1731
+ def isSupported(self, feature, version):
1732
+ return self.implementation.hasFeature(feature, version)
1733
+
1734
+ def importNode(self, node, deep):
1735
+ if node.nodeType == Node.DOCUMENT_NODE:
1736
+ raise xml.dom.NotSupportedErr("cannot import document nodes")
1737
+ elif node.nodeType == Node.DOCUMENT_TYPE_NODE:
1738
+ raise xml.dom.NotSupportedErr("cannot import document type nodes")
1739
+ return _clone_node(node, deep, self)
1740
+
1741
+ def writexml(self, writer, indent="", addindent="", newl="",
1742
+ encoding = None):
1743
+ if encoding is None:
1744
+ writer.write('<?xml version="1.0" ?>\n')
1745
+ else:
1746
+ writer.write('<?xml version="1.0" encoding="%s"?>\n' % encoding)
1747
+ for node in self.childNodes:
1748
+ node.writexml(writer, indent, addindent, newl)
1749
+
1750
+ # DOM Level 3 (WD 9 April 2002)
1751
+
1752
+ def renameNode(self, n, namespaceURI, name):
1753
+ if n.ownerDocument is not self:
1754
+ raise xml.dom.WrongDocumentErr(
1755
+ "cannot rename nodes from other documents;\n"
1756
+ "expected %s,\nfound %s" % (self, n.ownerDocument))
1757
+ if n.nodeType not in (Node.ELEMENT_NODE, Node.ATTRIBUTE_NODE):
1758
+ raise xml.dom.NotSupportedErr(
1759
+ "renameNode() only applies to element and attribute nodes")
1760
+ if namespaceURI != EMPTY_NAMESPACE:
1761
+ if ':' in name:
1762
+ prefix, localName = name.split(':', 1)
1763
+ if ( prefix == "xmlns"
1764
+ and namespaceURI != xml.dom.XMLNS_NAMESPACE):
1765
+ raise xml.dom.NamespaceErr(
1766
+ "illegal use of 'xmlns' prefix")
1767
+ else:
1768
+ if ( name == "xmlns"
1769
+ and namespaceURI != xml.dom.XMLNS_NAMESPACE
1770
+ and n.nodeType == Node.ATTRIBUTE_NODE):
1771
+ raise xml.dom.NamespaceErr(
1772
+ "illegal use of the 'xmlns' attribute")
1773
+ prefix = None
1774
+ localName = name
1775
+ else:
1776
+ prefix = None
1777
+ localName = None
1778
+ if n.nodeType == Node.ATTRIBUTE_NODE:
1779
+ element = n.ownerElement
1780
+ if element is not None:
1781
+ is_id = n._is_id
1782
+ element.removeAttributeNode(n)
1783
+ else:
1784
+ element = None
1785
+ # avoid __setattr__
1786
+ d = n.__dict__
1787
+ d['prefix'] = prefix
1788
+ d['localName'] = localName
1789
+ d['namespaceURI'] = namespaceURI
1790
+ d['nodeName'] = name
1791
+ if n.nodeType == Node.ELEMENT_NODE:
1792
+ d['tagName'] = name
1793
+ else:
1794
+ # attribute node
1795
+ d['name'] = name
1796
+ if element is not None:
1797
+ element.setAttributeNode(n)
1798
+ if is_id:
1799
+ element.setIdAttributeNode(n)
1800
+ # It's not clear from a semantic perspective whether we should
1801
+ # call the user data handlers for the NODE_RENAMED event since
1802
+ # we're re-using the existing node. The draft spec has been
1803
+ # interpreted as meaning "no, don't call the handler unless a
1804
+ # new node is created."
1805
+ return n
1806
+
1807
+ defproperty(Document, "documentElement",
1808
+ doc="Top-level element of this document.")
1809
+
1810
+
1811
+ def _clone_node(node, deep, newOwnerDocument):
1812
+ """
1813
+ Clone a node and give it the new owner document.
1814
+ Called by Node.cloneNode and Document.importNode
1815
+ """
1816
+ if node.ownerDocument.isSameNode(newOwnerDocument):
1817
+ operation = xml.dom.UserDataHandler.NODE_CLONED
1818
+ else:
1819
+ operation = xml.dom.UserDataHandler.NODE_IMPORTED
1820
+ if node.nodeType == Node.ELEMENT_NODE:
1821
+ clone = newOwnerDocument.createElementNS(node.namespaceURI,
1822
+ node.nodeName)
1823
+ for attr in node.attributes.values():
1824
+ clone.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.value)
1825
+ a = clone.getAttributeNodeNS(attr.namespaceURI, attr.localName)
1826
+ a.specified = attr.specified
1827
+
1828
+ if deep:
1829
+ for child in node.childNodes:
1830
+ c = _clone_node(child, deep, newOwnerDocument)
1831
+ clone.appendChild(c)
1832
+
1833
+ elif node.nodeType == Node.DOCUMENT_FRAGMENT_NODE:
1834
+ clone = newOwnerDocument.createDocumentFragment()
1835
+ if deep:
1836
+ for child in node.childNodes:
1837
+ c = _clone_node(child, deep, newOwnerDocument)
1838
+ clone.appendChild(c)
1839
+
1840
+ elif node.nodeType == Node.TEXT_NODE:
1841
+ clone = newOwnerDocument.createTextNode(node.data)
1842
+ elif node.nodeType == Node.CDATA_SECTION_NODE:
1843
+ clone = newOwnerDocument.createCDATASection(node.data)
1844
+ elif node.nodeType == Node.PROCESSING_INSTRUCTION_NODE:
1845
+ clone = newOwnerDocument.createProcessingInstruction(node.target,
1846
+ node.data)
1847
+ elif node.nodeType == Node.COMMENT_NODE:
1848
+ clone = newOwnerDocument.createComment(node.data)
1849
+ elif node.nodeType == Node.ATTRIBUTE_NODE:
1850
+ clone = newOwnerDocument.createAttributeNS(node.namespaceURI,
1851
+ node.nodeName)
1852
+ clone.specified = True
1853
+ clone.value = node.value
1854
+ elif node.nodeType == Node.DOCUMENT_TYPE_NODE:
1855
+ assert node.ownerDocument is not newOwnerDocument
1856
+ operation = xml.dom.UserDataHandler.NODE_IMPORTED
1857
+ clone = newOwnerDocument.implementation.createDocumentType(
1858
+ node.name, node.publicId, node.systemId)
1859
+ clone.ownerDocument = newOwnerDocument
1860
+ if deep:
1861
+ clone.entities._seq = []
1862
+ clone.notations._seq = []
1863
+ for n in node.notations._seq:
1864
+ notation = Notation(n.nodeName, n.publicId, n.systemId)
1865
+ notation.ownerDocument = newOwnerDocument
1866
+ clone.notations._seq.append(notation)
1867
+ if hasattr(n, '_call_user_data_handler'):
1868
+ n._call_user_data_handler(operation, n, notation)
1869
+ for e in node.entities._seq:
1870
+ entity = Entity(e.nodeName, e.publicId, e.systemId,
1871
+ e.notationName)
1872
+ entity.actualEncoding = e.actualEncoding
1873
+ entity.encoding = e.encoding
1874
+ entity.version = e.version
1875
+ entity.ownerDocument = newOwnerDocument
1876
+ clone.entities._seq.append(entity)
1877
+ if hasattr(e, '_call_user_data_handler'):
1878
+ e._call_user_data_handler(operation, n, entity)
1879
+ else:
1880
+ # Note the cloning of Document and DocumentType nodes is
1881
+ # implemenetation specific. minidom handles those cases
1882
+ # directly in the cloneNode() methods.
1883
+ raise xml.dom.NotSupportedErr("Cannot clone node %s" % repr(node))
1884
+
1885
+ # Check for _call_user_data_handler() since this could conceivably
1886
+ # used with other DOM implementations (one of the FourThought
1887
+ # DOMs, perhaps?).
1888
+ if hasattr(node, '_call_user_data_handler'):
1889
+ node._call_user_data_handler(operation, node, clone)
1890
+ return clone
1891
+
1892
+
1893
+ def _nssplit(qualifiedName):
1894
+ fields = qualifiedName.split(':', 1)
1895
+ if len(fields) == 2:
1896
+ return fields
1897
+ else:
1898
+ return (None, fields[0])
1899
+
1900
+
1901
+ def _get_StringIO():
1902
+ # we can't use cStringIO since it doesn't support Unicode strings
1903
+ from StringIO import StringIO
1904
+ return StringIO()
1905
+
1906
+ def _do_pulldom_parse(func, args, kwargs):
1907
+ events = apply(func, args, kwargs)
1908
+ toktype, rootNode = events.getEvent()
1909
+ events.expandNode(rootNode)
1910
+ events.clear()
1911
+ return rootNode
1912
+
1913
+ def parse(file, parser=None, bufsize=None):
1914
+ """Parse a file into a DOM by filename or file object."""
1915
+ import sys
1916
+ if parser is None and bufsize is None and sys.platform[:4] != "java":
1917
+ try:
1918
+ from xml.dom import expatbuilder
1919
+ return expatbuilder.parse(file)
1920
+ except ImportError:
1921
+ pass
1922
+ from xml.dom import pulldom
1923
+ return _do_pulldom_parse(pulldom.parse, (file,),
1924
+ {'parser': parser, 'bufsize': bufsize})
1925
+
1926
+ def parseString(string, parser=None):
1927
+ """Parse a file into a DOM from a string."""
1928
+ import sys
1929
+ if parser is None and sys.platform[:4] != "java":
1930
+ from xml.dom import expatbuilder
1931
+ return expatbuilder.parseString(string)
1932
+ from xml.dom import pulldom
1933
+ return _do_pulldom_parse(pulldom.parseString, (string,),
1934
+ {'parser': parser})
1935
+
1936
+ def getDOMImplementation(features=None):
1937
+ if features:
1938
+ if isinstance(features, StringTypes):
1939
+ features = domreg._parse_feature_string(features)
1940
+ for f, v in features:
1941
+ if not Document.implementation.hasFeature(f, v):
1942
+ return None
1943
+ return Document.implementation