qwik2md 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/README.md +36 -0
  6. data/Rakefile +10 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/exe/qwik2md +17 -0
  10. data/lib/qwik2md/version.rb +3 -0
  11. data/lib/qwik2md.rb +39 -0
  12. data/qwik2md.gemspec +30 -0
  13. data/vendor/qwik/AUTHORS +10 -0
  14. data/vendor/qwik/COPYING +340 -0
  15. data/vendor/qwik/COPYRIGHT +346 -0
  16. data/vendor/qwik/lib/qwik/Makefile +63 -0
  17. data/vendor/qwik/lib/qwik/Rakefile +17 -0
  18. data/vendor/qwik/lib/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/lib/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/lib/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/lib/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/lib/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/lib/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/lib/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/lib/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/lib/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/lib/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/lib/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/lib/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/lib/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/lib/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/lib/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/lib/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/lib/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/lib/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/lib/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/lib/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/lib/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/lib/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/lib/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/lib/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/lib/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/lib/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/lib/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/lib/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/lib/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/lib/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/lib/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/lib/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/lib/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/lib/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/lib/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/lib/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/lib/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/lib/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/lib/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/lib/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/lib/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/lib/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/lib/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/lib/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/lib/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/lib/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/lib/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/lib/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/lib/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/lib/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/lib/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/lib/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/lib/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/lib/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/lib/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/lib/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/lib/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/lib/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/lib/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/lib/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/lib/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/lib/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/lib/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/lib/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/lib/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/lib/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/lib/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/lib/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/lib/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/lib/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/lib/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/lib/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/lib/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/lib/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/lib/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/lib/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/lib/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/lib/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/lib/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/lib/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/lib/qwik/action.rb +325 -0
  99. data/vendor/qwik/lib/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/lib/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/lib/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/lib/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/lib/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/lib/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/lib/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/lib/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/lib/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/lib/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/lib/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/lib/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/lib/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/lib/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/lib/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/lib/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/lib/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/lib/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/lib/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/lib/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/lib/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/lib/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/lib/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/lib/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/lib/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/lib/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/lib/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/lib/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/lib/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/lib/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/lib/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/lib/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/lib/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/lib/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/lib/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/lib/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/lib/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/lib/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/lib/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/lib/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/lib/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/lib/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/lib/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/lib/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/lib/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/lib/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/lib/qwik/config.rb +299 -0
  146. data/vendor/qwik/lib/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/lib/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/lib/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/lib/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/lib/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/lib/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/lib/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/lib/qwik/description.rb +256 -0
  154. data/vendor/qwik/lib/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/lib/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/lib/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/lib/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/lib/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/lib/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/lib/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/lib/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/lib/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/lib/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/lib/qwik/farm.rb +283 -0
  165. data/vendor/qwik/lib/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/lib/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/lib/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/lib/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/lib/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/lib/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/lib/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/lib/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/lib/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/lib/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/lib/qwik/group.rb +157 -0
  176. data/vendor/qwik/lib/qwik/helper.rb +6 -0
  177. data/vendor/qwik/lib/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/lib/qwik/html-to-wabisabi.rb +148 -0
  179. data/vendor/qwik/lib/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/lib/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/lib/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/lib/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/lib/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/lib/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/lib/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/lib/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/lib/qwik/logger.rb +115 -0
  188. data/vendor/qwik/lib/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/lib/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/lib/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/lib/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/lib/qwik/mail.rb +341 -0
  193. data/vendor/qwik/lib/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/lib/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/lib/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/lib/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/lib/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/lib/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/lib/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/lib/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/lib/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/lib/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/lib/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/lib/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/lib/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/lib/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/lib/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/lib/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/lib/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/lib/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/lib/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/lib/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/lib/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/lib/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/lib/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/lib/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/lib/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/lib/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/lib/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/lib/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/lib/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/lib/qwik/page.rb +67 -0
  223. data/vendor/qwik/lib/qwik/pages.rb +444 -0
  224. data/vendor/qwik/lib/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/lib/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/lib/qwik/parser-inline.rb +272 -0
  227. data/vendor/qwik/lib/qwik/parser.rb +349 -0
  228. data/vendor/qwik/lib/qwik/password.rb +183 -0
  229. data/vendor/qwik/lib/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/lib/qwik/qp.rb +56 -0
  231. data/vendor/qwik/lib/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/lib/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/lib/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/lib/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/lib/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/lib/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/lib/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/lib/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/lib/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/lib/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/lib/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/lib/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/lib/qwik/request.rb +91 -0
  244. data/vendor/qwik/lib/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/lib/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/lib/qwik/response.rb +228 -0
  247. data/vendor/qwik/lib/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/lib/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/lib/qwik/server.rb +252 -0
  250. data/vendor/qwik/lib/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/lib/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/lib/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/lib/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/lib/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/lib/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/lib/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/lib/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/lib/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/lib/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/lib/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/lib/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/lib/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/lib/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/lib/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/lib/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/lib/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/lib/qwik/site.rb +76 -0
  268. data/vendor/qwik/lib/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/lib/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/lib/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/lib/qwik/template.rb +85 -0
  272. data/vendor/qwik/lib/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/lib/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/lib/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/lib/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/lib/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/lib/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/lib/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/lib/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/lib/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/lib/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/lib/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/lib/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/lib/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/lib/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/lib/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/lib/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/lib/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/lib/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/lib/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/lib/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/lib/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/lib/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/lib/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/lib/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/lib/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/lib/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/lib/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/lib/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/lib/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/lib/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/lib/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/lib/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/lib/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/lib/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/lib/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/lib/qwik/tokenizer-inline.rb +288 -0
  308. data/vendor/qwik/lib/qwik/tokenizer.rb +331 -0
  309. data/vendor/qwik/lib/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/lib/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/lib/qwik/util-charset.rb +331 -0
  312. data/vendor/qwik/lib/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/lib/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/lib/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/lib/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/lib/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/lib/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/lib/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/lib/qwik/util-string.rb +202 -0
  320. data/vendor/qwik/lib/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/lib/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/lib/qwik/version.rb +11 -0
  323. data/vendor/qwik/lib/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/lib/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/lib/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/lib/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/lib/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/lib/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/lib/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/lib/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/lib/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/lib/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/lib/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/lib/qwik/wabisabi.rb +5 -0
  335. metadata +492 -0
