shoesgem 0.1424.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (808) hide show
  1. data/LICENSE +30 -0
  2. data/README.rdoc +31 -0
  3. data/lib/shoes.rb +4 -0
  4. data/shoes/CHANGELOG.txt +21 -0
  5. data/shoes/COPYING.txt +30 -0
  6. data/shoes/README.txt +117 -0
  7. data/shoes/VERSION.txt +1 -0
  8. data/shoes/fonts/Coolvetica.ttf +0 -0
  9. data/shoes/fonts/Lacuna.ttf +0 -0
  10. data/shoes/freetype6.dll +0 -0
  11. data/shoes/lib/shoes/cache.rb +54 -0
  12. data/shoes/lib/shoes/data.rb +39 -0
  13. data/shoes/lib/shoes/help.rb +421 -0
  14. data/shoes/lib/shoes/image.rb +25 -0
  15. data/shoes/lib/shoes/inspect.rb +128 -0
  16. data/shoes/lib/shoes/log.rb +48 -0
  17. data/shoes/lib/shoes/minitar.rb +986 -0
  18. data/shoes/lib/shoes/override.rb +38 -0
  19. data/shoes/lib/shoes/pack.rb +503 -0
  20. data/shoes/lib/shoes/search.rb +46 -0
  21. data/shoes/lib/shoes/setup.rb +329 -0
  22. data/shoes/lib/shoes/shy.rb +131 -0
  23. data/shoes/lib/shoes/shybuilder.rb +44 -0
  24. data/shoes/lib/shoes.rb +522 -0
  25. data/shoes/libcairo-2.dll +0 -0
  26. data/shoes/libeay32.dll +0 -0
  27. data/shoes/libexpat-1.dll +0 -0
  28. data/shoes/libfontconfig-1.dll +0 -0
  29. data/shoes/libgio-2.0-0.dll +0 -0
  30. data/shoes/libglib-2.0-0.dll +0 -0
  31. data/shoes/libgmodule-2.0-0.dll +0 -0
  32. data/shoes/libgobject-2.0-0.dll +0 -0
  33. data/shoes/libgthread-2.0-0.dll +0 -0
  34. data/shoes/libiconv2.dll +0 -0
  35. data/shoes/libjpeg-8.dll +0 -0
  36. data/shoes/libpango-1.0-0.dll +0 -0
  37. data/shoes/libpangocairo-1.0-0.dll +0 -0
  38. data/shoes/libpangoft2-1.0-0.dll +0 -0
  39. data/shoes/libpangowin32-1.0-0.dll +0 -0
  40. data/shoes/libpng14-14.dll +0 -0
  41. data/shoes/libportaudio-2.dll +0 -0
  42. data/shoes/libshoes.dll +0 -0
  43. data/shoes/libssl32.dll +0 -0
  44. data/shoes/libungif4.dll +0 -0
  45. data/shoes/msvcrt-ruby191.dll +0 -0
  46. data/shoes/readline5.dll +0 -0
  47. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  48. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -0
  49. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -0
  50. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -0
  51. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -0
  52. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -0
  53. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -0
  54. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -0
  55. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -0
  56. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -0
  57. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -0
  58. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -0
  59. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -0
  60. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  61. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -0
  62. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -0
  63. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -0
  64. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  65. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  66. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -0
  67. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -0
  68. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -0
  69. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/constants.rb +49 -0
  70. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/database.rb +721 -0
  71. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +152 -0
  72. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +307 -0
  73. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +219 -0
  74. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb +68 -0
  75. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/pragmas.rb +271 -0
  76. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/resultset.rb +180 -0
  77. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/statement.rb +231 -0
  78. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/translator.rb +109 -0
  79. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/value.rb +57 -0
  80. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/version.rb +16 -0
  81. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +1 -0
  82. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  83. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -0
  84. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -0
  85. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +46 -0
  86. data/shoes/ruby/lib/English.rb +155 -0
  87. data/shoes/ruby/lib/Win32API.rb +28 -0
  88. data/shoes/ruby/lib/abbrev.rb +103 -0
  89. data/shoes/ruby/lib/base64.rb +91 -0
  90. data/shoes/ruby/lib/benchmark.rb +573 -0
  91. data/shoes/ruby/lib/bigdecimal/jacobian.rb +85 -0
  92. data/shoes/ruby/lib/bigdecimal/ludcmp.rb +86 -0
  93. data/shoes/ruby/lib/bigdecimal/math.rb +237 -0
  94. data/shoes/ruby/lib/bigdecimal/newton.rb +77 -0
  95. data/shoes/ruby/lib/bigdecimal/util.rb +53 -0
  96. data/shoes/ruby/lib/cgi/cookie.rb +144 -0
  97. data/shoes/ruby/lib/cgi/core.rb +786 -0
  98. data/shoes/ruby/lib/cgi/html.rb +1021 -0
  99. data/shoes/ruby/lib/cgi/session/pstore.rb +111 -0
  100. data/shoes/ruby/lib/cgi/session.rb +537 -0
  101. data/shoes/ruby/lib/cgi/util.rb +181 -0
  102. data/shoes/ruby/lib/cgi.rb +274 -0
  103. data/shoes/ruby/lib/cmath.rb +233 -0
  104. data/shoes/ruby/lib/complex.rb +24 -0
  105. data/shoes/ruby/lib/csv.rb +2320 -0
  106. data/shoes/ruby/lib/date/format.rb +1313 -0
  107. data/shoes/ruby/lib/date.rb +1834 -0
  108. data/shoes/ruby/lib/debug.rb +907 -0
  109. data/shoes/ruby/lib/delegate.rb +311 -0
  110. data/shoes/ruby/lib/digest/hmac.rb +274 -0
  111. data/shoes/ruby/lib/digest/sha2.rb +74 -0
  112. data/shoes/ruby/lib/digest.rb +50 -0
  113. data/shoes/ruby/lib/dl/callback.rb +69 -0
  114. data/shoes/ruby/lib/dl/cparser.rb +109 -0
  115. data/shoes/ruby/lib/dl/func.rb +153 -0
  116. data/shoes/ruby/lib/dl/import.rb +215 -0
  117. data/shoes/ruby/lib/dl/pack.rb +173 -0
  118. data/shoes/ruby/lib/dl/stack.rb +146 -0
  119. data/shoes/ruby/lib/dl/struct.rb +213 -0
  120. data/shoes/ruby/lib/dl/types.rb +40 -0
  121. data/shoes/ruby/lib/dl/value.rb +112 -0
  122. data/shoes/ruby/lib/drb/acl.rb +146 -0
  123. data/shoes/ruby/lib/drb/drb.rb +1778 -0
  124. data/shoes/ruby/lib/drb/eq.rb +16 -0
  125. data/shoes/ruby/lib/drb/extserv.rb +71 -0
  126. data/shoes/ruby/lib/drb/extservm.rb +85 -0
  127. data/shoes/ruby/lib/drb/gw.rb +122 -0
  128. data/shoes/ruby/lib/drb/invokemethod.rb +34 -0
  129. data/shoes/ruby/lib/drb/observer.rb +22 -0
  130. data/shoes/ruby/lib/drb/ssl.rb +190 -0
  131. data/shoes/ruby/lib/drb/timeridconv.rb +91 -0
  132. data/shoes/ruby/lib/drb/unix.rb +108 -0
  133. data/shoes/ruby/lib/drb.rb +2 -0
  134. data/shoes/ruby/lib/e2mmap.rb +172 -0
  135. data/shoes/ruby/lib/erb.rb +902 -0
  136. data/shoes/ruby/lib/fileutils.rb +1592 -0
  137. data/shoes/ruby/lib/find.rb +81 -0
  138. data/shoes/ruby/lib/forwardable.rb +270 -0
  139. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -0
  140. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -0
  141. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -0
  142. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -0
  143. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -0
  144. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -0
  145. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -0
  146. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -0
  147. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -0
  148. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +275 -0
  149. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -0
  150. data/shoes/ruby/lib/ftsearch/util.rb +21 -0
  151. data/shoes/ruby/lib/getoptlong.rb +610 -0
  152. data/shoes/ruby/lib/gserver.rb +253 -0
  153. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  154. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  155. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  156. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  157. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  158. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  159. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  160. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  161. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  162. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  163. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  164. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  165. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  166. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  167. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  168. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  169. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  170. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  171. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  172. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  173. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  174. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  175. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  176. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  177. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  178. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  179. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  180. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  181. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  182. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  183. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  184. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  185. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  186. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  187. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  188. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  189. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  190. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  191. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  192. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  193. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  194. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  195. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  196. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  197. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  198. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  199. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  200. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  201. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  202. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  203. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  204. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  205. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  206. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  207. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  208. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  209. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  210. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  211. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  212. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  213. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  214. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  215. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  216. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  217. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  218. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  219. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  220. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  221. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  222. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  223. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  224. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  225. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  226. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +196 -0
  227. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  228. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  229. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  230. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  231. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  232. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  233. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  234. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  235. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  236. data/shoes/ruby/lib/io/nonblock.rb +23 -0
  237. data/shoes/ruby/lib/ipaddr.rb +813 -0
  238. data/shoes/ruby/lib/irb/cmd/chws.rb +32 -0
  239. data/shoes/ruby/lib/irb/cmd/fork.rb +38 -0
  240. data/shoes/ruby/lib/irb/cmd/help.rb +36 -0
  241. data/shoes/ruby/lib/irb/cmd/load.rb +66 -0
  242. data/shoes/ruby/lib/irb/cmd/nop.rb +38 -0
  243. data/shoes/ruby/lib/irb/cmd/pushws.rb +38 -0
  244. data/shoes/ruby/lib/irb/cmd/subirb.rb +42 -0
  245. data/shoes/ruby/lib/irb/completion.rb +207 -0
  246. data/shoes/ruby/lib/irb/context.rb +255 -0
  247. data/shoes/ruby/lib/irb/ext/change-ws.rb +61 -0
  248. data/shoes/ruby/lib/irb/ext/history.rb +109 -0
  249. data/shoes/ruby/lib/irb/ext/loader.rb +119 -0
  250. data/shoes/ruby/lib/irb/ext/math-mode.rb +36 -0
  251. data/shoes/ruby/lib/irb/ext/multi-irb.rb +240 -0
  252. data/shoes/ruby/lib/irb/ext/save-history.rb +100 -0
  253. data/shoes/ruby/lib/irb/ext/tracer.rb +60 -0
  254. data/shoes/ruby/lib/irb/ext/use-loader.rb +64 -0
  255. data/shoes/ruby/lib/irb/ext/workspaces.rb +55 -0
  256. data/shoes/ruby/lib/irb/extend-command.rb +272 -0
  257. data/shoes/ruby/lib/irb/frame.rb +66 -0
  258. data/shoes/ruby/lib/irb/help.rb +35 -0
  259. data/shoes/ruby/lib/irb/init.rb +288 -0
  260. data/shoes/ruby/lib/irb/input-method.rb +142 -0
  261. data/shoes/ruby/lib/irb/lc/error.rb +29 -0
  262. data/shoes/ruby/lib/irb/lc/help-message +38 -0
  263. data/shoes/ruby/lib/irb/lc/ja/encoding_aliases.rb +8 -0
  264. data/shoes/ruby/lib/irb/lc/ja/error.rb +27 -0
  265. data/shoes/ruby/lib/irb/lc/ja/help-message +39 -0
  266. data/shoes/ruby/lib/irb/locale.rb +195 -0
  267. data/shoes/ruby/lib/irb/magic-file.rb +36 -0
  268. data/shoes/ruby/lib/irb/notifier.rb +144 -0
  269. data/shoes/ruby/lib/irb/output-method.rb +69 -0
  270. data/shoes/ruby/lib/irb/ruby-lex.rb +1188 -0
  271. data/shoes/ruby/lib/irb/ruby-token.rb +270 -0
  272. data/shoes/ruby/lib/irb/slex.rb +282 -0
  273. data/shoes/ruby/lib/irb/src_encoding.rb +4 -0
  274. data/shoes/ruby/lib/irb/version.rb +15 -0
  275. data/shoes/ruby/lib/irb/workspace.rb +108 -0
  276. data/shoes/ruby/lib/irb/ws-for-case-2.rb +14 -0
  277. data/shoes/ruby/lib/irb/xmp.rb +97 -0
  278. data/shoes/ruby/lib/irb.rb +354 -0
  279. data/shoes/ruby/lib/json/add/core.rb +135 -0
  280. data/shoes/ruby/lib/json/add/rails.rb +58 -0
  281. data/shoes/ruby/lib/json/common.rb +354 -0
  282. data/shoes/ruby/lib/json/editor.rb +1371 -0
  283. data/shoes/ruby/lib/json/ext.rb +15 -0
  284. data/shoes/ruby/lib/json/version.rb +9 -0
  285. data/shoes/ruby/lib/json.rb +297 -0
  286. data/shoes/ruby/lib/kconv.rb +282 -0
  287. data/shoes/ruby/lib/logger.rb +732 -0
  288. data/shoes/ruby/lib/mathn.rb +206 -0
  289. data/shoes/ruby/lib/matrix.rb +1381 -0
  290. data/shoes/ruby/lib/minitest/autorun.rb +9 -0
  291. data/shoes/ruby/lib/minitest/mock.rb +37 -0
  292. data/shoes/ruby/lib/minitest/spec.rb +89 -0
  293. data/shoes/ruby/lib/minitest/unit.rb +497 -0
  294. data/shoes/ruby/lib/mkmf.rb +1958 -0
  295. data/shoes/ruby/lib/monitor.rb +265 -0
  296. data/shoes/ruby/lib/mutex_m.rb +91 -0
  297. data/shoes/ruby/lib/net/ftp.rb +981 -0
  298. data/shoes/ruby/lib/net/http.rb +2399 -0
  299. data/shoes/ruby/lib/net/https.rb +136 -0
  300. data/shoes/ruby/lib/net/imap.rb +3500 -0
  301. data/shoes/ruby/lib/net/pop.rb +1000 -0
  302. data/shoes/ruby/lib/net/protocol.rb +382 -0
  303. data/shoes/ruby/lib/net/smtp.rb +1014 -0
  304. data/shoes/ruby/lib/net/telnet.rb +759 -0
  305. data/shoes/ruby/lib/observer.rb +193 -0
  306. data/shoes/ruby/lib/open-uri.rb +832 -0
  307. data/shoes/ruby/lib/open3.rb +98 -0
  308. data/shoes/ruby/lib/openssl/bn.rb +35 -0
  309. data/shoes/ruby/lib/openssl/buffering.rb +242 -0
  310. data/shoes/ruby/lib/openssl/cipher.rb +65 -0
  311. data/shoes/ruby/lib/openssl/digest.rb +61 -0
  312. data/shoes/ruby/lib/openssl/ssl.rb +178 -0
  313. data/shoes/ruby/lib/openssl/x509.rb +155 -0
  314. data/shoes/ruby/lib/openssl.rb +24 -0
  315. data/shoes/ruby/lib/optparse/date.rb +17 -0
  316. data/shoes/ruby/lib/optparse/shellwords.rb +6 -0
  317. data/shoes/ruby/lib/optparse/time.rb +10 -0
  318. data/shoes/ruby/lib/optparse/uri.rb +6 -0
  319. data/shoes/ruby/lib/optparse/version.rb +70 -0
  320. data/shoes/ruby/lib/optparse.rb +1810 -0
  321. data/shoes/ruby/lib/ostruct.rb +145 -0
  322. data/shoes/ruby/lib/pathname.rb +1099 -0
  323. data/shoes/ruby/lib/pp.rb +532 -0
  324. data/shoes/ruby/lib/prettyprint.rb +896 -0
  325. data/shoes/ruby/lib/prime.rb +471 -0
  326. data/shoes/ruby/lib/profile.rb +10 -0
  327. data/shoes/ruby/lib/profiler.rb +59 -0
  328. data/shoes/ruby/lib/pstore.rb +543 -0
  329. data/shoes/ruby/lib/racc/parser.rb +441 -0
  330. data/shoes/ruby/lib/rake/classic_namespace.rb +8 -0
  331. data/shoes/ruby/lib/rake/clean.rb +33 -0
  332. data/shoes/ruby/lib/rake/gempackagetask.rb +97 -0
  333. data/shoes/ruby/lib/rake/loaders/makefile.rb +35 -0
  334. data/shoes/ruby/lib/rake/packagetask.rb +185 -0
  335. data/shoes/ruby/lib/rake/rake_test_loader.rb +5 -0
  336. data/shoes/ruby/lib/rake/rdoctask.rb +147 -0
  337. data/shoes/ruby/lib/rake/runtest.rb +23 -0
  338. data/shoes/ruby/lib/rake/tasklib.rb +23 -0
  339. data/shoes/ruby/lib/rake/testtask.rb +161 -0
  340. data/shoes/ruby/lib/rake/win32.rb +34 -0
  341. data/shoes/ruby/lib/rake.rb +2465 -0
  342. data/shoes/ruby/lib/rational.rb +19 -0
  343. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -0
  344. data/shoes/ruby/lib/rdoc/code_objects.rb +1061 -0
  345. data/shoes/ruby/lib/rdoc/diagram.rb +340 -0
  346. data/shoes/ruby/lib/rdoc/dot.rb +249 -0
  347. data/shoes/ruby/lib/rdoc/generator/chm/chm.rb +100 -0
  348. data/shoes/ruby/lib/rdoc/generator/chm.rb +113 -0
  349. data/shoes/ruby/lib/rdoc/generator/html/common.rb +24 -0
  350. data/shoes/ruby/lib/rdoc/generator/html/frameless.rb +92 -0
  351. data/shoes/ruby/lib/rdoc/generator/html/hefss.rb +150 -0
  352. data/shoes/ruby/lib/rdoc/generator/html/html.rb +769 -0
  353. data/shoes/ruby/lib/rdoc/generator/html/kilmer.rb +151 -0
  354. data/shoes/ruby/lib/rdoc/generator/html/kilmerfactory.rb +427 -0
  355. data/shoes/ruby/lib/rdoc/generator/html/one_page_html.rb +122 -0
  356. data/shoes/ruby/lib/rdoc/generator/html.rb +445 -0
  357. data/shoes/ruby/lib/rdoc/generator/ri.rb +226 -0
  358. data/shoes/ruby/lib/rdoc/generator/texinfo/class.texinfo.erb +44 -0
  359. data/shoes/ruby/lib/rdoc/generator/texinfo/file.texinfo.erb +6 -0
  360. data/shoes/ruby/lib/rdoc/generator/texinfo/method.texinfo.erb +6 -0
  361. data/shoes/ruby/lib/rdoc/generator/texinfo/texinfo.erb +28 -0
  362. data/shoes/ruby/lib/rdoc/generator/texinfo.rb +81 -0
  363. data/shoes/ruby/lib/rdoc/generator/xml/rdf.rb +113 -0
  364. data/shoes/ruby/lib/rdoc/generator/xml/xml.rb +123 -0
  365. data/shoes/ruby/lib/rdoc/generator/xml.rb +117 -0
  366. data/shoes/ruby/lib/rdoc/generator.rb +1082 -0
  367. data/shoes/ruby/lib/rdoc/known_classes.rb +68 -0
  368. data/shoes/ruby/lib/rdoc/markup/attribute_manager.rb +265 -0
  369. data/shoes/ruby/lib/rdoc/markup/formatter.rb +14 -0
  370. data/shoes/ruby/lib/rdoc/markup/fragments.rb +337 -0
  371. data/shoes/ruby/lib/rdoc/markup/inline.rb +101 -0
  372. data/shoes/ruby/lib/rdoc/markup/lines.rb +152 -0
  373. data/shoes/ruby/lib/rdoc/markup/preprocess.rb +75 -0
  374. data/shoes/ruby/lib/rdoc/markup/to_flow.rb +185 -0
  375. data/shoes/ruby/lib/rdoc/markup/to_html.rb +403 -0
  376. data/shoes/ruby/lib/rdoc/markup/to_html_crossref.rb +148 -0
  377. data/shoes/ruby/lib/rdoc/markup/to_latex.rb +328 -0
  378. data/shoes/ruby/lib/rdoc/markup/to_test.rb +50 -0
  379. data/shoes/ruby/lib/rdoc/markup/to_texinfo.rb +69 -0
  380. data/shoes/ruby/lib/rdoc/markup.rb +378 -0
  381. data/shoes/ruby/lib/rdoc/options.rb +638 -0
  382. data/shoes/ruby/lib/rdoc/parser/c.rb +661 -0
  383. data/shoes/ruby/lib/rdoc/parser/f95.rb +1835 -0
  384. data/shoes/ruby/lib/rdoc/parser/perl.rb +165 -0
  385. data/shoes/ruby/lib/rdoc/parser/ruby.rb +2829 -0
  386. data/shoes/ruby/lib/rdoc/parser/simple.rb +38 -0
  387. data/shoes/ruby/lib/rdoc/parser.rb +142 -0
  388. data/shoes/ruby/lib/rdoc/rdoc.rb +293 -0
  389. data/shoes/ruby/lib/rdoc/ri/cache.rb +187 -0
  390. data/shoes/ruby/lib/rdoc/ri/descriptions.rb +156 -0
  391. data/shoes/ruby/lib/rdoc/ri/display.rb +392 -0
  392. data/shoes/ruby/lib/rdoc/ri/driver.rb +669 -0
  393. data/shoes/ruby/lib/rdoc/ri/formatter.rb +616 -0
  394. data/shoes/ruby/lib/rdoc/ri/paths.rb +99 -0
  395. data/shoes/ruby/lib/rdoc/ri/reader.rb +106 -0
  396. data/shoes/ruby/lib/rdoc/ri/util.rb +79 -0
  397. data/shoes/ruby/lib/rdoc/ri/writer.rb +68 -0
  398. data/shoes/ruby/lib/rdoc/ri.rb +8 -0
  399. data/shoes/ruby/lib/rdoc/stats.rb +115 -0
  400. data/shoes/ruby/lib/rdoc/template.rb +64 -0
  401. data/shoes/ruby/lib/rdoc/tokenstream.rb +33 -0
  402. data/shoes/ruby/lib/rdoc.rb +395 -0
  403. data/shoes/ruby/lib/resolv-replace.rb +63 -0
  404. data/shoes/ruby/lib/resolv.rb +2262 -0
  405. data/shoes/ruby/lib/rexml/attlistdecl.rb +62 -0
  406. data/shoes/ruby/lib/rexml/attribute.rb +188 -0
  407. data/shoes/ruby/lib/rexml/cdata.rb +67 -0
  408. data/shoes/ruby/lib/rexml/child.rb +96 -0
  409. data/shoes/ruby/lib/rexml/comment.rb +80 -0
  410. data/shoes/ruby/lib/rexml/doctype.rb +270 -0
  411. data/shoes/ruby/lib/rexml/document.rb +231 -0
  412. data/shoes/ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
  413. data/shoes/ruby/lib/rexml/dtd/dtd.rb +51 -0
  414. data/shoes/ruby/lib/rexml/dtd/elementdecl.rb +17 -0
  415. data/shoes/ruby/lib/rexml/dtd/entitydecl.rb +56 -0
  416. data/shoes/ruby/lib/rexml/dtd/notationdecl.rb +39 -0
  417. data/shoes/ruby/lib/rexml/element.rb +1246 -0
  418. data/shoes/ruby/lib/rexml/encoding.rb +71 -0
  419. data/shoes/ruby/lib/rexml/encodings/CP-1252.rb +103 -0
  420. data/shoes/ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
  421. data/shoes/ruby/lib/rexml/encodings/ICONV.rb +22 -0
  422. data/shoes/ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
  423. data/shoes/ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
  424. data/shoes/ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
  425. data/shoes/ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
  426. data/shoes/ruby/lib/rexml/encodings/UNILE.rb +34 -0
  427. data/shoes/ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
  428. data/shoes/ruby/lib/rexml/encodings/UTF-16.rb +35 -0
  429. data/shoes/ruby/lib/rexml/encodings/UTF-8.rb +18 -0
  430. data/shoes/ruby/lib/rexml/entity.rb +166 -0
  431. data/shoes/ruby/lib/rexml/formatters/default.rb +109 -0
  432. data/shoes/ruby/lib/rexml/formatters/pretty.rb +139 -0
  433. data/shoes/ruby/lib/rexml/formatters/transitive.rb +58 -0
  434. data/shoes/ruby/lib/rexml/functions.rb +388 -0
  435. data/shoes/ruby/lib/rexml/instruction.rb +70 -0
  436. data/shoes/ruby/lib/rexml/light/node.rb +196 -0
  437. data/shoes/ruby/lib/rexml/namespace.rb +47 -0
  438. data/shoes/ruby/lib/rexml/node.rb +75 -0
  439. data/shoes/ruby/lib/rexml/output.rb +24 -0
  440. data/shoes/ruby/lib/rexml/parent.rb +166 -0
  441. data/shoes/ruby/lib/rexml/parseexception.rb +51 -0
  442. data/shoes/ruby/lib/rexml/parsers/baseparser.rb +530 -0
  443. data/shoes/ruby/lib/rexml/parsers/lightparser.rb +58 -0
  444. data/shoes/ruby/lib/rexml/parsers/pullparser.rb +196 -0
  445. data/shoes/ruby/lib/rexml/parsers/sax2parser.rb +247 -0
  446. data/shoes/ruby/lib/rexml/parsers/streamparser.rb +46 -0
  447. data/shoes/ruby/lib/rexml/parsers/treeparser.rb +100 -0
  448. data/shoes/ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
  449. data/shoes/ruby/lib/rexml/parsers/xpathparser.rb +698 -0
  450. data/shoes/ruby/lib/rexml/quickpath.rb +263 -0
  451. data/shoes/ruby/lib/rexml/rexml.rb +31 -0
  452. data/shoes/ruby/lib/rexml/sax2listener.rb +97 -0
  453. data/shoes/ruby/lib/rexml/source.rb +258 -0
  454. data/shoes/ruby/lib/rexml/streamlistener.rb +92 -0
  455. data/shoes/ruby/lib/rexml/syncenumerator.rb +32 -0
  456. data/shoes/ruby/lib/rexml/text.rb +404 -0
  457. data/shoes/ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
  458. data/shoes/ruby/lib/rexml/validation/relaxng.rb +559 -0
  459. data/shoes/ruby/lib/rexml/validation/validation.rb +155 -0
  460. data/shoes/ruby/lib/rexml/validation/validationexception.rb +9 -0
  461. data/shoes/ruby/lib/rexml/xmldecl.rb +119 -0
  462. data/shoes/ruby/lib/rexml/xmltokens.rb +18 -0
  463. data/shoes/ruby/lib/rexml/xpath.rb +77 -0
  464. data/shoes/ruby/lib/rexml/xpath_parser.rb +792 -0
  465. data/shoes/ruby/lib/rinda/rinda.rb +283 -0
  466. data/shoes/ruby/lib/rinda/ring.rb +271 -0
  467. data/shoes/ruby/lib/rinda/tuplespace.rb +642 -0
  468. data/shoes/ruby/lib/ripper/core.rb +70 -0
  469. data/shoes/ruby/lib/ripper/filter.rb +70 -0
  470. data/shoes/ruby/lib/ripper/lexer.rb +179 -0
  471. data/shoes/ruby/lib/ripper/sexp.rb +99 -0
  472. data/shoes/ruby/lib/ripper.rb +4 -0
  473. data/shoes/ruby/lib/rss/0.9.rb +427 -0
  474. data/shoes/ruby/lib/rss/1.0.rb +452 -0
  475. data/shoes/ruby/lib/rss/2.0.rb +111 -0
  476. data/shoes/ruby/lib/rss/atom.rb +748 -0
  477. data/shoes/ruby/lib/rss/content/1.0.rb +10 -0
  478. data/shoes/ruby/lib/rss/content/2.0.rb +12 -0
  479. data/shoes/ruby/lib/rss/content.rb +31 -0
  480. data/shoes/ruby/lib/rss/converter.rb +170 -0
  481. data/shoes/ruby/lib/rss/dublincore/1.0.rb +13 -0
  482. data/shoes/ruby/lib/rss/dublincore/2.0.rb +13 -0
  483. data/shoes/ruby/lib/rss/dublincore/atom.rb +17 -0
  484. data/shoes/ruby/lib/rss/dublincore.rb +161 -0
  485. data/shoes/ruby/lib/rss/image.rb +193 -0
  486. data/shoes/ruby/lib/rss/itunes.rb +410 -0
  487. data/shoes/ruby/lib/rss/maker/0.9.rb +467 -0
  488. data/shoes/ruby/lib/rss/maker/1.0.rb +434 -0
  489. data/shoes/ruby/lib/rss/maker/2.0.rb +223 -0
  490. data/shoes/ruby/lib/rss/maker/atom.rb +172 -0
  491. data/shoes/ruby/lib/rss/maker/base.rb +880 -0
  492. data/shoes/ruby/lib/rss/maker/content.rb +21 -0
  493. data/shoes/ruby/lib/rss/maker/dublincore.rb +124 -0
  494. data/shoes/ruby/lib/rss/maker/entry.rb +163 -0
  495. data/shoes/ruby/lib/rss/maker/feed.rb +430 -0
  496. data/shoes/ruby/lib/rss/maker/image.rb +111 -0
  497. data/shoes/ruby/lib/rss/maker/itunes.rb +242 -0
  498. data/shoes/ruby/lib/rss/maker/slash.rb +33 -0
  499. data/shoes/ruby/lib/rss/maker/syndication.rb +18 -0
  500. data/shoes/ruby/lib/rss/maker/taxonomy.rb +118 -0
  501. data/shoes/ruby/lib/rss/maker/trackback.rb +61 -0
  502. data/shoes/ruby/lib/rss/maker.rb +44 -0
  503. data/shoes/ruby/lib/rss/parser.rb +568 -0
  504. data/shoes/ruby/lib/rss/rexmlparser.rb +54 -0
  505. data/shoes/ruby/lib/rss/rss.rb +1313 -0
  506. data/shoes/ruby/lib/rss/slash.rb +49 -0
  507. data/shoes/ruby/lib/rss/syndication.rb +67 -0
  508. data/shoes/ruby/lib/rss/taxonomy.rb +145 -0
  509. data/shoes/ruby/lib/rss/trackback.rb +288 -0
  510. data/shoes/ruby/lib/rss/utils.rb +111 -0
  511. data/shoes/ruby/lib/rss/xml-stylesheet.rb +105 -0
  512. data/shoes/ruby/lib/rss/xml.rb +71 -0
  513. data/shoes/ruby/lib/rss/xmlparser.rb +93 -0
  514. data/shoes/ruby/lib/rss/xmlscanner.rb +121 -0
  515. data/shoes/ruby/lib/rss.rb +19 -0
  516. data/shoes/ruby/lib/rubygems/builder.rb +88 -0
  517. data/shoes/ruby/lib/rubygems/command.rb +406 -0
  518. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -0
  519. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -0
  520. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -0
  521. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -0
  522. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -0
  523. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -0
  524. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -0
  525. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -0
  526. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -0
  527. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -0
  528. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -0
  529. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -0
  530. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -0
  531. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -0
  532. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -0
  533. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -0
  534. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -0
  535. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -0
  536. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -0
  537. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -0
  538. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -0
  539. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -0
  540. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -0
  541. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -0
  542. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -0
  543. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -0
  544. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -0
  545. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -0
  546. data/shoes/ruby/lib/rubygems/config_file.rb +266 -0
  547. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -0
  548. data/shoes/ruby/lib/rubygems/defaults.rb +89 -0
  549. data/shoes/ruby/lib/rubygems/dependency.rb +119 -0
  550. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -0
  551. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -0
  552. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +40 -0
  553. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -0
  554. data/shoes/ruby/lib/rubygems/digest/sha1.rb +17 -0
  555. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -0
  556. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -0
  557. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -0
  558. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -0
  559. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -0
  560. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -0
  561. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -0
  562. data/shoes/ruby/lib/rubygems/ext.rb +18 -0
  563. data/shoes/ruby/lib/rubygems/format.rb +87 -0
  564. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -0
  565. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -0
  566. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -0
  567. data/shoes/ruby/lib/rubygems/indexer/abstract_index_builder.rb +88 -0
  568. data/shoes/ruby/lib/rubygems/indexer/latest_index_builder.rb +35 -0
  569. data/shoes/ruby/lib/rubygems/indexer/marshal_index_builder.rb +17 -0
  570. data/shoes/ruby/lib/rubygems/indexer/master_index_builder.rb +54 -0
  571. data/shoes/ruby/lib/rubygems/indexer/quick_index_builder.rb +50 -0
  572. data/shoes/ruby/lib/rubygems/indexer.rb +370 -0
  573. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -0
  574. data/shoes/ruby/lib/rubygems/installer.rb +578 -0
  575. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -0
  576. data/shoes/ruby/lib/rubygems/old_format.rb +148 -0
  577. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -0
  578. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -0
  579. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -0
  580. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -0
  581. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -0
  582. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -0
  583. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -0
  584. data/shoes/ruby/lib/rubygems/package.rb +95 -0
  585. data/shoes/ruby/lib/rubygems/platform.rb +178 -0
  586. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -0
  587. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +15 -0
  588. data/shoes/ruby/lib/rubygems/requirement.rb +163 -0
  589. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -0
  590. data/shoes/ruby/lib/rubygems/security.rb +786 -0
  591. data/shoes/ruby/lib/rubygems/server.rb +629 -0
  592. data/shoes/ruby/lib/rubygems/source_index.rb +559 -0
  593. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -0
  594. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -0
  595. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -0
  596. data/shoes/ruby/lib/rubygems/specification.rb +1262 -0
  597. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -0
  598. data/shoes/ruby/lib/rubygems/timer.rb +25 -0
  599. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -0
  600. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -0
  601. data/shoes/ruby/lib/rubygems/validator.rb +208 -0
  602. data/shoes/ruby/lib/rubygems/version.rb +167 -0
  603. data/shoes/ruby/lib/rubygems/version_option.rb +48 -0
  604. data/shoes/ruby/lib/rubygems.rb +888 -0
  605. data/shoes/ruby/lib/scanf.rb +703 -0
  606. data/shoes/ruby/lib/securerandom.rb +182 -0
  607. data/shoes/ruby/lib/set.rb +1274 -0
  608. data/shoes/ruby/lib/shell/builtin-command.rb +160 -0
  609. data/shoes/ruby/lib/shell/command-processor.rb +593 -0
  610. data/shoes/ruby/lib/shell/error.rb +25 -0
  611. data/shoes/ruby/lib/shell/filter.rb +109 -0
  612. data/shoes/ruby/lib/shell/process-controller.rb +319 -0
  613. data/shoes/ruby/lib/shell/system-command.rb +159 -0
  614. data/shoes/ruby/lib/shell/version.rb +15 -0
  615. data/shoes/ruby/lib/shell.rb +300 -0
  616. data/shoes/ruby/lib/shellwords.rb +156 -0
  617. data/shoes/ruby/lib/singleton.rb +313 -0
  618. data/shoes/ruby/lib/sync.rb +307 -0
  619. data/shoes/ruby/lib/tempfile.rb +218 -0
  620. data/shoes/ruby/lib/test/unit/assertions.rb +122 -0
  621. data/shoes/ruby/lib/test/unit/testcase.rb +12 -0
  622. data/shoes/ruby/lib/test/unit.rb +66 -0
  623. data/shoes/ruby/lib/thread.rb +367 -0
  624. data/shoes/ruby/lib/thwait.rb +168 -0
  625. data/shoes/ruby/lib/time.rb +869 -0
  626. data/shoes/ruby/lib/timeout.rb +108 -0
  627. data/shoes/ruby/lib/tmpdir.rb +138 -0
  628. data/shoes/ruby/lib/tracer.rb +166 -0
  629. data/shoes/ruby/lib/tsort.rb +290 -0
  630. data/shoes/ruby/lib/ubygems.rb +10 -0
  631. data/shoes/ruby/lib/un.rb +304 -0
  632. data/shoes/ruby/lib/uri/common.rb +727 -0
  633. data/shoes/ruby/lib/uri/ftp.rb +198 -0
  634. data/shoes/ruby/lib/uri/generic.rb +1128 -0
  635. data/shoes/ruby/lib/uri/http.rb +100 -0
  636. data/shoes/ruby/lib/uri/https.rb +20 -0
  637. data/shoes/ruby/lib/uri/ldap.rb +190 -0
  638. data/shoes/ruby/lib/uri/ldaps.rb +12 -0
  639. data/shoes/ruby/lib/uri/mailto.rb +266 -0
  640. data/shoes/ruby/lib/uri.rb +29 -0
  641. data/shoes/ruby/lib/weakref.rb +80 -0
  642. data/shoes/ruby/lib/webrick/accesslog.rb +75 -0
  643. data/shoes/ruby/lib/webrick/cgi.rb +260 -0
  644. data/shoes/ruby/lib/webrick/compat.rb +15 -0
  645. data/shoes/ruby/lib/webrick/config.rb +100 -0
  646. data/shoes/ruby/lib/webrick/cookie.rb +110 -0
  647. data/shoes/ruby/lib/webrick/htmlutils.rb +25 -0
  648. data/shoes/ruby/lib/webrick/httpauth/authenticator.rb +79 -0
  649. data/shoes/ruby/lib/webrick/httpauth/basicauth.rb +65 -0
  650. data/shoes/ruby/lib/webrick/httpauth/digestauth.rb +344 -0
  651. data/shoes/ruby/lib/webrick/httpauth/htdigest.rb +91 -0
  652. data/shoes/ruby/lib/webrick/httpauth/htgroup.rb +61 -0
  653. data/shoes/ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
  654. data/shoes/ruby/lib/webrick/httpauth/userdb.rb +29 -0
  655. data/shoes/ruby/lib/webrick/httpauth.rb +45 -0
  656. data/shoes/ruby/lib/webrick/httpproxy.rb +288 -0
  657. data/shoes/ruby/lib/webrick/httprequest.rb +402 -0
  658. data/shoes/ruby/lib/webrick/httpresponse.rb +326 -0
  659. data/shoes/ruby/lib/webrick/https.rb +63 -0
  660. data/shoes/ruby/lib/webrick/httpserver.rb +217 -0
  661. data/shoes/ruby/lib/webrick/httpservlet/abstract.rb +70 -0
  662. data/shoes/ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  663. data/shoes/ruby/lib/webrick/httpservlet/cgihandler.rb +110 -0
  664. data/shoes/ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
  665. data/shoes/ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
  666. data/shoes/ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
  667. data/shoes/ruby/lib/webrick/httpservlet.rb +22 -0
  668. data/shoes/ruby/lib/webrick/httpstatus.rb +132 -0
  669. data/shoes/ruby/lib/webrick/httputils.rb +392 -0
  670. data/shoes/ruby/lib/webrick/httpversion.rb +49 -0
  671. data/shoes/ruby/lib/webrick/log.rb +88 -0
  672. data/shoes/ruby/lib/webrick/server.rb +210 -0
  673. data/shoes/ruby/lib/webrick/ssl.rb +126 -0
  674. data/shoes/ruby/lib/webrick/utils.rb +175 -0
  675. data/shoes/ruby/lib/webrick/version.rb +13 -0
  676. data/shoes/ruby/lib/webrick.rb +29 -0
  677. data/shoes/ruby/lib/win32/registry.rb +832 -0
  678. data/shoes/ruby/lib/win32/resolv.rb +370 -0
  679. data/shoes/ruby/lib/win32/sspi.rb +330 -0
  680. data/shoes/ruby/lib/win32ole/property.rb +16 -0
  681. data/shoes/ruby/lib/xmlrpc/base64.rb +81 -0
  682. data/shoes/ruby/lib/xmlrpc/client.rb +625 -0
  683. data/shoes/ruby/lib/xmlrpc/config.rb +40 -0
  684. data/shoes/ruby/lib/xmlrpc/create.rb +290 -0
  685. data/shoes/ruby/lib/xmlrpc/datetime.rb +142 -0
  686. data/shoes/ruby/lib/xmlrpc/httpserver.rb +178 -0
  687. data/shoes/ruby/lib/xmlrpc/marshal.rb +76 -0
  688. data/shoes/ruby/lib/xmlrpc/parser.rb +813 -0
  689. data/shoes/ruby/lib/xmlrpc/server.rb +778 -0
  690. data/shoes/ruby/lib/xmlrpc/utils.rb +165 -0
  691. data/shoes/ruby/lib/yaml/baseemitter.rb +242 -0
  692. data/shoes/ruby/lib/yaml/basenode.rb +216 -0
  693. data/shoes/ruby/lib/yaml/constants.rb +45 -0
  694. data/shoes/ruby/lib/yaml/dbm.rb +111 -0
  695. data/shoes/ruby/lib/yaml/encoding.rb +33 -0
  696. data/shoes/ruby/lib/yaml/error.rb +34 -0
  697. data/shoes/ruby/lib/yaml/loader.rb +14 -0
  698. data/shoes/ruby/lib/yaml/rubytypes.rb +446 -0
  699. data/shoes/ruby/lib/yaml/store.rb +43 -0
  700. data/shoes/ruby/lib/yaml/stream.rb +40 -0
  701. data/shoes/ruby/lib/yaml/stringio.rb +83 -0
  702. data/shoes/ruby/lib/yaml/syck.rb +19 -0
  703. data/shoes/ruby/lib/yaml/tag.rb +91 -0
  704. data/shoes/ruby/lib/yaml/types.rb +192 -0
  705. data/shoes/ruby/lib/yaml/yamlnode.rb +54 -0
  706. data/shoes/ruby/lib/yaml/ypath.rb +52 -0
  707. data/shoes/ruby/lib/yaml.rb +440 -0
  708. data/shoes/samples/class-book.rb +43 -0
  709. data/shoes/samples/class-book.yaml +387 -0
  710. data/shoes/samples/expert-definr.rb +23 -0
  711. data/shoes/samples/expert-funnies.rb +51 -0
  712. data/shoes/samples/expert-irb.rb +112 -0
  713. data/shoes/samples/expert-minesweeper.rb +267 -0
  714. data/shoes/samples/expert-othello.rb +319 -0
  715. data/shoes/samples/expert-pong.rb +62 -0
  716. data/shoes/samples/expert-tankspank.rb +385 -0
  717. data/shoes/samples/good-arc.rb +37 -0
  718. data/shoes/samples/good-clock.rb +51 -0
  719. data/shoes/samples/good-follow.rb +26 -0
  720. data/shoes/samples/good-reminder.rb +174 -0
  721. data/shoes/samples/good-vjot.rb +56 -0
  722. data/shoes/samples/simple-accordion.rb +75 -0
  723. data/shoes/samples/simple-anim-shapes.rb +17 -0
  724. data/shoes/samples/simple-anim-text.rb +13 -0
  725. data/shoes/samples/simple-arc.rb +23 -0
  726. data/shoes/samples/simple-bounce.rb +24 -0
  727. data/shoes/samples/simple-calc.rb +70 -0
  728. data/shoes/samples/simple-control-sizes.rb +24 -0
  729. data/shoes/samples/simple-curve.rb +26 -0
  730. data/shoes/samples/simple-dialogs.rb +29 -0
  731. data/shoes/samples/simple-downloader.rb +27 -0
  732. data/shoes/samples/simple-draw.rb +13 -0
  733. data/shoes/samples/simple-editor.rb +28 -0
  734. data/shoes/samples/simple-form.rb +28 -0
  735. data/shoes/samples/simple-form.shy +0 -0
  736. data/shoes/samples/simple-mask.rb +21 -0
  737. data/shoes/samples/simple-menu.rb +31 -0
  738. data/shoes/samples/simple-menu1.rb +35 -0
  739. data/shoes/samples/simple-rubygems.rb +29 -0
  740. data/shoes/samples/simple-slide.rb +45 -0
  741. data/shoes/samples/simple-sphere.rb +28 -0
  742. data/shoes/samples/simple-timer.rb +13 -0
  743. data/shoes/samples/simple-video.rb +13 -0
  744. data/shoes/shoes +21 -0
  745. data/shoes/shoes.exe +0 -0
  746. data/shoes/shoes.exe.manifest +17 -0
  747. data/shoes/sqlite3.dll +0 -0
  748. data/shoes/static/Shoes.icns +0 -0
  749. data/shoes/static/Thumbs.db +0 -0
  750. data/shoes/static/app-icon.png +0 -0
  751. data/shoes/static/avatar.png +0 -0
  752. data/shoes/static/code_highlighter.js +188 -0
  753. data/shoes/static/code_highlighter_ruby.js +26 -0
  754. data/shoes/static/icon-debug.png +0 -0
  755. data/shoes/static/icon-error.png +0 -0
  756. data/shoes/static/icon-info.png +0 -0
  757. data/shoes/static/icon-warn.png +0 -0
  758. data/shoes/static/listbox_button1.png +0 -0
  759. data/shoes/static/listbox_button2.png +0 -0
  760. data/shoes/static/man-app.png +0 -0
  761. data/shoes/static/man-builds.png +0 -0
  762. data/shoes/static/man-editor-notepad.png +0 -0
  763. data/shoes/static/man-editor-osx.png +0 -0
  764. data/shoes/static/man-ele-background.png +0 -0
  765. data/shoes/static/man-ele-border.png +0 -0
  766. data/shoes/static/man-ele-button.png +0 -0
  767. data/shoes/static/man-ele-check.png +0 -0
  768. data/shoes/static/man-ele-editbox.png +0 -0
  769. data/shoes/static/man-ele-editline.png +0 -0
  770. data/shoes/static/man-ele-image.png +0 -0
  771. data/shoes/static/man-ele-listbox.png +0 -0
  772. data/shoes/static/man-ele-progress.png +0 -0
  773. data/shoes/static/man-ele-radio.png +0 -0
  774. data/shoes/static/man-ele-shape.png +0 -0
  775. data/shoes/static/man-ele-textblock.png +0 -0
  776. data/shoes/static/man-ele-video.png +0 -0
  777. data/shoes/static/man-intro-dmg.png +0 -0
  778. data/shoes/static/man-intro-exe.png +0 -0
  779. data/shoes/static/man-look-tiger.png +0 -0
  780. data/shoes/static/man-look-ubuntu.png +0 -0
  781. data/shoes/static/man-look-vista.png +0 -0
  782. data/shoes/static/man-run-osx.png +0 -0
  783. data/shoes/static/man-run-vista.png +0 -0
  784. data/shoes/static/man-run-xp.png +0 -0
  785. data/shoes/static/man-shot1.png +0 -0
  786. data/shoes/static/manual-en.txt +2783 -0
  787. data/shoes/static/manual-ja.txt +2780 -0
  788. data/shoes/static/manual.css +167 -0
  789. data/shoes/static/menu-corner1.png +0 -0
  790. data/shoes/static/menu-corner2.png +0 -0
  791. data/shoes/static/menu-gray.png +0 -0
  792. data/shoes/static/menu-left.png +0 -0
  793. data/shoes/static/menu-right.png +0 -0
  794. data/shoes/static/menu-top.png +0 -0
  795. data/shoes/static/shoes-dmg.jpg +0 -0
  796. data/shoes/static/shoes-icon-blue.png +0 -0
  797. data/shoes/static/shoes-icon.png +0 -0
  798. data/shoes/static/shoes-manual-apps.gif +0 -0
  799. data/shoes/static/stripe.png +0 -0
  800. data/shoes/static/stubs/blank.exe +0 -0
  801. data/shoes/static/stubs/blank.hfz +0 -0
  802. data/shoes/static/stubs/blank.run +375 -0
  803. data/shoes/static/stubs/cocoa-install +0 -0
  804. data/shoes/static/stubs/sh-install +48 -0
  805. data/shoes/static/tutor-back.png +0 -0
  806. data/shoes/zlib.dll +0 -0
  807. data/shoes/zlib1.dll +0 -0
  808. metadata +887 -0
