qwikdoc 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +2 -0
  3. data/CHANGES +3 -0
  4. data/COPYING +340 -0
  5. data/Gemfile +3 -0
  6. data/README.md +10 -0
  7. data/Rakefile +10 -0
  8. data/TextFormattingRules +137 -0
  9. data/TextFormattingRules.ja +143 -0
  10. data/bin/qwikdoc +34 -0
  11. data/lib/qwik_doc.rb +15 -0
  12. data/lib/qwik_doc/hack.rb +184 -0
  13. data/qwikdoc.gemspec +26 -0
  14. data/spec/qwik_doc_spec.rb +305 -0
  15. data/spec/spec_helper.rb +12 -0
  16. data/vendor/qwik/Makefile +63 -0
  17. data/vendor/qwik/Rakefile +17 -0
  18. data/vendor/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/action.rb +325 -0
  99. data/vendor/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/config.rb +299 -0
  146. data/vendor/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/description.rb +256 -0
  154. data/vendor/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/farm.rb +283 -0
  165. data/vendor/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/group.rb +157 -0
  176. data/vendor/qwik/helper.rb +6 -0
  177. data/vendor/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/html-to-wabisabi.rb +149 -0
  179. data/vendor/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/logger.rb +115 -0
  188. data/vendor/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/mail.rb +341 -0
  193. data/vendor/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/page.rb +67 -0
  223. data/vendor/qwik/pages.rb +444 -0
  224. data/vendor/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/parser-inline.rb +273 -0
  227. data/vendor/qwik/parser.rb +350 -0
  228. data/vendor/qwik/password.rb +183 -0
  229. data/vendor/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/qp.rb +56 -0
  231. data/vendor/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/request.rb +91 -0
  244. data/vendor/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/response.rb +228 -0
  247. data/vendor/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/server.rb +252 -0
  250. data/vendor/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/site.rb +76 -0
  268. data/vendor/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/template.rb +85 -0
  272. data/vendor/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/tokenizer-inline.rb +294 -0
  308. data/vendor/qwik/tokenizer.rb +332 -0
  309. data/vendor/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/util-charset.rb +332 -0
  312. data/vendor/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/util-string.rb +203 -0
  320. data/vendor/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/version.rb +11 -0
  323. data/vendor/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/wabisabi.rb +5 -0
  335. metadata +416 -0
