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,157 @@
1
+ #
2
+ # Copyright (C) 2002-2004 Satoru Takabayashi <satoru@namazu.org>
3
+ # Copyright (C) 2003-2006 Kouichirou Eto
4
+ # All rights reserved.
5
+ # This is free software with ABSOLUTELY NO WARRANTY.
6
+ #
7
+ # You can redistribute it and/or modify it under the terms of
8
+ # the GNU General Public License version 2.
9
+ #
10
+
11
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
12
+ require 'qwik/mail'
13
+ require 'qwik/config'
14
+ require 'qwik/ml-gettext'
15
+ require 'qwik/ml-exception'
16
+ require 'qwik/ml-generator'
17
+ require 'qwik/mailaddress'
18
+
19
+ require 'qwik/util-basic'
20
+ require 'qwik/util-safe'
21
+
22
+ require 'qwik/group-config'
23
+ require 'qwik/group-cond'
24
+ require 'qwik/group-member'
25
+
26
+ require 'qwik/group-site'
27
+ require 'qwik/group-sweep'
28
+ require 'qwik/group-mail'
29
+ require 'qwik/group-sendmail'
30
+ require 'qwik/group-confirm'
31
+
32
+ module QuickML
33
+ class Group
34
+ include GetText
35
+
36
+ # ============================== initialize
37
+ def initialize (config, address, creator = nil, message_charset = nil)
38
+ @config = config
39
+ @address = address
40
+ @name, domain = Group.get_name(@address)
41
+ @return_address = Group.generate_return_address(@address,
42
+ @config.use_qmail_verp)
43
+
44
+ # init_db
45
+ @db = GroupDB.new(@config.sites_dir, @name)
46
+ init_site # initialize for GroupSite
47
+ @db.set_site(@site)
48
+
49
+ @added_members = []
50
+
51
+ @logger = @config.logger
52
+ @catalog = @config.catalog
53
+
54
+ init_group_config
55
+ init_members
56
+ init_count
57
+ init_charset
58
+
59
+ @message_charset = message_charset || @charset
60
+ @logger.log "[#{@name}]: New ML by #{creator}" if newly_created?
61
+ end
62
+
63
+ attr_reader :name
64
+ attr_reader :address
65
+ attr_reader :return_address
66
+ attr_reader :count
67
+ attr_reader :charset
68
+
69
+ def close_dummy
70
+ @logger.log("[#{@name}]: ML will be closed")
71
+ end
72
+
73
+ def close
74
+ @db.delete(:Members)
75
+ @db.delete(:Count)
76
+ @db.delete(:Alerted)
77
+ @db.delete(:Charset)
78
+ @db.delete(:Config)
79
+ @db.delete(:WaitingMembers)
80
+ @db.delete(:WaitingMessage)
81
+ @logger.log("[#{@name}]: ML Closed")
82
+ end
83
+
84
+ private
85
+
86
+ def self.get_name(address)
87
+ raise InvalidMLName if /@.*@/ =~ address
88
+ name, host = address.split('@')
89
+ raise InvalidMLName if ! valid_name?(name)
90
+ return name, host
91
+ end
92
+
93
+ def self.valid_name? (name)
94
+ # Do not allow '_' and '.' for the name.
95
+ return /\A[0-9a-zA-Z-]+\z/ =~ name
96
+ end
97
+
98
+ def self.generate_return_address(address, use_qmail_verp = false)
99
+ name, domain = Group.get_name(address)
100
+
101
+ # e.g. <foo=return=@quickml.com-@[]>
102
+ return "#{name}=return=@#{domain}-@[]" if use_qmail_verp
103
+
104
+ # e.g. <foo=return@quickml.com>
105
+ return "#{name}=return@#{domain}"
106
+ end
107
+ end
108
+ end
109
+
110
+ if $0 == __FILE__
111
+ require 'qwik/test-module-ml'
112
+ $test = true
113
+ end
114
+
115
+ if defined?($test) && $test
116
+ class TestGroup < Test::Unit::TestCase
117
+ include TestModuleML
118
+
119
+ def setup_group
120
+ return QuickML::Group.new(@ml_config, 'test@example.com')
121
+ end
122
+
123
+ def test_class_method
124
+ c = QuickML::Group
125
+
126
+ # test_get_name
127
+ ok_eq(["test", "example.com"], c.get_name('test@example.com'))
128
+
129
+ # test_vaild_name
130
+ ok_eq(true, !!c.valid_name?('t'))
131
+ ok_eq(true, !!c.valid_name?('t-t'))
132
+ ok_eq(false, !!c.valid_name?('t_t'))
133
+ ok_eq(false, !!c.valid_name?('t.t'))
134
+ ok_eq(false, !!c.valid_name?('test@example.com'))
135
+ ok_eq(false, !!c.valid_name?('test@qwik@jp'))
136
+ ok_eq(true, !!c.valid_name?('test'))
137
+ ok_eq(false, !!c.valid_name?('te.st'))
138
+
139
+ # test_generate_return_address
140
+ ok_eq("test=return@example.com",
141
+ c.generate_return_address('test@example.com'))
142
+ ok_eq("test=return=@example.com-@[]",
143
+ c.generate_return_address('test@example.com', true))
144
+ end
145
+
146
+ def test_all
147
+ group = setup_group
148
+
149
+ # test_attr
150
+ ok_eq('test', group.name)
151
+ ok_eq('test@example.com', group.address)
152
+ ok_eq("test=return@example.com", group.return_address)
153
+ ok_eq(0, group.count)
154
+ ok_eq(nil, group.charset)
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,6 @@
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
+ dir = File.expand_path(File.dirname(__FILE__) + '/../../lib')
6
+ $LOAD_PATH.unshift(dir) if !$LOAD_PATH.include?(dir)
@@ -0,0 +1,104 @@
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
+ module HtmlGeneratorUnit
6
+ def a(arg=[], title=nil, &block)
7
+ if arg.kind_of?(String)
8
+ ha = {:href=>arg}
9
+ ha.update(:title=>title) if title
10
+ return make(:a, ha, &block)
11
+ end
12
+ make(:a, arg, &block)
13
+ end
14
+
15
+ def img(src='', alt='')
16
+ make(:img, {:src=>src, :alt=>alt})
17
+ end
18
+
19
+ def text(name='', value=nil, size=nil, maxsize=nil)
20
+ hash = {:name=>name, :value=>value, :size=>size, :maxsize=>maxsize}
21
+ hash.delete_if {|k, v| v.nil? }
22
+ make(:input, hash)
23
+ end
24
+
25
+ def password(name='', value=nil, size=nil)
26
+ hash = {:type=>'password', :name=>name, :value=>value, :size=>size}
27
+ hash.delete_if {|k, v| v.nil? }
28
+ make(:input, hash)
29
+ end
30
+
31
+ def form(a=nil, b=nil, c=nil, &block)
32
+ ar = []
33
+ if a.is_a? Hash
34
+ ar << a
35
+ else
36
+ ar << {:method=>a} if a
37
+ ar << {:action=>b} if b
38
+ ar << {:enctype=>c} if c
39
+ end
40
+ make(:form, ar, &block)
41
+ end
42
+
43
+ def hidden(a='', b=nil)
44
+ ar = []
45
+ if a.is_a? Hash
46
+ ar << a
47
+ else
48
+ ar << {:type=>'hidden'}
49
+ ar << {:name=>a}
50
+ ar << {:value=>b} if b
51
+ end
52
+ make(:input, ar)
53
+ end
54
+
55
+ def select(name='', *args)
56
+ ar = []
57
+ args.each {|arg|
58
+ ar << make(:option, {:name=>arg}){arg}
59
+ }
60
+ make(:select, {:name=>name}){ar}
61
+ end
62
+
63
+ def textarea(name='', cols=nil, rows=nil, &block)
64
+ hash = {:name=>name, :cols=>cols, :rows=>rows}
65
+ hash.delete_if {|k, v| v.nil? }
66
+ make(:textarea, hash){
67
+ block.call
68
+ }
69
+ end
70
+
71
+ def submit(value=nil, name=nil)
72
+ hash = {:type=>'submit', :name=>name, :value=>value}
73
+ hash.delete_if {|k, v| v.nil? }
74
+ make(:input, hash)
75
+ end
76
+
77
+ def radio(a='', b=nil, c=nil)
78
+ ar = []
79
+ if a.is_a? Hash
80
+ a.update(:type=>'radio')
81
+ ar << a
82
+ else
83
+ ar << {:type=>'radio'}
84
+ ar << {:name=>a}
85
+ ar << {:value=>b} if b
86
+ ar << {:checkd=>'checkd'} if c
87
+ end
88
+ make(:input, ar)
89
+ end
90
+
91
+ def contenttype(content='')
92
+ make(:meta, {'http-equiv'=>'Content-Type', :content=>content})
93
+ end
94
+
95
+ def stylesheet(url='', media=nil)
96
+ hash = {:rel=>'stylesheet', :type=>'text/css', :href=>url, :media=>media}
97
+ hash.delete_if {|k, v| v.nil? }
98
+ make(:link, hash)
99
+ end
100
+
101
+ def refresh(sec=0, url='')
102
+ make(:meta, {'http-equiv'=>'Refresh', :content=>"#{sec}; url=#{url}"})
103
+ end
104
+ end
@@ -0,0 +1,148 @@
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-to-wabisabi'
10
+ require 'qwik/wabisabi-template'
11
+ require 'qwik/util-string'
12
+
13
+ module Qwik
14
+ class HtmlToWabisabi
15
+ def self.parse(str)
16
+ html = "<html>"+str+"</html>"
17
+ html = html.normalize_newline
18
+
19
+ htree = HTree(html)
20
+ first_child = htree.children[0]
21
+ wabisabi = first_child.to_wabisabi
22
+ wabisabi = wabisabi.inside
23
+ return wabisabi
24
+ end
25
+ end
26
+ end
27
+
28
+ if $0 == __FILE__
29
+ require 'qwik/testunit'
30
+ $test = true
31
+ end
32
+
33
+ if defined?($test) && $test
34
+ class TestHtmlToWabisabi < Test::Unit::TestCase
35
+ def ok(e, s)
36
+ ok_eq(e, Qwik::HtmlToWabisabi.parse(s))
37
+ end
38
+
39
+ def test_ref
40
+ #ok(["\240"], "&nbsp;")
41
+ #ok(["?"], "&nbsp;")
42
+ ok(["<"], "&lt;")
43
+ ok([">"], "&gt;")
44
+ end
45
+
46
+ def test_html_parser
47
+ ok([], '')
48
+ ok(['a'], 'a')
49
+
50
+ # Div element can contain another div element.
51
+ ok([[:div, 't1', [:div, 't2']]], "<div>t1<div>t2")
52
+
53
+ # Span element can not contain div element.
54
+ ok([[:span, 't1'], [:div, 't2']], "<span>t1<div>t2")
55
+
56
+ # Fix the order.
57
+ ok([[:b, [:i, 't']]], "<b><i>t</i></b>")
58
+
59
+ # You can use incomplete html also.
60
+ ok([[:ul, [:li, 't1'], [:li, 't2']]], "<ul><li>t1<li>t2")
61
+
62
+ # test_long_html
63
+ html = <<'EOT'
64
+ <H2>書式一覧簡易版</H2>
65
+ <P>詳細な説明は<A href="TextFormat.html">TextFormat</A>をごらんください。</P>
66
+ <H3>見出し2</H3>
67
+ <H4>見出し3</H4>
68
+ <H5>見出し4</H5>
69
+ <H6>見出し5</H6>
70
+ <UL>
71
+ <LI>箇条書レベル1
72
+ <UL>
73
+ <LI>箇条書レベル2
74
+ <UL>
75
+ <LI>箇条書レベル3</LI></UL></LI></UL></LI></UL>
76
+ <OL>
77
+ <LI>順序リスト1
78
+ <OL>
79
+ <LI>順序リスト2
80
+ <OL>
81
+ <LI>順序リスト3</LI></OL></LI></OL></LI></OL><PRE>整形済みテキスト。</PRE>
82
+ <BLOCKQUOTE>
83
+ <P>引用。</P></BLOCKQUOTE>
84
+ <DL>
85
+ <DT>Wiki
86
+ <DD>書き込み可能なWebページ
87
+ <DT>QuickML
88
+ <DD>簡単に作れるメーリングリストシステム</DD></DL>
89
+ <TABLE>
90
+ <TBODY>
91
+ <TR>
92
+ <TD>項目1-1</TD>
93
+ <TD>項目1-2</TD>
94
+ <TD>項目1-3</TD></TR>
95
+ <TR>
96
+ <TD>項目2-1</TD>
97
+ <TD>項目2-2</TD>
98
+ <TD>項目2-3</TD></TR></TBODY></TABLE>
99
+ <P><EM>強調</EM>、<STRONG>さらに強調</STRONG>、<DEL>取り消し線</DEL> <IMG alt=new src="http://example.com/.theme/new.png"> <A href="FrontPage.html">FrontPage</A> <A href="http://www.yahoo.co.jp/">Yahoo!</A></P><PLUGIN param='1' method='recent'></PLUGIN>
100
+ EOT
101
+
102
+ result = [[:h2, "書式一覧簡易版"], "\n",
103
+ [:p, "詳細な説明は",
104
+ [:a, {:href=>'TextFormat.html'}, 'TextFormat'],
105
+ "をごらんください。"], "\n",
106
+ [:h3, "見出し2"], "\n",
107
+ [:h4, "見出し3"], "\n",
108
+ [:h5, "見出し4"], "\n",
109
+ [:h6, "見出し5"], "\n",
110
+ [:ul, "\n",
111
+ [:li, "箇条書レベル1\n",
112
+ [:ul, "\n",
113
+ [:li, "箇条書レベル2\n",
114
+ [:ul, "\n", [:li, "箇条書レベル3"]]]]]], "\n",
115
+ [:ol, "\n",
116
+ [:li, "順序リスト1\n",
117
+ [:ol, "\n", [:li, "順序リスト2\n",
118
+ [:ol, "\n", [:li, "順序リスト3"]]]]]],
119
+ [:pre, "整形済みテキスト。"], "\n",
120
+ [:blockquote, "\n", [:p, "引用。"]], "\n",
121
+ [:dl, "\n",
122
+ [:dt, "Wiki\n"],
123
+ [:dd, '書き込み可能なWebページ'+"\n"],
124
+ [:dt, "QuickML\n"],
125
+ [:dd, "簡単に作れるメーリングリストシステム"]], "\n",
126
+ [:table, "\n",
127
+ [:tbody, "\n",
128
+ [:tr, "\n",
129
+ [:td, "項目1-1"], "\n",
130
+ [:td, "項目1-2"], "\n",
131
+ [:td, "項目1-3"]], "\n",
132
+ [:tr, "\n",
133
+ [:td, "項目2-1"], "\n",
134
+ [:td, "項目2-2"], "\n",
135
+ [:td, "項目2-3"]]]], "\n",
136
+ [:p,
137
+ [:em, "強調"], "、",
138
+ [:strong, "さらに強調"], "、",
139
+ [:del, "取り消し線"], ' ',
140
+ [:img, {:alt=>'new', :src=>'http://example.com/.theme/new.png'}], ' ',
141
+ [:a, {:href=>'FrontPage.html'}, 'FrontPage'], ' ',
142
+ [:a, {:href=>'http://www.yahoo.co.jp/'}, "Yahoo!"]],
143
+ [:plugin, {:method=>'recent', :param=>'1'}], "\n"]
144
+
145
+ ok(result, html)
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,87 @@
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
+ begin
7
+ require 'diff'
8
+ rescue LoadError
9
+ require 'algorithm/diff'
10
+ end
11
+
12
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
13
+ require 'qwik/util-string'
14
+ require 'qwik/htree-generator'
15
+
16
+ module Qwik
17
+ class HTreeDiffHtmlGenerator
18
+ def initialize(s1, s2)
19
+ @s1 = s1.gsub(/\r/, "")
20
+ @s2 = s2.gsub(/\r/, "")
21
+ end
22
+
23
+ def to_txt
24
+ a1 = @s1.split("\n").collect! {|s| "#{s}\n"}
25
+ a2 = @s2.split("\n").collect! {|s| "#{s}\n"}
26
+ Diff.diff(a1, a2)
27
+ end
28
+
29
+ def to_xml
30
+ g = HTree::Generator.new
31
+ src = @s1.split("\n").collect {|s| "#{s.escapeHTML}" }
32
+ si = 0
33
+ di = 0
34
+ e = []
35
+ to_txt.each {|action, position, elements|
36
+ case action
37
+ when :-
38
+ while si < position
39
+ e << HTree::Text.new(src[si])
40
+ e << g.br
41
+ si += 1
42
+ di += 1
43
+ end
44
+ si += elements.length
45
+ elements.each {|l|
46
+ e << g.del{l.chomp}
47
+ e << g.br
48
+ }
49
+ when :+
50
+ while di < position
51
+ e << HTree::Text.new(src[si])
52
+ e << g.br
53
+ si += 1
54
+ di += 1
55
+ end
56
+ di += elements.length
57
+ elements.each {|l|
58
+ e << g.ins{l.chomp}
59
+ e << g.br
60
+ }
61
+ end
62
+ }
63
+ while si < src.length
64
+ e << HTree::Text.new(src[si])
65
+ e << g.br
66
+ si += 1
67
+ end
68
+ e
69
+ end
70
+ end
71
+ end
72
+
73
+ if $0 == __FILE__
74
+ require 'qwik/testunit'
75
+ require 'qwik/htree-format-xml'
76
+ $test = true
77
+ end
78
+
79
+ if defined?($test) && $test
80
+ class TestHTreeDiffHtmlGenerator < Test::Unit::TestCase
81
+ def test_all
82
+ dhg = Qwik::HTreeDiffHtmlGenerator.new('a', 'b')
83
+ ok_eq([[:-, 0, ["a\n"]], [:+, 0, ["b\n"]]], dhg.to_txt)
84
+ ok_eq("[{elem <del> {text a}}, {emptyelem <br>}, {elem <ins> {text b}}, {emptyelem <br>}]", dhg.to_xml.inspect)
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,57 @@
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
+
10
+ module HTree
11
+ module Node
12
+ def format_xml(i=-1)
13
+ str = ''
14
+ display_xml(str)
15
+ str.gsub!(%r! xmlns=\"http://www.w3.org/1999/xhtml\"!, "")
16
+ str.gsub!(%r! xmlns=\"\"!, "")
17
+ if i < 0
18
+ str.gsub!(/\n>/, ">")
19
+ str.gsub!(/\n\/>/, "/>")
20
+ end
21
+ str
22
+ end
23
+ end
24
+ end
25
+
26
+ if $0 == __FILE__
27
+ require 'qwik/testunit'
28
+ $test = true
29
+ end
30
+
31
+ if defined?($test) && $test
32
+ class TestHTree_format_xml < Test::Unit::TestCase
33
+ def ok(e, s)
34
+ ok_eq(e, s.format_xml)
35
+ end
36
+
37
+ def test_all
38
+ # check_extract_text
39
+ e = HTree::Elem.new('a', 't')
40
+ ok("<a>t</a>", e)
41
+ ok_eq('t', e.extract_text.to_s)
42
+
43
+ e = HTree::Elem.new('b', 's', e, 'u')
44
+ ok("<b>s<a>t</a>u</b>", e)
45
+ ok_eq('stu', e.extract_text.to_s)
46
+
47
+ # test_htree_format_xml
48
+ e = HTree::Elem.new('a')
49
+ ok_eq("<a/>", e.format_xml)
50
+ ok_eq("<a\n/>", e.format_xml(0))
51
+
52
+ e = HTree::Text.new('a')
53
+ ok_eq('a', e.format_xml)
54
+ ok_eq('a', e.format_xml(0))
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,144 @@
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
+
10
+ module HTree
11
+ module GeneratorModule
12
+ def method_missing(symbol, *args, &block)
13
+ make(symbol, *args, &block)
14
+ end
15
+
16
+ def p(*args, &block)
17
+ make(:p, *args, &block)
18
+ end
19
+
20
+ def make(symbol, *args, &block)
21
+ ar = make_ar(symbol, *args, &block)
22
+ Elem.new(*ar)
23
+ end
24
+
25
+ def make_ar(symbol, *args, &block)
26
+ ar = []
27
+
28
+ ar << symbol.to_s.gsub(/_/, '-') # tag name
29
+
30
+ if 0 < args.length
31
+ a = add_args(args)
32
+ ar += a
33
+ end
34
+
35
+ if block
36
+ y = block.call
37
+ ar += add_elems(y)
38
+ end
39
+
40
+ ar
41
+ end
42
+
43
+ def add_args(args)
44
+ args.flatten.map {|arg|
45
+ symbol_to_hash(arg)
46
+ }
47
+ end
48
+
49
+ def add_elems(args)
50
+ return [] if args.nil?
51
+ return [args] unless args.kind_of? Array
52
+ ar = []
53
+ args.each {|a|
54
+ next if a.nil?
55
+ ar << a
56
+ }
57
+ ar = [''] if ar.empty?
58
+ ar
59
+ end
60
+
61
+ def symbol_to_hash(s)
62
+ h = {}
63
+ s.each {|k, v|
64
+ next if v.nil?
65
+ h[k.to_s] = v.to_s
66
+ }
67
+ h
68
+ end
69
+ end
70
+
71
+ class Generator; include GeneratorModule; end
72
+ end
73
+
74
+ if $0 == __FILE__
75
+ require 'qwik/testunit'
76
+ require 'qwik/htree-format-xml'
77
+ $test = true
78
+ end
79
+
80
+ if defined?($test) && $test
81
+ class TestHTreeGenerator < Test::Unit::TestCase
82
+ def ok(e, s)
83
+ ok_eq(e, s.format_xml)
84
+ end
85
+
86
+ def test_all
87
+ g = HTree::Generator.new
88
+
89
+ # test_htree_generator
90
+ ok("<p/>", g.p)
91
+ doc = HTree::Doc.new(g.p)
92
+ ok("<p/>", doc)
93
+ str = ''
94
+ doc.display_xml(str)
95
+ ok_eq("<p\n/>", str)
96
+
97
+ ok("<a/>", g.a)
98
+ ok("<b/>", g.b{})
99
+ ok("<b></b>", g.b{''})
100
+ ok('<img src='u'/>', g.img(:src=>'u'))
101
+ ok("<b>t</b>", g.b{'t'})
102
+ ok("<p><b>b</b></p>", g.p{g.b{'b'}})
103
+ ok("<p>t<p>b</p>t</p>", g.p{['t', g.p{'b'}, 't']})
104
+ ok('<a href='u'>t</a>', g.a(:href=>'u'){'t'})
105
+ ok('<font size='7'>t</font>', g.font(:size => 7){'t'})
106
+
107
+ # test_namespace
108
+ ok("<b>t</b>", g.make('b'){'t'})
109
+ ok("<n:b>t</n:b>", g.make("n:b"){'t'})
110
+ ok('<a href='u'>t</a>', g.make('a', :href=>'u'){'t'})
111
+
112
+ html = g.html {[
113
+ g.head {[
114
+ g.title {"タイトル"},
115
+ ]},
116
+ g.body {[
117
+ g.pre {[g.b {'world'}, 'hello']},
118
+ g.pre {['This is ', g.b{'bold'}, ' text.']},
119
+ g.pre {['This is ', g.i{'italic'}, ' text.']},
120
+ g.p {['This is ', g.a(:href=>'hoge'){'anchor'}, ' text.']},
121
+ ]}
122
+ ]}
123
+ ok("<html><head><title>タイトル</title></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></body></html>", html)
124
+
125
+ # test_with_underbar
126
+ ok("<ab/>", g.ab)
127
+ ok("<a-b/>", g.a_b)
128
+ ok("<a-b/>", g.make("a_b"))
129
+ ok("<a-b/>", g.make("a-b"))
130
+
131
+ # test_ordered_hash
132
+ ok("<a b=\"c\"/>", g.a({'b'=>'c'}))
133
+ ok("<a b=\"c\"/>", g.a([{'b'=>'c'}]))
134
+ ok("<a b=\"c\" d=\"e\"/>", g.a([{'b'=>'c'}, {'d'=>'e'}]))
135
+ ok("<a b=\"c\" d=\"e\"/>", g.a({'b'=>'c'}, {'d'=>'e'}))
136
+
137
+ # test_multi_attr
138
+ ok("<a href=\"h\" class=\"c\"/>",
139
+ g.make('a', {:href=>'h'}, {:class=>'c'}))
140
+ ok("<a class=\"c\" href=\"h\"/>",
141
+ g.make('a', {:class=>'c'}, {:href=>'h'}))
142
+ end
143
+ end
144
+ end