@@ -0,0 +1,1313 @@
1
+ require "time"
2
+
3
+ class Time
4
+ class << self
5
+ unless respond_to?(:w3cdtf)
6
+ def w3cdtf(date)
7
+ if /\A\s*
8
+ (-?\d+)-(\d\d)-(\d\d)
9
+ (?:T
10
+ (\d\d):(\d\d)(?::(\d\d))?
11
+ (\.\d+)?
12
+ (Z|[+-]\d\d:\d\d)?)?
13
+ \s*\z/ix =~ date and (($5 and $8) or (!$5 and !$8))
14
+ datetime = [$1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i]
15
+ usec = 0
16
+ usec = $7.to_f * 1000000 if $7
17
+ zone = $8
18
+ if zone
19
+ off = zone_offset(zone, datetime[0])
20
+ datetime = apply_offset(*(datetime + [off]))
21
+ datetime << usec
22
+ time = Time.utc(*datetime)
23
+ time.localtime unless zone_utc?(zone)
24
+ time
25
+ else
26
+ datetime << usec
27
+ Time.local(*datetime)
28
+ end
29
+ else
30
+ raise ArgumentError.new("invalid date: #{date.inspect}")
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ unless method_defined?(:w3cdtf)
37
+ def w3cdtf
38
+ if usec.zero?
39
+ fraction_digits = 0
40
+ else
41
+ fraction_digits = Math.log10(usec.to_s.sub(/0*$/, '').to_i).floor + 1
42
+ end
43
+ xmlschema(fraction_digits)
44
+ end
45
+ end
46
+ end
47
+
48
+
49
+ require "English"
50
+ require "rss/utils"
51
+ require "rss/converter"
52
+ require "rss/xml-stylesheet"
53
+
54
+ module RSS
55
+
56
+ VERSION = "0.2.5"
57
+
58
+ URI = "http://purl.org/rss/1.0/"
59
+
60
+ DEBUG = false
61
+
62
+ class Error < StandardError; end
63
+
64
+ class OverlappedPrefixError < Error
65
+ attr_reader :prefix
66
+ def initialize(prefix)
67
+ @prefix = prefix
68
+ end
69
+ end
70
+
71
+ class InvalidRSSError < Error; end
72
+
73
+ class MissingTagError < InvalidRSSError
74
+ attr_reader :tag, :parent
75
+ def initialize(tag, parent)
76
+ @tag, @parent = tag, parent
77
+ super("tag <#{tag}> is missing in tag <#{parent}>")
78
+ end
79
+ end
80
+
81
+ class TooMuchTagError < InvalidRSSError
82
+ attr_reader :tag, :parent
83
+ def initialize(tag, parent)
84
+ @tag, @parent = tag, parent
85
+ super("tag <#{tag}> is too much in tag <#{parent}>")
86
+ end
87
+ end
88
+
89
+ class MissingAttributeError < InvalidRSSError
90
+ attr_reader :tag, :attribute
91
+ def initialize(tag, attribute)
92
+ @tag, @attribute = tag, attribute
93
+ super("attribute <#{attribute}> is missing in tag <#{tag}>")
94
+ end
95
+ end
96
+
97
+ class UnknownTagError < InvalidRSSError
98
+ attr_reader :tag, :uri
99
+ def initialize(tag, uri)
100
+ @tag, @uri = tag, uri
101
+ super("tag <#{tag}> is unknown in namespace specified by uri <#{uri}>")
102
+ end
103
+ end
104
+
105
+ class NotExpectedTagError < InvalidRSSError
106
+ attr_reader :tag, :uri, :parent
107
+ def initialize(tag, uri, parent)
108
+ @tag, @uri, @parent = tag, uri, parent
109
+ super("tag <{#{uri}}#{tag}> is not expected in tag <#{parent}>")
110
+ end
111
+ end
112
+ # For backward compatibility :X
113
+ NotExceptedTagError = NotExpectedTagError
114
+
115
+ class NotAvailableValueError < InvalidRSSError
116
+ attr_reader :tag, :value, :attribute
117
+ def initialize(tag, value, attribute=nil)
118
+ @tag, @value, @attribute = tag, value, attribute
119
+ message = "value <#{value}> of "
120
+ message << "attribute <#{attribute}> of " if attribute
121
+ message << "tag <#{tag}> is not available."
122
+ super(message)
123
+ end
124
+ end
125
+
126
+ class UnknownConversionMethodError < Error
127
+ attr_reader :to, :from
128
+ def initialize(to, from)
129
+ @to = to
130
+ @from = from
131
+ super("can't convert to #{to} from #{from}.")
132
+ end
133
+ end
134
+ # for backward compatibility
135
+ UnknownConvertMethod = UnknownConversionMethodError
136
+
137
+ class ConversionError < Error
138
+ attr_reader :string, :to, :from
139
+ def initialize(string, to, from)
140
+ @string = string
141
+ @to = to
142
+ @from = from
143
+ super("can't convert #{@string} to #{to} from #{from}.")
144
+ end
145
+ end
146
+
147
+ class NotSetError < Error
148
+ attr_reader :name, :variables
149
+ def initialize(name, variables)
150
+ @name = name
151
+ @variables = variables
152
+ super("required variables of #{@name} are not set: #{@variables.join(', ')}")
153
+ end
154
+ end
155
+
156
+ class UnsupportedMakerVersionError < Error
157
+ attr_reader :version
158
+ def initialize(version)
159
+ @version = version
160
+ super("Maker doesn't support version: #{@version}")
161
+ end
162
+ end
163
+
164
+ module BaseModel
165
+ include Utils
166
+
167
+ def install_have_child_element(tag_name, uri, occurs, name=nil, type=nil)
168
+ name ||= tag_name
169
+ add_need_initialize_variable(name)
170
+ install_model(tag_name, uri, occurs, name)
171
+
172
+ writer_type, reader_type = type
173
+ def_corresponded_attr_writer name, writer_type
174
+ def_corresponded_attr_reader name, reader_type
175
+ install_element(name) do |n, elem_name|
176
+ <<-EOC
177
+ if @#{n}
178
+ "\#{@#{n}.to_s(need_convert, indent)}"
179
+ else
180
+ ''
181
+ end
182
+ EOC
183
+ end
184
+ end
185
+ alias_method(:install_have_attribute_element, :install_have_child_element)
186
+
187
+ def install_have_children_element(tag_name, uri, occurs, name=nil, plural_name=nil)
188
+ name ||= tag_name
189
+ plural_name ||= "#{name}s"
190
+ add_have_children_element(name, plural_name)
191
+ add_plural_form(name, plural_name)
192
+ install_model(tag_name, uri, occurs, plural_name, true)
193
+
194
+ def_children_accessor(name, plural_name)
195
+ install_element(name, "s") do |n, elem_name|
196
+ <<-EOC
197
+ rv = []
198
+ @#{n}.each do |x|
199
+ value = "\#{x.to_s(need_convert, indent)}"
200
+ rv << value if /\\A\\s*\\z/ !~ value
201
+ end
202
+ rv.join("\n")
203
+ EOC
204
+ end
205
+ end
206
+
207
+ def install_text_element(tag_name, uri, occurs, name=nil, type=nil,
208
+ disp_name=nil)
209
+ name ||= tag_name
210
+ disp_name ||= name
211
+ self::ELEMENTS << name unless self::ELEMENTS.include?(name)
212
+ add_need_initialize_variable(name)
213
+ install_model(tag_name, uri, occurs, name)
214
+
215
+ def_corresponded_attr_writer(name, type, disp_name)
216
+ def_corresponded_attr_reader(name, type || :convert)
217
+ install_element(name) do |n, elem_name|
218
+ <<-EOC
219
+ if respond_to?(:#{n}_content)
220
+ content = #{n}_content
221
+ else
222
+ content = @#{n}
223
+ end
224
+ if content
225
+ rv = "\#{indent}<#{elem_name}>"
226
+ value = html_escape(content)
227
+ if need_convert
228
+ rv << convert(value)
229
+ else
230
+ rv << value
231
+ end
232
+ rv << "</#{elem_name}>"
233
+ rv
234
+ else
235
+ ''
236
+ end
237
+ EOC
238
+ end
239
+ end
240
+
241
+ def install_date_element(tag_name, uri, occurs, name=nil, type=nil, disp_name=nil)
242
+ name ||= tag_name
243
+ type ||= :w3cdtf
244
+ disp_name ||= name
245
+ self::ELEMENTS << name
246
+ add_need_initialize_variable(name)
247
+ install_model(tag_name, uri, occurs, name)
248
+
249
+ # accessor
250
+ convert_attr_reader name
251
+ date_writer(name, type, disp_name)
252
+
253
+ install_element(name) do |n, elem_name|
254
+ <<-EOC
255
+ if @#{n}
256
+ rv = "\#{indent}<#{elem_name}>"
257
+ value = html_escape(@#{n}.#{type})
258
+ if need_convert
259
+ rv << convert(value)
260
+ else
261
+ rv << value
262
+ end
263
+ rv << "</#{elem_name}>"
264
+ rv
265
+ else
266
+ ''
267
+ end
268
+ EOC
269
+ end
270
+
271
+ end
272
+
273
+ private
274
+ def install_element(name, postfix="")
275
+ elem_name = name.sub('_', ':')
276
+ method_name = "#{name}_element#{postfix}"
277
+ add_to_element_method(method_name)
278
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
279
+ def #{method_name}(need_convert=true, indent='')
280
+ #{yield(name, elem_name)}
281
+ end
282
+ private :#{method_name}
283
+ EOC
284
+ end
285
+
286
+ def inherit_convert_attr_reader(*attrs)
287
+ attrs.each do |attr|
288
+ attr = attr.id2name if attr.kind_of?(Integer)
289
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
290
+ def #{attr}_without_inherit
291
+ convert(@#{attr})
292
+ end
293
+
294
+ def #{attr}
295
+ if @#{attr}
296
+ #{attr}_without_inherit
297
+ elsif @parent
298
+ @parent.#{attr}
299
+ else
300
+ nil
301
+ end
302
+ end
303
+ EOC
304
+ end
305
+ end
306
+
307
+ def uri_convert_attr_reader(*attrs)
308
+ attrs.each do |attr|
309
+ attr = attr.id2name if attr.kind_of?(Integer)
310
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
311
+ def #{attr}_without_base
312
+ convert(@#{attr})
313
+ end
314
+
315
+ def #{attr}
316
+ value = #{attr}_without_base
317
+ return nil if value.nil?
318
+ if /\\A[a-z][a-z0-9+.\\-]*:/i =~ value
319
+ value
320
+ else
321
+ "\#{base}\#{value}"
322
+ end
323
+ end
324
+ EOC
325
+ end
326
+ end
327
+
328
+ def convert_attr_reader(*attrs)
329
+ attrs.each do |attr|
330
+ attr = attr.id2name if attr.kind_of?(Integer)
331
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
332
+ def #{attr}
333
+ convert(@#{attr})
334
+ end
335
+ EOC
336
+ end
337
+ end
338
+
339
+ def yes_clean_other_attr_reader(*attrs)
340
+ attrs.each do |attr|
341
+ attr = attr.id2name if attr.kind_of?(Integer)
342
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
343
+ attr_reader(:#{attr})
344
+ def #{attr}?
345
+ YesCleanOther.parse(@#{attr})
346
+ end
347
+ EOC
348
+ end
349
+ end
350
+
351
+ def yes_other_attr_reader(*attrs)
352
+ attrs.each do |attr|
353
+ attr = attr.id2name if attr.kind_of?(Integer)
354
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
355
+ attr_reader(:#{attr})
356
+ def #{attr}?
357
+ Utils::YesOther.parse(@#{attr})
358
+ end
359
+ EOC
360
+ end
361
+ end
362
+
363
+ def csv_attr_reader(*attrs)
364
+ separator = nil
365
+ if attrs.last.is_a?(Hash)
366
+ options = attrs.pop
367
+ separator = options[:separator]
368
+ end
369
+ separator ||= ", "
370
+ attrs.each do |attr|
371
+ attr = attr.id2name if attr.kind_of?(Integer)
372
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
373
+ attr_reader(:#{attr})
374
+ def #{attr}_content
375
+ if @#{attr}.nil?
376
+ @#{attr}
377
+ else
378
+ @#{attr}.join(#{separator.dump})
379
+ end
380
+ end
381
+ EOC
382
+ end
383
+ end
384
+
385
+ def date_writer(name, type, disp_name=name)
386
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
387
+ def #{name}=(new_value)
388
+ if new_value.nil?
389
+ @#{name} = new_value
390
+ elsif new_value.kind_of?(Time)
391
+ @#{name} = new_value.dup
392
+ else
393
+ if @do_validate
394
+ begin
395
+ @#{name} = Time.__send__('#{type}', new_value)
396
+ rescue ArgumentError
397
+ raise NotAvailableValueError.new('#{disp_name}', new_value)
398
+ end
399
+ else
400
+ @#{name} = nil
401
+ if /\\A\\s*\\z/ !~ new_value.to_s
402
+ begin
403
+ unless Date._parse(new_value, false).empty?
404
+ @#{name} = Time.parse(new_value)
405
+ end
406
+ rescue ArgumentError
407
+ end
408
+ end
409
+ end
410
+ end
411
+
412
+ # Is it need?
413
+ if @#{name}
414
+ class << @#{name}
415
+ undef_method(:to_s)
416
+ alias_method(:to_s, :#{type})
417
+ end
418
+ end
419
+
420
+ end
421
+ EOC
422
+ end
423
+
424
+ def integer_writer(name, disp_name=name)
425
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
426
+ def #{name}=(new_value)
427
+ if new_value.nil?
428
+ @#{name} = new_value
429
+ else
430
+ if @do_validate
431
+ begin
432
+ @#{name} = Integer(new_value)
433
+ rescue ArgumentError
434
+ raise NotAvailableValueError.new('#{disp_name}', new_value)
435
+ end
436
+ else
437
+ @#{name} = new_value.to_i
438
+ end
439
+ end
440
+ end
441
+ EOC
442
+ end
443
+
444
+ def positive_integer_writer(name, disp_name=name)
445
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
446
+ def #{name}=(new_value)
447
+ if new_value.nil?
448
+ @#{name} = new_value
449
+ else
450
+ if @do_validate
451
+ begin
452
+ tmp = Integer(new_value)
453
+ raise ArgumentError if tmp <= 0
454
+ @#{name} = tmp
455
+ rescue ArgumentError
456
+ raise NotAvailableValueError.new('#{disp_name}', new_value)
457
+ end
458
+ else
459
+ @#{name} = new_value.to_i
460
+ end
461
+ end
462
+ end
463
+ EOC
464
+ end
465
+
466
+ def boolean_writer(name, disp_name=name)
467
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
468
+ def #{name}=(new_value)
469
+ if new_value.nil?
470
+ @#{name} = new_value
471
+ else
472
+ if @do_validate and
473
+ ![true, false, "true", "false"].include?(new_value)
474
+ raise NotAvailableValueError.new('#{disp_name}', new_value)
475
+ end
476
+ if [true, false].include?(new_value)
477
+ @#{name} = new_value
478
+ else
479
+ @#{name} = new_value == "true"
480
+ end
481
+ end
482
+ end
483
+ EOC
484
+ end
485
+
486
+ def text_type_writer(name, disp_name=name)
487
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
488
+ def #{name}=(new_value)
489
+ if @do_validate and
490
+ !["text", "html", "xhtml", nil].include?(new_value)
491
+ raise NotAvailableValueError.new('#{disp_name}', new_value)
492
+ end
493
+ @#{name} = new_value
494
+ end
495
+ EOC
496
+ end
497
+
498
+ def content_writer(name, disp_name=name)
499
+ klass_name = "self.class::#{Utils.to_class_name(name)}"
500
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
501
+ def #{name}=(new_value)
502
+ if new_value.is_a?(#{klass_name})
503
+ @#{name} = new_value
504
+ else
505
+ @#{name} = #{klass_name}.new
506
+ @#{name}.content = new_value
507
+ end
508
+ end
509
+ EOC
510
+ end
511
+
512
+ def yes_clean_other_writer(name, disp_name=name)
513
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
514
+ def #{name}=(value)
515
+ value = (value ? "yes" : "no") if [true, false].include?(value)
516
+ @#{name} = value
517
+ end
518
+ EOC
519
+ end
520
+
521
+ def yes_other_writer(name, disp_name=name)
522
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
523
+ def #{name}=(new_value)
524
+ if [true, false].include?(new_value)
525
+ new_value = new_value ? "yes" : "no"
526
+ end
527
+ @#{name} = new_value
528
+ end
529
+ EOC
530
+ end
531
+
532
+ def csv_writer(name, disp_name=name)
533
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
534
+ def #{name}=(new_value)
535
+ @#{name} = Utils::CSV.parse(new_value)
536
+ end
537
+ EOC
538
+ end
539
+
540
+ def csv_integer_writer(name, disp_name=name)
541
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
542
+ def #{name}=(new_value)
543
+ @#{name} = Utils::CSV.parse(new_value) {|v| Integer(v)}
544
+ end
545
+ EOC
546
+ end
547
+
548
+ def def_children_accessor(accessor_name, plural_name)
549
+ module_eval(<<-EOC, *get_file_and_line_from_caller(2))
550
+ def #{plural_name}
551
+ @#{accessor_name}
552
+ end
553
+
554
+ def #{accessor_name}(*args)
555
+ if args.empty?
556
+ @#{accessor_name}.first
557
+ else
558
+ @#{accessor_name}[*args]
559
+ end
560
+ end
561
+
562
+ def #{accessor_name}=(*args)
563
+ receiver = self.class.name
564
+ warn("Warning:\#{caller.first.sub(/:in `.*'\z/, '')}: " \
565
+ "Don't use `\#{receiver}\##{accessor_name} = XXX'/" \
566
+ "`\#{receiver}\#set_#{accessor_name}(XXX)'. " \
567
+ "Those APIs are not sense of Ruby. " \
568
+ "Use `\#{receiver}\##{plural_name} << XXX' instead of them.")
569
+ if args.size == 1
570
+ @#{accessor_name}.push(args[0])
571
+ else
572
+ @#{accessor_name}.__send__("[]=", *args)
573
+ end
574
+ end
575
+ alias_method(:set_#{accessor_name}, :#{accessor_name}=)
576
+ EOC
577
+ end
578
+ end
579
+
580
+ module SetupMaker
581
+ def setup_maker(maker)
582
+ target = maker_target(maker)
583
+ unless target.nil?
584
+ setup_maker_attributes(target)
585
+ setup_maker_element(target)
586
+ setup_maker_elements(target)
587
+ end
588
+ end
589
+
590
+ private
591
+ def maker_target(maker)
592
+ nil
593
+ end
594
+
595
+ def setup_maker_attributes(target)
596
+ end
597
+
598
+ def setup_maker_element(target)
599
+ self.class.need_initialize_variables.each do |var|
600
+ value = __send__(var)
601
+ next if value.nil?
602
+ if value.respond_to?("setup_maker") and
603
+ !not_need_to_call_setup_maker_variables.include?(var)
604
+ value.setup_maker(target)
605
+ else
606
+ setter = "#{var}="
607
+ if target.respond_to?(setter)
608
+ target.__send__(setter, value)
609
+ end
610
+ end
611
+ end
612
+ end
613
+
614
+ def not_need_to_call_setup_maker_variables
615
+ []
616
+ end
617
+
618
+ def setup_maker_elements(parent)
619
+ self.class.have_children_elements.each do |name, plural_name|
620
+ if parent.respond_to?(plural_name)
621
+ target = parent.__send__(plural_name)
622
+ __send__(plural_name).each do |elem|
623
+ elem.setup_maker(target)
624
+ end
625
+ end
626
+ end
627
+ end
628
+ end
629
+
630
+ class Element
631
+ extend BaseModel
632
+ include Utils
633
+ extend Utils::InheritedReader
634
+ include SetupMaker
635
+
636
+ INDENT = " "
637
+
638
+ MUST_CALL_VALIDATORS = {}
639
+ MODELS = []
640
+ GET_ATTRIBUTES = []
641
+ HAVE_CHILDREN_ELEMENTS = []
642
+ TO_ELEMENT_METHODS = []
643
+ NEED_INITIALIZE_VARIABLES = []
644
+ PLURAL_FORMS = {}
645
+
646
+ class << self
647
+ def must_call_validators
648
+ inherited_hash_reader("MUST_CALL_VALIDATORS")
649
+ end
650
+ def models
651
+ inherited_array_reader("MODELS")
652
+ end
653
+ def get_attributes
654
+ inherited_array_reader("GET_ATTRIBUTES")
655
+ end
656
+ def have_children_elements
657
+ inherited_array_reader("HAVE_CHILDREN_ELEMENTS")
658
+ end
659
+ def to_element_methods
660
+ inherited_array_reader("TO_ELEMENT_METHODS")
661
+ end
662
+ def need_initialize_variables
663
+ inherited_array_reader("NEED_INITIALIZE_VARIABLES")
664
+ end
665
+ def plural_forms
666
+ inherited_hash_reader("PLURAL_FORMS")
667
+ end
668
+
669
+ def inherited_base
670
+ ::RSS::Element
671
+ end
672
+
673
+ def inherited(klass)
674
+ klass.const_set("MUST_CALL_VALIDATORS", {})
675
+ klass.const_set("MODELS", [])
676
+ klass.const_set("GET_ATTRIBUTES", [])
677
+ klass.const_set("HAVE_CHILDREN_ELEMENTS", [])
678
+ klass.const_set("TO_ELEMENT_METHODS", [])
679
+ klass.const_set("NEED_INITIALIZE_VARIABLES", [])
680
+ klass.const_set("PLURAL_FORMS", {})
681
+
682
+ tag_name = klass.name.split(/::/).last
683
+ tag_name[0, 1] = tag_name[0, 1].downcase
684
+ klass.instance_variable_set("@tag_name", tag_name)
685
+ klass.instance_variable_set("@have_content", false)
686
+ end
687
+
688
+ def install_must_call_validator(prefix, uri)
689
+ self::MUST_CALL_VALIDATORS[uri] = prefix
690
+ end
691
+
692
+ def install_model(tag, uri, occurs=nil, getter=nil, plural=false)
693
+ getter ||= tag
694
+ if m = self::MODELS.find {|t, u, o, g, p| t == tag and u == uri}
695
+ m[2] = occurs
696
+ else
697
+ self::MODELS << [tag, uri, occurs, getter, plural]
698
+ end
699
+ end
700
+
701
+ def install_get_attribute(name, uri, required=true,
702
+ type=nil, disp_name=nil,
703
+ element_name=nil)
704
+ disp_name ||= name
705
+ element_name ||= name
706
+ writer_type, reader_type = type
707
+ def_corresponded_attr_writer name, writer_type, disp_name
708
+ def_corresponded_attr_reader name, reader_type
709
+ if type == :boolean and /^is/ =~ name
710
+ alias_method "#{$POSTMATCH}?", name
711
+ end
712
+ self::GET_ATTRIBUTES << [name, uri, required, element_name]
713
+ add_need_initialize_variable(disp_name)
714
+ end
715
+
716
+ def def_corresponded_attr_writer(name, type=nil, disp_name=nil)
717
+ disp_name ||= name
718
+ case type
719
+ when :integer
720
+ integer_writer name, disp_name
721
+ when :positive_integer
722
+ positive_integer_writer name, disp_name
723
+ when :boolean
724
+ boolean_writer name, disp_name
725
+ when :w3cdtf, :rfc822, :rfc2822
726
+ date_writer name, type, disp_name
727
+ when :text_type
728
+ text_type_writer name, disp_name
729
+ when :content
730
+ content_writer name, disp_name
731
+ when :yes_clean_other
732
+ yes_clean_other_writer name, disp_name
733
+ when :yes_other
734
+ yes_other_writer name, disp_name
735
+ when :csv
736
+ csv_writer name
737
+ when :csv_integer
738
+ csv_integer_writer name
739
+ else
740
+ attr_writer name
741
+ end
742
+ end
743
+
744
+ def def_corresponded_attr_reader(name, type=nil)
745
+ case type
746
+ when :inherit
747
+ inherit_convert_attr_reader name
748
+ when :uri
749
+ uri_convert_attr_reader name
750
+ when :yes_clean_other
751
+ yes_clean_other_attr_reader name
752
+ when :yes_other
753
+ yes_other_attr_reader name
754
+ when :csv
755
+ csv_attr_reader name
756
+ when :csv_integer
757
+ csv_attr_reader name, :separator => ","
758
+ else
759
+ convert_attr_reader name
760
+ end
761
+ end
762
+
763
+ def content_setup(type=nil, disp_name=nil)
764
+ writer_type, reader_type = type
765
+ def_corresponded_attr_writer :content, writer_type, disp_name
766
+ def_corresponded_attr_reader :content, reader_type
767
+ @have_content = true
768
+ end
769
+
770
+ def have_content?
771
+ @have_content
772
+ end
773
+
774
+ def add_have_children_element(variable_name, plural_name)
775
+ self::HAVE_CHILDREN_ELEMENTS << [variable_name, plural_name]
776
+ end
777
+
778
+ def add_to_element_method(method_name)
779
+ self::TO_ELEMENT_METHODS << method_name
780
+ end
781
+
782
+ def add_need_initialize_variable(variable_name)
783
+ self::NEED_INITIALIZE_VARIABLES << variable_name
784
+ end
785
+
786
+ def add_plural_form(singular, plural)
787
+ self::PLURAL_FORMS[singular] = plural
788
+ end
789
+
790
+ def required_prefix
791
+ nil
792
+ end
793
+
794
+ def required_uri
795
+ ""
796
+ end
797
+
798
+ def need_parent?
799
+ false
800
+ end
801
+
802
+ def install_ns(prefix, uri)
803
+ if self::NSPOOL.has_key?(prefix)
804
+ raise OverlappedPrefixError.new(prefix)
805
+ end
806
+ self::NSPOOL[prefix] = uri
807
+ end
808
+
809
+ def tag_name
810
+ @tag_name
811
+ end
812
+ end
813
+
814
+ attr_accessor :parent, :do_validate
815
+
816
+ def initialize(do_validate=true, attrs=nil)
817
+ @parent = nil
818
+ @converter = nil
819
+ if attrs.nil? and (do_validate.is_a?(Hash) or do_validate.is_a?(Array))
820
+ do_validate, attrs = true, do_validate
821
+ end
822
+ @do_validate = do_validate
823
+ initialize_variables(attrs || {})
824
+ end
825
+
826
+ def tag_name
827
+ self.class.tag_name
828
+ end
829
+
830
+ def full_name
831
+ tag_name
832
+ end
833
+
834
+ def converter=(converter)
835
+ @converter = converter
836
+ targets = children.dup
837
+ self.class.have_children_elements.each do |variable_name, plural_name|
838
+ targets.concat(__send__(plural_name))
839
+ end
840
+ targets.each do |target|
841
+ target.converter = converter unless target.nil?
842
+ end
843
+ end
844
+
845
+ def convert(value)
846
+ if @converter
847
+ @converter.convert(value)
848
+ else
849
+ value
850
+ end
851
+ end
852
+
853
+ def valid?(ignore_unknown_element=true)
854
+ validate(ignore_unknown_element)
855
+ true
856
+ rescue RSS::Error
857
+ false
858
+ end
859
+
860
+ def validate(ignore_unknown_element=true)
861
+ do_validate = @do_validate
862
+ @do_validate = true
863
+ validate_attribute
864
+ __validate(ignore_unknown_element)
865
+ ensure
866
+ @do_validate = do_validate
867
+ end
868
+
869
+ def validate_for_stream(tags, ignore_unknown_element=true)
870
+ validate_attribute
871
+ __validate(ignore_unknown_element, tags, false)
872
+ end
873
+
874
+ def to_s(need_convert=true, indent='')
875
+ if self.class.have_content?
876
+ return "" if !empty_content? and !content_is_set?
877
+ rv = tag(indent) do |next_indent|
878
+ if empty_content?
879
+ ""
880
+ else
881
+ xmled_content
882
+ end
883
+ end
884
+ else
885
+ rv = tag(indent) do |next_indent|
886
+ self.class.to_element_methods.collect do |method_name|
887
+ __send__(method_name, false, next_indent)
888
+ end
889
+ end
890
+ end
891
+ rv = convert(rv) if need_convert
892
+ rv
893
+ end
894
+
895
+ def have_xml_content?
896
+ false
897
+ end
898
+
899
+ def need_base64_encode?
900
+ false
901
+ end
902
+
903
+ def set_next_element(tag_name, next_element)
904
+ klass = next_element.class
905
+ prefix = ""
906
+ prefix << "#{klass.required_prefix}_" if klass.required_prefix
907
+ key = "#{prefix}#{tag_name.gsub(/-/, '_')}"
908
+ if self.class.plural_forms.has_key?(key)
909
+ ary = __send__("#{self.class.plural_forms[key]}")
910
+ ary << next_element
911
+ else
912
+ __send__("#{key}=", next_element)
913
+ end
914
+ end
915
+
916
+ protected
917
+ def have_required_elements?
918
+ self.class::MODELS.all? do |tag, uri, occurs, getter|
919
+ if occurs.nil? or occurs == "+"
920
+ child = __send__(getter)
921
+ if child.is_a?(Array)
922
+ children = child
923
+ children.any? {|c| c.have_required_elements?}
924
+ else
925
+ !child.to_s.empty?
926
+ end
927
+ else
928
+ true
929
+ end
930
+ end
931
+ end
932
+
933
+ private
934
+ def initialize_variables(attrs)
935
+ normalized_attrs = {}
936
+ attrs.each do |key, value|
937
+ normalized_attrs[key.to_s] = value
938
+ end
939
+ self.class.need_initialize_variables.each do |variable_name|
940
+ value = normalized_attrs[variable_name.to_s]
941
+ if value
942
+ __send__("#{variable_name}=", value)
943
+ else
944
+ instance_variable_set("@#{variable_name}", nil)
945
+ end
946
+ end
947
+ initialize_have_children_elements
948
+ @content = normalized_attrs["content"] if self.class.have_content?
949
+ end
950
+
951
+ def initialize_have_children_elements
952
+ self.class.have_children_elements.each do |variable_name, plural_name|
953
+ instance_variable_set("@#{variable_name}", [])
954
+ end
955
+ end
956
+
957
+ def tag(indent, additional_attrs={}, &block)
958
+ next_indent = indent + INDENT
959
+
960
+ attrs = collect_attrs
961
+ return "" if attrs.nil?
962
+
963
+ return "" unless have_required_elements?
964
+
965
+ attrs.update(additional_attrs)
966
+ start_tag = make_start_tag(indent, next_indent, attrs.dup)
967
+
968
+ if block
969
+ content = block.call(next_indent)
970
+ else
971
+ content = []
972
+ end
973
+
974
+ if content.is_a?(String)
975
+ content = [content]
976
+ start_tag << ">"
977
+ end_tag = "</#{full_name}>"
978
+ else
979
+ content = content.reject{|x| x.empty?}
980
+ if content.empty?
981
+ return "" if attrs.empty?
982
+ end_tag = "/>"
983
+ else
984
+ start_tag << ">\n"
985
+ end_tag = "\n#{indent}</#{full_name}>"
986
+ end
987
+ end
988
+
989
+ start_tag + content.join("\n") + end_tag
990
+ end
991
+
992
+ def make_start_tag(indent, next_indent, attrs)
993
+ start_tag = ["#{indent}<#{full_name}"]
994
+ unless attrs.empty?
995
+ start_tag << attrs.collect do |key, value|
996
+ %Q[#{h key}="#{h value}"]
997
+ end.join("\n#{next_indent}")
998
+ end
999
+ start_tag.join(" ")
1000
+ end
1001
+
1002
+ def collect_attrs
1003
+ attrs = {}
1004
+ _attrs.each do |name, required, alias_name|
1005
+ value = __send__(alias_name || name)
1006
+ return nil if required and value.nil?
1007
+ next if value.nil?
1008
+ return nil if attrs.has_key?(name)
1009
+ attrs[name] = value
1010
+ end
1011
+ attrs
1012
+ end
1013
+
1014
+ def tag_name_with_prefix(prefix)
1015
+ "#{prefix}:#{tag_name}"
1016
+ end
1017
+
1018
+ # For backward compatibility
1019
+ def calc_indent
1020
+ ''
1021
+ end
1022
+
1023
+ def children
1024
+ rv = []
1025
+ self.class.models.each do |name, uri, occurs, getter|
1026
+ value = __send__(getter)
1027
+ next if value.nil?
1028
+ value = [value] unless value.is_a?(Array)
1029
+ value.each do |v|
1030
+ rv << v if v.is_a?(Element)
1031
+ end
1032
+ end
1033
+ rv
1034
+ end
1035
+
1036
+ def _tags
1037
+ rv = []
1038
+ self.class.models.each do |name, uri, occurs, getter, plural|
1039
+ value = __send__(getter)
1040
+ next if value.nil?
1041
+ if plural and value.is_a?(Array)
1042
+ rv.concat([[uri, name]] * value.size)
1043
+ else
1044
+ rv << [uri, name]
1045
+ end
1046
+ end
1047
+ rv
1048
+ end
1049
+
1050
+ def _attrs
1051
+ self.class.get_attributes.collect do |name, uri, required, element_name|
1052
+ [element_name, required, name]
1053
+ end
1054
+ end
1055
+
1056
+ def __validate(ignore_unknown_element, tags=_tags, recursive=true)
1057
+ if recursive
1058
+ children.compact.each do |child|
1059
+ child.validate
1060
+ end
1061
+ end
1062
+ must_call_validators = self.class.must_call_validators
1063
+ tags = tag_filter(tags.dup)
1064
+ p tags if DEBUG
1065
+ must_call_validators.each do |uri, prefix|
1066
+ _validate(ignore_unknown_element, tags[uri], uri)
1067
+ meth = "#{prefix}_validate"
1068
+ if !prefix.empty? and respond_to?(meth, true)
1069
+ __send__(meth, ignore_unknown_element, tags[uri], uri)
1070
+ end
1071
+ end
1072
+ end
1073
+
1074
+ def validate_attribute
1075
+ _attrs.each do |a_name, required, alias_name|
1076
+ value = instance_variable_get("@#{alias_name || a_name}")
1077
+ if required and value.nil?
1078
+ raise MissingAttributeError.new(tag_name, a_name)
1079
+ end
1080
+ __send__("#{alias_name || a_name}=", value)
1081
+ end
1082
+ end
1083
+
1084
+ def _validate(ignore_unknown_element, tags, uri, models=self.class.models)
1085
+ count = 1
1086
+ do_redo = false
1087
+ not_shift = false
1088
+ tag = nil
1089
+ models = models.find_all {|model| model[1] == uri}
1090
+ element_names = models.collect {|model| model[0]}
1091
+ if tags
1092
+ tags_size = tags.size
1093
+ tags = tags.sort_by {|x| element_names.index(x) || tags_size}
1094
+ end
1095
+
1096
+ _tags = tags.dup if tags
1097
+ models.each_with_index do |model, i|
1098
+ name, model_uri, occurs, getter = model
1099
+
1100
+ if DEBUG
1101
+ p "before"
1102
+ p tags
1103
+ p model
1104
+ end
1105
+
1106
+ if not_shift
1107
+ not_shift = false
1108
+ elsif tags
1109
+ tag = tags.shift
1110
+ end
1111
+
1112
+ if DEBUG
1113
+ p "mid"
1114
+ p count
1115
+ end
1116
+
1117
+ case occurs
1118
+ when '?'
1119
+ if count > 2
1120
+ raise TooMuchTagError.new(name, tag_name)
1121
+ else
1122
+ if name == tag
1123
+ do_redo = true
1124
+ else
1125
+ not_shift = true
1126
+ end
1127
+ end
1128
+ when '*'
1129
+ if name == tag
1130
+ do_redo = true
1131
+ else
1132
+ not_shift = true
1133
+ end
1134
+ when '+'
1135
+ if name == tag
1136
+ do_redo = true
1137
+ else
1138
+ if count > 1
1139
+ not_shift = true
1140
+ else
1141
+ raise MissingTagError.new(name, tag_name)
1142
+ end
1143
+ end
1144
+ else
1145
+ if name == tag
1146
+ if models[i+1] and models[i+1][0] != name and
1147
+ tags and tags.first == name
1148
+ raise TooMuchTagError.new(name, tag_name)
1149
+ end
1150
+ else
1151
+ raise MissingTagError.new(name, tag_name)
1152
+ end
1153
+ end
1154
+
1155
+ if DEBUG
1156
+ p "after"
1157
+ p not_shift
1158
+ p do_redo
1159
+ p tag
1160
+ end
1161
+
1162
+ if do_redo
1163
+ do_redo = false
1164
+ count += 1
1165
+ redo
1166
+ else
1167
+ count = 1
1168
+ end
1169
+
1170
+ end
1171
+
1172
+ if !ignore_unknown_element and !tags.nil? and !tags.empty?
1173
+ raise NotExpectedTagError.new(tags.first, uri, tag_name)
1174
+ end
1175
+
1176
+ end
1177
+
1178
+ def tag_filter(tags)
1179
+ rv = {}
1180
+ tags.each do |tag|
1181
+ rv[tag[0]] = [] unless rv.has_key?(tag[0])
1182
+ rv[tag[0]].push(tag[1])
1183
+ end
1184
+ rv
1185
+ end
1186
+
1187
+ def empty_content?
1188
+ false
1189
+ end
1190
+
1191
+ def content_is_set?
1192
+ if have_xml_content?
1193
+ __send__(self.class.xml_getter)
1194
+ else
1195
+ content
1196
+ end
1197
+ end
1198
+
1199
+ def xmled_content
1200
+ if have_xml_content?
1201
+ __send__(self.class.xml_getter).to_s
1202
+ else
1203
+ _content = content
1204
+ _content = [_content].pack("m").delete("\n") if need_base64_encode?
1205
+ h(_content)
1206
+ end
1207
+ end
1208
+ end
1209
+
1210
+ module RootElementMixin
1211
+
1212
+ include XMLStyleSheetMixin
1213
+
1214
+ attr_reader :output_encoding
1215
+ attr_reader :feed_type, :feed_subtype, :feed_version
1216
+ attr_accessor :version, :encoding, :standalone
1217
+ def initialize(feed_version, version=nil, encoding=nil, standalone=nil)
1218
+ super()
1219
+ @feed_type = nil
1220
+ @feed_subtype = nil
1221
+ @feed_version = feed_version
1222
+ @version = version || '1.0'
1223
+ @encoding = encoding
1224
+ @standalone = standalone
1225
+ @output_encoding = nil
1226
+ end
1227
+
1228
+ def feed_info
1229
+ [@feed_type, @feed_version, @feed_subtype]
1230
+ end
1231
+
1232
+ def output_encoding=(enc)
1233
+ @output_encoding = enc
1234
+ self.converter = Converter.new(@output_encoding, @encoding)
1235
+ end
1236
+
1237
+ def setup_maker(maker)
1238
+ maker.version = version
1239
+ maker.encoding = encoding
1240
+ maker.standalone = standalone
1241
+
1242
+ xml_stylesheets.each do |xss|
1243
+ xss.setup_maker(maker)
1244
+ end
1245
+
1246
+ super
1247
+ end
1248
+
1249
+ def to_feed(type, &block)
1250
+ Maker.make(type) do |maker|
1251
+ setup_maker(maker)
1252
+ block.call(maker) if block
1253
+ end
1254
+ end
1255
+
1256
+ def to_rss(type, &block)
1257
+ to_feed("rss#{type}", &block)
1258
+ end
1259
+
1260
+ def to_atom(type, &block)
1261
+ to_feed("atom:#{type}", &block)
1262
+ end
1263
+
1264
+ def to_xml(type=nil, &block)
1265
+ if type.nil? or same_feed_type?(type)
1266
+ to_s
1267
+ else
1268
+ to_feed(type, &block).to_s
1269
+ end
1270
+ end
1271
+
1272
+ private
1273
+ def same_feed_type?(type)
1274
+ if /^(atom|rss)?(\d+\.\d+)?(?::(.+))?$/i =~ type
1275
+ feed_type = ($1 || @feed_type).downcase
1276
+ feed_version = $2 || @feed_version
1277
+ feed_subtype = $3 || @feed_subtype
1278
+ [feed_type, feed_version, feed_subtype] == feed_info
1279
+ else
1280
+ false
1281
+ end
1282
+ end
1283
+
1284
+ def tag(indent, attrs={}, &block)
1285
+ rv = super(indent, ns_declarations.merge(attrs), &block)
1286
+ return rv if rv.empty?
1287
+ "#{xmldecl}#{xml_stylesheet_pi}#{rv}"
1288
+ end
1289
+
1290
+ def xmldecl
1291
+ rv = %Q[<?xml version="#{@version}"]
1292
+ if @output_encoding or @encoding
1293
+ rv << %Q[ encoding="#{@output_encoding or @encoding}"]
1294
+ end
1295
+ rv << %Q[ standalone="yes"] if @standalone
1296
+ rv << "?>\n"
1297
+ rv
1298
+ end
1299
+
1300
+ def ns_declarations
1301
+ decls = {}
1302
+ self.class::NSPOOL.collect do |prefix, uri|
1303
+ prefix = ":#{prefix}" unless prefix.empty?
1304
+ decls["xmlns#{prefix}"] = uri
1305
+ end
1306
+ decls
1307
+ end
1308
+
1309
+ def maker_target(target)
1310
+ target
1311
+ end
1312
+ end
1313
+ end