@@ -0,0 +1,251 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH << 'compat' unless $LOAD_PATH.include? 'compat'
6
+ require 'htree'
7
+
8
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
9
+ require 'qwik/htree-template'
10
+
11
+ module HTree
12
+ module Container
13
+ def split_name_num(name)
14
+ name = name.sub(%r|(^//)|, '')
15
+
16
+ if /^(\w+)\[(\d+)\]$/ =~ name
17
+ return [$1, $2.to_i]
18
+ end
19
+
20
+ return [name, 1]
21
+ end
22
+
23
+ def find_nth_element(num=1, *names)
24
+ i = 1
25
+ traverse_element(*names) {|e|
26
+ return e if i == num
27
+ i += 1
28
+ }
29
+ return nil
30
+ end
31
+
32
+ def get_tag(tag)
33
+ tag, num = split_name_num(tag)
34
+ names = html_tags(tag)
35
+ return find_nth_element(num, *names)
36
+ end
37
+
38
+ def each_in_class(klass)
39
+ klass, knum = split_name_num(klass)
40
+ k = 1
41
+ klass_path = nil
42
+ make_loc.traverse_element {|l|
43
+ if klass_path.nil?
44
+ if l.to_node.get_attr('class') == klass
45
+ if k == knum
46
+ klass_path = l.path
47
+ else
48
+ k += 1
49
+ end
50
+ end
51
+ elsif l.path.include?(klass_path)
52
+ yield l
53
+ end
54
+ }
55
+ return nil
56
+ end
57
+
58
+ def get_class_tag(klass, tag)
59
+ tag, num = split_name_num(tag)
60
+ i = 1
61
+ each_in_class(klass) {|l|
62
+ ar = l.path.split('/')
63
+ e = ar.last
64
+ if e == tag
65
+ return l.to_node if i == num
66
+ i += 1
67
+ end
68
+ }
69
+ return nil
70
+ end
71
+
72
+ def each_class(klass) # obsolete
73
+ return each_has_attr('class', klass, &b)
74
+ end
75
+
76
+ def get_class(klass) # obsolete
77
+ return get_has_attr('class', klass)
78
+ end
79
+
80
+ def each_has_attr(attr, value)
81
+ make_loc.traverse_element {|l|
82
+ if l.to_node.get_attr(attr) == value
83
+ yield(l.to_node)
84
+ end
85
+ }
86
+ end
87
+
88
+ def get_has_attr(attr, value)
89
+ each_has_attr(attr, value) {|l|
90
+ return l.to_node
91
+ }
92
+ return nil
93
+ end
94
+
95
+ def get_a_path(path)
96
+ if /\A(.*)\[(.+)\]\z/ =~ path
97
+ tag = $1
98
+ select = $2
99
+ if /\A@([a-z]+)='([a-z]+)'\z/ =~ select
100
+ attr = $1
101
+ value = $2
102
+ # if attr == 'class'
103
+ # return get_class(cont)
104
+ # end
105
+ return get_has_attr(attr, value)
106
+ end
107
+ end
108
+
109
+ return get_tag(path)
110
+ end
111
+
112
+ def get_path(path)
113
+ xml = self
114
+ path.split('/').each {|pa|
115
+ if 0 < pa.length
116
+ return nil if xml.nil?
117
+ xml = xml.get_a_path(pa)
118
+ end
119
+ }
120
+ return xml
121
+ end
122
+ end
123
+
124
+ class Elem
125
+ def attributes_str
126
+ return hash_to_str(attributes)
127
+ end
128
+
129
+ def hash_to_str(src)
130
+ h = {}
131
+ src.each {|k, v| h[k.to_s] = v.to_s }
132
+ return h
133
+ end
134
+ end
135
+ end
136
+
137
+ if $0 == __FILE__
138
+ require 'qwik/testunit'
139
+ require 'qwik/htree-format-xml'
140
+ $test = true
141
+ end
142
+
143
+ if defined?($test) && $test
144
+ class TestHTreeGet < Test::Unit::TestCase
145
+ def ok(e, s)
146
+ return '' if s.nil?
147
+ ok_eq(e, s.format_xml)
148
+ end
149
+
150
+ def test_all
151
+ # test_get_tag
152
+ e = HTree::Elem.new('e')
153
+
154
+ # test_split_name_num
155
+ ok_eq(['sidebar', 1], e.split_name_num('sidebar'))
156
+ ok_eq(['sidebar', 1], e.split_name_num("sidebar[1]"))
157
+ ok_eq(['sidebar', 2], e.split_name_num("sidebar[2]"))
158
+
159
+ # test_get_tag
160
+ h = HTree("<a><b><c>")
161
+ ok("<c/>", h.get_tag('c'))
162
+ ok("<b><c/></b>", h.get_tag('b'))
163
+
164
+ # test_each_in_class
165
+ h = HTree("<p class='a'><ta/></p><p class='b'><tb/></p><p class='b'><tb2/></p>")
166
+ h.each_in_class('a') {|l|
167
+ ok_eq("doc()/p[1]/ta", l.path)
168
+ ok("<ta/>", l.to_node)
169
+ }
170
+ h.each_in_class('b') {|l|
171
+ ok_eq("doc()/p[2]/tb", l.path)
172
+ ok("<tb/>", l.to_node)
173
+ }
174
+ h.each_in_class("b[2]") {|l|
175
+ ok_eq("doc()/p[3]/tb2", l.path)
176
+ ok("<tb2/>", l.to_node)
177
+ }
178
+
179
+ ok("<ta/>", h.get_class_tag('a', 'ta'))
180
+ ok("<tb/>", h.get_class_tag('b', 'tb'))
181
+ ok("<tb2/>", h.get_class_tag("b[2]", 'tb2'))
182
+
183
+ str = <<'EOS'
184
+ <html><div class='main'>
185
+ <div class='day'><h2>bh2</h2></div>
186
+ <div class='sidebar'><h2>sh2</h2></div>
187
+ </div></html>
188
+ EOS
189
+ h = HTree(str)
190
+ ok("<html><div class=\"main\">\n<div class=\"day\"><h2>bh2</h2></div>\n<div class=\"sidebar\"><h2>sh2</h2></div>\n</div></html>\n", h)
191
+ ok("<h2>bh2</h2>", h.get_tag('h2'))
192
+ ok("<h2>sh2</h2>", h.get_tag("h2[2]"))
193
+ ok("<h2>bh2</h2>", h.get_class_tag('day', 'h2'))
194
+ ok("<h2>sh2</h2>", h.get_class_tag('sidebar', 'h2'))
195
+
196
+ # test_get_tag2
197
+ h = HTree("<a><b>tb</b><b>tb2</b><c>")
198
+ ok("<b>tb</b>", h.get_tag('b'))
199
+ ok_eq(nil, h.get_tag('nosuchtag'))
200
+ ok("<b>tb</b>", h.get_tag("b[1]"))
201
+ ok("<b>tb2</b>", h.get_tag("b[2]"))
202
+ ok("<b>tb</b>", h.get_tag("//b"))
203
+
204
+ # test_xpath
205
+ str = <<'EOS'
206
+ <html><div class='main'>
207
+ <div class='day'><h2>bh2</h2></div>
208
+ <div class='sidebar'><h2>sh2<b>a</b>sh2a</h2></div>
209
+ </div></html>
210
+ EOS
211
+ h = HTree(str)
212
+ #ok("<html><div class=\"main\">\n<div class=\"day\"><h2>bh2</h2></div>\n<div class=\"sidebar\"><h2>sh2</h2></div>\n</div></html>\n", h)
213
+ #ok("<h2>sh2</h2>", h.get_class_tag('sidebar', 'h2'))
214
+ #ok("<h2>sh2<b>a</b>sh2a</h2>", h.get_class('sidebar'))
215
+ ok("<div class=\"sidebar\"><h2>sh2<b>a</b>sh2a</h2></div>",
216
+ h.get_class('sidebar'))
217
+ ok_instance_of(HTree::Elem, h.get_class('sidebar'))
218
+ ok("<b>a</b>", h.get_class('sidebar').get_tag('b'))
219
+ ok("<div class=\"sidebar\"><h2>sh2<b>a</b>sh2a</h2></div>",
220
+ h.get_a_path("div[@class='sidebar']"))
221
+ ok("<b>a</b>", h.get_a_path("div[@class='sidebar']").get_a_path('b'))
222
+ ok("<div class=\"sidebar\"><h2>sh2<b>a</b>sh2a</h2></div>",
223
+ h.get_path("//div[@class='sidebar']"))
224
+ ok("<b>a</b>", h.get_path("//div[@class='sidebar']/b"))
225
+
226
+ str = <<'EOS'
227
+ <a href='t1' alt='t2'>t3</a>
228
+ EOS
229
+ h = HTree(str)
230
+ ok_instance_of(HTree::Doc, h)
231
+ e = h.get_tag('a')
232
+ ok_instance_of(HTree::Elem, e)
233
+ ok("<a href=\"t1\" alt=\"t2\">t3</a>", e)
234
+ #ok_eq({href=>{text 't1'}, alt=>{text 't2'}}, e.attributes)
235
+ ok_eq({'href'=>'t1', 'alt'=>'t2'}, e.attributes_str)
236
+
237
+ # test_xpath_attr
238
+ str = <<'EOS'
239
+ <html><div class='main'>
240
+ <div id='menu'><h2>menuh2</h2></div>
241
+ </div></html>
242
+ EOS
243
+ h = HTree(str)
244
+ ok("<div id=\"menu\"><h2>menuh2</h2></div>",
245
+ h.get_has_attr('id', 'menu'))
246
+ ok_instance_of(HTree::Elem, h.get_has_attr('id', 'menu'))
247
+ ok("<div id=\"menu\"><h2>menuh2</h2></div>",
248
+ h.get_path("//div[@id='menu']"))
249
+ end
250
+ end
251
+ end
@@ -0,0 +1,179 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH << 'compat' unless $LOAD_PATH.include? 'compat'
6
+ require 'htree'
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+ require 'qwik/html-generator'
9
+ require 'qwik/htree-generator'
10
+
11
+ module HTree
12
+ module HtmlGeneratorModule
13
+ include GeneratorModule
14
+ include HtmlGeneratorUnit
15
+ end
16
+
17
+ class HtmlGenerator
18
+ include HtmlGeneratorModule
19
+ end
20
+ end
21
+
22
+ if $0 == __FILE__
23
+ require 'qwik/testunit'
24
+ require 'qwik/htree-format-xml'
25
+ $test = true
26
+ end
27
+
28
+ if defined?($test) && $test
29
+ class TestHTreeHtmlGeneratorModule < Test::Unit::TestCase
30
+ include HTree::HtmlGeneratorModule
31
+
32
+ def test_html_generator_module
33
+ html = html {[
34
+ head {[
35
+ contenttype("text/html; charset=SHIFT_JIS"),
36
+ title {"タイトル"},
37
+ stylesheet('style.css')
38
+ ]},
39
+ body {[
40
+ pre {[b {'world'}, 'hello']},
41
+ pre {['This is ', b{'bold'}, ' text.']},
42
+ pre {['This is ', i{'italic'}, ' text.']},
43
+ p {['This is ', a('hoge'){'anchor'}, ' text.']},
44
+ p {['This is ', a(:href=>'hoge'){'anchor'}, ' text.']},
45
+ img('new.gif', 'new')
46
+ ]}
47
+ ]}
48
+ ok_eq("<html><head><meta content=\"text/html; charset=SHIFT_JIS\" http-equiv=\"Content-Type\"/><title>タイトル</title><link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"/></head><body><pre><b>world</b>hello</pre><pre>This is <b>bold</b> text.</pre><pre>This is <i>italic</i> text.</pre><p>This is <a href=\"hoge\">anchor</a> text.</p><p>This is <a href=\"hoge\">anchor</a> text.</p><img src=\"new.gif\" alt=\"new\"/></body></html>", html.format_xml)
49
+ end
50
+ end
51
+
52
+ class TestHTreeXmlGeneratorModule < Test::Unit::TestCase
53
+ include HTree::GeneratorModule
54
+
55
+ def ok(e, s)
56
+ ok_eq(e, s.format_xml)
57
+ end
58
+
59
+ def test_generator_module
60
+ ok("<b/>", b)
61
+ ok("<b/>", b{})
62
+ ok("<b>t</b>", b{'t'})
63
+ ok("<div><b>t</b></div>", div{b{'t'}})
64
+ ok("<p><b>b</b></p>", p{b{'b'}})
65
+ ok("<p>t<p>b</p>t</p>", p{['t', p{'b'}, 't']})
66
+ ok("<a href=\"u\">t</a>", a(:href=>'u'){'t'})
67
+ end
68
+ end
69
+
70
+ class TestHTreeHtmlGenerator < Test::Unit::TestCase
71
+ def ok(e, s)
72
+ ok_eq(e, s.format_xml)
73
+ end
74
+
75
+ def test_htree_html_generator
76
+ g = HTree::HtmlGenerator.new
77
+
78
+ ok("<p/>", g.p)
79
+ doc = HTree::Doc.new(g.p)
80
+ ok("<p/>", doc)
81
+ str = ''
82
+ doc.display_xml(str)
83
+ #ok_eq("<p xmlns=\"http://www.w3.org/1999/xhtml\"\n/>", str)
84
+
85
+ ok("<meta content=\"text/html\" http-equiv=\"Content-Type\"/>",
86
+ g.contenttype('text/html'))
87
+ ok("<meta content=\"0; url=t\" http-equiv=\"Refresh\"/>",
88
+ g.refresh(0, 't'))
89
+ ok("<link href=\"style1.css\" rel=\"stylesheet\" type=\"text/css\"/>",
90
+ g.stylesheet('style1.css'))
91
+
92
+ ok("<a href=\"t\">s</a>", g.a('t'){'s'}) # test_link
93
+ ok("<a href=\"t?a\">s</a>", g.a("t?a"){'s'})
94
+ ok("<a href=\"t?a&amp;b\">s</a>", g.a("t?a&b"){'s'})
95
+ ok("<a href=\"t\">&lt;</a>", g.a('t'){"<"})
96
+
97
+ ok("<input name=\"n\" type=\"submit\" value=\"t\"/>",
98
+ g.submit('t', 'n')) # test_form
99
+ ok("<textarea name=\"\">t</textarea>", g.textarea{'t'})
100
+ ok("<select name=\"n\"><option name=\"t1\">t1</option><option name=\"t2\">t2</option></select>", g.select('n', 't1', 't2'))
101
+
102
+ ok("<input type=\"hidden\" name=\"n\"/>", g.hidden('n'))
103
+ ok("<input type=\"hidden\" name=\"n\" value=\"v\"/>",
104
+ g.hidden('n', 'v'))
105
+ ok("<input name=\"n\" id=\"i\" value=\"v\"/>",
106
+ g.hidden({:name=>'n', :value=>'v', :id=>'i'}))
107
+ ok("<input name=\"n\" id=\"i\" value=\"v\"/>",
108
+ g.hidden(:name=>'n', :value=>'v', :id=>'i'))
109
+
110
+ ok("<form>t</form>", g.form{'t'})
111
+ ok("<form method=\"POST\">t</form>", g.form('POST'){'t'})
112
+ ok("<form method=\"POST\" action=\"u\">t</form>",
113
+ g.form('POST', 'u'){'t'})
114
+ ok("<form enctype=\"multipart/form-data\" method=\"POST\">t</form>",
115
+ g.form(:method=>'POST', :enctype=>'multipart/form-data'){'t'})
116
+
117
+ # test_apos
118
+ ok("&lt;&amp;", HTree::Text.new("<&"))
119
+ ok("'", HTree::Text.new("'"))
120
+ xml = g.p(:title => "What's New"){'t'}
121
+ ok("<p title=\"What's New\">t</p>", xml)
122
+ xml = g.p{"What's New"}
123
+ ok("<p>What's New</p>", xml)
124
+
125
+ # test_html
126
+ html = g.html {[
127
+ g.head {[
128
+ g.contenttype("text/html; charset=SHIFT_JIS"),
129
+ g.title {"タイトル"},
130
+ g.stylesheet('style.css')
131
+ ]},
132
+ g.body {[
133
+ g.pre {[g.b {'world'}, 'hello']},
134
+ g.pre {['This is ', g.b{'bold'}, ' text.']},
135
+ g.pre {['This is ', g.i{'italic'}, ' text.']},
136
+ g.p {['This is ', g.a('hoge'){'anchor'}, ' text.']},
137
+ g.p {['This is ', g.a(:href=>'hoge'){'anchor'}, ' text.']},
138
+ g.img('new.gif', 'new')
139
+ ]}
140
+ ]}
141
+ ok("<html><head><meta content=\"text/html; charset=SHIFT_JIS\" http-equiv=\"Content-Type\"/><title>タイトル</title><link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"/></head><body><pre><b>world</b>hello</pre><pre>This is <b>bold</b> text.</pre><pre>This is <i>italic</i> text.</pre><p>This is <a href=\"hoge\">anchor</a> text.</p><p>This is <a href=\"hoge\">anchor</a> text.</p><img src=\"new.gif\" alt=\"new\"/></body></html>", html)
142
+
143
+ ok_eq(<<'EOT'.chomp, html.format_xml(0))
144
+ <html
145
+ ><head
146
+ ><meta content="text/html; charset=SHIFT_JIS" http-equiv="Content-Type"
147
+ /><title
148
+ >タイトル</title
149
+ ><link href="style.css" rel='stylesheet' type="text/css"
150
+ /></head
151
+ ><body
152
+ ><pre
153
+ ><b
154
+ >world</b
155
+ >hello</pre
156
+ ><pre
157
+ >This is <b
158
+ >bold</b
159
+ > text.</pre
160
+ ><pre
161
+ >This is <i
162
+ >italic</i
163
+ > text.</pre
164
+ ><p
165
+ >This is <a href='hoge'
166
+ >anchor</a
167
+ > text.</p
168
+ ><p
169
+ >This is <a href='hoge'
170
+ >anchor</a
171
+ > text.</p
172
+ ><img src="new.gif" alt='new'
173
+ /></body
174
+ ></html
175
+ >
176
+ EOT
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,263 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH << 'compat' unless $LOAD_PATH.include? 'compat'
6
+ require 'htree'
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+
9
+ module HTree
10
+ class Attr < Hash
11
+ def initialize(h)
12
+ self.update(h)
13
+ end
14
+ end
15
+
16
+ module Container
17
+ def html_tags(*tags)
18
+ ar = []
19
+ tags.map {|tag|
20
+ ar << tag
21
+ ar << "{http://www.w3.org/1999/xhtml}#{tag}"
22
+ }
23
+ return ar
24
+ end
25
+
26
+ def replace(*otags, &block)
27
+ tags = html_tags(*otags)
28
+
29
+ subst = {}
30
+ each_child_with_index {|descendant, i|
31
+ if ! descendant.elem?
32
+ subst[i] = descendant
33
+ next
34
+ end
35
+
36
+ if tags.length == 0 || tags.include?(descendant.name)
37
+ y = yield(descendant)
38
+ if !(y === descendant)
39
+ subst[i] = y
40
+ next
41
+ end
42
+ end
43
+
44
+ subst[i] = descendant.replace(*tags, &block)
45
+ }
46
+ return to_node.subst_subnode(subst)
47
+ end
48
+ alias each_tag replace
49
+
50
+ def apply(data)
51
+ replace {|e|
52
+ eid = e.get_attr('id')
53
+ next e if eid.nil?
54
+ eid = eid.intern
55
+ d = data[eid]
56
+ next nil if d.nil?
57
+ next e if d == true
58
+ if d.is_a? HTree::Attr
59
+ next e.clone_with(d)
60
+ elsif d.is_a? Array
61
+ next e.clone_with(d.flatten)
62
+ end
63
+ e.clone_with(d)
64
+ }
65
+ end
66
+ end
67
+
68
+ class Elem
69
+ include Enumerable
70
+ alias each each_child
71
+
72
+ def delete_spaces
73
+ ar = map {|e|
74
+ e.is_a?(HTree::Text) ? e.to_s.sub(/^\s+/, "").sub(/\s+$/, "") : e
75
+ }
76
+ clone_without_child.clone_with(ar)
77
+ end
78
+
79
+ def clone_without_child
80
+ name = self.name
81
+ org_attr = self.attributes
82
+ attr = symbol_to_str(org_attr)
83
+ return Elem.new(name, attr)
84
+ end
85
+
86
+ def clone_with(*ar)
87
+ name = self.name
88
+ org_attr = self.attributes
89
+ attr = symbol_to_str(org_attr)
90
+
91
+ nar = []
92
+ ar.flatten.each {|e|
93
+ if e.is_a?(Hash)
94
+ data = symbol_to_str(e)
95
+ attr.update(data)
96
+ elsif e.nil?
97
+ # do nothing
98
+ else
99
+ nar << e
100
+ end
101
+ }
102
+
103
+ return Elem.new(name, attr, @children, *nar)
104
+ end
105
+
106
+ private
107
+
108
+ def symbol_to_str(sdata)
109
+ data = {}
110
+ sdata.each {|k, v|
111
+ data[k.to_s] = v.to_s
112
+ }
113
+ return data
114
+ end
115
+ end
116
+ end
117
+
118
+ if $0 == __FILE__
119
+ require 'qwik/testunit'
120
+ require 'qwik/htree-format-xml'
121
+ require 'qwik/htree-generator'
122
+ $test = true
123
+ end
124
+
125
+ if defined?($test) && $test
126
+ class TestHTreeTemplate < Test::Unit::TestCase
127
+ def ok(e, s)
128
+ ok_eq(e, s.format_xml)
129
+ end
130
+
131
+ def test_all
132
+ g = HTree::Generator.new
133
+
134
+ # test_symbol_to_str
135
+ HTree::Elem.instance_eval {
136
+ public :symbol_to_str
137
+ }
138
+ ok_eq({'t'=>'s'}, g.a.symbol_to_str({:t => 's'}))
139
+
140
+ # test_apply
141
+ org = HTree("<p><div id='a'/><div id='b'/></p>")
142
+ data = {}
143
+ data[:a] = 'a'
144
+ data[:b] = g.b
145
+ h = org.apply(data)
146
+ ok("<p><div id=\"a\">a</div><div id=\"b\"><b/></div></p>", h)
147
+
148
+ data = {}
149
+ data[:a] = nil
150
+ data[:b] = HTree::Attr.new(:action => 'd.html')
151
+ h = org.apply(data)
152
+ ok("<p><div action=\"d.html\" id=\"b\"></div></p>", h)
153
+
154
+ data = {}
155
+ data[:a] = [['a', g.hr]] # OK.
156
+ data[:b] = nil
157
+ h = org.apply(data)
158
+ ok("<p><div id=\"a\">a<hr/></div></p>", h)
159
+
160
+ # test_each_tag
161
+ org = HTree("<a><b><c/><d/><c/></b></a>")
162
+ ok("<a><b><c/><d/><c/></b></a>", org)
163
+ xml = org.each_tag('c'){|e| nil }
164
+ ok("<a><b><d/></b></a>", xml)
165
+ xml = org.each_tag('c'){|e| e }
166
+ ok("<a><b><c/><d/><c/></b></a>", xml)
167
+ xml = org.each_tag('c'){|e| HTree::Elem.new('cc') }
168
+ ok("<a><b><cc/><d/><cc/></b></a>", xml)
169
+ xml = org.each_tag('c'){|e| g.dd }
170
+ ok("<a><b><dd/><d/><dd/></b></a>", xml)
171
+ xml = org.each_tag('c'){|e| e.clone_with('test1') }
172
+ ok("<a><b><c>test1</c><d/><c>test1</c></b></a>", xml)
173
+
174
+ # test_set_attr
175
+ e = g.a(:href => 't.html'){'t'}
176
+ ok("<a href=\"t.html\">t</a>", e)
177
+ e = e.clone_with('href' => 's.html')
178
+ ok("<a href=\"s.html\">t</a>", e)
179
+ e = e.clone_with('s')
180
+ ok("<a href=\"s.html\">ts</a>", e)
181
+
182
+ # test_textarea
183
+ org = HTree("<textarea></textarea>")
184
+ htree = org.replace('textarea'){|e|
185
+ e.clone_with('text')
186
+ }
187
+ ok("<textarea>text</textarea>", htree)
188
+ org = HTree("<textarea id='contents'></textarea>")
189
+ data = {}
190
+ data[:contents] = 'text'
191
+ htree = org.apply(data)
192
+ ok("<textarea id=\"contents\">text</textarea>", htree)
193
+
194
+ # test_html_tags
195
+ h = HTree("<a>")
196
+ ok_eq(['a', "{http://www.w3.org/1999/xhtml}a"], h.html_tags('a'))
197
+ ok_eq(['a', "{http://www.w3.org/1999/xhtml}a", 'b', "{http://www.w3.org/1999/xhtml}b"], h.html_tags('a', 'b'))
198
+
199
+ # test_clone
200
+ h = HTree("<a href='1.html'>t</a>")
201
+ e = h.children[0]
202
+ xml = e.clone_with('test1')
203
+ ok("<a href=\"1.html\">ttest1</a>", xml)
204
+ xml = e.clone_with('href'=>'n.html')
205
+ ok("<a href=\"n.html\">t</a>", xml)
206
+ end
207
+
208
+ def test_replace
209
+ g = HTree::Generator.new
210
+
211
+ h = HTree("<a><b/><c/></a>")
212
+
213
+ h2 = h.replace {|e| e.name == 'c' ? 'text' : e } # insert a text
214
+ ok("<a><b/>text</a>", h2)
215
+
216
+ h2 = h.replace('nosuch') {|e| nil } # no effect
217
+ ok("<a><b/><c/></a>", h2)
218
+
219
+ h2 = h.replace('b') {|e| e } # no effect
220
+ ok("<a><b/><c/></a>", h2)
221
+
222
+ h2 = h.replace('b') {|e| nil } # delete it
223
+ ok("<a><c/></a>", h2)
224
+
225
+ h2 = h.replace('b') {|e| 'text' } # insert a text
226
+ ok("<a>text<c/></a>", h2)
227
+
228
+ h2 = h.replace('b') {|e| g.d } # insert a element
229
+ ok("<a><d/><c/></a>", h2)
230
+
231
+ h2 = h.replace('b') {|e| g.d{'text'} } # insert a element with text
232
+ ok("<a><d>text</d><c/></a>", h2)
233
+
234
+ h = HTree("<p><span id='a'/><span id='b'/></p>")
235
+
236
+ h2 = h.replace('span'){|e| e.get_attr('id') } # insert the id as text
237
+ ok("<p>ab</p>", h2)
238
+
239
+ h2 = h.replace('span'){|e| e.get_attr('id') == 'b' ? e : nil }
240
+ ok('<p><span id='b'/></p>', h2)
241
+
242
+ h = HTree("<h2/><h3/><h4/><h5/><h6/>")
243
+
244
+ h2 = h.replace('h3', 'h4') {|e| g.make(e.name){ e.name } } # insert a text
245
+ ok("<h2/><h3>h3</h3><h4>h4</h4><h5/><h6/>", h2)
246
+
247
+ h2 = h.replace {|e| e.name == 'h5' ? 'text' : e } # insert a text
248
+ ok("<h2/><h3/><h4/>text<h6/>", h2)
249
+
250
+ h2 = h.replace('h4') {|e| [g.h3{'h'}, g.hr] } #
251
+ ok("<h2/><h3/><h3>h</h3><hr/><h5/><h6/>", h2)
252
+
253
+ h = HTree("<span></span>")
254
+ h2 = h.each_tag('span'){|e| [g.h3{'h'}, g.hr] }
255
+ ok("<h3>h</h3><hr/>", h2)
256
+
257
+ h2 = h.each_tag('span'){|e|
258
+ [g.h3{'h3'}, g.ul{g.li{g.a('href'=>'1.html'){'1'}}}]
259
+ }
260
+ ok("<h3>h3</h3><ul><li><a href=\"1.html\">1</a></li></ul>", h2)
261
+ end
262
+ end
263
+ end