narf 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (657) hide show
  1. data/ChangeLog +163 -0
  2. data/InstalledFiles +2227 -0
  3. data/README +124 -0
  4. data/TODO +88 -0
  5. data/bin/narftest +17 -0
  6. data/bug.rb +9 -0
  7. data/build.rb +314 -0
  8. data/build.rb~ +314 -0
  9. data/config.save +12 -0
  10. data/doc/apache_cgi.txt +17 -0
  11. data/doc/fastcgi.txt +19 -0
  12. data/doc/mod_ruby.txt +7 -0
  13. data/doc/rdoc/classes/Web.html +366 -0
  14. data/doc/rdoc/classes/Web.src/M000002.html +15 -0
  15. data/doc/rdoc/classes/Web.src/M000003.html +15 -0
  16. data/doc/rdoc/classes/Web.src/M000004.html +15 -0
  17. data/doc/rdoc/classes/Web.src/M000005.html +15 -0
  18. data/doc/rdoc/classes/Web.src/M000006.html +20 -0
  19. data/doc/rdoc/classes/Web.src/M000007.html +18 -0
  20. data/doc/rdoc/classes/Web.src/M000008.html +18 -0
  21. data/doc/rdoc/classes/Web.src/M000009.html +18 -0
  22. data/doc/rdoc/classes/Web.src/M000010.html +15 -0
  23. data/doc/rdoc/classes/Web.src/M000011.html +15 -0
  24. data/doc/rdoc/classes/Web.src/M000012.html +15 -0
  25. data/doc/rdoc/classes/Web/CGD.html +173 -0
  26. data/doc/rdoc/classes/Web/CGD.src/M000037.html +24 -0
  27. data/doc/rdoc/classes/Web/CGD.src/M000038.html +23 -0
  28. data/doc/rdoc/classes/Web/CGD.src/M000039.html +15 -0
  29. data/doc/rdoc/classes/Web/CGD.src/M000040.html +15 -0
  30. data/doc/rdoc/classes/Web/CGD.src/M000041.html +23 -0
  31. data/doc/rdoc/classes/Web/CGI.html +946 -0
  32. data/doc/rdoc/classes/Web/CGI.src/M000051.html +15 -0
  33. data/doc/rdoc/classes/Web/CGI.src/M000052.html +24 -0
  34. data/doc/rdoc/classes/Web/CGI.src/M000053.html +15 -0
  35. data/doc/rdoc/classes/Web/CGI.src/M000054.html +15 -0
  36. data/doc/rdoc/classes/Web/CGI.src/M000055.html +15 -0
  37. data/doc/rdoc/classes/Web/CGI.src/M000056.html +15 -0
  38. data/doc/rdoc/classes/Web/CGI.src/M000057.html +17 -0
  39. data/doc/rdoc/classes/Web/CGI.src/M000058.html +34 -0
  40. data/doc/rdoc/classes/Web/CGI.src/M000059.html +22 -0
  41. data/doc/rdoc/classes/Web/CGI.src/M000060.html +15 -0
  42. data/doc/rdoc/classes/Web/CGI.src/M000061.html +15 -0
  43. data/doc/rdoc/classes/Web/CGI.src/M000062.html +19 -0
  44. data/doc/rdoc/classes/Web/CGI.src/M000063.html +18 -0
  45. data/doc/rdoc/classes/Web/CGI.src/M000064.html +19 -0
  46. data/doc/rdoc/classes/Web/CGI.src/M000065.html +15 -0
  47. data/doc/rdoc/classes/Web/CGI.src/M000066.html +15 -0
  48. data/doc/rdoc/classes/Web/CGI.src/M000067.html +15 -0
  49. data/doc/rdoc/classes/Web/CGI.src/M000068.html +13 -0
  50. data/doc/rdoc/classes/Web/CGI.src/M000069.html +13 -0
  51. data/doc/rdoc/classes/Web/CGI.src/M000070.html +13 -0
  52. data/doc/rdoc/classes/Web/CGI.src/M000071.html +13 -0
  53. data/doc/rdoc/classes/Web/CGI.src/M000072.html +19 -0
  54. data/doc/rdoc/classes/Web/CGI.src/M000073.html +15 -0
  55. data/doc/rdoc/classes/Web/CGI.src/M000074.html +19 -0
  56. data/doc/rdoc/classes/Web/CGI.src/M000075.html +15 -0
  57. data/doc/rdoc/classes/Web/CGI.src/M000076.html +15 -0
  58. data/doc/rdoc/classes/Web/CGI.src/M000077.html +15 -0
  59. data/doc/rdoc/classes/Web/CGI.src/M000078.html +20 -0
  60. data/doc/rdoc/classes/Web/CGI.src/M000079.html +36 -0
  61. data/doc/rdoc/classes/Web/CGI.src/M000080.html +19 -0
  62. data/doc/rdoc/classes/Web/CGI.src/M000081.html +18 -0
  63. data/doc/rdoc/classes/Web/CGI.src/M000082.html +15 -0
  64. data/doc/rdoc/classes/Web/CGI.src/M000083.html +17 -0
  65. data/doc/rdoc/classes/Web/CGI.src/M000084.html +15 -0
  66. data/doc/rdoc/classes/Web/CGI.src/M000085.html +16 -0
  67. data/doc/rdoc/classes/Web/CGI.src/M000086.html +15 -0
  68. data/doc/rdoc/classes/Web/CGI.src/M000087.html +15 -0
  69. data/doc/rdoc/classes/Web/CGI.src/M000088.html +15 -0
  70. data/doc/rdoc/classes/Web/CGI.src/M000089.html +16 -0
  71. data/doc/rdoc/classes/Web/CGI.src/M000090.html +15 -0
  72. data/doc/rdoc/classes/Web/CGI.src/M000091.html +15 -0
  73. data/doc/rdoc/classes/Web/CGI.src/M000092.html +15 -0
  74. data/doc/rdoc/classes/Web/CGI.src/M000093.html +15 -0
  75. data/doc/rdoc/classes/Web/CGI.src/M000094.html +15 -0
  76. data/doc/rdoc/classes/Web/CGI.src/M000095.html +15 -0
  77. data/doc/rdoc/classes/Web/CGI.src/M000096.html +19 -0
  78. data/doc/rdoc/classes/Web/CGI.src/M000097.html +15 -0
  79. data/doc/rdoc/classes/Web/CGI.src/M000098.html +15 -0
  80. data/doc/rdoc/classes/Web/CGI.src/M000099.html +43 -0
  81. data/doc/rdoc/classes/Web/CGI.src/M000100.html +18 -0
  82. data/doc/rdoc/classes/Web/CGI.src/M000101.html +20 -0
  83. data/doc/rdoc/classes/Web/CGI.src/M000102.html +15 -0
  84. data/doc/rdoc/classes/Web/CGI.src/M000103.html +15 -0
  85. data/doc/rdoc/classes/Web/CGI.src/M000104.html +15 -0
  86. data/doc/rdoc/classes/Web/CGI.src/M000105.html +24 -0
  87. data/doc/rdoc/classes/Web/CGI.src/M000106.html +24 -0
  88. data/doc/rdoc/classes/Web/CGI.src/M000107.html +22 -0
  89. data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +104 -0
  90. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +15 -0
  91. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +15 -0
  92. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +15 -0
  93. data/doc/rdoc/classes/Web/Mime.html +122 -0
  94. data/doc/rdoc/classes/Web/Mime.src/M000118.html +15 -0
  95. data/doc/rdoc/classes/Web/Mime.src/M000119.html +15 -0
  96. data/doc/rdoc/classes/Web/Mime.src/M000120.html +23 -0
  97. data/doc/rdoc/classes/Web/Mime.src/M000121.html +15 -0
  98. data/doc/rdoc/classes/Web/Mime.src/M000122.html +15 -0
  99. data/doc/rdoc/classes/Web/Mime.src/M000123.html +23 -0
  100. data/doc/rdoc/classes/Web/Mime.src/M000124.html +15 -0
  101. data/doc/rdoc/classes/Web/Narflates.html +132 -0
  102. data/doc/rdoc/classes/Web/Parser.html +219 -0
  103. data/doc/rdoc/classes/Web/Parser.src/M000013.html +21 -0
  104. data/doc/rdoc/classes/Web/Parser.src/M000014.html +19 -0
  105. data/doc/rdoc/classes/Web/Parser.src/M000015.html +21 -0
  106. data/doc/rdoc/classes/Web/Parser.src/M000016.html +15 -0
  107. data/doc/rdoc/classes/Web/Parser.src/M000017.html +30 -0
  108. data/doc/rdoc/classes/Web/Parser.src/M000018.html +15 -0
  109. data/doc/rdoc/classes/Web/Parser.src/M000019.html +19 -0
  110. data/doc/rdoc/classes/Web/Parser.src/M000020.html +27 -0
  111. data/doc/rdoc/classes/Web/Parser.src/M000021.html +15 -0
  112. data/doc/rdoc/classes/Web/Parser.src/M000022.html +16 -0
  113. data/doc/rdoc/classes/Web/Parser.src/M000023.html +18 -0
  114. data/doc/rdoc/classes/Web/Session.html +178 -0
  115. data/doc/rdoc/classes/Web/Session.src/M000042.html +20 -0
  116. data/doc/rdoc/classes/Web/Session.src/M000043.html +19 -0
  117. data/doc/rdoc/classes/Web/Session.src/M000044.html +21 -0
  118. data/doc/rdoc/classes/Web/Session.src/M000045.html +21 -0
  119. data/doc/rdoc/classes/Web/Session.src/M000046.html +15 -0
  120. data/doc/rdoc/classes/Web/Session.src/M000047.html +17 -0
  121. data/doc/rdoc/classes/Web/Session.src/M000048.html +15 -0
  122. data/doc/rdoc/classes/Web/Session.src/M000049.html +15 -0
  123. data/doc/rdoc/classes/Web/Session.src/M000050.html +16 -0
  124. data/doc/rdoc/classes/Web/Testing.html +474 -0
  125. data/doc/rdoc/classes/Web/Testing.src/M000024.html +15 -0
  126. data/doc/rdoc/classes/Web/Testing.src/M000025.html +25 -0
  127. data/doc/rdoc/classes/Web/Testing.src/M000026.html +15 -0
  128. data/doc/rdoc/classes/Web/Testing.src/M000027.html +28 -0
  129. data/doc/rdoc/classes/Web/Testing.src/M000028.html +58 -0
  130. data/doc/rdoc/classes/Web/Testing.src/M000029.html +15 -0
  131. data/doc/rdoc/classes/Web/Testing.src/M000030.html +15 -0
  132. data/doc/rdoc/classes/Web/Testing.src/M000031.html +15 -0
  133. data/doc/rdoc/classes/Web/Testing.src/M000032.html +15 -0
  134. data/doc/rdoc/classes/Web/Testing.src/M000033.html +15 -0
  135. data/doc/rdoc/classes/Web/Testing.src/M000034.html +15 -0
  136. data/doc/rdoc/classes/Web/Testing.src/M000035.html +15 -0
  137. data/doc/rdoc/classes/Web/Testing.src/M000036.html +18 -0
  138. data/doc/rdoc/classes/Web/Upload.html +160 -0
  139. data/doc/rdoc/classes/Web/Upload.src/M000108.html +25 -0
  140. data/doc/rdoc/classes/Web/Upload.src/M000109.html +18 -0
  141. data/doc/rdoc/classes/Web/Upload.src/M000110.html +16 -0
  142. data/doc/rdoc/classes/Web/Upload.src/M000111.html +16 -0
  143. data/doc/rdoc/classes/Web/Wiki.html +249 -0
  144. data/doc/rdoc/classes/Web/Wiki.src/M000112.html +25 -0
  145. data/doc/rdoc/classes/Web/Wiki.src/M000113.html +15 -0
  146. data/doc/rdoc/classes/Web/Wiki.src/M000114.html +26 -0
  147. data/doc/rdoc/classes/Web/Wiki.src/M000115.html +21 -0
  148. data/doc/rdoc/classes/Web/Wiki.src/M000116.html +18 -0
  149. data/doc/rdoc/classes/Web/Wiki.src/M000117.html +19 -0
  150. data/doc/rdoc/created.rid +1 -0
  151. data/doc/rdoc/files/README.html +226 -0
  152. data/doc/rdoc/files/doc/apache_cgi_txt.html +82 -0
  153. data/doc/rdoc/files/doc/fastcgi_txt.html +82 -0
  154. data/doc/rdoc/files/doc/mod_ruby_txt.html +62 -0
  155. data/doc/rdoc/files/doc/webrick_txt.html +79 -0
  156. data/doc/rdoc/files/examples/examples_rdoc.html +73 -0
  157. data/doc/rdoc/files/lib/web/cgi_rb.html +75 -0
  158. data/doc/rdoc/files/lib/web/mime_rb.html +67 -0
  159. data/doc/rdoc/files/lib/web/parser_rb.html +73 -0
  160. data/doc/rdoc/files/lib/web/session_rb.html +73 -0
  161. data/doc/rdoc/files/lib/web/template_rb.html +73 -0
  162. data/doc/rdoc/files/lib/web/testing_rb.html +67 -0
  163. data/doc/rdoc/files/lib/web/upload_rb.html +73 -0
  164. data/doc/rdoc/files/lib/web/wiki_rb.html +79 -0
  165. data/doc/rdoc/files/lib/web_rb.html +116 -0
  166. data/doc/rdoc/files/lib/web_rb.src/M000001.html +15 -0
  167. data/doc/rdoc/fr_class_index.html +47 -0
  168. data/doc/rdoc/fr_file_index.html +52 -0
  169. data/doc/rdoc/fr_method_index.html +158 -0
  170. data/doc/rdoc/index.html +22 -0
  171. data/doc/rdoc/rdoc-style.css +99 -0
  172. data/doc/webrick.txt +23 -0
  173. data/examples/admin.rb +8 -0
  174. data/examples/admin.rb~ +5 -0
  175. data/examples/cookbook.rdoc +247 -0
  176. data/examples/cookbook.rdoc~ +238 -0
  177. data/examples/examples.rdoc +19 -0
  178. data/examples/examples.rdoc~ +17 -0
  179. data/examples/hello.world.rb +5 -0
  180. data/examples/hello.world.rb~ +3 -0
  181. data/examples/session.rb +34 -0
  182. data/examples/session.rb~ +31 -0
  183. data/examples/test/test.hello.world.rb +9 -0
  184. data/examples/test/test.hello.world.rb~ +9 -0
  185. data/examples/test/test.session.rb +37 -0
  186. data/examples/test/test.session.rb~ +37 -0
  187. data/examples/webunit/COPYING +340 -0
  188. data/examples/webunit/Makefile +14 -0
  189. data/examples/webunit/TIPS-ja.html +126 -0
  190. data/examples/webunit/TIPS-ja.rd +154 -0
  191. data/examples/webunit/TODO-ja.html +35 -0
  192. data/examples/webunit/TODO-ja.rd +28 -0
  193. data/examples/webunit/changes.rd +185 -0
  194. data/examples/webunit/conv/digit-0.cgi +40 -0
  195. data/examples/webunit/conv/digit-0.rb +21 -0
  196. data/examples/webunit/conv/digit-1.cgi +44 -0
  197. data/examples/webunit/conv/digit-1.rb +17 -0
  198. data/examples/webunit/conv/digit.cgi +59 -0
  199. data/examples/webunit/conv/digit.rb +23 -0
  200. data/examples/webunit/conv/test_digit-0.rb +16 -0
  201. data/examples/webunit/conv/test_digit-1.rb +19 -0
  202. data/examples/webunit/conv/test_digit.rb +26 -0
  203. data/examples/webunit/conv/test_digit_view-0.rb +76 -0
  204. data/examples/webunit/conv/test_digit_view-1.rb +102 -0
  205. data/examples/webunit/conv/test_digit_view.rb +134 -0
  206. data/examples/webunit/example.rd +37 -0
  207. data/examples/webunit/index-en.html +263 -0
  208. data/examples/webunit/index-en.rd +60 -0
  209. data/examples/webunit/index-ja.html +263 -0
  210. data/examples/webunit/index-ja.rd +60 -0
  211. data/examples/wiki.rb +7 -0
  212. data/examples/wiki.rb~ +5 -0
  213. data/install.rb +1022 -0
  214. data/lib/web.rb +290 -0
  215. data/lib/web.rb~ +290 -0
  216. data/lib/web/#assertinclude.rb# +110 -0
  217. data/lib/web/action.rb +82 -0
  218. data/lib/web/assertinclude.rb +110 -0
  219. data/lib/web/assertinclude.rb~ +110 -0
  220. data/lib/web/buffer.rb +20 -0
  221. data/lib/web/cgi.rb +641 -0
  222. data/lib/web/cgi.rb~ +640 -0
  223. data/lib/web/formreader.rb +317 -0
  224. data/lib/web/forms.rb +104 -0
  225. data/lib/web/htmlparser/html-parser.rb +429 -0
  226. data/lib/web/htmlparser/html-parser.rb~ +429 -0
  227. data/lib/web/htmlparser/sgml-parser.rb +332 -0
  228. data/lib/web/htmlparser/sgml-parser.rb~ +332 -0
  229. data/lib/web/htmltools/element.rb +296 -0
  230. data/lib/web/htmltools/element.rb~ +296 -0
  231. data/lib/web/htmltools/stparser.rb +276 -0
  232. data/lib/web/htmltools/stparser.rb~ +276 -0
  233. data/lib/web/htmltools/tags.rb +286 -0
  234. data/lib/web/htmltools/tags.rb~ +286 -0
  235. data/lib/web/htmltools/tree.rb +139 -0
  236. data/lib/web/htmltools/tree.rb~ +139 -0
  237. data/lib/web/htmltools/xmltree.rb +160 -0
  238. data/lib/web/htmltools/xmltree.rb~ +160 -0
  239. data/lib/web/htmltools/xpath.rb +71 -0
  240. data/lib/web/htmltools/xpath.rb~ +71 -0
  241. data/lib/web/mime.rb +82 -0
  242. data/lib/web/parser.rb +266 -0
  243. data/lib/web/parser.rb~ +266 -0
  244. data/lib/web/request.rb~ +238 -0
  245. data/lib/web/resources/mime.types +483 -0
  246. data/lib/web/runner.rb +26 -0
  247. data/lib/web/runner.rb~ +26 -0
  248. data/lib/web/sapi/fastcgi.rb +26 -0
  249. data/lib/web/sapi/fastcgi.rb~ +25 -0
  250. data/lib/web/sapi/mod_ruby.rb +46 -0
  251. data/lib/web/sapi/mod_ruby.rb~ +46 -0
  252. data/lib/web/sapi/webrick.rb +91 -0
  253. data/lib/web/sapi/webrick.rb~ +89 -0
  254. data/lib/web/session.rb +75 -0
  255. data/lib/web/session.rb~ +75 -0
  256. data/lib/web/simpledispatcher.rb +155 -0
  257. data/lib/web/strscanparser.rb +24 -0
  258. data/lib/web/tagparser.rb +96 -0
  259. data/lib/web/tagparser.rb~ +96 -0
  260. data/lib/web/template.rb +613 -0
  261. data/lib/web/template.rb~ +613 -0
  262. data/lib/web/testing.rb +546 -0
  263. data/lib/web/testing.rb~ +546 -0
  264. data/lib/web/traceoutput.rb +32 -0
  265. data/lib/web/unit.rb +27 -0
  266. data/lib/web/unit/assert.rb +154 -0
  267. data/lib/web/unit/converter.rb +148 -0
  268. data/lib/web/unit/cookie.rb +120 -0
  269. data/lib/web/unit/domwalker.rb +187 -0
  270. data/lib/web/unit/exception.rb +15 -0
  271. data/lib/web/unit/form.rb +118 -0
  272. data/lib/web/unit/formatter.rb +314 -0
  273. data/lib/web/unit/frame.rb +39 -0
  274. data/lib/web/unit/html-parser.rb +432 -0
  275. data/lib/web/unit/htmlelem.rb +124 -0
  276. data/lib/web/unit/htmlrepair.rb +116 -0
  277. data/lib/web/unit/htmlsplit.rb +840 -0
  278. data/lib/web/unit/image.rb +27 -0
  279. data/lib/web/unit/jscript.rb +32 -0
  280. data/lib/web/unit/link.rb +35 -0
  281. data/lib/web/unit/params.rb +323 -0
  282. data/lib/web/unit/parser.rb +226 -0
  283. data/lib/web/unit/resources/assert.html +101 -0
  284. data/lib/web/unit/resources/auth/index.html +5 -0
  285. data/lib/web/unit/resources/badtags.html +7 -0
  286. data/lib/web/unit/resources/cookie.cgi +33 -0
  287. data/lib/web/unit/resources/document.xml +13 -0
  288. data/lib/web/unit/resources/form.html +150 -0
  289. data/lib/web/unit/resources/frame-0.html +10 -0
  290. data/lib/web/unit/resources/frame-1.html +10 -0
  291. data/lib/web/unit/resources/frame.html +10 -0
  292. data/lib/web/unit/resources/image.html +17 -0
  293. data/lib/web/unit/resources/images/x.gif +0 -0
  294. data/lib/web/unit/resources/images/y.gif +0 -0
  295. data/lib/web/unit/resources/jscript-0.html +10 -0
  296. data/lib/web/unit/resources/jscript-1.html +10 -0
  297. data/lib/web/unit/resources/jscript.html +19 -0
  298. data/lib/web/unit/resources/link.html +19 -0
  299. data/lib/web/unit/resources/multipart.cgi +28 -0
  300. data/lib/web/unit/resources/multipart.html +74 -0
  301. data/lib/web/unit/resources/params.html +65 -0
  302. data/lib/web/unit/resources/redirect.cgi +13 -0
  303. data/lib/web/unit/resources/response.html +67 -0
  304. data/lib/web/unit/resources/simple.cgi +14 -0
  305. data/lib/web/unit/resources/stock.cgi +35 -0
  306. data/lib/web/unit/resources/table.html +83 -0
  307. data/lib/web/unit/response.rb +469 -0
  308. data/lib/web/unit/response.rb~ +461 -0
  309. data/lib/web/unit/runtest.rb +44 -0
  310. data/lib/web/unit/sgml-parser.rb +336 -0
  311. data/lib/web/unit/table.rb +150 -0
  312. data/lib/web/unit/testcase.rb +49 -0
  313. data/lib/web/unit/ui/cui/testrunner.rb +52 -0
  314. data/lib/web/unit/ui/cui/testrunner.rb~ +50 -0
  315. data/lib/web/unit/utils.rb +70 -0
  316. data/lib/web/unit/webunit.rb +28 -0
  317. data/lib/web/upload.rb +55 -0
  318. data/lib/web/upload.rb~ +262 -0
  319. data/lib/web/wiki.rb +506 -0
  320. data/lib/web/wiki.rb~ +506 -0
  321. data/lib/web/wiki/linker.rb +72 -0
  322. data/lib/web/wiki/linker.rb~ +72 -0
  323. data/lib/web/wiki/mime.rb~ +68 -0
  324. data/lib/web/wiki/page.rb +192 -0
  325. data/lib/web/wiki/page.rb~ +192 -0
  326. data/lib/web/wiki/resources/#edit.html# +65 -0
  327. data/lib/web/wiki/resources/admin.html +13 -0
  328. data/lib/web/wiki/resources/admin.html~ +13 -0
  329. data/lib/web/wiki/resources/asset_history.html +3 -0
  330. data/lib/web/wiki/resources/basic.html +1 -0
  331. data/lib/web/wiki/resources/default-content_editor.html +1 -0
  332. data/lib/web/wiki/resources/default-content_editor.html~ +1 -0
  333. data/lib/web/wiki/resources/edit.html +1 -1
  334. data/lib/web/wiki/resources/edit.html~ +1 -1
  335. data/lib/web/wiki/resources/ekit-content_editor.html +1 -0
  336. data/lib/web/wiki/resources/home.html +10 -0
  337. data/lib/web/wiki/resources/home.html~ +10 -0
  338. data/lib/web/wiki/resources/htmlarea/ChangeLog +1185 -0
  339. data/lib/web/wiki/resources/htmlarea/dialog.js +72 -0
  340. data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +16 -0
  341. data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +158 -0
  342. data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +95 -0
  343. data/lib/web/wiki/resources/htmlarea/examples/core.html +184 -0
  344. data/lib/web/wiki/resources/htmlarea/examples/css.html +88 -0
  345. data/lib/web/wiki/resources/htmlarea/examples/custom.css +29 -0
  346. data/lib/web/wiki/resources/htmlarea/examples/full-page.html +75 -0
  347. data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +248 -0
  348. data/lib/web/wiki/resources/htmlarea/examples/index.html +40 -0
  349. data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +132 -0
  350. data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +116 -0
  351. data/lib/web/wiki/resources/htmlarea/examples/test.cgi +21 -0
  352. data/lib/web/wiki/resources/htmlarea/htmlarea.css +180 -0
  353. data/lib/web/wiki/resources/htmlarea/htmlarea.js +2175 -0
  354. data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
  355. data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
  356. data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
  357. data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
  358. data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
  359. data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
  360. data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
  361. data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
  362. data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
  363. data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
  364. data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
  365. data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
  366. data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
  367. data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
  368. data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
  369. data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
  370. data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
  371. data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
  372. data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
  373. data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
  374. data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
  375. data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
  376. data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
  377. data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
  378. data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
  379. data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
  380. data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
  381. data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
  382. data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
  383. data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
  384. data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
  385. data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
  386. data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
  387. data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
  388. data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
  389. data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
  390. data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
  391. data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
  392. data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
  393. data/lib/web/wiki/resources/htmlarea/index.html +199 -0
  394. data/lib/web/wiki/resources/htmlarea/lang/b5.js +36 -0
  395. data/lib/web/wiki/resources/htmlarea/lang/cz.js +63 -0
  396. data/lib/web/wiki/resources/htmlarea/lang/da.js +38 -0
  397. data/lib/web/wiki/resources/htmlarea/lang/de.js +54 -0
  398. data/lib/web/wiki/resources/htmlarea/lang/ee.js +63 -0
  399. data/lib/web/wiki/resources/htmlarea/lang/el.js +75 -0
  400. data/lib/web/wiki/resources/htmlarea/lang/en.js +88 -0
  401. data/lib/web/wiki/resources/htmlarea/lang/es.js +51 -0
  402. data/lib/web/wiki/resources/htmlarea/lang/fi.js +46 -0
  403. data/lib/web/wiki/resources/htmlarea/lang/fr.js +61 -0
  404. data/lib/web/wiki/resources/htmlarea/lang/gb.js +36 -0
  405. data/lib/web/wiki/resources/htmlarea/lang/he.js +63 -0
  406. data/lib/web/wiki/resources/htmlarea/lang/hu.js +63 -0
  407. data/lib/web/wiki/resources/htmlarea/lang/it.js +54 -0
  408. data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +37 -0
  409. data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +37 -0
  410. data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +37 -0
  411. data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +37 -0
  412. data/lib/web/wiki/resources/htmlarea/lang/lt.js +55 -0
  413. data/lib/web/wiki/resources/htmlarea/lang/lv.js +55 -0
  414. data/lib/web/wiki/resources/htmlarea/lang/nb.js +36 -0
  415. data/lib/web/wiki/resources/htmlarea/lang/nl.js +90 -0
  416. data/lib/web/wiki/resources/htmlarea/lang/no.js +79 -0
  417. data/lib/web/wiki/resources/htmlarea/lang/pl.js +36 -0
  418. data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +37 -0
  419. data/lib/web/wiki/resources/htmlarea/lang/ro.js +80 -0
  420. data/lib/web/wiki/resources/htmlarea/lang/ru.js +63 -0
  421. data/lib/web/wiki/resources/htmlarea/lang/se.js +38 -0
  422. data/lib/web/wiki/resources/htmlarea/lang/si.js +63 -0
  423. data/lib/web/wiki/resources/htmlarea/lang/vn.js +51 -0
  424. data/lib/web/wiki/resources/htmlarea/license.txt +30 -0
  425. data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +116 -0
  426. data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +2 -0
  427. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +416 -0
  428. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +59 -0
  429. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +57 -0
  430. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +66 -0
  431. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +66 -0
  432. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +64 -0
  433. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +143 -0
  434. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
  435. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +25 -0
  436. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +25 -0
  437. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +131 -0
  438. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +89 -0
  439. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
  440. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +37 -0
  441. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +37 -0
  442. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +28 -0
  443. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +38 -0
  444. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +37 -0
  445. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +28 -0
  446. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +37 -0
  447. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +114 -0
  448. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +210 -0
  449. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +10 -0
  450. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +122 -0
  451. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +397 -0
  452. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +79 -0
  453. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
  454. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
  455. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
  456. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
  457. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
  458. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
  459. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
  460. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
  461. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
  462. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
  463. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
  464. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
  465. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
  466. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
  467. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
  468. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
  469. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +90 -0
  470. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +90 -0
  471. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +81 -0
  472. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +81 -0
  473. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +90 -0
  474. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +66 -0
  475. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +63 -0
  476. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +81 -0
  477. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +90 -0
  478. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +91 -0
  479. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +90 -0
  480. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +1160 -0
  481. data/lib/web/wiki/resources/htmlarea/popupdiv.js +369 -0
  482. data/lib/web/wiki/resources/htmlarea/popups/about.html +378 -0
  483. data/lib/web/wiki/resources/htmlarea/popups/blank.html +2 -0
  484. data/lib/web/wiki/resources/htmlarea/popups/custom2.html +35 -0
  485. data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +16 -0
  486. data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +133 -0
  487. data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +191 -0
  488. data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +174 -0
  489. data/lib/web/wiki/resources/htmlarea/popups/link.html +142 -0
  490. data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +131 -0
  491. data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +206 -0
  492. data/lib/web/wiki/resources/htmlarea/popups/popup.js +109 -0
  493. data/lib/web/wiki/resources/htmlarea/popups/select_color.html +347 -0
  494. data/lib/web/wiki/resources/htmlarea/popupwin.js +139 -0
  495. data/lib/web/wiki/resources/htmlarea/reference.html +523 -0
  496. data/lib/web/wiki/resources/htmlarea/release-notes.html +165 -0
  497. data/lib/web/wiki/resources/ie-content_editor.html +1 -0
  498. data/lib/web/wiki/resources/ie-content_editor.js +196 -0
  499. data/lib/web/wiki/resources/illustration.html +1 -0
  500. data/lib/web/wiki/resources/illustration.html~ +1 -0
  501. data/lib/web/wiki/resources/images.html +1 -0
  502. data/lib/web/wiki/resources/index.html +4 -0
  503. data/lib/web/wiki/resources/index.html~ +4 -0
  504. data/lib/web/wiki/resources/more_news.html +5 -0
  505. data/lib/web/wiki/resources/more_news.html~ +5 -0
  506. data/lib/web/wiki/resources/more_news_rss_0.91.html +23 -0
  507. data/lib/web/wiki/resources/narf-logo.gif +0 -0
  508. data/lib/web/wiki/resources/page_history.html +19 -0
  509. data/lib/web/wiki/resources/page_history.html~ +19 -0
  510. data/lib/web/wiki/resources/template.html +13 -0
  511. data/lib/web/wiki/resources/template.html~ +13 -0
  512. data/lib/web/wiki/resources/test_upload.gif +0 -0
  513. data/lib/web/wiki/resources/text-styles.css +1 -0
  514. data/lib/web/writableio.rb +33 -0
  515. data/narf-0.5.1.gem +0 -0
  516. data/narf.gemspec +40 -0
  517. data/narf.gemspec~ +52 -0
  518. data/pre-setup.rb +5 -0
  519. data/sapi/apache_cgi/INSTALL.txt~ +9 -0
  520. data/sapi/apache_cgi/README~ +0 -0
  521. data/sapi/apache_cgi/src/narf.c +13 -0
  522. data/sapi/fastcgi/INSTALL.txt~ +17 -0
  523. data/sapi/mod_ruby/INSTALL.txt~ +5 -0
  524. data/sapi/webrick/INSTALL.txt~ +21 -0
  525. data/sapi/webrick/run_webrick.rb~ +16 -0
  526. data/scripts/dump.rb +14 -0
  527. data/scripts/makedist.rb +49 -0
  528. data/scripts/upload.html +5 -0
  529. data/scripts/uri.rb +41 -0
  530. data/scripts/uri/common.rb +432 -0
  531. data/scripts/uri/ftp.rb +149 -0
  532. data/scripts/uri/generic.rb +1106 -0
  533. data/scripts/uri/http.rb +76 -0
  534. data/scripts/uri/https.rb +26 -0
  535. data/scripts/uri/ldap.rb +238 -0
  536. data/scripts/uri/mailto.rb +260 -0
  537. data/scripts/urireg.rb +174 -0
  538. data/test/bufferedtestrunner.rb +112 -0
  539. data/test/mod_ruby_stub.rb +39 -0
  540. data/test/mod_ruby_stub.rb~ +38 -0
  541. data/test/stringio.rb +2 -0
  542. data/test/test.action.rb +142 -0
  543. data/test/test.action.rb~ +142 -0
  544. data/test/test.app.rb +0 -0
  545. data/test/test.assertinclude.rb +109 -0
  546. data/test/test.assertinclude.rb~ +109 -0
  547. data/test/test.formreader-2.0.rb +352 -0
  548. data/test/test.formreader.rb +465 -0
  549. data/test/test.mime-type.rb +23 -0
  550. data/test/test.narf.cgi.rb +101 -0
  551. data/test/test.narf.cgi.rb~ +105 -0
  552. data/test/test.request.rb +328 -0
  553. data/test/test.request.rb~ +318 -0
  554. data/test/test.response.rb +565 -0
  555. data/test/test.response.rb~ +556 -0
  556. data/test/test.session.rb +50 -0
  557. data/test/test.simpledispatcher.rb +188 -0
  558. data/test/test.tagparser.rb +65 -0
  559. data/test/test.template.rb +831 -0
  560. data/test/test.template.rb~ +832 -0
  561. data/test/test.testing2.rb +341 -0
  562. data/test/test.web.test.rb +463 -0
  563. data/test/test.web.test.rb~ +461 -0
  564. data/test/testfiles/basictemplate.tpl +1 -0
  565. data/test/testfiles/explorer5.multipart.data +9 -0
  566. data/test/testfiles/form.html +7 -0
  567. data/test/testfiles/mozilla.multipart.data +9 -0
  568. data/test/testfiles/netscape4.multipart.data +9 -0
  569. data/test/testfiles/pic hydra.png +1 -0
  570. data/test/testfiles/post.data +1 -0
  571. data/test/testfiles/print.text +1 -0
  572. data/test/testfiles/text +1 -0
  573. data/test/webunit/dont_get_it.test_webunit.rb +27 -0
  574. data/test/webunit/ref +38 -0
  575. data/test/webunit/resources/uploadfile1.txt +1 -0
  576. data/test/webunit/resources/uploadfile2.txt +1 -0
  577. data/test/webunit/test_assert.rb +169 -0
  578. data/test/webunit/test_cookie.rb +128 -0
  579. data/test/webunit/test_cookie.rb~ +128 -0
  580. data/test/webunit/test_domwalker.rb +83 -0
  581. data/test/webunit/test_form.rb +43 -0
  582. data/test/webunit/test_form.rb~ +43 -0
  583. data/test/webunit/test_frame.rb +43 -0
  584. data/test/webunit/test_htmlelem.rb +75 -0
  585. data/test/webunit/test_image.rb +46 -0
  586. data/test/webunit/test_jscript.rb +58 -0
  587. data/test/webunit/test_link.rb +87 -0
  588. data/test/webunit/test_multipart.rb +53 -0
  589. data/test/webunit/test_multipart.rb~ +53 -0
  590. data/test/webunit/test_params.rb +212 -0
  591. data/test/webunit/test_params.rb~ +211 -0
  592. data/test/webunit/test_parser.rb +31 -0
  593. data/test/webunit/test_response.rb +145 -0
  594. data/test/webunit/test_response.rb~ +145 -0
  595. data/test/webunit/test_site/assert.html +101 -0
  596. data/test/webunit/test_site/assert.html~ +1 -0
  597. data/test/webunit/test_site/auth/index.html +5 -0
  598. data/test/webunit/test_site/auth/index.html~ +1 -0
  599. data/test/webunit/test_site/badtags.html +7 -0
  600. data/test/webunit/test_site/badtags.html~ +1 -0
  601. data/test/webunit/test_site/cookie.cgi +37 -0
  602. data/test/webunit/test_site/cookie.cgi~ +35 -0
  603. data/test/webunit/test_site/document.xml +13 -0
  604. data/test/webunit/test_site/document.xml~ +1 -0
  605. data/test/webunit/test_site/form.html +150 -0
  606. data/test/webunit/test_site/form.html~ +1 -0
  607. data/test/webunit/test_site/frame-0.html +10 -0
  608. data/test/webunit/test_site/frame-0.html~ +1 -0
  609. data/test/webunit/test_site/frame-1.html +10 -0
  610. data/test/webunit/test_site/frame-1.html~ +1 -0
  611. data/test/webunit/test_site/frame.html +10 -0
  612. data/test/webunit/test_site/frame.html~ +1 -0
  613. data/test/webunit/test_site/image.html +17 -0
  614. data/test/webunit/test_site/image.html~ +1 -0
  615. data/test/webunit/test_site/images/x.gif +0 -0
  616. data/test/webunit/test_site/images/y.gif +0 -0
  617. data/test/webunit/test_site/include.cgi~ +10 -0
  618. data/test/webunit/test_site/jscript-0.html +10 -0
  619. data/test/webunit/test_site/jscript-0.html~ +1 -0
  620. data/test/webunit/test_site/jscript-1.html +10 -0
  621. data/test/webunit/test_site/jscript-1.html~ +1 -0
  622. data/test/webunit/test_site/jscript.html +19 -0
  623. data/test/webunit/test_site/jscript.html~ +1 -0
  624. data/test/webunit/test_site/link.html +19 -0
  625. data/test/webunit/test_site/link.html~ +1 -0
  626. data/test/webunit/test_site/multipart.cgi +27 -0
  627. data/test/webunit/test_site/multipart.cgi~ +25 -0
  628. data/test/webunit/test_site/multipart.html +74 -0
  629. data/test/webunit/test_site/multipart.html~ +1 -0
  630. data/test/webunit/test_site/params.html +65 -0
  631. data/test/webunit/test_site/params.html~ +1 -0
  632. data/test/webunit/test_site/redirect.cgi +14 -0
  633. data/test/webunit/test_site/redirect.cgi~ +14 -0
  634. data/test/webunit/test_site/response.html +67 -0
  635. data/test/webunit/test_site/response.html~ +1 -0
  636. data/test/webunit/test_site/simple.cgi +17 -0
  637. data/test/webunit/test_site/simple.cgi~ +17 -0
  638. data/test/webunit/test_site/stock.cgi +36 -0
  639. data/test/webunit/test_site/stock.cgi~ +34 -0
  640. data/test/webunit/test_site/table.html +83 -0
  641. data/test/webunit/test_site/table.html~ +1 -0
  642. data/test/webunit/test_site/test.cgi~ +25 -0
  643. data/test/webunit/test_table.rb +70 -0
  644. data/test/webunit/test_utils.rb +107 -0
  645. data/test/wiki/test.history.rb +277 -0
  646. data/test/wiki/test.history.rb~ +254 -0
  647. data/test/wiki/test.illustration_page.rb +287 -0
  648. data/test/wiki/test.illustration_page.rb~ +287 -0
  649. data/test/wiki/test.linker.rb +197 -0
  650. data/test/wiki/test.tarpit.rb +40 -0
  651. data/test/wiki/test.wiki.rb +295 -0
  652. data/test/wiki/test.wiki.rb~ +295 -0
  653. data/test/wikitestroot/big_image.jpg +0 -0
  654. data/test/wikitestroot/mime.types +483 -0
  655. data/test/wikitestroot/test_upload.gif +0 -0
  656. data/vandals.test.txt +3 -0
  657. metadata +768 -0
