ruby_on_ruby 0.0.1

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 (493) hide show
  1. data/.gitignore +18 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +22 -0
  5. data/README.md +66 -0
  6. data/Rakefile +1 -0
  7. data/lib/ruby_on_ruby.rb +5 -0
  8. data/lib/ruby_on_ruby/console.rb +7 -0
  9. data/lib/ruby_on_ruby/context.rb +33 -0
  10. data/lib/ruby_on_ruby/file_loader.rb +31 -0
  11. data/lib/ruby_on_ruby/ruby_stream.rb +27 -0
  12. data/lib/ruby_on_ruby/version.rb +3 -0
  13. data/lib/rubyonruby.rb +1 -0
  14. data/ruby_in_ruby.gemspec +19 -0
  15. data/vendor/javascripts/emscripted-ruby/lib/.document +106 -0
  16. data/vendor/javascripts/emscripted-ruby/lib/English.rb +155 -0
  17. data/vendor/javascripts/emscripted-ruby/lib/Env.rb +18 -0
  18. data/vendor/javascripts/emscripted-ruby/lib/README +96 -0
  19. data/vendor/javascripts/emscripted-ruby/lib/abbrev.rb +103 -0
  20. data/vendor/javascripts/emscripted-ruby/lib/base64.rb +133 -0
  21. data/vendor/javascripts/emscripted-ruby/lib/benchmark.rb +572 -0
  22. data/vendor/javascripts/emscripted-ruby/lib/cgi-lib.rb +272 -0
  23. data/vendor/javascripts/emscripted-ruby/lib/cgi.rb +2308 -0
  24. data/vendor/javascripts/emscripted-ruby/lib/cgi/.document +2 -0
  25. data/vendor/javascripts/emscripted-ruby/lib/cgi/session.rb +498 -0
  26. data/vendor/javascripts/emscripted-ruby/lib/cgi/session/pstore.rb +111 -0
  27. data/vendor/javascripts/emscripted-ruby/lib/complex.rb +663 -0
  28. data/vendor/javascripts/emscripted-ruby/lib/csv.rb +992 -0
  29. data/vendor/javascripts/emscripted-ruby/lib/date.rb +1767 -0
  30. data/vendor/javascripts/emscripted-ruby/lib/date/format.rb +1190 -0
  31. data/vendor/javascripts/emscripted-ruby/lib/date2.rb +5 -0
  32. data/vendor/javascripts/emscripted-ruby/lib/debug.rb +947 -0
  33. data/vendor/javascripts/emscripted-ruby/lib/delegate.rb +337 -0
  34. data/vendor/javascripts/emscripted-ruby/lib/drb.rb +2 -0
  35. data/vendor/javascripts/emscripted-ruby/lib/drb/acl.rb +146 -0
  36. data/vendor/javascripts/emscripted-ruby/lib/drb/drb.rb +1782 -0
  37. data/vendor/javascripts/emscripted-ruby/lib/drb/eq.rb +16 -0
  38. data/vendor/javascripts/emscripted-ruby/lib/drb/extserv.rb +64 -0
  39. data/vendor/javascripts/emscripted-ruby/lib/drb/extservm.rb +89 -0
  40. data/vendor/javascripts/emscripted-ruby/lib/drb/gw.rb +122 -0
  41. data/vendor/javascripts/emscripted-ruby/lib/drb/invokemethod.rb +36 -0
  42. data/vendor/javascripts/emscripted-ruby/lib/drb/observer.rb +22 -0
  43. data/vendor/javascripts/emscripted-ruby/lib/drb/ssl.rb +190 -0
  44. data/vendor/javascripts/emscripted-ruby/lib/drb/timeridconv.rb +91 -0
  45. data/vendor/javascripts/emscripted-ruby/lib/drb/unix.rb +108 -0
  46. data/vendor/javascripts/emscripted-ruby/lib/e2mmap.rb +195 -0
  47. data/vendor/javascripts/emscripted-ruby/lib/erb.rb +880 -0
  48. data/vendor/javascripts/emscripted-ruby/lib/eregex.rb +37 -0
  49. data/vendor/javascripts/emscripted-ruby/lib/fileutils.rb +1591 -0
  50. data/vendor/javascripts/emscripted-ruby/lib/finalize.rb +193 -0
  51. data/vendor/javascripts/emscripted-ruby/lib/find.rb +79 -0
  52. data/vendor/javascripts/emscripted-ruby/lib/forwardable.rb +218 -0
  53. data/vendor/javascripts/emscripted-ruby/lib/ftools.rb +261 -0
  54. data/vendor/javascripts/emscripted-ruby/lib/generator.rb +418 -0
  55. data/vendor/javascripts/emscripted-ruby/lib/getoptlong.rb +621 -0
  56. data/vendor/javascripts/emscripted-ruby/lib/getopts.rb +127 -0
  57. data/vendor/javascripts/emscripted-ruby/lib/gserver.rb +253 -0
  58. data/vendor/javascripts/emscripted-ruby/lib/importenv.rb +33 -0
  59. data/vendor/javascripts/emscripted-ruby/lib/ipaddr.rb +814 -0
  60. data/vendor/javascripts/emscripted-ruby/lib/irb.rb +346 -0
  61. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/chws.rb +33 -0
  62. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/fork.rb +39 -0
  63. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/help.rb +34 -0
  64. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/load.rb +67 -0
  65. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/nop.rb +39 -0
  66. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/pushws.rb +39 -0
  67. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/subirb.rb +43 -0
  68. data/vendor/javascripts/emscripted-ruby/lib/irb/completion.rb +205 -0
  69. data/vendor/javascripts/emscripted-ruby/lib/irb/context.rb +255 -0
  70. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/change-ws.rb +62 -0
  71. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/history.rb +110 -0
  72. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/loader.rb +120 -0
  73. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/math-mode.rb +37 -0
  74. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/multi-irb.rb +241 -0
  75. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/save-history.rb +85 -0
  76. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/tracer.rb +61 -0
  77. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/use-loader.rb +65 -0
  78. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/workspaces.rb +56 -0
  79. data/vendor/javascripts/emscripted-ruby/lib/irb/extend-command.rb +264 -0
  80. data/vendor/javascripts/emscripted-ruby/lib/irb/frame.rb +67 -0
  81. data/vendor/javascripts/emscripted-ruby/lib/irb/help.rb +33 -0
  82. data/vendor/javascripts/emscripted-ruby/lib/irb/init.rb +259 -0
  83. data/vendor/javascripts/emscripted-ruby/lib/irb/input-method.rb +120 -0
  84. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/error.rb +30 -0
  85. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/help-message +35 -0
  86. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/error.rb +27 -0
  87. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/help-message +36 -0
  88. data/vendor/javascripts/emscripted-ruby/lib/irb/locale.rb +184 -0
  89. data/vendor/javascripts/emscripted-ruby/lib/irb/notifier.rb +145 -0
  90. data/vendor/javascripts/emscripted-ruby/lib/irb/output-method.rb +85 -0
  91. data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-lex.rb +1149 -0
  92. data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-token.rb +273 -0
  93. data/vendor/javascripts/emscripted-ruby/lib/irb/slex.rb +285 -0
  94. data/vendor/javascripts/emscripted-ruby/lib/irb/version.rb +16 -0
  95. data/vendor/javascripts/emscripted-ruby/lib/irb/workspace.rb +107 -0
  96. data/vendor/javascripts/emscripted-ruby/lib/irb/ws-for-case-2.rb +15 -0
  97. data/vendor/javascripts/emscripted-ruby/lib/irb/xmp.rb +86 -0
  98. data/vendor/javascripts/emscripted-ruby/lib/jcode.rb +220 -0
  99. data/vendor/javascripts/emscripted-ruby/lib/logger.rb +703 -0
  100. data/vendor/javascripts/emscripted-ruby/lib/mailread.rb +62 -0
  101. data/vendor/javascripts/emscripted-ruby/lib/mathn.rb +308 -0
  102. data/vendor/javascripts/emscripted-ruby/lib/matrix.rb +1278 -0
  103. data/vendor/javascripts/emscripted-ruby/lib/mkmf.rb +1811 -0
  104. data/vendor/javascripts/emscripted-ruby/lib/monitor.rb +352 -0
  105. data/vendor/javascripts/emscripted-ruby/lib/mutex_m.rb +122 -0
  106. data/vendor/javascripts/emscripted-ruby/lib/net/ftp.rb +927 -0
  107. data/vendor/javascripts/emscripted-ruby/lib/net/http.rb +2277 -0
  108. data/vendor/javascripts/emscripted-ruby/lib/net/https.rb +173 -0
  109. data/vendor/javascripts/emscripted-ruby/lib/net/imap.rb +3371 -0
  110. data/vendor/javascripts/emscripted-ruby/lib/net/pop.rb +999 -0
  111. data/vendor/javascripts/emscripted-ruby/lib/net/protocol.rb +392 -0
  112. data/vendor/javascripts/emscripted-ruby/lib/net/smtp.rb +1014 -0
  113. data/vendor/javascripts/emscripted-ruby/lib/net/telnet.rb +756 -0
  114. data/vendor/javascripts/emscripted-ruby/lib/observer.rb +192 -0
  115. data/vendor/javascripts/emscripted-ruby/lib/open-uri.rb +678 -0
  116. data/vendor/javascripts/emscripted-ruby/lib/open3.rb +101 -0
  117. data/vendor/javascripts/emscripted-ruby/lib/optparse.rb +1790 -0
  118. data/vendor/javascripts/emscripted-ruby/lib/optparse/date.rb +17 -0
  119. data/vendor/javascripts/emscripted-ruby/lib/optparse/shellwords.rb +6 -0
  120. data/vendor/javascripts/emscripted-ruby/lib/optparse/time.rb +10 -0
  121. data/vendor/javascripts/emscripted-ruby/lib/optparse/uri.rb +6 -0
  122. data/vendor/javascripts/emscripted-ruby/lib/optparse/version.rb +70 -0
  123. data/vendor/javascripts/emscripted-ruby/lib/ostruct.rb +146 -0
  124. data/vendor/javascripts/emscripted-ruby/lib/parsearg.rb +87 -0
  125. data/vendor/javascripts/emscripted-ruby/lib/parsedate.rb +53 -0
  126. data/vendor/javascripts/emscripted-ruby/lib/pathname.rb +1062 -0
  127. data/vendor/javascripts/emscripted-ruby/lib/ping.rb +64 -0
  128. data/vendor/javascripts/emscripted-ruby/lib/pp.rb +654 -0
  129. data/vendor/javascripts/emscripted-ruby/lib/prettyprint.rb +896 -0
  130. data/vendor/javascripts/emscripted-ruby/lib/profile.rb +6 -0
  131. data/vendor/javascripts/emscripted-ruby/lib/profiler.rb +59 -0
  132. data/vendor/javascripts/emscripted-ruby/lib/pstore.rb +395 -0
  133. data/vendor/javascripts/emscripted-ruby/lib/racc/parser.rb +442 -0
  134. data/vendor/javascripts/emscripted-ruby/lib/rational.rb +564 -0
  135. data/vendor/javascripts/emscripted-ruby/lib/readbytes.rb +41 -0
  136. data/vendor/javascripts/emscripted-ruby/lib/resolv-replace.rb +62 -0
  137. data/vendor/javascripts/emscripted-ruby/lib/resolv.rb +2210 -0
  138. data/vendor/javascripts/emscripted-ruby/lib/rexml/attlistdecl.rb +62 -0
  139. data/vendor/javascripts/emscripted-ruby/lib/rexml/attribute.rb +185 -0
  140. data/vendor/javascripts/emscripted-ruby/lib/rexml/cdata.rb +67 -0
  141. data/vendor/javascripts/emscripted-ruby/lib/rexml/child.rb +96 -0
  142. data/vendor/javascripts/emscripted-ruby/lib/rexml/comment.rb +80 -0
  143. data/vendor/javascripts/emscripted-ruby/lib/rexml/doctype.rb +271 -0
  144. data/vendor/javascripts/emscripted-ruby/lib/rexml/document.rb +208 -0
  145. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
  146. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/dtd.rb +51 -0
  147. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/elementdecl.rb +17 -0
  148. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/entitydecl.rb +56 -0
  149. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/notationdecl.rb +39 -0
  150. data/vendor/javascripts/emscripted-ruby/lib/rexml/element.rb +1227 -0
  151. data/vendor/javascripts/emscripted-ruby/lib/rexml/encoding.rb +71 -0
  152. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/CP-1252.rb +103 -0
  153. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
  154. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ICONV.rb +22 -0
  155. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
  156. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
  157. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
  158. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
  159. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UNILE.rb +34 -0
  160. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
  161. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-16.rb +35 -0
  162. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-8.rb +18 -0
  163. data/vendor/javascripts/emscripted-ruby/lib/rexml/entity.rb +165 -0
  164. data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/default.rb +109 -0
  165. data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/pretty.rb +137 -0
  166. data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/transitive.rb +56 -0
  167. data/vendor/javascripts/emscripted-ruby/lib/rexml/functions.rb +382 -0
  168. data/vendor/javascripts/emscripted-ruby/lib/rexml/instruction.rb +70 -0
  169. data/vendor/javascripts/emscripted-ruby/lib/rexml/light/node.rb +196 -0
  170. data/vendor/javascripts/emscripted-ruby/lib/rexml/namespace.rb +47 -0
  171. data/vendor/javascripts/emscripted-ruby/lib/rexml/node.rb +75 -0
  172. data/vendor/javascripts/emscripted-ruby/lib/rexml/output.rb +24 -0
  173. data/vendor/javascripts/emscripted-ruby/lib/rexml/parent.rb +166 -0
  174. data/vendor/javascripts/emscripted-ruby/lib/rexml/parseexception.rb +51 -0
  175. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/baseparser.rb +503 -0
  176. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/lightparser.rb +60 -0
  177. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/pullparser.rb +196 -0
  178. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/sax2parser.rb +238 -0
  179. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/streamparser.rb +46 -0
  180. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/treeparser.rb +97 -0
  181. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
  182. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/xpathparser.rb +698 -0
  183. data/vendor/javascripts/emscripted-ruby/lib/rexml/quickpath.rb +266 -0
  184. data/vendor/javascripts/emscripted-ruby/lib/rexml/rexml.rb +32 -0
  185. data/vendor/javascripts/emscripted-ruby/lib/rexml/sax2listener.rb +97 -0
  186. data/vendor/javascripts/emscripted-ruby/lib/rexml/source.rb +251 -0
  187. data/vendor/javascripts/emscripted-ruby/lib/rexml/streamlistener.rb +92 -0
  188. data/vendor/javascripts/emscripted-ruby/lib/rexml/syncenumerator.rb +33 -0
  189. data/vendor/javascripts/emscripted-ruby/lib/rexml/text.rb +344 -0
  190. data/vendor/javascripts/emscripted-ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
  191. data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/relaxng.rb +559 -0
  192. data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validation.rb +155 -0
  193. data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validationexception.rb +9 -0
  194. data/vendor/javascripts/emscripted-ruby/lib/rexml/xmldecl.rb +119 -0
  195. data/vendor/javascripts/emscripted-ruby/lib/rexml/xmltokens.rb +18 -0
  196. data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath.rb +66 -0
  197. data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath_parser.rb +792 -0
  198. data/vendor/javascripts/emscripted-ruby/lib/rinda/rinda.rb +283 -0
  199. data/vendor/javascripts/emscripted-ruby/lib/rinda/ring.rb +271 -0
  200. data/vendor/javascripts/emscripted-ruby/lib/rinda/tuplespace.rb +642 -0
  201. data/vendor/javascripts/emscripted-ruby/lib/rss.rb +19 -0
  202. data/vendor/javascripts/emscripted-ruby/lib/rss/0.9.rb +428 -0
  203. data/vendor/javascripts/emscripted-ruby/lib/rss/1.0.rb +452 -0
  204. data/vendor/javascripts/emscripted-ruby/lib/rss/2.0.rb +111 -0
  205. data/vendor/javascripts/emscripted-ruby/lib/rss/atom.rb +749 -0
  206. data/vendor/javascripts/emscripted-ruby/lib/rss/content.rb +31 -0
  207. data/vendor/javascripts/emscripted-ruby/lib/rss/content/1.0.rb +10 -0
  208. data/vendor/javascripts/emscripted-ruby/lib/rss/content/2.0.rb +12 -0
  209. data/vendor/javascripts/emscripted-ruby/lib/rss/converter.rb +162 -0
  210. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore.rb +161 -0
  211. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/1.0.rb +13 -0
  212. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/2.0.rb +13 -0
  213. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/atom.rb +17 -0
  214. data/vendor/javascripts/emscripted-ruby/lib/rss/image.rb +193 -0
  215. data/vendor/javascripts/emscripted-ruby/lib/rss/itunes.rb +410 -0
  216. data/vendor/javascripts/emscripted-ruby/lib/rss/maker.rb +44 -0
  217. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/0.9.rb +467 -0
  218. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/1.0.rb +434 -0
  219. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/2.0.rb +223 -0
  220. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/atom.rb +172 -0
  221. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/base.rb +868 -0
  222. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/content.rb +21 -0
  223. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/dublincore.rb +124 -0
  224. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/entry.rb +163 -0
  225. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/feed.rb +429 -0
  226. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/image.rb +111 -0
  227. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/itunes.rb +242 -0
  228. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/slash.rb +33 -0
  229. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/syndication.rb +18 -0
  230. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/taxonomy.rb +118 -0
  231. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/trackback.rb +61 -0
  232. data/vendor/javascripts/emscripted-ruby/lib/rss/parser.rb +541 -0
  233. data/vendor/javascripts/emscripted-ruby/lib/rss/rexmlparser.rb +54 -0
  234. data/vendor/javascripts/emscripted-ruby/lib/rss/rss.rb +1312 -0
  235. data/vendor/javascripts/emscripted-ruby/lib/rss/slash.rb +49 -0
  236. data/vendor/javascripts/emscripted-ruby/lib/rss/syndication.rb +67 -0
  237. data/vendor/javascripts/emscripted-ruby/lib/rss/taxonomy.rb +145 -0
  238. data/vendor/javascripts/emscripted-ruby/lib/rss/trackback.rb +288 -0
  239. data/vendor/javascripts/emscripted-ruby/lib/rss/utils.rb +111 -0
  240. data/vendor/javascripts/emscripted-ruby/lib/rss/xml-stylesheet.rb +105 -0
  241. data/vendor/javascripts/emscripted-ruby/lib/rss/xml.rb +71 -0
  242. data/vendor/javascripts/emscripted-ruby/lib/rss/xmlparser.rb +93 -0
  243. data/vendor/javascripts/emscripted-ruby/lib/rss/xmlscanner.rb +121 -0
  244. data/vendor/javascripts/emscripted-ruby/lib/rubyunit.rb +6 -0
  245. data/vendor/javascripts/emscripted-ruby/lib/runit/assert.rb +73 -0
  246. data/vendor/javascripts/emscripted-ruby/lib/runit/cui/testrunner.rb +51 -0
  247. data/vendor/javascripts/emscripted-ruby/lib/runit/error.rb +9 -0
  248. data/vendor/javascripts/emscripted-ruby/lib/runit/testcase.rb +45 -0
  249. data/vendor/javascripts/emscripted-ruby/lib/runit/testresult.rb +44 -0
  250. data/vendor/javascripts/emscripted-ruby/lib/runit/testsuite.rb +26 -0
  251. data/vendor/javascripts/emscripted-ruby/lib/runit/topublic.rb +8 -0
  252. data/vendor/javascripts/emscripted-ruby/lib/scanf.rb +702 -0
  253. data/vendor/javascripts/emscripted-ruby/lib/securerandom.rb +137 -0
  254. data/vendor/javascripts/emscripted-ruby/lib/set.rb +1233 -0
  255. data/vendor/javascripts/emscripted-ruby/lib/shell.rb +269 -0
  256. data/vendor/javascripts/emscripted-ruby/lib/shell/builtin-command.rb +154 -0
  257. data/vendor/javascripts/emscripted-ruby/lib/shell/command-processor.rb +592 -0
  258. data/vendor/javascripts/emscripted-ruby/lib/shell/error.rb +26 -0
  259. data/vendor/javascripts/emscripted-ruby/lib/shell/filter.rb +110 -0
  260. data/vendor/javascripts/emscripted-ruby/lib/shell/process-controller.rb +260 -0
  261. data/vendor/javascripts/emscripted-ruby/lib/shell/system-command.rb +168 -0
  262. data/vendor/javascripts/emscripted-ruby/lib/shell/version.rb +16 -0
  263. data/vendor/javascripts/emscripted-ruby/lib/shellwords.rb +172 -0
  264. data/vendor/javascripts/emscripted-ruby/lib/singleton.rb +360 -0
  265. data/vendor/javascripts/emscripted-ruby/lib/soap/attachment.rb +107 -0
  266. data/vendor/javascripts/emscripted-ruby/lib/soap/baseData.rb +942 -0
  267. data/vendor/javascripts/emscripted-ruby/lib/soap/element.rb +258 -0
  268. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/aspDotNetHandler.rb +213 -0
  269. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/handler.rb +100 -0
  270. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/literalHandler.rb +226 -0
  271. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/soapHandler.rb +582 -0
  272. data/vendor/javascripts/emscripted-ruby/lib/soap/generator.rb +268 -0
  273. data/vendor/javascripts/emscripted-ruby/lib/soap/header/handler.rb +57 -0
  274. data/vendor/javascripts/emscripted-ruby/lib/soap/header/handlerset.rb +70 -0
  275. data/vendor/javascripts/emscripted-ruby/lib/soap/header/simplehandler.rb +44 -0
  276. data/vendor/javascripts/emscripted-ruby/lib/soap/httpconfigloader.rb +119 -0
  277. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping.rb +10 -0
  278. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/factory.rb +355 -0
  279. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/mapping.rb +381 -0
  280. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/registry.rb +541 -0
  281. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/rubytypeFactory.rb +475 -0
  282. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/typeMap.rb +50 -0
  283. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlencodedregistry.rb +280 -0
  284. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlliteralregistry.rb +418 -0
  285. data/vendor/javascripts/emscripted-ruby/lib/soap/marshal.rb +59 -0
  286. data/vendor/javascripts/emscripted-ruby/lib/soap/mimemessage.rb +240 -0
  287. data/vendor/javascripts/emscripted-ruby/lib/soap/netHttpClient.rb +190 -0
  288. data/vendor/javascripts/emscripted-ruby/lib/soap/parser.rb +251 -0
  289. data/vendor/javascripts/emscripted-ruby/lib/soap/processor.rb +66 -0
  290. data/vendor/javascripts/emscripted-ruby/lib/soap/property.rb +333 -0
  291. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/cgistub.rb +206 -0
  292. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/driver.rb +254 -0
  293. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/element.rb +325 -0
  294. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/httpserver.rb +129 -0
  295. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/proxy.rb +497 -0
  296. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/router.rb +594 -0
  297. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/rpc.rb +25 -0
  298. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/soaplet.rb +162 -0
  299. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/standaloneServer.rb +43 -0
  300. data/vendor/javascripts/emscripted-ruby/lib/soap/soap.rb +140 -0
  301. data/vendor/javascripts/emscripted-ruby/lib/soap/streamHandler.rb +229 -0
  302. data/vendor/javascripts/emscripted-ruby/lib/soap/wsdlDriver.rb +575 -0
  303. data/vendor/javascripts/emscripted-ruby/lib/sync.rb +311 -0
  304. data/vendor/javascripts/emscripted-ruby/lib/tempfile.rb +209 -0
  305. data/vendor/javascripts/emscripted-ruby/lib/test/unit.rb +280 -0
  306. data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertionfailederror.rb +14 -0
  307. data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertions.rb +622 -0
  308. data/vendor/javascripts/emscripted-ruby/lib/test/unit/autorunner.rb +220 -0
  309. data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector.rb +43 -0
  310. data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/dir.rb +107 -0
  311. data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/objectspace.rb +34 -0
  312. data/vendor/javascripts/emscripted-ruby/lib/test/unit/error.rb +56 -0
  313. data/vendor/javascripts/emscripted-ruby/lib/test/unit/failure.rb +51 -0
  314. data/vendor/javascripts/emscripted-ruby/lib/test/unit/testcase.rb +160 -0
  315. data/vendor/javascripts/emscripted-ruby/lib/test/unit/testresult.rb +80 -0
  316. data/vendor/javascripts/emscripted-ruby/lib/test/unit/testsuite.rb +76 -0
  317. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/console/testrunner.rb +127 -0
  318. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/fox/testrunner.rb +268 -0
  319. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk/testrunner.rb +416 -0
  320. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk2/testrunner.rb +465 -0
  321. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnermediator.rb +68 -0
  322. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnerutilities.rb +46 -0
  323. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/tk/testrunner.rb +260 -0
  324. data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/backtracefilter.rb +40 -0
  325. data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/observable.rb +90 -0
  326. data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/procwrapper.rb +48 -0
  327. data/vendor/javascripts/emscripted-ruby/lib/thread.rb +479 -0
  328. data/vendor/javascripts/emscripted-ruby/lib/thwait.rb +169 -0
  329. data/vendor/javascripts/emscripted-ruby/lib/time.rb +797 -0
  330. data/vendor/javascripts/emscripted-ruby/lib/timeout.rb +122 -0
  331. data/vendor/javascripts/emscripted-ruby/lib/tmpdir.rb +130 -0
  332. data/vendor/javascripts/emscripted-ruby/lib/tracer.rb +167 -0
  333. data/vendor/javascripts/emscripted-ruby/lib/tsort.rb +290 -0
  334. data/vendor/javascripts/emscripted-ruby/lib/un.rb +235 -0
  335. data/vendor/javascripts/emscripted-ruby/lib/uri.rb +29 -0
  336. data/vendor/javascripts/emscripted-ruby/lib/uri/common.rb +611 -0
  337. data/vendor/javascripts/emscripted-ruby/lib/uri/ftp.rb +198 -0
  338. data/vendor/javascripts/emscripted-ruby/lib/uri/generic.rb +1122 -0
  339. data/vendor/javascripts/emscripted-ruby/lib/uri/http.rb +100 -0
  340. data/vendor/javascripts/emscripted-ruby/lib/uri/https.rb +20 -0
  341. data/vendor/javascripts/emscripted-ruby/lib/uri/ldap.rb +190 -0
  342. data/vendor/javascripts/emscripted-ruby/lib/uri/ldaps.rb +12 -0
  343. data/vendor/javascripts/emscripted-ruby/lib/uri/mailto.rb +266 -0
  344. data/vendor/javascripts/emscripted-ruby/lib/weakref.rb +100 -0
  345. data/vendor/javascripts/emscripted-ruby/lib/webrick.rb +29 -0
  346. data/vendor/javascripts/emscripted-ruby/lib/webrick/accesslog.rb +67 -0
  347. data/vendor/javascripts/emscripted-ruby/lib/webrick/cgi.rb +257 -0
  348. data/vendor/javascripts/emscripted-ruby/lib/webrick/compat.rb +15 -0
  349. data/vendor/javascripts/emscripted-ruby/lib/webrick/config.rb +97 -0
  350. data/vendor/javascripts/emscripted-ruby/lib/webrick/cookie.rb +110 -0
  351. data/vendor/javascripts/emscripted-ruby/lib/webrick/htmlutils.rb +25 -0
  352. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth.rb +45 -0
  353. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/authenticator.rb +79 -0
  354. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/basicauth.rb +65 -0
  355. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/digestauth.rb +343 -0
  356. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htdigest.rb +91 -0
  357. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htgroup.rb +61 -0
  358. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
  359. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/userdb.rb +29 -0
  360. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpproxy.rb +254 -0
  361. data/vendor/javascripts/emscripted-ruby/lib/webrick/httprequest.rb +365 -0
  362. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpresponse.rb +327 -0
  363. data/vendor/javascripts/emscripted-ruby/lib/webrick/https.rb +63 -0
  364. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpserver.rb +210 -0
  365. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet.rb +22 -0
  366. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/abstract.rb +71 -0
  367. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  368. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgihandler.rb +108 -0
  369. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
  370. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
  371. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
  372. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpstatus.rb +126 -0
  373. data/vendor/javascripts/emscripted-ruby/lib/webrick/httputils.rb +399 -0
  374. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpversion.rb +49 -0
  375. data/vendor/javascripts/emscripted-ruby/lib/webrick/log.rb +88 -0
  376. data/vendor/javascripts/emscripted-ruby/lib/webrick/server.rb +200 -0
  377. data/vendor/javascripts/emscripted-ruby/lib/webrick/ssl.rb +126 -0
  378. data/vendor/javascripts/emscripted-ruby/lib/webrick/utils.rb +100 -0
  379. data/vendor/javascripts/emscripted-ruby/lib/webrick/version.rb +13 -0
  380. data/vendor/javascripts/emscripted-ruby/lib/wsdl/binding.rb +65 -0
  381. data/vendor/javascripts/emscripted-ruby/lib/wsdl/data.rb +64 -0
  382. data/vendor/javascripts/emscripted-ruby/lib/wsdl/definitions.rb +250 -0
  383. data/vendor/javascripts/emscripted-ruby/lib/wsdl/documentation.rb +32 -0
  384. data/vendor/javascripts/emscripted-ruby/lib/wsdl/import.rb +80 -0
  385. data/vendor/javascripts/emscripted-ruby/lib/wsdl/importer.rb +38 -0
  386. data/vendor/javascripts/emscripted-ruby/lib/wsdl/info.rb +39 -0
  387. data/vendor/javascripts/emscripted-ruby/lib/wsdl/message.rb +54 -0
  388. data/vendor/javascripts/emscripted-ruby/lib/wsdl/operation.rb +130 -0
  389. data/vendor/javascripts/emscripted-ruby/lib/wsdl/operationBinding.rb +108 -0
  390. data/vendor/javascripts/emscripted-ruby/lib/wsdl/param.rb +85 -0
  391. data/vendor/javascripts/emscripted-ruby/lib/wsdl/parser.rb +163 -0
  392. data/vendor/javascripts/emscripted-ruby/lib/wsdl/part.rb +52 -0
  393. data/vendor/javascripts/emscripted-ruby/lib/wsdl/port.rb +84 -0
  394. data/vendor/javascripts/emscripted-ruby/lib/wsdl/portType.rb +73 -0
  395. data/vendor/javascripts/emscripted-ruby/lib/wsdl/service.rb +61 -0
  396. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/address.rb +40 -0
  397. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/binding.rb +49 -0
  398. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/body.rb +56 -0
  399. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/cgiStubCreator.rb +76 -0
  400. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreator.rb +314 -0
  401. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreatorSupport.rb +126 -0
  402. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/clientSkeltonCreator.rb +78 -0
  403. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/complexType.rb +161 -0
  404. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/data.rb +42 -0
  405. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/definitions.rb +149 -0
  406. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/driverCreator.rb +95 -0
  407. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/element.rb +28 -0
  408. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/fault.rb +56 -0
  409. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/header.rb +86 -0
  410. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/headerfault.rb +56 -0
  411. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/mappingRegistryCreator.rb +92 -0
  412. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/methodDefCreator.rb +228 -0
  413. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/operation.rb +122 -0
  414. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/servantSkeltonCreator.rb +67 -0
  415. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/standaloneServerStubCreator.rb +85 -0
  416. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/wsdl2ruby.rb +176 -0
  417. data/vendor/javascripts/emscripted-ruby/lib/wsdl/types.rb +43 -0
  418. data/vendor/javascripts/emscripted-ruby/lib/wsdl/wsdl.rb +23 -0
  419. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/all.rb +69 -0
  420. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/annotation.rb +34 -0
  421. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/any.rb +56 -0
  422. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/attribute.rb +127 -0
  423. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/choice.rb +69 -0
  424. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexContent.rb +92 -0
  425. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexType.rb +139 -0
  426. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/content.rb +96 -0
  427. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/data.rb +80 -0
  428. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/element.rb +154 -0
  429. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  430. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/import.rb +65 -0
  431. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/importer.rb +87 -0
  432. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/include.rb +54 -0
  433. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/length.rb +35 -0
  434. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/parser.rb +166 -0
  435. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/pattern.rb +36 -0
  436. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/schema.rb +143 -0
  437. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/sequence.rb +69 -0
  438. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleContent.rb +65 -0
  439. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
  440. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleRestriction.rb +73 -0
  441. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleType.rb +73 -0
  442. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/unique.rb +34 -0
  443. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  444. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/.document +1 -0
  445. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/README.txt +31 -0
  446. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/base64.rb +81 -0
  447. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/client.rb +624 -0
  448. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/config.rb +40 -0
  449. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/create.rb +290 -0
  450. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/datetime.rb +142 -0
  451. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/httpserver.rb +178 -0
  452. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/marshal.rb +76 -0
  453. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/parser.rb +813 -0
  454. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/server.rb +780 -0
  455. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/utils.rb +165 -0
  456. data/vendor/javascripts/emscripted-ruby/lib/xsd/charset.rb +187 -0
  457. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen.rb +12 -0
  458. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/classdef.rb +203 -0
  459. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/commentdef.rb +34 -0
  460. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/gensupport.rb +166 -0
  461. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/methoddef.rb +63 -0
  462. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/moduledef.rb +191 -0
  463. data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes.rb +1269 -0
  464. data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes1999.rb +20 -0
  465. data/vendor/javascripts/emscripted-ruby/lib/xsd/iconvcharset.rb +33 -0
  466. data/vendor/javascripts/emscripted-ruby/lib/xsd/mapping.rb +42 -0
  467. data/vendor/javascripts/emscripted-ruby/lib/xsd/namedelements.rb +95 -0
  468. data/vendor/javascripts/emscripted-ruby/lib/xsd/ns.rb +140 -0
  469. data/vendor/javascripts/emscripted-ruby/lib/xsd/qname.rb +78 -0
  470. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser.rb +61 -0
  471. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/parser.rb +96 -0
  472. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  473. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlparser.rb +50 -0
  474. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlscanner.rb +147 -0
  475. data/vendor/javascripts/emscripted-ruby/lib/yaml.rb +440 -0
  476. data/vendor/javascripts/emscripted-ruby/lib/yaml/baseemitter.rb +247 -0
  477. data/vendor/javascripts/emscripted-ruby/lib/yaml/basenode.rb +216 -0
  478. data/vendor/javascripts/emscripted-ruby/lib/yaml/constants.rb +45 -0
  479. data/vendor/javascripts/emscripted-ruby/lib/yaml/dbm.rb +111 -0
  480. data/vendor/javascripts/emscripted-ruby/lib/yaml/encoding.rb +33 -0
  481. data/vendor/javascripts/emscripted-ruby/lib/yaml/error.rb +34 -0
  482. data/vendor/javascripts/emscripted-ruby/lib/yaml/loader.rb +14 -0
  483. data/vendor/javascripts/emscripted-ruby/lib/yaml/rubytypes.rb +408 -0
  484. data/vendor/javascripts/emscripted-ruby/lib/yaml/store.rb +43 -0
  485. data/vendor/javascripts/emscripted-ruby/lib/yaml/stream.rb +40 -0
  486. data/vendor/javascripts/emscripted-ruby/lib/yaml/stringio.rb +83 -0
  487. data/vendor/javascripts/emscripted-ruby/lib/yaml/syck.rb +19 -0
  488. data/vendor/javascripts/emscripted-ruby/lib/yaml/tag.rb +91 -0
  489. data/vendor/javascripts/emscripted-ruby/lib/yaml/types.rb +192 -0
  490. data/vendor/javascripts/emscripted-ruby/lib/yaml/yamlnode.rb +54 -0
  491. data/vendor/javascripts/emscripted-ruby/lib/yaml/ypath.rb +52 -0
  492. data/vendor/javascripts/emscripted-ruby/ruby.closure.js +7201 -0
  493. metadata +554 -0
