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,147 @@
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
+
14
+ module QuickML
15
+ class Mail
16
+ # Construct a mail from a mail string.
17
+ def read (string)
18
+ @bare = string || ''
19
+
20
+ header, body = @bare.split(/\n\n/, 2)
21
+ @body = body || ''
22
+
23
+ attr = nil
24
+ header.split("\n").each {|line|
25
+ line = line.xchomp
26
+ if /^(\S+):\s*(.*)/ =~ line
27
+ attr = $1
28
+ push_field(attr, $2)
29
+ elsif attr
30
+ concat_field(line)
31
+ end
32
+ }
33
+ @charset = Mail.get_charset(self['Content-Type'])
34
+ @content_type = Mail.get_content_type(self['Content-Type'])
35
+ end
36
+
37
+ def store_addresses
38
+ @mail_from = self.from
39
+ (self.collect_to + self.collect_cc).each {|addr|
40
+ self.add_recipient(addr)
41
+ }
42
+ end
43
+
44
+ # Create a new mail
45
+ def self.create
46
+ mail = Mail.new
47
+ mail.read(yield)
48
+ mail.store_addresses
49
+ return mail
50
+ end
51
+
52
+ # Generate a mail for test.
53
+ def self.generate
54
+ mail = Mail.new
55
+ mail.read(yield.set_sourcecode_charset.to_mail_charset)
56
+ mail.store_addresses
57
+ return mail
58
+ end
59
+
60
+ private
61
+
62
+ def push_field (key, value)
63
+ # Use Array for preserving order of the header
64
+ field = [key, value]
65
+ @header.push(field)
66
+ end
67
+
68
+ def concat_field (value)
69
+ lastfield = @header.last
70
+ @header.pop
71
+ push_field(lastfield.first, lastfield.last + "\n" + value)
72
+ end
73
+ end
74
+ end
75
+
76
+ if $0 == __FILE__
77
+ require 'qwik/testunit'
78
+ $test = true
79
+ end
80
+
81
+ if defined?($test) && $test
82
+ class TestMailGenerate < Test::Unit::TestCase
83
+ def test_all
84
+ str = 'Date: Mon, 3 Feb 2001 12:34:56 +0900
85
+ From: "Test User" <user@e.com>
86
+ To: "Test Mailing List" <test@example.com>
87
+ Subject: Re: [test:1] Test Mail
88
+
89
+ This is a test.
90
+ '
91
+ # test_read
92
+ mail = QuickML::Mail.new
93
+ mail.read(str)
94
+
95
+ # test_bare
96
+ ok_eq(str, mail.bare)
97
+
98
+ # test_body
99
+ ok_eq("This is a test.\n", mail.body)
100
+
101
+ # test_charset
102
+ ok_eq(nil, mail.charset)
103
+
104
+ # test_content_type
105
+ ok_eq(nil, mail.content_type)
106
+
107
+ # test_from
108
+ ok_eq('user@e.com', mail.from)
109
+
110
+ # test_header
111
+ header = nil
112
+ mail.instance_eval {
113
+ header = @header
114
+ }
115
+ ok_eq([['Date', 'Mon, 3 Feb 2001 12:34:56 +0900'],
116
+ ['From', "\"Test User\" <user@e.com>"],
117
+ ['To', "\"Test Mailing List\" <test@example.com>"],
118
+ ['Subject', 'Re: [test:1] Test Mail']],
119
+ header)
120
+ end
121
+
122
+ def test_create
123
+ str = 'Date: Mon, 3 Feb 2001 12:34:56 +0900
124
+ From: "Test User" <user@e.com>
125
+ To: "Test Mailing List" <test@example.com>
126
+ Subject: Re: [test:1] Test Mail
127
+
128
+
129
+ '
130
+ mail = QuickML::Mail.create { str }
131
+ ok_eq("\202\240\n", mail.body)
132
+ end
133
+
134
+ def test_generate
135
+ str = 'Date: Mon, 3 Feb 2001 12:34:56 +0900
136
+ From: "Test User" <user@e.com>
137
+ To: "Test Mailing List" <test@example.com>
138
+ Subject: Re: [test:1] Test Mail
139
+
140
+
141
+ '
142
+ mail = QuickML::Mail.generate { str }
143
+ ok_eq("\e$B$\"\e(B\n", mail.body)
144
+ end
145
+
146
+ end
147
+ end
@@ -0,0 +1,341 @@
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-parse'
13
+ require 'qwik/mail-header'
14
+ require 'qwik/mail-body'
15
+ require 'qwik/util-string'
16
+
17
+ module QuickML
18
+ class Mail
19
+ def initialize
20
+ @mail_from = nil
21
+ @recipients = []
22
+ @header = []
23
+ @body = ''
24
+ @charset = nil
25
+ @content_type = nil
26
+ @bare = nil
27
+ end
28
+
29
+ attr_accessor :mail_from
30
+ attr_reader :recipients
31
+ attr_accessor :body
32
+ attr_reader :charset
33
+ attr_reader :content_type
34
+ attr_accessor :bare
35
+ end
36
+ end
37
+
38
+ # TODO: Make special mode for Mr. Kaoru Misaki.
39
+ # Use the first line of the body as a subject.
40
+
41
+ if $0 == __FILE__
42
+ require 'qwik/testunit'
43
+ $test = true
44
+ end
45
+
46
+ if defined?($test) && $test
47
+ class TestMail < Test::Unit::TestCase
48
+ def gen_mail(&b)
49
+ return QuickML::Mail.generate(&b)
50
+ end
51
+
52
+ def test_basic
53
+ str = 'Date: Mon, 3 Feb 2001 12:34:56 +0900
54
+ From: "Test User" <user@e.com>
55
+ To: "Test Mailing List" <test@example.com>
56
+ Subject: Re: [test:1] Test Mail
57
+
58
+ This is a test.
59
+ '
60
+ mail = gen_mail { str }
61
+
62
+ # test_accessor
63
+ eq 'user@e.com', mail.mail_from
64
+ eq ['test@example.com'], mail.recipients
65
+ eq "This is a test.\n", mail.body
66
+ eq str, mail.bare
67
+
68
+ # test_to_s
69
+ eq str, mail.to_s
70
+
71
+ # test_looping?
72
+ eq false, mail.looping?
73
+
74
+ # test_from
75
+ eq 'user@e.com', mail.from
76
+
77
+ # test_collect
78
+ eq [], mail.collect_cc
79
+ eq ['test@example.com'], mail.collect_to
80
+
81
+ # test_decoded_body
82
+ eq "This is a test.\n", mail.decoded_body
83
+
84
+ # test_get_body
85
+ eq "This is a test.\n", mail.get_body
86
+
87
+ # test_parts
88
+ eq ["This is a test.\n"], mail.parts
89
+
90
+ eq nil, mail.filename # test_filename
91
+ assert(['test@example.com'], mail.valid?) # test_valid?
92
+ eq nil, mail.boundary # test_boundary
93
+ eq false, mail.multipart? # test_multipart?
94
+
95
+ # test_each_part
96
+ mail.each_part {|mail|
97
+ assert_instance_of(QuickML::Mail, mail)
98
+ }
99
+ end
100
+
101
+ def test_multipart
102
+ mail = gen_mail {
103
+ "Date: Mon, 3 Feb 2001 12:34:56 +0900
104
+ From: Test User <user@e.com>
105
+ To: test@example.com
106
+ Cc: guest@example.com
107
+ Subject: multipart test
108
+ MIME-Version: 1.0
109
+ Content-Type: multipart/mixed; boundary=\"boundary\"
110
+ Content-Transfer-Encoding: 7bit
111
+
112
+ --boundary
113
+ Content-Type: text/plain; charset=\"ascii\"
114
+ Content-Transfer-Encoding: 7bit
115
+
116
+ body1
117
+
118
+ --boundary
119
+ Content-Type: text/plain; charset=\"ascii\"
120
+ Content-Transfer-Encoding: 7bit
121
+
122
+ body2
123
+
124
+ --boundary--
125
+ " }
126
+
127
+ # test_accessor
128
+ eq ['test@example.com', 'guest@example.com'], mail.recipients
129
+
130
+ # test_collect
131
+ eq ['guest@example.com'], mail.collect_cc
132
+
133
+ # test_get_body
134
+ eq "body1\nbody2\n", mail.get_body
135
+
136
+ # test_parts
137
+ eq ["Content-Type: text/plain; charset=\"ascii\"
138
+ Content-Transfer-Encoding: 7bit
139
+
140
+ body1
141
+
142
+ ", "Content-Type: text/plain; charset=\"ascii\"
143
+ Content-Transfer-Encoding: 7bit
144
+
145
+ body2
146
+
147
+ "], mail.parts
148
+
149
+ # test_parts
150
+ mail0 = QuickML::Mail.new
151
+ mail0.read(mail.parts[0])
152
+ eq "body1\n\n", mail0.body
153
+
154
+ mail1 = QuickML::Mail.new
155
+ mail1.read(mail.parts[1])
156
+ eq "body2\n\n", mail1.body
157
+
158
+ # test_multipart
159
+ eq true, mail.multipart? # test_multipart?
160
+ eq 'boundary', mail.boundary # test_boundary
161
+
162
+ # test_multipart_alternative
163
+ mail['Content-Type'] = "multipart/alternative; boundary=\"b\""
164
+ mail.instance_eval {
165
+ @content_type = QuickML::Mail.get_content_type(self['Content-Type'])
166
+ }
167
+ eq 'multipart/alternative', mail.content_type
168
+ eq "multipart/alternative; boundary=\"b\"",
169
+ mail['Content-Type']
170
+ eq true, mail.multipart? # test_multipart?
171
+ eq 'b', mail.boundary # test_boundary
172
+ end
173
+
174
+ def test_mail_with_image
175
+ mail = gen_mail {
176
+ "Date: Mon, 3 Feb 2001 12:34:56 +0900
177
+ From: Test User <user@e.com>
178
+ To: test@example.com
179
+ Cc: guest@example.com
180
+ Subject: Attach Test
181
+ MIME-Version: 1.0
182
+ Content-Type: multipart/mixed; boundary=\"------_410DDC04C7AD046D3600_MULTIPART_MIXED_\"
183
+ Content-Transfer-Encoding: 7bit
184
+
185
+ --------_410DDC04C7AD046D3600_MULTIPART_MIXED_
186
+ Content-Type: text/plain; charset='ascii'
187
+ Content-Transfer-Encoding: 7bit
188
+
189
+ Test with image.
190
+
191
+ --------_410DDC04C7AD046D3600_MULTIPART_MIXED_
192
+ Content-Type: image/png; name=\"1x1.png\"
193
+ Content-Disposition: attachment;
194
+ filename=\"1x1.png\"
195
+ Content-Transfer-Encoding: base64
196
+
197
+ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4//8/AAX+Av4zEpUU
198
+ AAAAAElFTkSuQmCC
199
+
200
+ --------_410DDC04C7AD046D3600_MULTIPART_MIXED_--
201
+ " }
202
+
203
+ # test_get_body
204
+ eq "Test with image.\n", mail.get_body
205
+
206
+ # test_parts
207
+ mail0 = QuickML::Mail.new
208
+ mail0.read(mail.parts[0])
209
+ eq 'text/plain', mail0.content_type
210
+ eq "Test with image.\n\n", mail0.body
211
+
212
+ mail1 = QuickML::Mail.new
213
+ mail1.read(mail.parts[1])
214
+ eq 'image/png', mail1.content_type
215
+ eq "attachment;
216
+ filename=\"1x1.png\"",
217
+ mail1['Content-Disposition']
218
+ eq '1x1.png', mail1.filename
219
+ eq 'base64', mail1['Content-Transfer-Encoding']
220
+ eq "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4//8/AAX+Av4zEpUU\nAAAAAElFTkSuQmCC\n\n", mail1.body
221
+ eq "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\000\001\000\000\000\001\010\002\000\000\000\220wS\336\000\000\000\fIDATx\332c\370\377\377?\000\005\376\002\3763\022\225\024\000\000\000\000IEND\256B`\202", mail1.decoded_body
222
+
223
+ eq nil, mail.parts[2]
224
+ end
225
+
226
+ def test_inline_disposition
227
+ mail = gen_mail {
228
+ "Date: Mon, 3 Feb 2001 12:34:56 +0900
229
+ From: user@e.com
230
+ To: test@example.com
231
+ Subject: This is an inline test.
232
+ MIME-Version: 1.0 (generated by SEMI 1.14.4 - Hosorogi)
233
+ Content-Type: multipart/mixed;
234
+ boundary=\"Multipart_Thu_Apr_14_21:22:30_2005-1\"
235
+
236
+ --Multipart_Thu_Apr_14_21:22:30_2005-1
237
+ Content-Type: text/plain; charset=ISO-2022-JP
238
+
239
+ I attached sample.jpg.
240
+ --Multipart_Thu_Apr_14_21:22:30_2005-1
241
+ Content-Type: image/jpeg
242
+ Content-Disposition: inline; filename=\"sample.jpg\"
243
+ Content-Transfer-Encoding: base64
244
+
245
+ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4//8/AAX+Av4zEpUU
246
+ AAAAAElFTkSuQmCC
247
+
248
+ " }
249
+ mail1 = QuickML::Mail.new
250
+ mail1.read(mail.parts[1])
251
+ eq "inline; filename=\"sample.jpg\"", mail1['Content-Disposition']
252
+ eq 'sample.jpg', mail1.filename
253
+ end
254
+
255
+ def test_apple_mail
256
+ mail = gen_mail {
257
+ "Date: Mon, 3 Feb 2001 12:34:56 +0900
258
+ From: Test User <user@e.com>
259
+ To: test@example.com
260
+ Cc: guest@example.com
261
+ Subject: Apple Mail
262
+ Mime-Version: 1.0 (Apple Message framework v623)
263
+ Content-Type: multipart/mixed; boundary=Apple-Mail-1-134582006
264
+
265
+ --Apple-Mail-1-134582006
266
+ Content-Transfer-Encoding: 7bit
267
+ Content-Type: text/plain;
268
+ charset=ISO-2022-JP;
269
+ format=flowed
270
+
271
+ I attach a file using Apple Mail.
272
+ --Apple-Mail-1-134582006
273
+ Content-Transfer-Encoding: base64
274
+ Content-Type: application/zip;
275
+ x-mac-type=5A495020;
276
+ x-unix-mode=0755;
277
+ x-mac-creator=53495421;
278
+ name='sounds.zip'
279
+ Content-Disposition: attachment;
280
+ filename=sounds.zip
281
+
282
+ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4//8/AAX+Av4zEpUU
283
+ AAAAAElFTkSuQmCC
284
+
285
+ --Apple-Mail-1-134582006--
286
+ " }
287
+
288
+ # test_get_body
289
+ eq "I attach a file using Apple Mail.\n", mail.get_body
290
+
291
+ # test_parts
292
+ mail0 = QuickML::Mail.new
293
+ mail0.read(mail.parts[0])
294
+ eq 'text/plain', mail0.content_type
295
+ eq "I attach a file using Apple Mail.\n", mail0.body
296
+
297
+ mail1 = QuickML::Mail.new
298
+ mail1.read(mail.parts[1])
299
+ eq 'application/zip', mail1.content_type
300
+ eq "attachment;\n\tfilename=sounds.zip", mail1['Content-Disposition']
301
+ eq 'sounds.zip', mail1.filename
302
+ end
303
+ end
304
+
305
+ class TestMLMailJapanese < Test::Unit::TestCase
306
+ def gen_mail(&b)
307
+ return QuickML::Mail.generate(&b)
308
+ end
309
+
310
+ def test_jmail
311
+ str =
312
+ 'Date: Mon, 3 Feb 2001 12:34:56 +0900
313
+ From: "Test User" <user@e.com>
314
+ To: "Test Mailing List" <test@example.com>
315
+ Subject: Re: [test:1] テスト
316
+
317
+ これはテストです。
318
+ '
319
+ mail = gen_mail { str }
320
+ eq "これはテストです。\n".set_sourcecode_charset.to_mail_charset, mail.body
321
+ eq str.set_sourcecode_charset.to_mail_charset, mail.bare
322
+ eq "Re: [test:1] テスト ".set_sourcecode_charset.to_mail_charset, mail['Subject']
323
+ eq "これはテストです。\n".set_sourcecode_charset.to_mail_charset, mail.get_body
324
+ end
325
+
326
+ def test_for_confirm
327
+ str = 'To: test@example.com
328
+ From: bob@example.net
329
+ Subject: test
330
+
331
+ test
332
+ '
333
+ mail = gen_mail { str }
334
+
335
+ # test_accessor
336
+ eq 'bob@example.net', mail.mail_from
337
+ eq ['test@example.com'], mail.recipients
338
+ eq "test\n", mail.body
339
+ end
340
+ end
341
+ end
@@ -0,0 +1,83 @@
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.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ class MailAddress
8
+ def self.valid?(mail)
9
+ return false if mail.nil?
10
+ return false unless /\A([0-9a-zA-Z_.+-]+)@([0-9a-zA-Z_.-]+)\z/ =~ mail
11
+ login_part = $1
12
+ domain_part = $2
13
+ return false if domain_part.include?('..')
14
+ #return false if mail.include?('..')
15
+ return true
16
+ end
17
+
18
+ def self.obfuscate(address)
19
+ return address.sub(/(@.).*/, '\1...')
20
+ end
21
+
22
+ def self.obfuscate_str(str)
23
+ str.gsub(/([0-9a-zA-Z_.-]+)@([0-9a-zA-Z_.-]+)\.([0-9a-zA-Z_-]+)/) {|mail|
24
+ MailAddress.obfuscate(mail)
25
+ }
26
+ end
27
+
28
+ # foo@ExampLE.CoM => foo@example.com
29
+ # 'foo'@example.com => foo@example.com
30
+ def self.normalize(mail)
31
+ name, domain = mail.split('@')
32
+ return mail if domain.nil?
33
+ name.gsub!(/^"(.*)"$/, '\1')
34
+ return "#{name}@#{domain.downcase}"
35
+ end
36
+ end
37
+
38
+ if $0 == __FILE__
39
+ require 'qwik/testunit'
40
+ $test = true
41
+ end
42
+
43
+ if defined?($test) && $test
44
+ class TestMailAddress < Test::Unit::TestCase
45
+ def test_normalize
46
+ c = MailAddress
47
+ assert_equal 'foo@example.com', c.normalize('foo@example.com')
48
+ assert_equal 'foo@example.com', c.normalize('foo@ExampLE.CoM')
49
+ assert_equal 'foo@example.com', c.normalize("\"foo\"@ExampLE.CoM")
50
+ # Do not normalize name part.
51
+ assert_equal 'Foo@example.com', c.normalize('Foo@example.com')
52
+ end
53
+
54
+ def test_valid?
55
+ c = MailAddress
56
+ assert_equal true, c.valid?('user@example.com')
57
+ assert_equal true, c.valid?('valid+@example.com')
58
+ assert_equal true, c.valid?('+valid@example.com')
59
+ assert_equal true, c.valid?('_@example.com')
60
+ assert_equal true, c.valid?('us..er@example.com')
61
+ # Make this address valid. System uses this address for local account.
62
+ assert_equal true, c.valid?('user@localdomain')
63
+ assert_equal false, c.valid?(nil)
64
+ assert_equal false, c.valid?('')
65
+ assert_equal false, c.valid?('invalid!@example.com')
66
+ assert_equal false, c.valid?('invalid')
67
+ assert_equal false, c.valid?('user@example..com')
68
+ end
69
+
70
+ def test_obfuscate
71
+ c = MailAddress
72
+ assert_equal 'user@e...', c.obfuscate('user@example.com')
73
+ assert_equal '2006@e...', c.obfuscate('2006@example.com')
74
+ end
75
+
76
+ def test_obfuscate_str
77
+ c = MailAddress
78
+ assert_equal 'user@e...', c.obfuscate_str('user@example.com')
79
+ assert_equal 'a t@e... b s@f... c',
80
+ c.obfuscate_str('a t@e.com b s@f.com c')
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,81 @@
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.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/mdlb-sample'
7
+ require 'qwik/htree-to-wabisabi'
8
+ require 'qwik/util-charset'
9
+
10
+ # $KCODE = 's'
11
+
12
+ module Modulobe
13
+ class Model
14
+ def initialize(xml)
15
+ @wabisabi = Model.parse_xml(xml)
16
+ @speed = Model.extract_world(@wabisabi)
17
+ @name, @author, @comment = Model.extract_info(@wabisabi)
18
+ end
19
+
20
+ def self.parse_xml(xml)
21
+ xml ||= ''
22
+ return HTree(xml).to_wabisabi
23
+ end
24
+
25
+ def self.extract_world(wabisabi)
26
+ world = wabisabi.get_path('//world')
27
+ return nil if world.nil?
28
+ speed = world.get_path('/speed').text
29
+ return speed
30
+ end
31
+
32
+ def self.extract_info(wabisabi)
33
+ info = wabisabi.get_path('//model/info')
34
+ return nil if info.nil?
35
+ name = info.get_path('/name').text.set_xml_charset.to_page_charset
36
+ author = info.get_path('/author').text.set_xml_charset.to_page_charset
37
+ comment = info.get_path('/comment').text.set_xml_charset.to_page_charset
38
+ return name, author, comment
39
+ end
40
+ end
41
+ end
42
+
43
+ if $0 == __FILE__
44
+ require 'qwik/testunit'
45
+ $test = true
46
+ end
47
+
48
+ if defined?($test) && $test
49
+ class TestMdlbModel < Test::Unit::TestCase
50
+ def test_all
51
+ c = Modulobe::Model
52
+
53
+ xml = Modulobe::Sample::MODEL1
54
+
55
+ # test_parse_xml
56
+ ok_eq([], c.parse_xml(''))
57
+ w = c.parse_xml(xml)
58
+ ok_eq([:'?xml', '1.0', 'utf-8'], w[0])
59
+
60
+ # test_extract_world
61
+ ok_eq('0', c.extract_world(w))
62
+
63
+ # test_extract_info
64
+ ok_eq(nil, c.extract_info([]))
65
+ ok_eq(['test model', 'test author', "test comment.\n"],
66
+ c.extract_info(w))
67
+
68
+ xml = Modulobe::Sample::MODEL_CORE
69
+ w = c.parse_xml(xml)
70
+ ok_eq(['', '', ''], c.extract_info(w))
71
+
72
+ xml = Modulobe::Sample::MODEL_WITH_NAME
73
+ w = c.parse_xml(xml)
74
+ ok_eq(['n', 'a', "c\n"], c.extract_info(w))
75
+
76
+ xml = Modulobe::Sample::MODEL_WITH_JNAME
77
+ w = c.parse_xml(xml)
78
+ ok_eq(["\202\240 ", "\202\242 ", "\202\244\n"], c.extract_info(w))
79
+ end
80
+ end
81
+ end