rubyfox-server 2.3.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
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