@@ -0,0 +1,19 @@
1
+ <table>
2
+ <tr>
3
+ <td>Rev #</td>
4
+ <td>Time</td>
5
+ <td>Remote Address</td>
6
+ <td>&nbsp;</td>
7
+ </tr>
8
+
9
+ <narf:foreach from="page.history" item="rev">
10
+ <tr>
11
+ <td>{$rev.revision}</td>
12
+ <td>{$rev.mtime_pretty}</td>
13
+ <td>{$rev.remote_addr}</td>
14
+ <td><a href="{$baseurl}?action=view_revision&page.name={$page.name}&revision={$rev.revision}">view</a></td>
15
+ </tr>
16
+ </narf:foreach>
17
+ </table>
18
+
19
+ <p><a href="{$baseurl}?page.name={$page.name}">view page</a>
@@ -0,0 +1,19 @@
1
+ <table>
2
+ <tr>
3
+ <td>Rev #</td>
4
+ <td>Time</td>
5
+ <td>Remote Address</td>
6
+ <td>&nbsp;</td>
7
+ </tr>
8
+
9
+ <narf:foreach from="page.history" item="rev">
10
+ <tr>
11
+ <td>{$rev.revision}</td>
12
+ <td>{$rev.mtime_pretty}</td>
13
+ <td>{$rev.remote_addr}</td>
14
+ <td><a href="?action=view_revision&page.name={$page.name}&revision={$rev.revision}">view</a></td>
15
+ </tr>
16
+ </narf:foreach>
17
+ </table>
18
+
19
+ <p><a href="?page.name={$page.name}">view page</a>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2
+ <HTML><HEAD><TITLE>Narf-lib: {$page.name}</TITLE>
3
+ <LINK REL="stylesheet" HREF="{$resourceurl}/text-styles.css"></link>
4
+ <script>function on_load() { }</script>
5
+ </HEAD><BODY BGCOLOR="FFCF95" onLoad="on_load()">
6
+ <div id=logo><a href="?page.name=HomePage"><img src="{$resourceurl}/narf-logo.gif" alt="Narf" border=0></a></div>
7
+
8
+ <div id=content>
9
+ <div id=header><h1>{$page.name}</h1></div>
10
+ <narf:include file="$content_template">
11
+ <hr>
12
+ <a href="?action=edit&page.name={$page.name}">Edit text of this page</a> | <a href="?action=page_history&page.name={$page.name}">View other revisions</a><br>Last edited {$page.mtime_pretty}
13
+ </div></body></html>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2
+ <HTML><HEAD><TITLE>Narf-lib: {$page.name}</TITLE>
3
+ <LINK REL="stylesheet" HREF="{$baseurl}/resources/text-styles.css"></link>
4
+ <script>function on_load() { }</script>
5
+ </HEAD><BODY BGCOLOR="FFCF95" onLoad="on_load()">
6
+ <div id=logo><a href="?page.name=HomePage"><img src="{$baseurl}/resources/narf-logo.gif" alt="Narf" border=0></a></div>
7
+
8
+ <div id=content>
9
+ <div id=header><h1>{$page.name}</h1></div>
10
+ <narf:include file="$content_template">
11
+ <hr>
12
+ <a href="?action=edit&page.name={$page.name}">Edit text of this page</a> | <a href="?action=page_history&page.name={$page.name}">View other revisions</a><br>Last edited {$page.mtime_pretty}
13
+ </div></body></html>
@@ -0,0 +1 @@
1
+ #content
@@ -0,0 +1,33 @@
1
+ module Web
2
+ # WritableIO uses << operator to add io style write, print, and puts methods
3
+ module WritableIO # :nodoc:
4
+ # writes object to output stream
5
+ def write object
6
+ self << object
7
+ end
8
+
9
+ # writes objects to the output stream
10
+ def print( *objects )
11
+ if (objects.empty?)
12
+ self << $_
13
+ else
14
+ self << objects.collect{ |s| s.to_s }.join("")
15
+ end
16
+ if $\ then self << $\ end
17
+ end
18
+
19
+ # writes multiple lines to the output stream
20
+ def puts( *objects )
21
+ objects.flatten!
22
+ self << objects.collect{ |s|
23
+ s.to_s
24
+ }.collect{ |s|
25
+ unless ( /(\r|\n)\z/ =~ s )
26
+ s + $/
27
+ else
28
+ s
29
+ end
30
+ }.join("")
31
+ end
32
+ end
33
+ end
File without changes
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+
3
+ spec = Gem::Specification.new do |s|
4
+ #### Basic information.
5
+ s.name = 'narf'
6
+ s.version = "0.5.1"
7
+ s.summary = <<-EOF
8
+ NARF is a replacement for and derivative of the Ruby CGI library. It exists to trivialize web development .
9
+ EOF
10
+ s.description = <<-EOF
11
+ These are the basic goals of narf:
12
+
13
+ * To provide a clean API for basic Web application functionality.
14
+ * To make it easy, really easy to write testable Web applications.
15
+ * To run everywhere
16
+
17
+ EOF
18
+
19
+ #### Which files are to be included in this gem? Everything! (Except CVS directories.)
20
+ s.files = Dir.glob("**/*").delete_if { |item|
21
+ item.include?("CVS") || item.include?("svn")
22
+ }
23
+
24
+ #### Load-time details: library and application (you will need one or both).
25
+
26
+ s.require_path = 'lib' # Use these for libraries.
27
+ s.autorequire = 'web'
28
+
29
+ #### Documentation and testing.
30
+
31
+ s.has_rdoc = true
32
+ #s.test_suite_file = "build.rb test"
33
+
34
+ #### Author and project details.
35
+
36
+ s.author = "Patrick May"
37
+ s.email = "narf@hexane.org"
38
+ s.homepage = "http://www.narf-lib.org"
39
+ s.rubyforge_project = "narf"
40
+ end
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+
3
+ spec = Gem::Specification.new do |s|
4
+
5
+ #### Basic information.
6
+
7
+ s.name = 'rmagic'
8
+ s.version = "0.3.2"
9
+ s.summary = <<-EOF
10
+ RMagic demonstrates some of the magical things that Ruby can do. It includes
11
+ a library and a demonstration application (rmagic-app).
12
+ EOF
13
+ s.description = <<-EOF
14
+ RMagic tries to demonstrate all aspects of a gem specification. In practice,
15
+ you will only need some of them. Few gems contain applications, and even fewer
16
+ contain native (C code) extensions.
17
+ EOF
18
+
19
+ #### Dependencies and requirements.
20
+
21
+ s.add_dependency('log4r', '> 1.0.4')
22
+ s.requirements << "A decent graphics card and monitor."
23
+
24
+ #### Which files are to be included in this gem? Everything! (Except CVS directories.)
25
+
26
+ s.files = Dir.glob("**/*").delete_if { |item| item.include?("CVS") }
27
+
28
+ #### C code extensions.
29
+
30
+ s.extensions << "ext/rmagic/extconf.rb"
31
+
32
+ #### Load-time details: library and application (you will need one or both).
33
+
34
+ s.require_path = 'lib' # Use these for libraries.
35
+ s.autorequire = 'rmagic'
36
+
37
+ s.bindir = "bin" # Use these for applications.
38
+ s.executables = ["rmagic-app"]
39
+ s.default_executable = "rmagic-app"
40
+
41
+ #### Documentation and testing.
42
+
43
+ s.has_rdoc = true
44
+ s.test_suite_file = "test/rmagic-tests.rb"
45
+
46
+ #### Author and project details.
47
+
48
+ s.author = "Ruby J. User"
49
+ s.email = "rubyuser@yahoo.com"
50
+ s.homepage = "http://rmagic.rubyforge.org"
51
+ s.rubyforge_project = "rmagic"
52
+ end
@@ -0,0 +1,5 @@
1
+ require 'build.rb'
2
+
3
+ Target.run "rdoc"
4
+
5
+ Target.run "compile_narf_runner"
@@ -0,0 +1,9 @@
1
+ To compile, run this from narf/
2
+
3
+ ruby build.rb compile_narf_runner
4
+
5
+ This file (likely) has a buffer overflow in it. Please be cautious with this until I can get verification that it is ok.
6
+
7
+ Cheers,
8
+
9
+ patrick@hexane.org
File without changes
@@ -0,0 +1,13 @@
1
+ #include <stdlib.h>
2
+
3
+ int main(int argc,char *argv[]) {
4
+ char command[1024];
5
+ command[0] = 0;
6
+ strncat(command,"ruby -r web/runner -e '' ",1024);
7
+
8
+ if ( argc > 1 ) {
9
+ strncat(command,argv[1], 1024-sizeof("ruby -r web/runner -e '' ") );
10
+ }
11
+
12
+ system(command);
13
+ }
@@ -0,0 +1,17 @@
1
+ FastCGI support for narf requires the 'fcgi' libary:
2
+
3
+ http://raa.ruby-lang.org/list.rhtml?name=fcgi
4
+
5
+ You can find a list of FastCGI servers here:
6
+
7
+ http://www.fastcgi.com
8
+
9
+ After installing and configuring the appropriate libraries for your server, you will need to make sure that the cgi script executes in a Web::process block:
10
+
11
+ #!/usr/local/bin/ruby
12
+
13
+ Web::process{
14
+ Web << 'Hello World!'
15
+ }
16
+
17
+ There is a neat continuation trick that matz discussed in [ruby-talk:13428] that makes the Web::process block unnecessary. I've had some trouble getting it too work; when I do, I'll update these docs.
@@ -0,0 +1,5 @@
1
+ Just configure mod_ruby to run your ruby scripts:
2
+
3
+ http://modruby.net/en/index.rbx/mod_ruby/install.html
4
+
5
+ Narf will detect that mod_ruby is running and use the proper apis.
@@ -0,0 +1,21 @@
1
+ I have writen a Web::NarfHandler, based on the CGIHandler, to run narf
2
+ scripts. You will need to add the Web::NarfHandler to webrick with a
3
+ startup script like this, replacing :DocumentRoot with the appropriate
4
+ value:
5
+
6
+ #!/usr/local/bin/ruby
7
+ $: << File.dirname($0)
8
+ require 'webrick'
9
+ require 'web/sapi/webrick'
10
+
11
+ include WEBrick
12
+
13
+ dir = Dir::pwd
14
+
15
+ HTTPServlet::FileHandler.add_handler("cgi", Web::NarfHandler)
16
+
17
+ s = HTTPServer.new(:Port => 4476,
18
+ :DocumentRoot => "/.../narf/sapi/test_site"
19
+ )
20
+ trap("INT"){ s.shutdown }
21
+ s.start
@@ -0,0 +1,16 @@
1
+ #!/usr/local/bin/ruby
2
+ $: << File.dirname($0)
3
+ require 'webrick'
4
+ require 'web/sapi/webrick'
5
+
6
+ include WEBrick
7
+
8
+ dir = Dir::pwd
9
+
10
+ HTTPServlet::FileHandler.add_handler("cgi", Web::NarfHandler)
11
+
12
+ s = HTTPServer.new(:Port => 4476,
13
+ :DocumentRoot => "/Users/patsplat/programming/narf/sapi/test_site"
14
+ )
15
+ trap("INT"){ s.shutdown }
16
+ s.start
@@ -0,0 +1,14 @@
1
+ filename="/cygdrive/c/workspace/ruby/cgi/test/testfiles/multipart.data"
2
+
3
+ if (ENV['REQUEST_METHOD'] == "POST")
4
+ length = Integer(ENV['CONTENT_LENGTH'])
5
+ $stdin.binmode
6
+ File.open( filename, "w" ) { |file|
7
+ file.binmode
8
+ file.write( ($stdin.read(length) or '') )
9
+ }
10
+ end
11
+
12
+ print "Content-type: text/html\r\n\r\n"
13
+ print "hello! content-length: #{ length }<br>"
14
+ print "boundry: #{ ENV['CONTENT_TYPE'] }"
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/ruby
2
+
3
+ NARF_SVN_SERVER = "http://svn.narf-lib.org/svn/narf"
4
+
5
+ require 'ftools'
6
+
7
+ if ARGV.size != 3
8
+ puts "Usage: ruby scripts/makedist.rb username password 1.2.3"
9
+ puts ""
10
+ puts " * username and password are your narf svn credentials"
11
+ puts " * 1.2.3 is the narf release number"
12
+ exit
13
+ end
14
+
15
+ username = ARGV[0]
16
+ password = ARGV[1]
17
+ version = ARGV[2]
18
+
19
+ versiontag = "VERSION_#{version.gsub(/\./,'_')}"
20
+
21
+ svn = "svn --username #{username} --password #{ password }"
22
+
23
+ system( "#{svn} log > ChangeLog")
24
+ system( "#{svn} commit -m \"Updated ChangeLog for #{version}\"" )
25
+ system( "#{svn} delete #{NARF_SVN_SERVER}/releases/#{versiontag} -m \"Deleted any existing release branch for #{version}\"" )
26
+ system( "#{svn} copy #{NARF_SVN_SERVER}/trunk/ #{NARF_SVN_SERVER}/releases/#{versiontag} -m \"Created release branch for #{version}\"" )
27
+
28
+ Dir.mkdir( "../dist" ) unless( File.exists? "../dist" )
29
+ system("rm -Rf ../dist/narf-#{version}")
30
+ Dir.chdir("../dist")
31
+
32
+ system("#{svn} export #{NARF_SVN_SERVER}/releases/#{versiontag} narf-#{version}" )
33
+
34
+ system("cd narf-#{version}; ruby build.rb rdoc");
35
+ system("tar cvzf narf-#{version}.tgz narf-#{version}")
36
+ system("ncftpput upload.sourceforge.net incoming narf-#{version}.tgz")
37
+
38
+ # old stuff
39
+ #system("cvs2cl.pl -T --hide-filenames")
40
+ #system("cvs commit -m \"Updated ChangeLog\"")
41
+ #system("cvs -d :ext:pinetops@cvs.narf-lib.sourceforge.net:/cvsroot/narf-lib rtag -FD now #{versiontag} cgi-install.rb")
42
+ #Dir.chdir("../dist")
43
+ #system("cvs -d :ext:pinetops@cvs.narf-lib.sourceforge.net:/cvsroot/narf-lib export -r #{versiontag} -d narf-#{version} cgi-install.rb ")
44
+ # end old stuff
45
+
46
+
47
+
48
+
49
+
@@ -0,0 +1,5 @@
1
+ <form action="/cgi-bin/dump.rb" enctype="multipart/form-data" method="POST">
2
+ <input type=hidden name=key value=value><br>
3
+ <input type=file name=file value="C:\workspace\ruby\cgi\test\testfiles\hydra.png"><br>
4
+ <input type=submit><br>
5
+ </form>
@@ -0,0 +1,41 @@
1
+ #
2
+ # $Id: uri.rb,v 1.1.1.1 2002/11/29 04:34:24 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ =begin
9
+
10
+ Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
11
+ You can redistribute it and/or modify it under the same term as Ruby.
12
+
13
+ = URI - URI support for Ruby
14
+
15
+ =end
16
+
17
+ module URI
18
+ VERSION_CODE = '000907'.freeze
19
+ VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
20
+ end
21
+
22
+ =begin
23
+
24
+ == Components
25
+
26
+ * ((<URI>)) Module
27
+ * ((<URI::Generic>)) Class
28
+ * ((<URI::FTP>)) Class
29
+ * ((<URI::HTTP>)) Class
30
+ * ((<URI::HTTPS>)) Class
31
+ * ((<URI::LDAP>)) Class
32
+ * ((<URI::MailTo>)) Class
33
+
34
+ =end
35
+ require 'uri/common'
36
+ require 'uri/generic'
37
+ require 'uri/ftp'
38
+ require 'uri/http'
39
+ require 'uri/https'
40
+ require 'uri/ldap'
41
+ require 'uri/mailto'
@@ -0,0 +1,432 @@
1
+ #
2
+ # $Id: common.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ =begin
9
+
10
+ == URI
11
+
12
+ =end
13
+
14
+ module URI
15
+ module REGEXP
16
+ module PATTERN
17
+ # RFC 2396 (URI Generic Syntax)
18
+ # RFC 2732 (IPv6 Literal Addresses in URL's)
19
+ # RFC 2373 (IPv6 Addressing Architecture)
20
+
21
+ # alpha = lowalpha | upalpha
22
+ ALPHA = "a-zA-Z"
23
+ # alphanum = alpha | digit
24
+ ALNUM = "#{ALPHA}\\d"
25
+
26
+ # hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
27
+ # "a" | "b" | "c" | "d" | "e" | "f"
28
+ HEX = "a-fA-F\\d"
29
+ # escaped = "%" hex hex
30
+ ESCAPED = "%[#{HEX}]{2}"
31
+ # mark = "-" | "_" | "." | "!" | "~" | "*" | "'" |
32
+ # "(" | ")"
33
+ # unreserved = alphanum | mark
34
+ UNRESERVED = "-_.!~*'()#{ALNUM}"
35
+ # reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
36
+ # "$" | ","
37
+ # reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
38
+ # "$" | "," | "[" | "]" (RFC 2732)
39
+ RESERVED = ";/?:@&=+$,\\[\\]"
40
+
41
+ # uric = reserved | unreserved | escaped
42
+ URIC = "(?:[#{UNRESERVED}#{RESERVED}]|#{ESCAPED})"
43
+ # uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
44
+ # "&" | "=" | "+" | "$" | ","
45
+ URIC_NO_SLASH = "(?:[#{UNRESERVED};?:@&=+$,]|#{ESCAPED})"
46
+ # query = *uric
47
+ QUERY = "#{URIC}*"
48
+ # fragment = *uric
49
+ FRAGMENT = "#{URIC}*"
50
+
51
+ # domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
52
+ DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
53
+ # toplabel = alpha | alpha *( alphanum | "-" ) alphanum
54
+ TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
55
+ # hostname = *( domainlabel "." ) toplabel [ "." ]
56
+ HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"
57
+
58
+ # RFC 2373, APPENDIX B:
59
+ # IPv6address = hexpart [ ":" IPv4address ]
60
+ # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
61
+ # hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
62
+ # hexseq = hex4 *( ":" hex4)
63
+ # hex4 = 1*4HEXDIG
64
+ #
65
+ # XXX: This definition has a flaw. "::" + IPv4address must be
66
+ # allowed too. Here is a replacement.
67
+ #
68
+ # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
69
+ IPV4ADDR = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
70
+ # hex4 = 1*4HEXDIG
71
+ HEX4 = "[#{HEX}]{1,4}"
72
+ # lastpart = hex4 | IPv4address
73
+ LASTPART = "(?:#{HEX4}|#{IPV4ADDR})"
74
+ # hexseq1 = *( hex4 ":" ) hex4
75
+ HEXSEQ1 = "(?:#{HEX4}:)*#{HEX4}"
76
+ # hexseq2 = *( hex4 ":" ) lastpart
77
+ HEXSEQ2 = "(?:#{HEX4}:)*#{LASTPART}"
78
+ # IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ]
79
+ IPV6ADDR = "(?:#{HEXSEQ2}|(?:#{HEXSEQ1})?::(?:#{HEXSEQ2})?)"
80
+
81
+ # IPv6prefix = ( hexseq1 | [ hexseq1 ] "::" [ hexseq1 ] ) "/" 1*2DIGIT
82
+ # unused
83
+
84
+ # ipv6reference = "[" IPv6address "]" (RFC 2732)
85
+ IPV6REF = "\\[#{IPV6ADDR}\\]"
86
+
87
+ # host = hostname | IPv4address
88
+ # host = hostname | IPv4address | IPv6reference (RFC 2732)
89
+ HOST = "(?:#{HOSTNAME}|#{IPV4ADDR}|#{IPV6REF})"
90
+ # port = *digit
91
+ PORT = "\d*"
92
+ # hostport = host [ ":" port ]
93
+ HOSTPORT = "#{HOST}(?:#{PORT})?"
94
+
95
+ # userinfo = *( unreserved | escaped |
96
+ # ";" | ":" | "&" | "=" | "+" | "$" | "," )
97
+ USERINFO = "(?:[#{UNRESERVED};:&=+$,]|#{ESCAPED})*"
98
+
99
+ # pchar = unreserved | escaped |
100
+ # ":" | "@" | "&" | "=" | "+" | "$" | ","
101
+ PCHAR = "(?:[#{UNRESERVED}:@&=+$,]|#{ESCAPED})"
102
+ # param = *pchar
103
+ PARAM = "#{PCHAR}*"
104
+ # segment = *pchar *( ";" param )
105
+ SEGMENT = "#{PCHAR}*(?:;#{PARAM})*"
106
+ # path_segments = segment *( "/" segment )
107
+ PATH_SEGMENTS = "#{SEGMENT}(?:/#{SEGMENT})*"
108
+
109
+ # server = [ [ userinfo "@" ] hostport ]
110
+ SERVER = "(?:#{USERINFO}@)?#{HOSTPORT}"
111
+ # reg_name = 1*( unreserved | escaped | "$" | "," |
112
+ # ";" | ":" | "@" | "&" | "=" | "+" )
113
+ REG_NAME = "(?:[#{UNRESERVED}$,;+@&=+]|#{ESCAPED})+"
114
+ # authority = server | reg_name
115
+ AUTHORITY = "(?:#{SERVER}|#{REG_NAME})"
116
+
117
+ # rel_segment = 1*( unreserved | escaped |
118
+ # ";" | "@" | "&" | "=" | "+" | "$" | "," )
119
+ REL_SEGMENT = "(?:[#{UNRESERVED};@&=+$,]|#{ESCAPED})+"
120
+
121
+ # scheme = alpha *( alpha | digit | "+" | "-" | "." )
122
+ SCHEME = "[#{ALPHA}][-+.#{ALPHA}\\d]*"
123
+
124
+ # abs_path = "/" path_segments
125
+ ABS_PATH = "/#{PATH_SEGMENTS}"
126
+ # rel_path = rel_segment [ abs_path ]
127
+ REL_PATH = "#{REL_SEGMENT}(?:#{ABS_PATH})?"
128
+ # net_path = "//" authority [ abs_path ]
129
+ NET_PATH = "//#{AUTHORITY}(?:#{ABS_PATH})?"
130
+
131
+ # hier_part = ( net_path | abs_path ) [ "?" query ]
132
+ HIER_PART = "(?:#{NET_PATH}|#{ABS_PATH})(?:\\?(?:#{QUERY}))?"
133
+ # opaque_part = uric_no_slash *uric
134
+ OPAQUE_PART = "#{URIC_NO_SLASH}#{URIC}*"
135
+
136
+ # absoluteURI = scheme ":" ( hier_part | opaque_part )
137
+ ABS_URI = "#{SCHEME}:(?:#{HIER_PART}|#{OPAQUE_PART})"
138
+ # relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
139
+ REL_URI = "(?:#{NET_PATH}|#{ABS_PATH}|#{REL_PATH})(?:\\?#{QUERY})?"
140
+
141
+ # URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
142
+ URI_REF = "(?:#{ABS_URI}|#{REL_URI})?(?:##{FRAGMENT})?"
143
+
144
+ # XXX:
145
+ X_ABS_URI = "
146
+ (#{PATTERN::SCHEME}): (?# 1: scheme)
147
+ (?:
148
+ (?:(?:
149
+ //(?:
150
+ (?:(?:(#{PATTERN::USERINFO})@)? (?# 2: userinfo)
151
+ (?:(#{PATTERN::HOST})(?::(\\d*))?))?(?# 3: host, 4: port)
152
+ |
153
+ (#{PATTERN::REG_NAME}) (?# 5: registry)
154
+ ))?
155
+ ((?!//)#{PATTERN::ABS_PATH})? (?# 6: path)
156
+ )(?:\\?(#{PATTERN::QUERY}))? (?# 7: query)
157
+ |
158
+ (#{PATTERN::OPAQUE_PART}) (?# 8: opaque)
159
+ )
160
+ (?:\\#(#{PATTERN::FRAGMENT}))? (?# 9: fragment)
161
+ "
162
+ X_REL_URI = "
163
+ (?:
164
+ (?:
165
+ //
166
+ (?:
167
+ (?:(#{PATTERN::USERINFO})@)? (?# 1: userinfo)
168
+ (#{PATTERN::HOST})?(?::(\\d*))? (?# 2: host, 3: port)
169
+ |
170
+ (#{PATTERN::REG_NAME}) (?# 4: registry)
171
+ )
172
+ )
173
+ |
174
+ (#{PATTERN::REL_SEGMENT}) (?# 5: rel_segment)
175
+ )?
176
+ (#{PATTERN::ABS_PATH})? (?# 6: abs_path)
177
+ (?:\\?(#{PATTERN::QUERY}))? (?# 7: query)
178
+ (?:\\#(#{PATTERN::FRAGMENT}))? (?# 8: fragment)
179
+ "
180
+ end # PATTERN
181
+
182
+ # for URI::split
183
+ ABS_URI = Regexp.new('^' + PATTERN::X_ABS_URI + '$', #'
184
+ Regexp::EXTENDED, 'N').freeze
185
+ REL_URI = Regexp.new('^' + PATTERN::X_REL_URI + '$', #'
186
+ Regexp::EXTENDED, 'N').freeze
187
+
188
+ # for URI::extract
189
+ URI_REF = Regexp.new(PATTERN::URI_REF, false, 'N').freeze
190
+ ABS_URI_REF = Regexp.new(PATTERN::X_ABS_URI, Regexp::EXTENDED, 'N').freeze
191
+ REL_URI_REF = Regexp.new(PATTERN::X_REL_URI, Regexp::EXTENDED, 'N').freeze
192
+
193
+ # for URI::escape/unescape
194
+ ESCAPED = Regexp.new(PATTERN::ESCAPED, false, 'N').freeze
195
+ UNSAFE = Regexp.new("[^#{PATTERN::UNRESERVED}#{PATTERN::RESERVED}]",
196
+ false, 'N').freeze
197
+
198
+ # for Generic#initialize
199
+ SCHEME = Regexp.new("^#{PATTERN::SCHEME}$", false, 'N').freeze #"
200
+ USERINFO = Regexp.new("^#{PATTERN::USERINFO}$", false, 'N').freeze #"
201
+ HOST = Regexp.new("^#{PATTERN::HOST}$", false, 'N').freeze #"
202
+ PORT = Regexp.new("^#{PATTERN::PORT}$", false, 'N').freeze #"
203
+ OPAQUE = Regexp.new("^#{PATTERN::OPAQUE_PART}$", false, 'N').freeze #"
204
+ REGISTRY = Regexp.new("^#{PATTERN::REG_NAME}$", false, 'N').freeze #"
205
+ ABS_PATH = Regexp.new("^#{PATTERN::ABS_PATH}$", false, 'N').freeze #"
206
+ REL_PATH = Regexp.new("^#{PATTERN::REL_PATH}$", false, 'N').freeze #"
207
+ QUERY = Regexp.new("^#{PATTERN::QUERY}$", false, 'N').freeze #"
208
+ FRAGMENT = Regexp.new("^#{PATTERN::FRAGMENT}$", false, 'N').freeze #"
209
+ end # REGEXP
210
+
211
+ module Util
212
+ def make_components_hash(klass, array_hash)
213
+ tmp = {}
214
+ if array_hash.kind_of?(Array) &&
215
+ array_hash.size == klass.component.size - 1
216
+ klass.component[1..-1].each_index do |i|
217
+ begin
218
+ tmp[klass.component[i + 1]] = array_hash[i].clone
219
+ rescue TypeError
220
+ tmp[klass.component[i + 1]] = array_hash[i]
221
+ end
222
+ end
223
+
224
+ elsif array_hash.kind_of?(Hash)
225
+ array_hash.each do |key, value|
226
+ begin
227
+ tmp[key] = value.clone
228
+ rescue TypeError
229
+ tmp[key] = value
230
+ end
231
+ end
232
+ else
233
+ raise ArgumentError,
234
+ "expected Array of or Hash of components of #{klass.to_s} (#{klass.component[1..-1].join(', ')})"
235
+ end
236
+ tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase
237
+
238
+ return tmp
239
+ end
240
+ module_function :make_components_hash
241
+ end
242
+
243
+ module Escape
244
+ include REGEXP
245
+
246
+ def escape(str, unsafe = UNSAFE)
247
+ unless unsafe.kind_of?(Regexp)
248
+ # perhaps unsafe is String object
249
+ unsafe = Regexp.new(Regexp.quote(unsafe), false, 'N')
250
+ end
251
+ str.gsub(unsafe) do |us|
252
+ tmp = ''
253
+ us.each_byte do |uc|
254
+ tmp << sprintf('%%%02X', uc)
255
+ end
256
+ tmp
257
+ end
258
+ end
259
+ alias encode escape
260
+
261
+ def unescape(str)
262
+ str.gsub(ESCAPED) do
263
+ $&[1,2].hex.chr
264
+ end
265
+ end
266
+ alias decode unescape
267
+ end
268
+
269
+ include REGEXP
270
+ extend Escape
271
+
272
+ @@schemes = {}
273
+
274
+ class Error < StandardError; end
275
+ class InvalidURIError < Error; end # it is not URI.
276
+ class InvalidComponentError < Error; end # it is not component of URI.
277
+ class BadURIError < Error; end # the URI is valid but it is bad for the position.
278
+
279
+ =begin
280
+
281
+ === Methods
282
+
283
+ --- URI::split(uri)
284
+
285
+ =end
286
+
287
+ def self.split(uri)
288
+ case uri
289
+ when ''
290
+ # null uri
291
+
292
+ when ABS_URI
293
+ scheme, userinfo, host, port,
294
+ registry, path, query, opaque, fragment = $~[1..-1]
295
+
296
+ # URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
297
+
298
+ # absoluteURI = scheme ":" ( hier_part | opaque_part )
299
+ # hier_part = ( net_path | abs_path ) [ "?" query ]
300
+ # opaque_part = uric_no_slash *uric
301
+
302
+ # abs_path = "/" path_segments
303
+ # net_path = "//" authority [ abs_path ]
304
+
305
+ # authority = server | reg_name
306
+ # server = [ [ userinfo "@" ] hostport ]
307
+
308
+ if !scheme
309
+ raise InvalidURIError,
310
+ "bad URI(absolute but no scheme): #{uri}"
311
+ end
312
+ if !opaque && (!path && (!host && !registry))
313
+ raise InvalidURIError,
314
+ "bad URI(absolute but no path): #{uri}"
315
+ end
316
+
317
+ when REL_URI
318
+ scheme = nil
319
+ opaque = nil
320
+
321
+ userinfo, host, port, registry,
322
+ rel_segment, abs_path, query, fragment = $~[1..-1]
323
+ if rel_segment && abs_path
324
+ path = rel_segment + abs_path
325
+ elsif rel_segment
326
+ path = rel_segment
327
+ elsif abs_path
328
+ path = abs_path
329
+ end
330
+
331
+ # URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
332
+
333
+ # relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
334
+
335
+ # net_path = "//" authority [ abs_path ]
336
+ # abs_path = "/" path_segments
337
+ # rel_path = rel_segment [ abs_path ]
338
+
339
+ # authority = server | reg_name
340
+ # server = [ [ userinfo "@" ] hostport ]
341
+
342
+ else
343
+ raise InvalidURIError, "bad URI(is not URI?): #{uri}"
344
+ end
345
+
346
+ path = '' if !path && !opaque # (see RFC2396 Section 5.2)
347
+ ret = [
348
+ scheme,
349
+ userinfo, host, port, # X
350
+ registry, # X
351
+ path, # Y
352
+ opaque, # Y
353
+ query,
354
+ fragment
355
+ ]
356
+ return ret
357
+ end
358
+
359
+ =begin
360
+
361
+ --- URI::parse(uri_str)
362
+
363
+ =end
364
+ def self.parse(uri)
365
+ scheme, userinfo, host, port,
366
+ registry, path, opaque, query, fragment = self.split(uri)
367
+
368
+ if scheme && @@schemes.include?(scheme.upcase)
369
+ @@schemes[scheme.upcase].new(scheme, userinfo, host, port,
370
+ registry, path, opaque, query,
371
+ fragment)
372
+ else
373
+ Generic.new(scheme, userinfo, host, port,
374
+ registry, path, opaque, query,
375
+ fragment)
376
+ end
377
+ end
378
+
379
+ =begin
380
+
381
+ --- URI::join(str[, str, ...])
382
+
383
+ =end
384
+ def self.join(*str)
385
+ u = self.parse(str[0])
386
+ str[1 .. -1].each do |x|
387
+ u = u.merge(x)
388
+ end
389
+ u
390
+ end
391
+
392
+ =begin
393
+
394
+ --- URI::extract(str[, schemes])
395
+
396
+ =end
397
+ def self.extract(str, schemes = [])
398
+ urls = []
399
+ if schemes.size > 0
400
+ tmp = Regexp.new('(?:' + schemes.collect{|s|
401
+ Regexp.quote(s + ':')
402
+ }.join('|') + ')',
403
+ Regexp::IGNORECASE, 'N')
404
+ str.scan(tmp) {
405
+ tmp_str = $& + $'
406
+ if ABS_URI_REF =~ tmp_str
407
+ if block_given?
408
+ yield($&)
409
+ else
410
+ urls << $&
411
+ end
412
+ end
413
+ }
414
+
415
+ else
416
+ str.scan(ABS_URI_REF) {
417
+ if block_given?
418
+ yield($&)
419
+ else
420
+ urls << $&
421
+ end
422
+ }
423
+ end
424
+
425
+ if block_given?
426
+ return nil
427
+ else
428
+ return urls
429
+ end
430
+ end
431
+
432
+ end # URI