@@ -0,0 +1,101 @@
1
+ #
2
+ # = open3.rb: Popen, but with stderr, too
3
+ #
4
+ # Author:: Yukihiro Matsumoto
5
+ # Documentation:: Konrad Meyer
6
+ #
7
+ # Open3 gives you access to stdin, stdout, and stderr when running other
8
+ # programs.
9
+ #
10
+
11
+ #
12
+ # Open3 grants you access to stdin, stdout, and stderr when running another
13
+ # program. Example:
14
+ #
15
+ # require "open3"
16
+ # include Open3
17
+ #
18
+ # stdin, stdout, stderr = popen3('nroff -man')
19
+ #
20
+ # Open3.popen3 can also take a block which will receive stdin, stdout and
21
+ # stderr as parameters. This ensures stdin, stdout and stderr are closed
22
+ # once the block exits. Example:
23
+ #
24
+ # require "open3"
25
+ #
26
+ # Open3.popen3('nroff -man') { |stdin, stdout, stderr| ... }
27
+ #
28
+
29
+ module Open3
30
+ #
31
+ # Open stdin, stdout, and stderr streams and start external executable.
32
+ # Non-block form:
33
+ #
34
+ # require 'open3'
35
+ #
36
+ # [stdin, stdout, stderr] = Open3.popen3(cmd)
37
+ #
38
+ # Block form:
39
+ #
40
+ # require 'open3'
41
+ #
42
+ # Open3.popen3(cmd) { |stdin, stdout, stderr| ... }
43
+ #
44
+ # The parameter +cmd+ is passed directly to Kernel#exec.
45
+ #
46
+ def popen3(*cmd)
47
+ pw = IO::pipe # pipe[0] for read, pipe[1] for write
48
+ pr = IO::pipe
49
+ pe = IO::pipe
50
+
51
+ pid = fork{
52
+ # child
53
+ fork{
54
+ # grandchild
55
+ pw[1].close
56
+ STDIN.reopen(pw[0])
57
+ pw[0].close
58
+
59
+ pr[0].close
60
+ STDOUT.reopen(pr[1])
61
+ pr[1].close
62
+
63
+ pe[0].close
64
+ STDERR.reopen(pe[1])
65
+ pe[1].close
66
+
67
+ exec(*cmd)
68
+ }
69
+ exit!(0)
70
+ }
71
+
72
+ pw[0].close
73
+ pr[1].close
74
+ pe[1].close
75
+ Process.waitpid(pid)
76
+ pi = [pw[1], pr[0], pe[0]]
77
+ pw[1].sync = true
78
+ if defined? yield
79
+ begin
80
+ return yield(*pi)
81
+ ensure
82
+ pi.each{|p| p.close unless p.closed?}
83
+ end
84
+ end
85
+ pi
86
+ end
87
+ module_function :popen3
88
+ end
89
+
90
+ if $0 == __FILE__
91
+ a = Open3.popen3("nroff -man")
92
+ Thread.start do
93
+ while line = gets
94
+ a[0].print line
95
+ end
96
+ a[0].close
97
+ end
98
+ while line = a[1].gets
99
+ print ":", line
100
+ end
101
+ end
@@ -0,0 +1,1790 @@
1
+ #
2
+ # optparse.rb - command-line option analysis with the OptionParser class.
3
+ #
4
+ # Author:: Nobu Nakada
5
+ # Documentation:: Nobu Nakada and Gavin Sinclair.
6
+ #
7
+ # See OptionParser for documentation.
8
+ #
9
+
10
+
11
+ # == Developer Documentation (not for RDoc output)
12
+ #
13
+ # === Class tree
14
+ #
15
+ # - OptionParser:: front end
16
+ # - OptionParser::Switch:: each switches
17
+ # - OptionParser::List:: options list
18
+ # - OptionParser::ParseError:: errors on parsing
19
+ # - OptionParser::AmbiguousOption
20
+ # - OptionParser::NeedlessArgument
21
+ # - OptionParser::MissingArgument
22
+ # - OptionParser::InvalidOption
23
+ # - OptionParser::InvalidArgument
24
+ # - OptionParser::AmbiguousArgument
25
+ #
26
+ # === Object relationship diagram
27
+ #
28
+ # +--------------+
29
+ # | OptionParser |<>-----+
30
+ # +--------------+ | +--------+
31
+ # | ,-| Switch |
32
+ # on_head -------->+---------------+ / +--------+
33
+ # accept/reject -->| List |<|>-
34
+ # | |<|>- +----------+
35
+ # on ------------->+---------------+ `-| argument |
36
+ # : : | class |
37
+ # +---------------+ |==========|
38
+ # on_tail -------->| | |pattern |
39
+ # +---------------+ |----------|
40
+ # OptionParser.accept ->| DefaultList | |converter |
41
+ # reject |(shared between| +----------+
42
+ # | all instances)|
43
+ # +---------------+
44
+ #
45
+ # == OptionParser
46
+ #
47
+ # === Introduction
48
+ #
49
+ # OptionParser is a class for command-line option analysis. It is much more
50
+ # advanced, yet also easier to use, than GetoptLong, and is a more Ruby-oriented
51
+ # solution.
52
+ #
53
+ # === Features
54
+ #
55
+ # 1. The argument specification and the code to handle it are written in the
56
+ # same place.
57
+ # 2. It can output an option summary; you don't need to maintain this string
58
+ # separately.
59
+ # 3. Optional and mandatory arguments are specified very gracefully.
60
+ # 4. Arguments can be automatically converted to a specified class.
61
+ # 5. Arguments can be restricted to a certain set.
62
+ #
63
+ # All of these features are demonstrated in the examples below.
64
+ #
65
+ # === Minimal example
66
+ #
67
+ # require 'optparse'
68
+ #
69
+ # options = {}
70
+ # OptionParser.new do |opts|
71
+ # opts.banner = "Usage: example.rb [options]"
72
+ #
73
+ # opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
74
+ # options[:verbose] = v
75
+ # end
76
+ # end.parse!
77
+ #
78
+ # p options
79
+ # p ARGV
80
+ #
81
+ # === Complete example
82
+ #
83
+ # The following example is a complete Ruby program. You can run it and see the
84
+ # effect of specifying various options. This is probably the best way to learn
85
+ # the features of +optparse+.
86
+ #
87
+ # require 'optparse'
88
+ # require 'optparse/time'
89
+ # require 'ostruct'
90
+ # require 'pp'
91
+ #
92
+ # class OptparseExample
93
+ #
94
+ # CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]
95
+ # CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" }
96
+ #
97
+ # #
98
+ # # Return a structure describing the options.
99
+ # #
100
+ # def self.parse(args)
101
+ # # The options specified on the command line will be collected in *options*.
102
+ # # We set default values here.
103
+ # options = OpenStruct.new
104
+ # options.library = []
105
+ # options.inplace = false
106
+ # options.encoding = "utf8"
107
+ # options.transfer_type = :auto
108
+ # options.verbose = false
109
+ #
110
+ # opts = OptionParser.new do |opts|
111
+ # opts.banner = "Usage: example.rb [options]"
112
+ #
113
+ # opts.separator ""
114
+ # opts.separator "Specific options:"
115
+ #
116
+ # # Mandatory argument.
117
+ # opts.on("-r", "--require LIBRARY",
118
+ # "Require the LIBRARY before executing your script") do |lib|
119
+ # options.library << lib
120
+ # end
121
+ #
122
+ # # Optional argument; multi-line description.
123
+ # opts.on("-i", "--inplace [EXTENSION]",
124
+ # "Edit ARGV files in place",
125
+ # " (make backup if EXTENSION supplied)") do |ext|
126
+ # options.inplace = true
127
+ # options.extension = ext || ''
128
+ # options.extension.sub!(/\A\.?(?=.)/, ".") # Ensure extension begins with dot.
129
+ # end
130
+ #
131
+ # # Cast 'delay' argument to a Float.
132
+ # opts.on("--delay N", Float, "Delay N seconds before executing") do |n|
133
+ # options.delay = n
134
+ # end
135
+ #
136
+ # # Cast 'time' argument to a Time object.
137
+ # opts.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
138
+ # options.time = time
139
+ # end
140
+ #
141
+ # # Cast to octal integer.
142
+ # opts.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger,
143
+ # "Specify record separator (default \\0)") do |rs|
144
+ # options.record_separator = rs
145
+ # end
146
+ #
147
+ # # List of arguments.
148
+ # opts.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|
149
+ # options.list = list
150
+ # end
151
+ #
152
+ # # Keyword completion. We are specifying a specific set of arguments (CODES
153
+ # # and CODE_ALIASES - notice the latter is a Hash), and the user may provide
154
+ # # the shortest unambiguous text.
155
+ # code_list = (CODE_ALIASES.keys + CODES).join(',')
156
+ # opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",
157
+ # " (#{code_list})") do |encoding|
158
+ # options.encoding = encoding
159
+ # end
160
+ #
161
+ # # Optional argument with keyword completion.
162
+ # opts.on("--type [TYPE]", [:text, :binary, :auto],
163
+ # "Select transfer type (text, binary, auto)") do |t|
164
+ # options.transfer_type = t
165
+ # end
166
+ #
167
+ # # Boolean switch.
168
+ # opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
169
+ # options.verbose = v
170
+ # end
171
+ #
172
+ # opts.separator ""
173
+ # opts.separator "Common options:"
174
+ #
175
+ # # No argument, shows at tail. This will print an options summary.
176
+ # # Try it and see!
177
+ # opts.on_tail("-h", "--help", "Show this message") do
178
+ # puts opts
179
+ # exit
180
+ # end
181
+ #
182
+ # # Another typical switch to print the version.
183
+ # opts.on_tail("--version", "Show version") do
184
+ # puts OptionParser::Version.join('.')
185
+ # exit
186
+ # end
187
+ # end
188
+ #
189
+ # opts.parse!(args)
190
+ # options
191
+ # end # parse()
192
+ #
193
+ # end # class OptparseExample
194
+ #
195
+ # options = OptparseExample.parse(ARGV)
196
+ # pp options
197
+ #
198
+ # === Further documentation
199
+ #
200
+ # The above examples should be enough to learn how to use this class. If you
201
+ # have any questions, email me (gsinclair@soyabean.com.au) and I will update
202
+ # this document.
203
+ #
204
+ class OptionParser
205
+ # :stopdoc:
206
+ RCSID = %w$Id: optparse.rb 13823 2007-11-04 20:17:06Z nobu $[1..-1].each {|s| s.freeze}.freeze
207
+ Version = (RCSID[1].split('.').collect {|s| s.to_i}.extend(Comparable).freeze if RCSID[1])
208
+ LastModified = (Time.gm(*RCSID[2, 2].join('-').scan(/\d+/).collect {|s| s.to_i}) if RCSID[2])
209
+ Release = RCSID[2]
210
+
211
+ NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
212
+ RequiredArgument = [REQUIRED_ARGUMENT = :REQUIRED, true].freeze
213
+ OptionalArgument = [OPTIONAL_ARGUMENT = :OPTIONAL, false].freeze
214
+ # :startdoc:
215
+
216
+ #
217
+ # Keyword completion module. This allows partial arguments to be specified
218
+ # and resolved against a list of acceptable values.
219
+ #
220
+ module Completion
221
+ def complete(key, icase = false, pat = nil)
222
+ pat ||= Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&\w*'),
223
+ icase)
224
+ canon, sw, k, v, cn = nil
225
+ candidates = []
226
+ each do |k, *v|
227
+ (if Regexp === k
228
+ kn = nil
229
+ k === key
230
+ else
231
+ kn = defined?(k.id2name) ? k.id2name : k
232
+ pat === kn
233
+ end) or next
234
+ v << k if v.empty?
235
+ candidates << [k, v, kn]
236
+ end
237
+ candidates = candidates.sort_by {|k, v, kn| kn.size}
238
+ if candidates.size == 1
239
+ canon, sw, * = candidates[0]
240
+ elsif candidates.size > 1
241
+ canon, sw, cn = candidates.shift
242
+ candidates.each do |k, v, kn|
243
+ next if sw == v
244
+ if String === cn and String === kn
245
+ if cn.rindex(kn, 0)
246
+ canon, sw, cn = k, v, kn
247
+ next
248
+ elsif kn.rindex(cn, 0)
249
+ next
250
+ end
251
+ end
252
+ throw :ambiguous, key
253
+ end
254
+ end
255
+ if canon
256
+ block_given? or return key, *sw
257
+ yield(key, *sw)
258
+ end
259
+ end
260
+
261
+ def convert(opt = nil, val = nil, *)
262
+ val
263
+ end
264
+ end
265
+
266
+
267
+ #
268
+ # Map from option/keyword string to object with completion.
269
+ #
270
+ class OptionMap < Hash
271
+ include Completion
272
+ end
273
+
274
+
275
+ #
276
+ # Individual switch class. Not important to the user.
277
+ #
278
+ # Defined within Switch are several Switch-derived classes: NoArgument,
279
+ # RequiredArgument, etc.
280
+ #
281
+ class Switch
282
+ attr_reader :pattern, :conv, :short, :long, :arg, :desc, :block
283
+
284
+ #
285
+ # Guesses argument style from +arg+. Returns corresponding
286
+ # OptionParser::Switch class (OptionalArgument, etc.).
287
+ #
288
+ def self.guess(arg)
289
+ case arg
290
+ when ""
291
+ t = self
292
+ when /\A=?\[/
293
+ t = Switch::OptionalArgument
294
+ when /\A\s+\[/
295
+ t = Switch::PlacedArgument
296
+ else
297
+ t = Switch::RequiredArgument
298
+ end
299
+ self >= t or incompatible_argument_styles(arg, t)
300
+ t
301
+ end
302
+
303
+ def self.incompatible_argument_styles(arg, t)
304
+ raise ArgumentError, "#{arg}: incompatible argument styles\n #{self}, #{t}"
305
+ end
306
+
307
+ def self.pattern
308
+ NilClass
309
+ end
310
+
311
+ def initialize(pattern = nil, conv = nil,
312
+ short = nil, long = nil, arg = nil,
313
+ desc = ([] if short or long), block = Proc.new)
314
+ raise if Array === pattern
315
+ @pattern, @conv, @short, @long, @arg, @desc, @block =
316
+ pattern, conv, short, long, arg, desc, block
317
+ end
318
+
319
+ #
320
+ # Parses +arg+ and returns rest of +arg+ and matched portion to the
321
+ # argument pattern. Yields when the pattern doesn't match substring.
322
+ #
323
+ def parse_arg(arg)
324
+ pattern or return nil, arg
325
+ unless m = pattern.match(arg)
326
+ yield(InvalidArgument, arg)
327
+ return arg, nil
328
+ end
329
+ if String === m
330
+ m = [s = m]
331
+ else
332
+ m = m.to_a
333
+ s = m[0]
334
+ return nil, m unless String === s
335
+ end
336
+ raise InvalidArgument, arg unless arg.rindex(s, 0)
337
+ return nil, m if s.length == arg.length
338
+ yield(InvalidArgument, arg) # didn't match whole arg
339
+ return arg[s.length..-1], m
340
+ end
341
+ private :parse_arg
342
+
343
+ #
344
+ # Parses argument, converts and returns +arg+, +block+ and result of
345
+ # conversion. Yields at semi-error condition instead of raising an
346
+ # exception.
347
+ #
348
+ def conv_arg(arg, val = nil)
349
+ if conv
350
+ val = conv.call(*val)
351
+ else
352
+ val = proc {|val| val}.call(*val)
353
+ end
354
+ return arg, block, val
355
+ end
356
+ private :conv_arg
357
+
358
+ #
359
+ # Produces the summary text. Each line of the summary is yielded to the
360
+ # block (without newline).
361
+ #
362
+ # +sdone+:: Already summarized short style options keyed hash.
363
+ # +ldone+:: Already summarized long style options keyed hash.
364
+ # +width+:: Width of left side (option part). In other words, the right
365
+ # side (description part) starts after +width+ columns.
366
+ # +max+:: Maximum width of left side -> the options are filled within
367
+ # +max+ columns.
368
+ # +indent+:: Prefix string indents all summarized lines.
369
+ #
370
+ def summarize(sdone = [], ldone = [], width = 1, max = width - 1, indent = "")
371
+ sopts, lopts, s = [], [], nil
372
+ @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
373
+ @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
374
+ return if sopts.empty? and lopts.empty? # completely hidden
375
+
376
+ left = [sopts.join(', ')]
377
+ right = desc.dup
378
+
379
+ while s = lopts.shift
380
+ l = left[-1].length + s.length
381
+ l += arg.length if left.size == 1 && arg
382
+ l < max or sopts.empty? or left << ''
383
+ left[-1] << if left[-1].empty? then ' ' * 4 else ', ' end << s
384
+ end
385
+
386
+ left[0] << arg if arg
387
+ mlen = left.collect {|s| s.length}.max.to_i
388
+ while mlen > width and l = left.shift
389
+ mlen = left.collect {|s| s.length}.max.to_i if l.length == mlen
390
+ yield(indent + l)
391
+ end
392
+
393
+ while begin l = left.shift; r = right.shift; l or r end
394
+ l = l.to_s.ljust(width) + ' ' + r if r and !r.empty?
395
+ yield(indent + l)
396
+ end
397
+
398
+ self
399
+ end
400
+
401
+ def add_banner(to) # :nodoc:
402
+ unless @short or @long
403
+ s = desc.join
404
+ to << " [" + s + "]..." unless s.empty?
405
+ end
406
+ to
407
+ end
408
+
409
+ def match_nonswitch?(str) # :nodoc:
410
+ @pattern =~ str unless @short or @long
411
+ end
412
+
413
+ #
414
+ # Main name of the switch.
415
+ #
416
+ def switch_name
417
+ (long.first || short.first).sub(/\A-+(?:\[no-\])?/, '')
418
+ end
419
+
420
+ #
421
+ # Switch that takes no arguments.
422
+ #
423
+ class NoArgument < self
424
+
425
+ #
426
+ # Raises an exception if any arguments given.
427
+ #
428
+ def parse(arg, argv)
429
+ yield(NeedlessArgument, arg) if arg
430
+ conv_arg(arg)
431
+ end
432
+
433
+ def self.incompatible_argument_styles(*)
434
+ end
435
+
436
+ def self.pattern
437
+ Object
438
+ end
439
+ end
440
+
441
+ #
442
+ # Switch that takes an argument.
443
+ #
444
+ class RequiredArgument < self
445
+
446
+ #
447
+ # Raises an exception if argument is not present.
448
+ #
449
+ def parse(arg, argv)
450
+ unless arg
451
+ raise MissingArgument if argv.empty?
452
+ arg = argv.shift
453
+ end
454
+ conv_arg(*parse_arg(arg) {|*exc| raise(*exc)})
455
+ end
456
+ end
457
+
458
+ #
459
+ # Switch that can omit argument.
460
+ #
461
+ class OptionalArgument < self
462
+
463
+ #
464
+ # Parses argument if given, or uses default value.
465
+ #
466
+ def parse(arg, argv, &error)
467
+ if arg
468
+ conv_arg(*parse_arg(arg, &error))
469
+ else
470
+ conv_arg(arg)
471
+ end
472
+ end
473
+ end
474
+
475
+ #
476
+ # Switch that takes an argument, which does not begin with '-'.
477
+ #
478
+ class PlacedArgument < self
479
+
480
+ #
481
+ # Returns nil if argument is not present or begins with '-'.
482
+ #
483
+ def parse(arg, argv, &error)
484
+ if !(val = arg) and (argv.empty? or /\A-/ =~ (val = argv[0]))
485
+ return nil, block, nil
486
+ end
487
+ opt = (val = parse_arg(val, &error))[1]
488
+ val = conv_arg(*val)
489
+ if opt and !arg
490
+ argv.shift
491
+ else
492
+ val[0] = nil
493
+ end
494
+ val
495
+ end
496
+ end
497
+ end
498
+
499
+ #
500
+ # Simple option list providing mapping from short and/or long option
501
+ # string to OptionParser::Switch and mapping from acceptable argument to
502
+ # matching pattern and converter pair. Also provides summary feature.
503
+ #
504
+ class List
505
+ # Map from acceptable argument types to pattern and converter pairs.
506
+ attr_reader :atype
507
+
508
+ # Map from short style option switches to actual switch objects.
509
+ attr_reader :short
510
+
511
+ # Map from long style option switches to actual switch objects.
512
+ attr_reader :long
513
+
514
+ # List of all switches and summary string.
515
+ attr_reader :list
516
+
517
+ #
518
+ # Just initializes all instance variables.
519
+ #
520
+ def initialize
521
+ @atype = {}
522
+ @short = OptionMap.new
523
+ @long = OptionMap.new
524
+ @list = []
525
+ end
526
+
527
+ #
528
+ # See OptionParser.accept.
529
+ #
530
+ def accept(t, pat = /.*/nm, &block)
531
+ if pat
532
+ pat.respond_to?(:match) or raise TypeError, "has no `match'"
533
+ else
534
+ pat = t if t.respond_to?(:match)
535
+ end
536
+ unless block
537
+ block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
538
+ end
539
+ @atype[t] = [pat, block]
540
+ end
541
+
542
+ #
543
+ # See OptionParser.reject.
544
+ #
545
+ def reject(t)
546
+ @atype.delete(t)
547
+ end
548
+
549
+ #
550
+ # Adds +sw+ according to +sopts+, +lopts+ and +nlopts+.
551
+ #
552
+ # +sw+:: OptionParser::Switch instance to be added.
553
+ # +sopts+:: Short style option list.
554
+ # +lopts+:: Long style option list.
555
+ # +nlopts+:: Negated long style options list.
556
+ #
557
+ def update(sw, sopts, lopts, nsw = nil, nlopts = nil)
558
+ o = nil
559
+ sopts.each {|o| @short[o] = sw} if sopts
560
+ lopts.each {|o| @long[o] = sw} if lopts
561
+ nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
562
+ used = @short.invert.update(@long.invert)
563
+ @list.delete_if {|o| Switch === o and !used[o]}
564
+ end
565
+ private :update
566
+
567
+ #
568
+ # Inserts +switch+ at the head of the list, and associates short, long
569
+ # and negated long options. Arguments are:
570
+ #
571
+ # +switch+:: OptionParser::Switch instance to be inserted.
572
+ # +short_opts+:: List of short style options.
573
+ # +long_opts+:: List of long style options.
574
+ # +nolong_opts+:: List of long style options with "no-" prefix.
575
+ #
576
+ # prepend(switch, short_opts, long_opts, nolong_opts)
577
+ #
578
+ def prepend(*args)
579
+ update(*args)
580
+ @list.unshift(args[0])
581
+ end
582
+
583
+ #
584
+ # Appends +switch+ at the tail of the list, and associates short, long
585
+ # and negated long options. Arguments are:
586
+ #
587
+ # +switch+:: OptionParser::Switch instance to be inserted.
588
+ # +short_opts+:: List of short style options.
589
+ # +long_opts+:: List of long style options.
590
+ # +nolong_opts+:: List of long style options with "no-" prefix.
591
+ #
592
+ # append(switch, short_opts, long_opts, nolong_opts)
593
+ #
594
+ def append(*args)
595
+ update(*args)
596
+ @list.push(args[0])
597
+ end
598
+
599
+ #
600
+ # Searches +key+ in +id+ list. The result is returned or yielded if a
601
+ # block is given. If it isn't found, nil is returned.
602
+ #
603
+ def search(id, key)
604
+ if list = __send__(id)
605
+ val = list.fetch(key) {return nil}
606
+ block_given? ? yield(val) : val
607
+ end
608
+ end
609
+
610
+ #
611
+ # Searches list +id+ for +opt+ and the optional patterns for completion
612
+ # +pat+. If +icase+ is true, the search is case insensitive. The result
613
+ # is returned or yielded if a block is given. If it isn't found, nil is
614
+ # returned.
615
+ #
616
+ def complete(id, opt, icase = false, *pat, &block)
617
+ __send__(id).complete(opt, icase, *pat, &block)
618
+ end
619
+
620
+ #
621
+ # Iterates over each option, passing the option to the +block+.
622
+ #
623
+ def each_option(&block)
624
+ list.each(&block)
625
+ end
626
+
627
+ #
628
+ # Creates the summary table, passing each line to the +block+ (without
629
+ # newline). The arguments +args+ are passed along to the summarize
630
+ # method which is called on every option.
631
+ #
632
+ def summarize(*args, &block)
633
+ list.each do |opt|
634
+ if opt.respond_to?(:summarize) # perhaps OptionParser::Switch
635
+ opt.summarize(*args, &block)
636
+ elsif !opt
637
+ yield("")
638
+ elsif opt.respond_to?(:each_line)
639
+ opt.each_line(&block)
640
+ else
641
+ opt.each(&block)
642
+ end
643
+ end
644
+ end
645
+
646
+ def add_banner(to) # :nodoc:
647
+ list.each do |opt|
648
+ if opt.respond_to?(:add_banner)
649
+ opt.add_banner(to)
650
+ end
651
+ end
652
+ to
653
+ end
654
+ end
655
+
656
+ #
657
+ # Hash with completion search feature. See OptionParser::Completion.
658
+ #
659
+ class CompletingHash < Hash
660
+ include Completion
661
+
662
+ #
663
+ # Completion for hash key.
664
+ #
665
+ def match(key)
666
+ return key, *fetch(key) {
667
+ raise AmbiguousArgument, catch(:ambiguous) {return complete(key)}
668
+ }
669
+ end
670
+ end
671
+
672
+ # :stopdoc:
673
+
674
+ #
675
+ # Enumeration of acceptable argument styles. Possible values are:
676
+ #
677
+ # NO_ARGUMENT:: The switch takes no arguments. (:NONE)
678
+ # REQUIRED_ARGUMENT:: The switch requires an argument. (:REQUIRED)
679
+ # OPTIONAL_ARGUMENT:: The switch requires an optional argument. (:OPTIONAL)
680
+ #
681
+ # Use like --switch=argument (long style) or -Xargument (short style). For
682
+ # short style, only portion matched to argument pattern is dealed as
683
+ # argument.
684
+ #
685
+ ArgumentStyle = {}
686
+ NoArgument.each {|el| ArgumentStyle[el] = Switch::NoArgument}
687
+ RequiredArgument.each {|el| ArgumentStyle[el] = Switch::RequiredArgument}
688
+ OptionalArgument.each {|el| ArgumentStyle[el] = Switch::OptionalArgument}
689
+ ArgumentStyle.freeze
690
+
691
+ #
692
+ # Switches common used such as '--', and also provides default
693
+ # argument classes
694
+ #
695
+ DefaultList = List.new
696
+ DefaultList.short['-'] = Switch::NoArgument.new {}
697
+ DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}
698
+
699
+ #
700
+ # Default options for ARGV, which never appear in option summary.
701
+ #
702
+ Officious = {}
703
+
704
+ #
705
+ # --help
706
+ # Shows option summary.
707
+ #
708
+ Officious['help'] = proc do |parser|
709
+ Switch::NoArgument.new do
710
+ puts parser.help
711
+ exit
712
+ end
713
+ end
714
+
715
+ #
716
+ # --version
717
+ # Shows version string if Version is defined.
718
+ #
719
+ Officious['version'] = proc do |parser|
720
+ Switch::OptionalArgument.new do |pkg|
721
+ if pkg
722
+ begin
723
+ require 'optparse/version'
724
+ rescue LoadError
725
+ else
726
+ show_version(*pkg.split(/,/)) or
727
+ abort("#{parser.program_name}: no version found in package #{pkg}")
728
+ exit
729
+ end
730
+ end
731
+ v = parser.ver or abort("#{parser.program_name}: version unknown")
732
+ puts v
733
+ exit
734
+ end
735
+ end
736
+
737
+ # :startdoc:
738
+
739
+ #
740
+ # Class methods
741
+ #
742
+
743
+ #
744
+ # Initializes a new instance and evaluates the optional block in context
745
+ # of the instance. Arguments +args+ are passed to #new, see there for
746
+ # description of parameters.
747
+ #
748
+ # This method is *deprecated*, its behavior corresponds to the older #new
749
+ # method.
750
+ #
751
+ def self.with(*args, &block)
752
+ opts = new(*args)
753
+ opts.instance_eval(&block)
754
+ opts
755
+ end
756
+
757
+ #
758
+ # Returns an incremented value of +default+ according to +arg+.
759
+ #
760
+ def self.inc(arg, default = nil)
761
+ case arg
762
+ when Integer
763
+ arg.nonzero?
764
+ when nil
765
+ default.to_i + 1
766
+ end
767
+ end
768
+ def inc(*args)
769
+ self.class.inc(*args)
770
+ end
771
+
772
+ #
773
+ # Initializes the instance and yields itself if called with a block.
774
+ #
775
+ # +banner+:: Banner message.
776
+ # +width+:: Summary width.
777
+ # +indent+:: Summary indent.
778
+ #
779
+ def initialize(banner = nil, width = 32, indent = ' ' * 4)
780
+ @stack = [DefaultList, List.new, List.new]
781
+ @program_name = nil
782
+ @banner = banner
783
+ @summary_width = width
784
+ @summary_indent = indent
785
+ @default_argv = ARGV
786
+ add_officious
787
+ yield self if block_given?
788
+ end
789
+
790
+ def add_officious # :nodoc:
791
+ list = base()
792
+ Officious.each do |opt, block|
793
+ list.long[opt] ||= block.call(self)
794
+ end
795
+ end
796
+
797
+ #
798
+ # Terminates option parsing. Optional parameter +arg+ is a string pushed
799
+ # back to be the first non-option argument.
800
+ #
801
+ def terminate(arg = nil)
802
+ self.class.terminate(arg)
803
+ end
804
+ def self.terminate(arg = nil)
805
+ throw :terminate, arg
806
+ end
807
+
808
+ @stack = [DefaultList]
809
+ def self.top() DefaultList end
810
+
811
+ #
812
+ # Directs to accept specified class +t+. The argument string is passed to
813
+ # the block in which it should be converted to the desired class.
814
+ #
815
+ # +t+:: Argument class specifier, any object including Class.
816
+ # +pat+:: Pattern for argument, defaults to +t+ if it responds to match.
817
+ #
818
+ # accept(t, pat, &block)
819
+ #
820
+ def accept(*args, &blk) top.accept(*args, &blk) end
821
+ #
822
+ # See #accept.
823
+ #
824
+ def self.accept(*args, &blk) top.accept(*args, &blk) end
825
+
826
+ #
827
+ # Directs to reject specified class argument.
828
+ #
829
+ # +t+:: Argument class speficier, any object including Class.
830
+ #
831
+ # reject(t)
832
+ #
833
+ def reject(*args, &blk) top.reject(*args, &blk) end
834
+ #
835
+ # See #reject.
836
+ #
837
+ def self.reject(*args, &blk) top.reject(*args, &blk) end
838
+
839
+ #
840
+ # Instance methods
841
+ #
842
+
843
+ # Heading banner preceding summary.
844
+ attr_writer :banner
845
+
846
+ # Program name to be emitted in error message and default banner,
847
+ # defaults to $0.
848
+ attr_writer :program_name
849
+
850
+ # Width for option list portion of summary. Must be Numeric.
851
+ attr_accessor :summary_width
852
+
853
+ # Indentation for summary. Must be String (or have + String method).
854
+ attr_accessor :summary_indent
855
+
856
+ # Strings to be parsed in default.
857
+ attr_accessor :default_argv
858
+
859
+ #
860
+ # Heading banner preceding summary.
861
+ #
862
+ def banner
863
+ unless @banner
864
+ @banner = "Usage: #{program_name} [options]"
865
+ visit(:add_banner, @banner)
866
+ end
867
+ @banner
868
+ end
869
+
870
+ #
871
+ # Program name to be emitted in error message and default banner, defaults
872
+ # to $0.
873
+ #
874
+ def program_name
875
+ @program_name || File.basename($0, '.*')
876
+ end
877
+
878
+ # for experimental cascading :-)
879
+ alias set_banner banner=
880
+ alias set_program_name program_name=
881
+ alias set_summary_width summary_width=
882
+ alias set_summary_indent summary_indent=
883
+
884
+ # Version
885
+ attr_writer :version
886
+ # Release code
887
+ attr_writer :release
888
+
889
+ #
890
+ # Version
891
+ #
892
+ def version
893
+ @version || (defined?(::Version) && ::Version)
894
+ end
895
+
896
+ #
897
+ # Release code
898
+ #
899
+ def release
900
+ @release || (defined?(::Release) && ::Release) || (defined?(::RELEASE) && ::RELEASE)
901
+ end
902
+
903
+ #
904
+ # Returns version string from program_name, version and release.
905
+ #
906
+ def ver
907
+ if v = version
908
+ str = "#{program_name} #{[v].join('.')}"
909
+ str << " (#{v})" if v = release
910
+ str
911
+ end
912
+ end
913
+
914
+ def warn(mesg = $!)
915
+ super("#{program_name}: #{mesg}")
916
+ end
917
+
918
+ def abort(mesg = $!)
919
+ super("#{program_name}: #{mesg}")
920
+ end
921
+
922
+ #
923
+ # Subject of #on / #on_head, #accept / #reject
924
+ #
925
+ def top
926
+ @stack[-1]
927
+ end
928
+
929
+ #
930
+ # Subject of #on_tail.
931
+ #
932
+ def base
933
+ @stack[1]
934
+ end
935
+
936
+ #
937
+ # Pushes a new List.
938
+ #
939
+ def new
940
+ @stack.push(List.new)
941
+ if block_given?
942
+ yield self
943
+ else
944
+ self
945
+ end
946
+ end
947
+
948
+ #
949
+ # Removes the last List.
950
+ #
951
+ def remove
952
+ @stack.pop
953
+ end
954
+
955
+ #
956
+ # Puts option summary into +to+ and returns +to+. Yields each line if
957
+ # a block is given.
958
+ #
959
+ # +to+:: Output destination, which must have method <<. Defaults to [].
960
+ # +width+:: Width of left side, defaults to @summary_width.
961
+ # +max+:: Maximum length allowed for left side, defaults to +width+ - 1.
962
+ # +indent+:: Indentation, defaults to @summary_indent.
963
+ #
964
+ def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
965
+ visit(:summarize, {}, {}, width, max, indent, &(blk || proc {|l| to << l + $/}))
966
+ to
967
+ end
968
+
969
+ #
970
+ # Returns option summary string.
971
+ #
972
+ def help; summarize(banner.to_s.sub(/\n?\z/, "\n")) end
973
+ alias to_s help
974
+
975
+ #
976
+ # Returns option summary list.
977
+ #
978
+ def to_a; summarize(banner.to_a.dup) end
979
+
980
+ #
981
+ # Checks if an argument is given twice, in which case an ArgumentError is
982
+ # raised. Called from OptionParser#switch only.
983
+ #
984
+ # +obj+:: New argument.
985
+ # +prv+:: Previously specified argument.
986
+ # +msg+:: Exception message.
987
+ #
988
+ def notwice(obj, prv, msg)
989
+ unless !prv or prv == obj
990
+ begin
991
+ raise ArgumentError, "argument #{msg} given twice: #{obj}"
992
+ rescue
993
+ $@[0, 2] = nil
994
+ raise
995
+ end
996
+ end
997
+ obj
998
+ end
999
+ private :notwice
1000
+
1001
+ #
1002
+ # Creates an OptionParser::Switch from the parameters. The parsed argument
1003
+ # value is passed to the given block, where it can be processed.
1004
+ #
1005
+ # See at the beginning of OptionParser for some full examples.
1006
+ #
1007
+ # +opts+ can include the following elements:
1008
+ #
1009
+ # [Argument style:]
1010
+ # One of the following:
1011
+ # :NONE, :REQUIRED, :OPTIONAL
1012
+ #
1013
+ # [Argument pattern:]
1014
+ # Acceptable option argument format, must be pre-defined with
1015
+ # OptionParser.accept or OptionParser#accept, or Regexp. This can appear
1016
+ # once or assigned as String if not present, otherwise causes an
1017
+ # ArgumentError. Examples:
1018
+ # Float, Time, Array
1019
+ #
1020
+ # [Possible argument values:]
1021
+ # Hash or Array.
1022
+ # [:text, :binary, :auto]
1023
+ # %w[iso-2022-jp shift_jis euc-jp utf8 binary]
1024
+ # { "jis" => "iso-2022-jp", "sjis" => "shift_jis" }
1025
+ #
1026
+ # [Long style switch:]
1027
+ # Specifies a long style switch which takes a mandatory, optional or no
1028
+ # argument. It's a string of the following form:
1029
+ # "--switch=MANDATORY" or "--switch MANDATORY"
1030
+ # "--switch[=OPTIONAL]"
1031
+ # "--switch"
1032
+ #
1033
+ # [Short style switch:]
1034
+ # Specifies short style switch which takes a mandatory, optional or no
1035
+ # argument. It's a string of the following form:
1036
+ # "-xMANDATORY"
1037
+ # "-x[OPTIONAL]"
1038
+ # "-x"
1039
+ # There is also a special form which matches character range (not full
1040
+ # set of regural expression):
1041
+ # "-[a-z]MANDATORY"
1042
+ # "-[a-z][OPTIONAL]"
1043
+ # "-[a-z]"
1044
+ #
1045
+ # [Argument style and description:]
1046
+ # Instead of specifying mandatory or optional orguments directly in the
1047
+ # switch parameter, this separate parameter can be used.
1048
+ # "=MANDATORY"
1049
+ # "=[OPTIONAL]"
1050
+ #
1051
+ # [Description:]
1052
+ # Description string for the option.
1053
+ # "Run verbosely"
1054
+ #
1055
+ # [Handler:]
1056
+ # Handler for the parsed argument value. Either give a block or pass a
1057
+ # Proc or Method as an argument.
1058
+ #
1059
+ def make_switch(opts, block = nil)
1060
+ short, long, nolong, style, pattern, conv, not_pattern, not_conv, not_style = [], [], []
1061
+ ldesc, sdesc, desc, arg = [], [], []
1062
+ default_style = Switch::NoArgument
1063
+ default_pattern = nil
1064
+ klass = nil
1065
+ o = nil
1066
+ n, q, a = nil
1067
+
1068
+ opts.each do |o|
1069
+ # argument class
1070
+ next if search(:atype, o) do |pat, c|
1071
+ klass = notwice(o, klass, 'type')
1072
+ if not_style and not_style != Switch::NoArgument
1073
+ not_pattern, not_conv = pat, c
1074
+ else
1075
+ default_pattern, conv = pat, c
1076
+ end
1077
+ end
1078
+
1079
+ # directly specified pattern(any object possible to match)
1080
+ if !(String === o) and o.respond_to?(:match)
1081
+ pattern = notwice(o, pattern, 'pattern')
1082
+ conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert)
1083
+ next
1084
+ end
1085
+
1086
+ # anything others
1087
+ case o
1088
+ when Proc, Method
1089
+ block = notwice(o, block, 'block')
1090
+ when Array, Hash
1091
+ case pattern
1092
+ when CompletingHash
1093
+ when nil
1094
+ pattern = CompletingHash.new
1095
+ conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert)
1096
+ else
1097
+ raise ArgumentError, "argument pattern given twice"
1098
+ end
1099
+ o.each {|(o, *v)| pattern[o] = v.fetch(0) {o}}
1100
+ when Module
1101
+ raise ArgumentError, "unsupported argument type: #{o}"
1102
+ when *ArgumentStyle.keys
1103
+ style = notwice(ArgumentStyle[o], style, 'style')
1104
+ when /^--no-([^\[\]=\s]*)(.+)?/
1105
+ q, a = $1, $2
1106
+ o = notwice(a ? Object : TrueClass, klass, 'type')
1107
+ not_pattern, not_conv = search(:atype, o) unless not_style
1108
+ not_style = (not_style || default_style).guess(arg = a) if a
1109
+ default_style = Switch::NoArgument
1110
+ default_pattern, conv = search(:atype, FalseClass) unless default_pattern
1111
+ ldesc << "--no-#{q}"
1112
+ long << 'no-' + (q = q.downcase)
1113
+ nolong << q
1114
+ when /^--\[no-\]([^\[\]=\s]*)(.+)?/
1115
+ q, a = $1, $2
1116
+ o = notwice(a ? Object : TrueClass, klass, 'type')
1117
+ if a
1118
+ default_style = default_style.guess(arg = a)
1119
+ default_pattern, conv = search(:atype, o) unless default_pattern
1120
+ end
1121
+ ldesc << "--[no-]#{q}"
1122
+ long << (o = q.downcase)
1123
+ not_pattern, not_conv = search(:atype, FalseClass) unless not_style
1124
+ not_style = Switch::NoArgument
1125
+ nolong << 'no-' + o
1126
+ when /^--([^\[\]=\s]*)(.+)?/
1127
+ q, a = $1, $2
1128
+ if a
1129
+ o = notwice(NilClass, klass, 'type')
1130
+ default_style = default_style.guess(arg = a)
1131
+ default_pattern, conv = search(:atype, o) unless default_pattern
1132
+ end
1133
+ ldesc << "--#{q}"
1134
+ long << (o = q.downcase)
1135
+ when /^-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/
1136
+ q, a = $1, $2
1137
+ o = notwice(Object, klass, 'type')
1138
+ if a
1139
+ default_style = default_style.guess(arg = a)
1140
+ default_pattern, conv = search(:atype, o) unless default_pattern
1141
+ end
1142
+ sdesc << "-#{q}"
1143
+ short << Regexp.new(q)
1144
+ when /^-(.)(.+)?/
1145
+ q, a = $1, $2
1146
+ if a
1147
+ o = notwice(NilClass, klass, 'type')
1148
+ default_style = default_style.guess(arg = a)
1149
+ default_pattern, conv = search(:atype, o) unless default_pattern
1150
+ end
1151
+ sdesc << "-#{q}"
1152
+ short << q
1153
+ when /^=/
1154
+ style = notwice(default_style.guess(arg = o), style, 'style')
1155
+ default_pattern, conv = search(:atype, Object) unless default_pattern
1156
+ else
1157
+ desc.push(o)
1158
+ end
1159
+ end
1160
+
1161
+ default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern
1162
+ if !(short.empty? and long.empty?)
1163
+ s = (style || default_style).new(pattern || default_pattern,
1164
+ conv, sdesc, ldesc, arg, desc, block)
1165
+ elsif !block
1166
+ raise ArgumentError, "no switch given" if style or pattern
1167
+ s = desc
1168
+ else
1169
+ short << pattern
1170
+ s = (style || default_style).new(pattern,
1171
+ conv, nil, nil, arg, desc, block)
1172
+ end
1173
+ return s, short, long,
1174
+ (not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style),
1175
+ nolong
1176
+ end
1177
+
1178
+ def define(*opts, &block)
1179
+ top.append(*(sw = make_switch(opts, block)))
1180
+ sw[0]
1181
+ end
1182
+
1183
+ #
1184
+ # Add option switch and handler. See #make_switch for an explanation of
1185
+ # parameters.
1186
+ #
1187
+ def on(*opts, &block)
1188
+ define(*opts, &block)
1189
+ self
1190
+ end
1191
+ alias def_option define
1192
+
1193
+ def define_head(*opts, &block)
1194
+ top.prepend(*(sw = make_switch(opts, block)))
1195
+ sw[0]
1196
+ end
1197
+
1198
+ #
1199
+ # Add option switch like with #on, but at head of summary.
1200
+ #
1201
+ def on_head(*opts, &block)
1202
+ define_head(*opts, &block)
1203
+ self
1204
+ end
1205
+ alias def_head_option define_head
1206
+
1207
+ def define_tail(*opts, &block)
1208
+ base.append(*(sw = make_switch(opts, block)))
1209
+ sw[0]
1210
+ end
1211
+
1212
+ #
1213
+ # Add option switch like with #on, but at tail of summary.
1214
+ #
1215
+ def on_tail(*opts, &block)
1216
+ define_tail(*opts, &block)
1217
+ self
1218
+ end
1219
+ alias def_tail_option define_tail
1220
+
1221
+ #
1222
+ # Add separator in summary.
1223
+ #
1224
+ def separator(string)
1225
+ top.append(string, nil, nil)
1226
+ end
1227
+
1228
+ #
1229
+ # Parses command line arguments +argv+ in order. When a block is given,
1230
+ # each non-option argument is yielded.
1231
+ #
1232
+ # Returns the rest of +argv+ left unparsed.
1233
+ #
1234
+ def order(*argv, &block)
1235
+ argv = argv[0].dup if argv.size == 1 and Array === argv[0]
1236
+ order!(argv, &block)
1237
+ end
1238
+
1239
+ #
1240
+ # Same as #order, but removes switches destructively.
1241
+ #
1242
+ def order!(argv = default_argv, &nonopt)
1243
+ parse_in_order(argv, &nonopt)
1244
+ end
1245
+
1246
+ def parse_in_order(argv = default_argv, setter = nil, &nonopt) # :nodoc:
1247
+ opt, arg, sw, val, rest = nil
1248
+ nonopt ||= proc {|arg| throw :terminate, arg}
1249
+ argv.unshift(arg) if arg = catch(:terminate) {
1250
+ while arg = argv.shift
1251
+ case arg
1252
+ # long option
1253
+ when /\A--([^=]*)(?:=(.*))?/nm
1254
+ opt, rest = $1, $2
1255
+ begin
1256
+ sw, = complete(:long, opt, true)
1257
+ rescue ParseError
1258
+ raise $!.set_option(arg, true)
1259
+ end
1260
+ begin
1261
+ opt, cb, val = sw.parse(rest, argv) {|*exc| raise(*exc)}
1262
+ val = cb.call(val) if cb
1263
+ setter.call(sw.switch_name, val) if setter
1264
+ rescue ParseError
1265
+ raise $!.set_option(arg, rest)
1266
+ end
1267
+
1268
+ # short option
1269
+ when /\A-(.)((=).*|.+)?/nm
1270
+ opt, has_arg, eq, val, rest = $1, $3, $3, $2, $2
1271
+ begin
1272
+ sw, = search(:short, opt)
1273
+ unless sw
1274
+ begin
1275
+ sw, = complete(:short, opt)
1276
+ # short option matched.
1277
+ val = arg.sub(/\A-/, '')
1278
+ has_arg = true
1279
+ rescue InvalidOption
1280
+ # if no short options match, try completion with long
1281
+ # options.
1282
+ sw, = complete(:long, opt)
1283
+ eq ||= !rest
1284
+ end
1285
+ end
1286
+ rescue ParseError
1287
+ raise $!.set_option(arg, true)
1288
+ end
1289
+ begin
1290
+ opt, cb, val = sw.parse(val, argv) {|*exc| raise(*exc) if eq}
1291
+ raise InvalidOption, arg if has_arg and !eq and arg == "-#{opt}"
1292
+ argv.unshift(opt) if opt and (opt = opt.sub(/\A-*/, '-')) != '-'
1293
+ val = cb.call(val) if cb
1294
+ setter.call(sw.switch_name, val) if setter
1295
+ rescue ParseError
1296
+ raise $!.set_option(arg, arg.length > 2)
1297
+ end
1298
+
1299
+ # non-option argument
1300
+ else
1301
+ catch(:prune) do
1302
+ visit(:each_option) do |sw|
1303
+ sw.block.call(arg) if Switch === sw and sw.match_nonswitch?(arg)
1304
+ end
1305
+ nonopt.call(arg)
1306
+ end
1307
+ end
1308
+ end
1309
+
1310
+ nil
1311
+ }
1312
+
1313
+ visit(:search, :short, nil) {|sw| sw.block.call(*argv) if !sw.pattern}
1314
+
1315
+ argv
1316
+ end
1317
+ private :parse_in_order
1318
+
1319
+ #
1320
+ # Parses command line arguments +argv+ in permutation mode and returns
1321
+ # list of non-option arguments.
1322
+ #
1323
+ def permute(*argv)
1324
+ argv = argv[0].dup if argv.size == 1 and Array === argv[0]
1325
+ permute!(argv)
1326
+ end
1327
+
1328
+ #
1329
+ # Same as #permute, but removes switches destructively.
1330
+ #
1331
+ def permute!(argv = default_argv)
1332
+ nonopts = []
1333
+ arg = nil
1334
+ order!(argv) {|arg| nonopts << arg}
1335
+ argv[0, 0] = nonopts
1336
+ argv
1337
+ end
1338
+
1339
+ #
1340
+ # Parses command line arguments +argv+ in order when environment variable
1341
+ # POSIXLY_CORRECT is set, and in permutation mode otherwise.
1342
+ #
1343
+ def parse(*argv)
1344
+ argv = argv[0].dup if argv.size == 1 and Array === argv[0]
1345
+ parse!(argv)
1346
+ end
1347
+
1348
+ #
1349
+ # Same as #parse, but removes switches destructively.
1350
+ #
1351
+ def parse!(argv = default_argv)
1352
+ if ENV.include?('POSIXLY_CORRECT')
1353
+ order!(argv)
1354
+ else
1355
+ permute!(argv)
1356
+ end
1357
+ end
1358
+
1359
+ #
1360
+ # Wrapper method for getopts.rb.
1361
+ #
1362
+ # params = ARGV.getopts("ab:", "foo", "bar:")
1363
+ # # params[:a] = true # -a
1364
+ # # params[:b] = "1" # -b1
1365
+ # # params[:foo] = "1" # --foo
1366
+ # # params[:bar] = "x" # --bar x
1367
+ #
1368
+ def getopts(*args)
1369
+ argv = Array === args.first ? args.shift : default_argv
1370
+ single_options, *long_options = *args
1371
+
1372
+ result = {}
1373
+
1374
+ single_options.scan(/(.)(:)?/) do |opt, val|
1375
+ if val
1376
+ result[opt] = nil
1377
+ define("-#{opt} VAL")
1378
+ else
1379
+ result[opt] = false
1380
+ define("-#{opt}")
1381
+ end
1382
+ end if single_options
1383
+
1384
+ long_options.each do |arg|
1385
+ opt, val = arg.split(':', 2)
1386
+ if val
1387
+ result[opt] = val.empty? ? nil : val
1388
+ define("--#{opt} VAL")
1389
+ else
1390
+ result[opt] = false
1391
+ define("--#{opt}")
1392
+ end
1393
+ end
1394
+
1395
+ parse_in_order(argv, result.method(:[]=))
1396
+ result
1397
+ end
1398
+
1399
+ #
1400
+ # See #getopts.
1401
+ #
1402
+ def self.getopts(*args)
1403
+ new.getopts(*args)
1404
+ end
1405
+
1406
+ #
1407
+ # Traverses @stack, sending each element method +id+ with +args+ and
1408
+ # +block+.
1409
+ #
1410
+ def visit(id, *args, &block)
1411
+ el = nil
1412
+ @stack.reverse_each do |el|
1413
+ el.send(id, *args, &block)
1414
+ end
1415
+ nil
1416
+ end
1417
+ private :visit
1418
+
1419
+ #
1420
+ # Searches +key+ in @stack for +id+ hash and returns or yields the result.
1421
+ #
1422
+ def search(id, key)
1423
+ block_given = block_given?
1424
+ visit(:search, id, key) do |k|
1425
+ return block_given ? yield(k) : k
1426
+ end
1427
+ end
1428
+ private :search
1429
+
1430
+ #
1431
+ # Completes shortened long style option switch and returns pair of
1432
+ # canonical switch and switch descriptor OptionParser::Switch.
1433
+ #
1434
+ # +id+:: Searching table.
1435
+ # +opt+:: Searching key.
1436
+ # +icase+:: Search case insensitive if true.
1437
+ # +pat+:: Optional pattern for completion.
1438
+ #
1439
+ def complete(typ, opt, icase = false, *pat)
1440
+ if pat.empty?
1441
+ search(typ, opt) {|sw| return [sw, opt]} # exact match or...
1442
+ end
1443
+ raise AmbiguousOption, catch(:ambiguous) {
1444
+ visit(:complete, typ, opt, icase, *pat) {|opt, *sw| return sw}
1445
+ raise InvalidOption, opt
1446
+ }
1447
+ end
1448
+ private :complete
1449
+
1450
+ #
1451
+ # Loads options from file names as +filename+. Does nothing when the file
1452
+ # is not present. Returns whether successfully loaded.
1453
+ #
1454
+ # +filename+ defaults to basename of the program without suffix in a
1455
+ # directory ~/.options.
1456
+ #
1457
+ def load(filename = nil)
1458
+ begin
1459
+ filename ||= File.expand_path(File.basename($0, '.*'), '~/.options')
1460
+ rescue
1461
+ return false
1462
+ end
1463
+ begin
1464
+ parse(*IO.readlines(filename).each {|s| s.chomp!})
1465
+ true
1466
+ rescue Errno::ENOENT, Errno::ENOTDIR
1467
+ false
1468
+ end
1469
+ end
1470
+
1471
+ #
1472
+ # Parses environment variable +env+ or its uppercase with splitting like a
1473
+ # shell.
1474
+ #
1475
+ # +env+ defaults to the basename of the program.
1476
+ #
1477
+ def environment(env = File.basename($0, '.*'))
1478
+ env = ENV[env] || ENV[env.upcase] or return
1479
+ parse(*Shellwords.shellwords(env))
1480
+ end
1481
+
1482
+ #
1483
+ # Acceptable argument classes
1484
+ #
1485
+
1486
+ #
1487
+ # Any string and no conversion. This is fall-back.
1488
+ #
1489
+ accept(Object) {|s,|s or s.nil?}
1490
+
1491
+ accept(NilClass) {|s,|s}
1492
+
1493
+ #
1494
+ # Any non-empty string, and no conversion.
1495
+ #
1496
+ accept(String, /.+/nm) {|s,*|s}
1497
+
1498
+ #
1499
+ # Ruby/C-like integer, octal for 0-7 sequence, binary for 0b, hexadecimal
1500
+ # for 0x, and decimal for others; with optional sign prefix. Converts to
1501
+ # Integer.
1502
+ #
1503
+ decimal = '\d+(?:_\d+)*'
1504
+ binary = 'b[01]+(?:_[01]+)*'
1505
+ hex = 'x[\da-f]+(?:_[\da-f]+)*'
1506
+ octal = "0(?:[0-7]*(?:_[0-7]+)*|#{binary}|#{hex})"
1507
+ integer = "#{octal}|#{decimal}"
1508
+ accept(Integer, %r"\A[-+]?(?:#{integer})"io) {|s,| Integer(s) if s}
1509
+
1510
+ #
1511
+ # Float number format, and converts to Float.
1512
+ #
1513
+ float = "(?:#{decimal}(?:\\.(?:#{decimal})?)?|\\.#{decimal})(?:E[-+]?#{decimal})?"
1514
+ floatpat = %r"\A[-+]?#{float}"io
1515
+ accept(Float, floatpat) {|s,| s.to_f if s}
1516
+
1517
+ #
1518
+ # Generic numeric format, converts to Integer for integer format, Float
1519
+ # for float format.
1520
+ #
1521
+ accept(Numeric, %r"\A[-+]?(?:#{octal}|#{float})"io) {|s,| eval(s) if s}
1522
+
1523
+ #
1524
+ # Decimal integer format, to be converted to Integer.
1525
+ #
1526
+ DecimalInteger = /\A[-+]?#{decimal}/io
1527
+ accept(DecimalInteger) {|s,| s.to_i if s}
1528
+
1529
+ #
1530
+ # Ruby/C like octal/hexadecimal/binary integer format, to be converted to
1531
+ # Integer.
1532
+ #
1533
+ OctalInteger = /\A[-+]?(?:[0-7]+(?:_[0-7]+)*|0(?:#{binary}|#{hex}))/io
1534
+ accept(OctalInteger) {|s,| s.oct if s}
1535
+
1536
+ #
1537
+ # Decimal integer/float number format, to be converted to Integer for
1538
+ # integer format, Float for float format.
1539
+ #
1540
+ DecimalNumeric = floatpat # decimal integer is allowed as float also.
1541
+ accept(DecimalNumeric) {|s,| eval(s) if s}
1542
+
1543
+ #
1544
+ # Boolean switch, which means whether it is present or not, whether it is
1545
+ # absent or not with prefix no-, or it takes an argument
1546
+ # yes/no/true/false/+/-.
1547
+ #
1548
+ yesno = CompletingHash.new
1549
+ %w[- no false].each {|el| yesno[el] = false}
1550
+ %w[+ yes true].each {|el| yesno[el] = true}
1551
+ yesno['nil'] = false # shoud be nil?
1552
+ accept(TrueClass, yesno) {|arg, val| val == nil or val}
1553
+ #
1554
+ # Similar to TrueClass, but defaults to false.
1555
+ #
1556
+ accept(FalseClass, yesno) {|arg, val| val != nil and val}
1557
+
1558
+ #
1559
+ # List of strings separated by ",".
1560
+ #
1561
+ accept(Array) do |s,|
1562
+ if s
1563
+ s = s.split(',').collect {|s| s unless s.empty?}
1564
+ end
1565
+ s
1566
+ end
1567
+
1568
+ #
1569
+ # Regular expression with options.
1570
+ #
1571
+ accept(Regexp, %r"\A/((?:\\.|[^\\])*)/([[:alpha:]]+)?\z|.*") do |all, s, o|
1572
+ f = 0
1573
+ if o
1574
+ f |= Regexp::IGNORECASE if /i/ =~ o
1575
+ f |= Regexp::MULTILINE if /m/ =~ o
1576
+ f |= Regexp::EXTENDED if /x/ =~ o
1577
+ k = o.delete("^imx")
1578
+ end
1579
+ Regexp.new(s || all, f, k)
1580
+ end
1581
+
1582
+ #
1583
+ # Exceptions
1584
+ #
1585
+
1586
+ #
1587
+ # Base class of exceptions from OptionParser.
1588
+ #
1589
+ class ParseError < RuntimeError
1590
+ # Reason which caused the error.
1591
+ Reason = 'parse error'.freeze
1592
+
1593
+ def initialize(*args)
1594
+ @args = args
1595
+ @reason = nil
1596
+ end
1597
+
1598
+ attr_reader :args
1599
+ attr_writer :reason
1600
+
1601
+ #
1602
+ # Pushes back erred argument(s) to +argv+.
1603
+ #
1604
+ def recover(argv)
1605
+ argv[0, 0] = @args
1606
+ argv
1607
+ end
1608
+
1609
+ def set_option(opt, eq)
1610
+ if eq
1611
+ @args[0] = opt
1612
+ else
1613
+ @args.unshift(opt)
1614
+ end
1615
+ self
1616
+ end
1617
+
1618
+ #
1619
+ # Returns error reason. Override this for I18N.
1620
+ #
1621
+ def reason
1622
+ @reason || self.class::Reason
1623
+ end
1624
+
1625
+ def inspect
1626
+ "#<#{self.class.to_s}: #{args.join(' ')}>"
1627
+ end
1628
+
1629
+ #
1630
+ # Default stringizing method to emit standard error message.
1631
+ #
1632
+ def message
1633
+ reason + ': ' + args.join(' ')
1634
+ end
1635
+
1636
+ alias to_s message
1637
+ end
1638
+
1639
+ #
1640
+ # Raises when ambiguously completable string is encountered.
1641
+ #
1642
+ class AmbiguousOption < ParseError
1643
+ const_set(:Reason, 'ambiguous option'.freeze)
1644
+ end
1645
+
1646
+ #
1647
+ # Raises when there is an argument for a switch which takes no argument.
1648
+ #
1649
+ class NeedlessArgument < ParseError
1650
+ const_set(:Reason, 'needless argument'.freeze)
1651
+ end
1652
+
1653
+ #
1654
+ # Raises when a switch with mandatory argument has no argument.
1655
+ #
1656
+ class MissingArgument < ParseError
1657
+ const_set(:Reason, 'missing argument'.freeze)
1658
+ end
1659
+
1660
+ #
1661
+ # Raises when switch is undefined.
1662
+ #
1663
+ class InvalidOption < ParseError
1664
+ const_set(:Reason, 'invalid option'.freeze)
1665
+ end
1666
+
1667
+ #
1668
+ # Raises when the given argument does not match required format.
1669
+ #
1670
+ class InvalidArgument < ParseError
1671
+ const_set(:Reason, 'invalid argument'.freeze)
1672
+ end
1673
+
1674
+ #
1675
+ # Raises when the given argument word can't be completed uniquely.
1676
+ #
1677
+ class AmbiguousArgument < InvalidArgument
1678
+ const_set(:Reason, 'ambiguous argument'.freeze)
1679
+ end
1680
+
1681
+ #
1682
+ # Miscellaneous
1683
+ #
1684
+
1685
+ #
1686
+ # Extends command line arguments array (ARGV) to parse itself.
1687
+ #
1688
+ module Arguable
1689
+
1690
+ #
1691
+ # Sets OptionParser object, when +opt+ is +false+ or +nil+, methods
1692
+ # OptionParser::Arguable#options and OptionParser::Arguable#options= are
1693
+ # undefined. Thus, there is no ways to access the OptionParser object
1694
+ # via the receiver object.
1695
+ #
1696
+ def options=(opt)
1697
+ unless @optparse = opt
1698
+ class << self
1699
+ undef_method(:options)
1700
+ undef_method(:options=)
1701
+ end
1702
+ end
1703
+ end
1704
+
1705
+ #
1706
+ # Actual OptionParser object, automatically created if nonexistent.
1707
+ #
1708
+ # If called with a block, yields the OptionParser object and returns the
1709
+ # result of the block. If an OptionParser::ParseError exception occurs
1710
+ # in the block, it is rescued, a error message printed to STDERR and
1711
+ # +nil+ returned.
1712
+ #
1713
+ def options
1714
+ @optparse ||= OptionParser.new
1715
+ @optparse.default_argv = self
1716
+ block_given? or return @optparse
1717
+ begin
1718
+ yield @optparse
1719
+ rescue ParseError
1720
+ @optparse.warn $!
1721
+ nil
1722
+ end
1723
+ end
1724
+
1725
+ #
1726
+ # Parses +self+ destructively in order and returns +self+ containing the
1727
+ # rest arguments left unparsed.
1728
+ #
1729
+ def order!(&blk) options.order!(self, &blk) end
1730
+
1731
+ #
1732
+ # Parses +self+ destructively in permutation mode and returns +self+
1733
+ # containing the rest arguments left unparsed.
1734
+ #
1735
+ def permute!() options.permute!(self) end
1736
+
1737
+ #
1738
+ # Parses +self+ destructively and returns +self+ containing the
1739
+ # rest arguments left unparsed.
1740
+ #
1741
+ def parse!() options.parse!(self) end
1742
+
1743
+ #
1744
+ # Substitution of getopts is possible as follows. Also see
1745
+ # OptionParser#getopts.
1746
+ #
1747
+ # def getopts(*args)
1748
+ # ($OPT = ARGV.getopts(*args)).each do |opt, val|
1749
+ # eval "$OPT_#{opt.gsub(/[^A-Za-z0-9_]/, '_')} = val"
1750
+ # end
1751
+ # rescue OptionParser::ParseError
1752
+ # end
1753
+ #
1754
+ def getopts(*args)
1755
+ options.getopts(self, *args)
1756
+ end
1757
+
1758
+ #
1759
+ # Initializes instance variable.
1760
+ #
1761
+ def self.extend_object(obj)
1762
+ super
1763
+ obj.instance_eval {@optparse = nil}
1764
+ end
1765
+ def initialize(*args)
1766
+ super
1767
+ @optparse = nil
1768
+ end
1769
+ end
1770
+
1771
+ #
1772
+ # Acceptable argument classes. Now contains DecimalInteger, OctalInteger
1773
+ # and DecimalNumeric. See Acceptable argument classes (in source code).
1774
+ #
1775
+ module Acceptables
1776
+ const_set(:DecimalInteger, OptionParser::DecimalInteger)
1777
+ const_set(:OctalInteger, OptionParser::OctalInteger)
1778
+ const_set(:DecimalNumeric, OptionParser::DecimalNumeric)
1779
+ end
1780
+ end
1781
+
1782
+ # ARGV is arguable by OptionParser
1783
+ ARGV.extend(OptionParser::Arguable)
1784
+
1785
+ if $0 == __FILE__
1786
+ Version = OptionParser::Version
1787
+ ARGV.options {|q|
1788
+ q.parse!.empty? or puts "what's #{ARGV.join(' ')}?"
1789
+ } or abort(ARGV.options.to_s)
1790
+ end