@@ -0,0 +1,8 @@
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/test-module-suite'
7
+
8
+ TestSuite.new.test_suite_all
@@ -0,0 +1,9 @@
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/test-module-suite'
7
+
8
+ testsuite = TestSuite.new
9
+ testsuite.test_suite_basic
@@ -0,0 +1,9 @@
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/test-module-suite'
7
+
8
+ testsuite = TestSuite.new
9
+ testsuite.test_suite_ml
@@ -0,0 +1,64 @@
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/typekey'
7
+ require 'qwik/testunit'
8
+ require 'qwik/config'
9
+ require 'qwik/util-pathname'
10
+ $test = true
11
+
12
+ class TestTypekey < Test::Unit::TestCase
13
+ def typekey_get_sitetoken(config)
14
+ file = config.etc_dir.path+'typekey-sitetoken.txt'
15
+ return nil if ! file.exist?
16
+ return file.open {|f| f.gets }.chomp
17
+ end
18
+
19
+ def test_typekey
20
+ return if $0 != __FILE__ # just only for unit test.
21
+ config = Qwik::Config.new
22
+
23
+ sitetoken = 't'
24
+ tk = TypeKey.new(sitetoken, '1.1')
25
+ tk.key_cache_timeout = 60 * 60 * 24 * 365 * 100 # 100years
26
+ tk.key_cache_path = (config.cache_dir.path+'typekey-publickey.txt').to_s
27
+
28
+ return_url = 'http://e.com/.typekey'
29
+ ok_eq('https://www.typekey.com/t/typekey/login?t=t&_return=http://e.com/.typekey&v=1.1', tk.get_login_url(return_url))
30
+ ok_eq('https://www.typekey.com/t/typekey/login?t=t&need_email=1&_return=http://e.com/.typekey&v=1.1', tk.get_login_url(return_url, true))
31
+ ok_eq('https://www.typekey.com/t/typekey/logout?_return=http://e.com/.typekey', tk.get_logout_url(return_url))
32
+
33
+ begin
34
+ key = tk.get_key
35
+ ok_eq(['p', 'q', 'pub_key', 'g'], key.keys)
36
+ rescue
37
+ p 'failed'
38
+ end
39
+ end
40
+
41
+ def test_verify
42
+ return if $0 != __FILE__ # just only for unit test.
43
+ config = Qwik::Config.new
44
+
45
+ sitetoken = typekey_get_sitetoken(config)
46
+ tk = TypeKey.new(sitetoken, '1.1')
47
+ tk.key_cache_timeout = 60 * 60 * 24 * 365 * 100 # 100years
48
+ tk.key_cache_path = (config.cache_dir.path+'typekey-publickey.txt').to_s
49
+
50
+ ts = '1111111111'
51
+ email = 'guest@example.com'
52
+ name = 'guestexample'
53
+ nick = 'guest'
54
+ sig = 'ttttttttttttttttttttttttttt=:LLLLLLLLLLLLLLLLLLLLLLLLLLL='
55
+
56
+ begin
57
+ assert_raise(VerifyFailed){
58
+ result = tk.verify(email, name, nick, ts, sig)
59
+ }
60
+ rescue => e
61
+ p 'failed', e
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,45 @@
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
+ #
6
+ # A patch to test/unit/ui/console/testrunner.rb
7
+ # You can see the elapsed time of each test case.
8
+ #
9
+
10
+ require 'test/unit'
11
+ require 'test/unit/ui/console/testrunner'
12
+ # Load testrunner.rb at the first to patch it.
13
+
14
+ module Test
15
+ module Unit
16
+ module UI
17
+ module Console
18
+ class TestRunner
19
+ alias :org_test_started :test_started
20
+ def test_started(name)
21
+ output_single("#{name}: ", VERBOSE)
22
+ $test_unit_start_time = Time.now
23
+ end
24
+
25
+ alias :org_test_finished :test_finished
26
+ def test_finished(name)
27
+ output_single('.', PROGRESS_ONLY) unless @displayed
28
+ elapsed_time = Time.now - $test_unit_start_time
29
+ str = sprintf(' (%0.02f)', elapsed_time)
30
+ output_single(str, VERBOSE) unless @displayed
31
+ nl(VERBOSE)
32
+ @displayed = false
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ module Assertions
39
+ alias ok assert
40
+ alias ok_eq assert_equal
41
+ alias eq assert_equal
42
+ alias is assert_equal
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,294 @@
1
+ #encoding: sjis
2
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
3
+ # This is free software with ABSOLUTELY NO WARRANTY.
4
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
5
+
6
+ require 'strscan'
7
+
8
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
9
+
10
+ module Qwik
11
+ class InlineTokenizer
12
+ URL = '(?:http|https|ftp|mailto|file):[a-zA-Z0-9;/?:@&=+$,\-_.!~*\'()#%]+'
13
+ SPECIAL = '^\[\]\'=\{\}'
14
+
15
+ # Parse a line into tokens using regexp.
16
+ def self.regexp_tokenize(str)
17
+ line_ar = []
18
+
19
+ while 0 < str.length
20
+ first_character = str[0]
21
+ rest = str[1, str.length-1]
22
+
23
+ case first_character
24
+
25
+ when ?' # ''t'' or '''t'''
26
+ if /\A'''(?!:')/ =~ str
27
+ line_ar << :"'''"
28
+ str = $'
29
+ elsif /\A''/ =~ str
30
+ line_ar << :"''"
31
+ str = $'
32
+ else
33
+ line_ar << first_character.chr
34
+ str = rest
35
+ end
36
+
37
+ when ?= # ==t==
38
+ if /\A==/ =~ str
39
+ line_ar << :'=='
40
+ str = $'
41
+ else
42
+ line_ar << first_character.chr
43
+ str = rest
44
+ end
45
+
46
+ when ?[ # [[t]]
47
+
48
+ if /\A\[\[(.+?)\]\]/s =~ str # [[title|url]] format
49
+ line_ar << [:ref, $1]
50
+ str = $'
51
+
52
+ elsif /\A\[([^\[\]\s]+?) ([^\[\]\s]+?)\]/ =~ str
53
+ # [url title] format
54
+ line_ar << [:ref, $2+'|'+$1]
55
+ str = $'
56
+
57
+ else
58
+ line_ar << first_character.chr
59
+ str = rest
60
+ end
61
+
62
+ when ?{ # {{t}}
63
+ if /\A\{\{([^\(\)]+?)(?:\((.*?)\))?\s*\}\}/ =~ str # {{t(a)}}
64
+ ar = [:plugin, $1]
65
+ ar << $2 if $2
66
+ line_ar << ar
67
+ str = $'
68
+ else
69
+ line_ar << first_character.chr
70
+ str = rest
71
+ end
72
+
73
+ else
74
+ if /\A#{URL}/s =~ str
75
+ href = $&
76
+ line_ar << [:url, href]
77
+ str = $'
78
+
79
+ elsif /\A[^#{SPECIAL}]+/s =~ str
80
+ m = $&
81
+ after = $'
82
+
83
+ if /([^a-zA-Z\d]+)(#{URL})/ =~ m
84
+ s = $` + $1
85
+ line_ar << s
86
+ str = $2 + $' + after
87
+ else
88
+ line_ar << m
89
+ str = after
90
+ end
91
+
92
+ else
93
+ if /\A(.+?)([^#{SPECIAL}])/s =~ str
94
+ line_ar << $1
95
+ str = $2 + $'
96
+ else
97
+ line_ar << str
98
+ str = ''
99
+ end
100
+ end
101
+
102
+ end
103
+ end
104
+
105
+ return line_ar
106
+ end
107
+
108
+ # Parse a line into tokens using strscan.
109
+ #def self.strscan_tokenize(str)
110
+ def self.tokenize(str)
111
+ line_ar = []
112
+
113
+ org_kcode = $KCODE
114
+ $KCODE = 's'
115
+
116
+ s = StringScanner.new(str)
117
+
118
+ while ! s.eos?
119
+ if s.scan(/'''(?!:')/)
120
+ line_ar << :"'''"
121
+
122
+ elsif s.scan(/''(?!:')/)
123
+ line_ar << :"''"
124
+
125
+ elsif s.scan(/==/)
126
+ line_ar << :'=='
127
+
128
+ elsif s.scan(/\[\[(.+?)\]\]/s) # [[title|url]] format
129
+ line_ar << [:ref, s[1]]
130
+
131
+ elsif s.scan(/\[([^\[\]\s]+?) ([^\[\]\s]+?)\]/s) # [url title] format
132
+ line_ar << [:ref, s[2]+'|'+s[1]]
133
+
134
+ elsif s.scan(/\{\{([^\(\)]+?)(?:\((.*?)\))?\s*\}\}/) # {{t(a)}}
135
+ ar = [:plugin, s[1]]
136
+ ar << s[2] if s[2]
137
+ line_ar << ar
138
+
139
+ elsif s.scan(/#{URL}/s)
140
+ href = s.matched
141
+ line_ar << [:url, href]
142
+
143
+ elsif s.scan(/[^#{SPECIAL}]+/s)
144
+ m = s.matched
145
+
146
+ if /([^a-zA-Z\d]+)(#{URL})/ =~ m
147
+ ss = $` + $1
148
+
149
+ line_ar << ss
150
+
151
+ skip_str = ss
152
+ s.unscan
153
+ s.pos = s.pos + skip_str.length
154
+
155
+ else
156
+ line_ar << m
157
+ end
158
+
159
+ elsif s.scan(/(.+?)([^#{SPECIAL}])/s)
160
+ ss = s[1]
161
+ line_ar << ss
162
+ s.unscan
163
+ s.pos = s.pos + ss.length
164
+
165
+ else
166
+ ss = s.string
167
+ line_ar << ss[s.pos..ss.length]
168
+ s.terminate
169
+
170
+ end
171
+ end
172
+
173
+ $KCODE = org_kcode
174
+
175
+ line_ar
176
+ end
177
+
178
+ end
179
+ end
180
+
181
+ if $0 == __FILE__
182
+ if ARGV[0] == '-b'
183
+ $bench = true
184
+ else
185
+ $test = true
186
+ end
187
+ end
188
+
189
+ if defined?($test) && $test
190
+ require 'qwik/testunit'
191
+
192
+ class TestInlineTokenizer < Test::Unit::TestCase
193
+ def ok(e, str)
194
+ ok_eq(e, Qwik::InlineTokenizer.tokenize(str))
195
+ end
196
+
197
+ def test_common
198
+ ok([], '')
199
+ ok(['t'], 't')
200
+
201
+ # test em, strong and del
202
+ ok([:"''", 't', :"''"], "''t''")
203
+ ok([:"'''", 't', :"'''"], "'''t'''")
204
+ ok(["'"], "'")
205
+ ok(["'", 't'], "'t")
206
+ ok([:'==', 't', :'=='], '==t==')
207
+ ok(['='], '=')
208
+ ok(['=', 't'], '=t')
209
+
210
+ # reference
211
+ ok([[:ref, 't']], '[[t]]')
212
+ ok([[:ref, 's|t']], '[[s|t]]')
213
+ ok([']'], ']')
214
+ ok(['[', 't', ']'], '[t]')
215
+ ok([[:ref, 'C++']], '[[C++]]')
216
+
217
+ # plugin
218
+ ok([[:plugin, 't']], '{{t}}')
219
+ ok([[:plugin, 't', 'a']], '{{t(a)}}')
220
+ ok(['{', 't', '}'], '{t}')
221
+
222
+ # url
223
+ ok([[:url, 'http://e.com/']], 'http://e.com/')
224
+ ok(['t ', [:url, 'http://e.com/'], ' a'], 't http://e.com/ a')
225
+ ok([[:url, 'https://e.com/']], 'https://e.com/')
226
+
227
+ # test_all
228
+ ok(['a ', :"''", 'b', :"''", ' ', :"'''", 'c', :"'''", ' ',
229
+ :==, 'd', :==, ' ', [:ref, 'e'], ' ',
230
+ [:plugin, 'f'], ' ', [:url, 'http://e.com/'], ' g'],
231
+ "a ''b'' '''c''' ==d== [[e]] {{f}} http://e.com/ g")
232
+
233
+ # test_wiliki_style
234
+ ok(['[', 'u', ']'], '[u]')
235
+ ok([[:ref, 't|u']], '[u t]')
236
+ ok([[:ref, 't|http://e.com/']], '[http://e.com/ t]')
237
+
238
+ # test_ref
239
+ ok([[:ref, 't|u']], '[[t|u]]')
240
+ ok([[:ref, 't']], '[[t]]')
241
+ ok([[:ref, '.attach']], '[[.attach]]')
242
+ ok([[:ref, '.attach/t.txt']], '[[.attach/t.txt]]')
243
+ ok([[:ref, '.attach/s t.txt']], '[[.attach/s t.txt]]')
244
+
245
+ ok([[:ref, "\203|\203X\203^\201["]], '[[�|�X�^�[]]')
246
+ ok(["\202\240", [:ref, "\203|\203X\203^\201["], "\202\240"],
247
+ '��[[�|�X�^�[]]��')
248
+
249
+ # test_bug
250
+ ok([:"'''", 't', :"''"], "'''t''")
251
+
252
+ # test_sjis_bug
253
+ ok_eq("\226]", '�]')
254
+ ok(["\226]"], '�]')
255
+ ok([[:ref, "\226]"]], '[[�]]]')
256
+ end
257
+
258
+ end
259
+ end
260
+
261
+ if defined?($bench) && $bench
262
+ require 'qwik/bench-module-session'
263
+
264
+ def ok(e, str)
265
+ tokens = Qwik::InlineTokenizer.tokenize(str)
266
+ #ok_eq(e, tokens)
267
+ end
268
+
269
+ # 10000 times.
270
+
271
+ # Regexp version.
272
+ # 4.550000 0.990000 5.540000 ( 5.527012)
273
+ # 4.600000 0.870000 5.470000 ( 5.485405)
274
+ # 4.310000 1.210000 5.520000 ( 5.571910)
275
+
276
+ # strscan version.
277
+ # 4.010000 0.300000 4.310000 ( 4.314455)
278
+ # 3.960000 0.340000 4.300000 ( 4.305931)
279
+ # 4.080000 0.230000 4.310000 ( 4.310803)
280
+
281
+ def main
282
+ n = 10000
283
+
284
+ BenchmarkModule::benchmark {
285
+ n.times {
286
+ ok(['a ', :"''", 'b', :"''", ' ', :"'''", 'c', :"'''", ' ',
287
+ :==, 'd', :==, ' ', [:ref, 'e'], ' ',
288
+ [:plugin, 'f'], ' ', [:url, 'http://e.com/'], ' g'],
289
+ "a ''b'' '''c''' ==d== [[e]] {{f}} http://e.com/ g")
290
+ }
291
+ }
292
+ end
293
+ main
294
+ end
@@ -0,0 +1,332 @@
1
+ #encoding: sjis
2
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
3
+ # This is free software with ABSOLUTELY NO WARRANTY.
4
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
5
+
6
+ require 'strscan'
7
+
8
+ module Qwik
9
+ class TextTokenizer
10
+ MULTILINE = {
11
+ :plugin => [
12
+ /\A\{\{([^\(\)\{\}]+?)(?:\(([^\(\)\{\}]*?)\))?\z/,
13
+ /\A\}\}\z/
14
+ ],
15
+ :pre => [
16
+ /\A\{\{\{\z/,
17
+ /\A\}\}\}\z/
18
+ ],
19
+ :html => [
20
+ /\A\<html\>\z/,
21
+ /\A\<\/html\>\z/
22
+ ],
23
+ }
24
+
25
+ # Tokenize a text.
26
+ def self.tokenize(str, br_mode=false)
27
+ tokens = []
28
+ in_multiline = {}
29
+
30
+ scanner = StringScanner.new(str)
31
+ while ! scanner.eos?
32
+ line = scanner.scan(/.*$/)
33
+ newline = scanner.scan(/\n/)
34
+
35
+ line.chomp!
36
+
37
+ # At the first, check if it is in a multiline block.
38
+ last_token = tokens.last
39
+ if last_token
40
+ last_tag = last_token[0]
41
+ if in_multiline[last_tag]
42
+ if MULTILINE[last_tag][1] =~ line
43
+ in_multiline[last_tag] = nil
44
+ else
45
+ last_token[-1] += "#{line.chomp}\n"
46
+ end
47
+ next
48
+ end
49
+ end
50
+
51
+ line.chomp!
52
+
53
+ # preprocess
54
+ #line.gsub!(/&my-([0-9]+);/) {|m| "{{my_char(#{$1})}}" }
55
+
56
+ case line
57
+ when MULTILINE[:plugin][0]
58
+ in_multiline[:plugin] = true
59
+ tokens << [:plugin, $1.to_s, $2.to_s, '']
60
+ when MULTILINE[:pre][0]
61
+ in_multiline[:pre] = true
62
+ tokens << [:pre, '']
63
+ when MULTILINE[:html][0]
64
+ tokens << [:html, '']
65
+ in_multiline[:html] = true
66
+ when /\A====+\z/, '-- ', /\A----+\z/ # hr
67
+ tokens << [:hr]
68
+ when /\A(\-{1,3})(.+)\z/ # ul
69
+ tokens << [:ul, $1.size, $2.to_s.strip]
70
+ when /\A(\+{1,3})(.+)\z/ # ol
71
+ tokens << [:ol, $1.size, $2.to_s.strip]
72
+ when /\A>(.*)\z/ # blockquote
73
+ tokens << [:blockquote, $1.strip]
74
+ when /\A[ \t](.*)\z/ # pre
75
+ tokens << [:pre, $1]
76
+ when /\A\{\{([^\(\)\{\}]+?)(?:\(([^\(\)\{\}]*?)\))?\}\}\z/ # plugin
77
+ tokens << [:plugin, $1.to_s, $2.to_s]
78
+ when '', /\A#/ # '', or comment.
79
+ tokens << [:empty] # empty line
80
+ when /\A([,|])(.*)\z/ # pre
81
+ re = Regexp.new(Regexp.quote($1), nil, 's')
82
+ ar = [:table] + $2.split(re).map {|a| a.to_s }
83
+ tokens << ar
84
+ when /\A:(.*)\z/ # dl
85
+ rest = $1
86
+ dt, dd = rest.split(':', 2)
87
+ if dt && dt.include?('(')
88
+ if /\A(.*?\(.*\)[^:]*):(.*)\z/ =~ rest # FIXME: Bad hack.
89
+ dt, dd = $1, $2
90
+ end
91
+ end
92
+ ar = [:dl]
93
+ ar << ((dt && ! dt.empty?) ? dt.to_s.strip : nil)
94
+ ar << ((dd && ! dd.empty?) ? dd.to_s.strip : nil)
95
+ tokens << ar
96
+ when /\A([*!]{1,5})\s*(.+)\s*\z/ # h
97
+ h = $1
98
+ s = $2
99
+ s = s.strip
100
+ if s.empty? # '* '
101
+ inline(tokens, line, br_mode)
102
+ else
103
+ tokens << [("h#{h.size+1}").intern, s]
104
+ end
105
+ else
106
+ inline(tokens, line, br_mode)
107
+ end
108
+ end
109
+
110
+ return tokens
111
+ end
112
+
113
+ private
114
+
115
+ def self.inline(tokens, line, br_mode)
116
+ if /~\z/s =~ line
117
+ line = line.sub(/~\z/s, '{{br}}') # //s means shift_jis
118
+ elsif br_mode
119
+ line = "#{line}{{br}}"
120
+ end
121
+ tokens << [:text, line]
122
+ end
123
+ end
124
+ end
125
+
126
+ if $0 == __FILE__
127
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
128
+ if ARGV[0] == '-b'
129
+ $bench = true
130
+ else
131
+ require 'qwik/testunit'
132
+ $test = true
133
+ end
134
+ end
135
+
136
+ if defined?($test) && $test
137
+ class TestTokenizer < Test::Unit::TestCase
138
+ def ok(e, str)
139
+ ok_eq(e, Qwik::TextTokenizer.tokenize(str))
140
+ end
141
+
142
+ def test_all
143
+ ok([], '')
144
+ ok([[:empty]], '#t')
145
+ ok([[:hr]], '====')
146
+ ok([[:text, '===']], '===')
147
+
148
+ # test_h
149
+ ok([[:text, '*']], '*')
150
+ ok([[:h2, 't']], '*t')
151
+ ok([[:h2, 't']], '* t')
152
+ ok([[:h2, 't']], '*t ')
153
+ ok([[:h2, 's t']], '* s t')
154
+ ok([[:text, '* ']], '* ')
155
+ ok([[:text, '*']], '*')
156
+ ok([[:h3, 't']], '**t')
157
+ ok([[:h4, 't']], '***t')
158
+ ok([[:h5, 't']], '****t')
159
+ ok([[:h6, 't']], '*****t')
160
+
161
+ # test_!
162
+ ok([[:h2, 't']], '! t')
163
+
164
+ ok([[:text, '-']], '-')
165
+ ok([[:ul, 1, 't']], '-t')
166
+ ok([[:ul, 1, 't']], '- t')
167
+ ok([[:ul, 2, 't']], '--t')
168
+ ok([[:ul, 3, 't']], '---t')
169
+ ok([[:ul, 3, '-t']], '----t') # uum...
170
+ ok([[:ul, 1, '-']], '--')
171
+ ok([[:hr]], '-- ')
172
+ ok([[:hr]], '----')
173
+ ok([[:text, '+']], '+')
174
+ ok([[:ol, 1, 't']], '+t')
175
+ ok([[:blockquote, 't']], '>t')
176
+ ok([[:blockquote, 't']], '> t')
177
+
178
+ # test dl
179
+ ok([[:dl, 'dt', 'dd']], ':dt:dd')
180
+ ok([[:dl, 'dt', nil]], ':dt')
181
+ ok([[:dl, nil, nil]], ':')
182
+ ok([[:dl, nil, 'dd']], '::dd')
183
+ ok([[:dl, nil, nil]], '::')
184
+ ok([[:dl, 'dt', 'dd'], [:dl, 'dt2', 'dd2']], ":dt:dd\n:dt2:dd2")
185
+
186
+ ok([[:pre, 't']], ' t')
187
+ ok([[:pre, 't']], "\tt")
188
+
189
+ # test_table
190
+ ok([[:table, 't']], ',t')
191
+ #ok([[:table, 't']], ', t')
192
+ ok([[:table, ' t']], ', t')
193
+ ok([[:table, 's', 't']], ',s,t')
194
+ ok([[:table, '', 't']], ',,t')
195
+ ok([[:table, 't']], '|t')
196
+ ok([[:table, '$t']], ',$t')
197
+ ok([[:table, '$1']], ',$1')
198
+
199
+ ok([[:text, '{t}']], '{t}')
200
+ ok([[:plugin, 't', '']], '{{t}}')
201
+ ok([[:plugin, 't', 'a']], '{{t(a)}}')
202
+ ok([[:plugin, 't', '', '']], '{{t')
203
+ ok([[:plugin, 't', 'a', '']], '{{t(a)')
204
+ ok([[:plugin, 't', '', "s\n"]], "{{t\ns\n}}")
205
+ ok([[:plugin, 't', 'a', "s\n"]], "{{t(a)\ns\n}}")
206
+
207
+ ok([[:pre, "s\n"]], "{{{\ns\n}}}")
208
+ ok([[:pre, "s\nt\n"]], "{{{\ns\nt\n}}}")
209
+ ok([[:pre, "#s\n"]], "{{{\n#s\n}}}")
210
+
211
+ ok([[:empty]], "\n")
212
+ ok([[:text, 't']], 't')
213
+ ok([[:text, 's'], [:text, 't']], "s\nt")
214
+ ok([[:text, 's'], [:empty], [:text, 't']], "s\n\nt")
215
+
216
+ # test_html
217
+ ok([[:text, '<t']], '<t')
218
+ ok([[:html, '']], '<html>')
219
+ ok([[:html, "t\n"]], "<html>\nt\n</html>")
220
+ ok([[:html, "<p>\nt\n</p>\n"]], "<html>\n<p>\nt\n</p>\n</html>")
221
+
222
+ # test_sjis_bug
223
+ ok([[:table, '�|', '�|']], ',�|,�|')
224
+ ok([[:table, 's', 't']], '|s|t')
225
+ ok([[:table, '�|', '�|']], '|�||�|')
226
+
227
+ # test_multiline
228
+ ok([[:text, 's'], [:text, 't']], "s\nt")
229
+ ok([[:text, 's{{br}}'], [:text, 't{{br}}']], "s~\nt~")
230
+ ok([[:text, 's'], [:empty], [:text, 't']], "s\n\nt")
231
+ ok([[:text, "s{{br}}"], [:text, "{{br}}"], [:text, "t{{br}}"]],
232
+ "s~\n~\nt~")
233
+
234
+ # test_ul
235
+ ok([[:ul, 1, 't'], [:ul, 1, 't']], "-t\n-t")
236
+ ok([[:ul, 1, 't'], [:empty], [:ul, 1, 't']], "-t\n\n-t")
237
+ ok([[:empty], [:ul, 1, 't'], [:ul, 1, 't']], "\n-t\n-t")
238
+
239
+ # test_multiline_pre
240
+ ok([[:pre, 't']], ' t')
241
+ ok([[:pre, 't1'], [:pre, 't2']], " t1\n t2")
242
+ ok([[:pre, 't1'], [:empty], [:pre, 't2']], " t1\n\n t2")
243
+
244
+ # test_ref
245
+ # do not parse inline for this moment.
246
+ ok([[:text, "[[t]]"]], "[[t]]")
247
+
248
+ # test_super_pre
249
+ ok([[:pre, "p\n"], [:text, 't']], "{{{\np\n}}}\nt\n")
250
+ ok([[:pre, "#p\n"], [:text, 't']], "{{{\n#p\n}}}\nt\n")
251
+
252
+ # test_in_bracket # bad hack
253
+ ok([[:dl, 'dt', 'dd']], ':dt:dd')
254
+ ok([[:dl, "dt(h:m)dt2", 'dd']], ":dt(h:m)dt2:dd")
255
+ ok([[:dl, 'u', 'h://e.com/']], ':u:h://e.com/')
256
+ ok([[:dl, "dt(h:m)", 'h://e.com/']], ":dt(h:m):h://e.com/")
257
+ ok([[:dl, "dt(h:m)dt2", 'h://e.com/']], ":dt(h:m)dt2:h://e.com/")
258
+ end
259
+ end
260
+
261
+ class TestTokenizerWithBR < Test::Unit::TestCase
262
+ def ok(e, str)
263
+ ok_eq(e, Qwik::TextTokenizer.tokenize(str, true))
264
+ end
265
+
266
+ def test_all
267
+ ok([[:text, "==={{br}}"]], "===")
268
+ ok([[:text, "*{{br}}"]], '*')
269
+ ok([[:text, "* {{br}}"]], '* ')
270
+ ok([[:text, "*{{br}}"]], '*')
271
+ ok([[:text, "-{{br}}"]], '-')
272
+ ok([[:text, "+{{br}}"]], "+")
273
+ ok([[:text, "{t}{{br}}"]], "{t}")
274
+ ok([[:text, "t{{br}}"]], 't')
275
+ ok([[:text, "s{{br}}"], [:text, "t{{br}}"]], "s\nt")
276
+ ok([[:text, "s{{br}}"], [:empty], [:text, "t{{br}}"]], "s\n\nt")
277
+
278
+ # test table
279
+ ok([[:table, 'a', 'b']], '|a|b|')
280
+
281
+ # test_multiline
282
+ ok([[:text, "s{{br}}"], [:text, "t{{br}}"]], "s\nt")
283
+ ok([[:text, "s{{br}}"], [:text, "t{{br}}"]], "s~\nt~") # no change
284
+ ok([[:text, "s{{br}}"], [:empty], [:text, "t{{br}}"]], "s\n\nt")
285
+ ok([[:text, "s{{br}}"], [:text, "{{br}}"], [:text, "t{{br}}"]],
286
+ "s~\n~\nt~") # no change
287
+
288
+ # test_ref
289
+ ok([[:text, "[[t]]{{br}}"]], "[[t]]")
290
+ end
291
+ end
292
+ end
293
+
294
+ if defined?($bench) && $bench
295
+ require 'qwik/bench-module-session'
296
+
297
+ def ok(e, str)
298
+ tokens = Qwik::TextTokenizer.tokenize(str)
299
+ #ok_eq(e, tokens)
300
+ end
301
+
302
+ def generate_large_table(table_line_num)
303
+ str = ''
304
+ table_line_num.times {|n|
305
+ str << "|#{n}|1|2|3|4|5|6|7|8|9|0\n"
306
+ }
307
+ return str
308
+ end
309
+
310
+ # n=10, line=10000
311
+
312
+ # str.each vesrion.
313
+ # 6.050000 0.660000 6.710000 ( 6.701044)
314
+ # 6.060000 0.640000 6.700000 ( 6.707144)
315
+ # 6.140000 0.580000 6.720000 ( 6.725063)
316
+
317
+ # strscan version.
318
+ # 5.770000 0.790000 6.560000 ( 6.559884)
319
+ # 5.810000 0.750000 6.560000 ( 6.568743)
320
+ # 6.030000 0.550000 6.580000 ( 6.562864)
321
+
322
+ def main
323
+ n = 10
324
+ str = generate_large_table(10000)
325
+ BenchmarkModule::benchmark {
326
+ n.times {
327
+ ok([], str)
328
+ }
329
+ }
330
+ end
331
+ main
332
+ end