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,77 @@
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/testunit'
10
+
11
+ class CheckHTree < Test::Unit::TestCase
12
+ def test_htree_to_rexml
13
+ str = '<p>��</p>'
14
+ ok_eq("\202\240", '��') # Kanji code is SJIS.
15
+ h = HTree(str)
16
+
17
+ x = ''
18
+ h.display_xml(x)
19
+ ok_eq("<p\n>\202\240</p\n>", x)
20
+
21
+ r = h.to_rexml
22
+ ok_eq("<p>\202\240</p>", r.to_s)
23
+ #ok_eq(" <p>\202\240</p>", r.to_s(1))
24
+
25
+ html = <<'EOT'
26
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head id='header'><title>�V�K�쐬</title><link href="/.theme/base.css" rel='stylesheet' media="screen,tv" type="text/css"/><link href="/.theme/qwiksystem/qwiksystem.css" rel='stylesheet' media="screen,tv" type="text/css"/><meta name='ROBOTS' content="NOINDEX,NOFOLLOW"/><meta content="0; url=FirstPage.edit" http-equiv='Refresh'/></head><body><div class='container'><div class='header'><div><div><h1 id="view_title">�V�K�쐬</h1></div></div></div><div class="update day"><div class='form'><div class='msg' id='msg'><h2>�V�K�쐬</h2><p>�V�K�y�[�W���쐬���܂���</p><p><a href="FirstPage.edit">�V�K�y�[�W��ҏW</a>���Ă��������B</p><p><a href="FirstPage.edit">FirstPage.edit</a></p></div></div></div><div class="update day"><div class='comment'></div></div></div></body></html>
27
+ EOT
28
+ h = HTree(html)
29
+ r = h.to_rexml
30
+ e = <<'EOT'
31
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html xmlns='http://www.w3.org/1999/xhtml'><head id='header'><title>�V�K�쐬</title><link href='/.theme/base.css' rel='stylesheet' type='text/css' media='screen,tv'/><link href='/.theme/qwiksystem/qwiksystem.css' rel='stylesheet' type='text/css' media='screen,tv'/><meta name='ROBOTS' content='NOINDEX,NOFOLLOW'/><meta content='0; url=FirstPage.edit' http-equiv='Refresh'/></head><body><div class='container'><div class='header'><div><div><h1 id='view_title'>�V�K�쐬</h1></div></div></div><div class='update day'><div class='form'><div class='msg' id='msg'><h2>�V�K�쐬</h2><p>�V�K�y�[�W���쐬���܂���</p><p><a href='FirstPage.edit'>�V�K�y�[�W��ҏW</a>���Ă��������B</p><p><a href='FirstPage.edit'>FirstPage.edit</a></p></div></div></div><div class='update day'><div class='comment'/></div></div></body></html>
32
+ EOT
33
+ ok_eq(e, r.to_s)
34
+
35
+ e = <<'EOT'
36
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
37
+ <html xmlns='http://www.w3.org/1999/xhtml'>
38
+ <head id='header'>
39
+ <title>�V�K�쐬</title>
40
+ <link href='/.theme/base.css' rel='stylesheet' type='text/css' media='screen,tv'/>
41
+ <link href='/.theme/qwiksystem/qwiksystem.css' rel='stylesheet' type='text/css' media='screen,tv'/>
42
+ <meta name='ROBOTS' content='NOINDEX,NOFOLLOW'/>
43
+ <meta content='0; url=FirstPage.edit' http-equiv='Refresh'/>
44
+ </head>
45
+ <body>
46
+ <div class='container'>
47
+ <div class='header'>
48
+ <div>
49
+ <div>
50
+ <h1 id='view_title'>�V�K�쐬</h1>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ <div class='update day'>
55
+ <div class='form'>
56
+ <div class='msg' id='msg'>
57
+ <h2>�V�K�쐬</h2>
58
+ <p>�V�K�y�[�W���쐬���܂���</p>
59
+ <p>
60
+ <a href='FirstPage.edit'>�V�K�y�[�W��ҏW</a>���Ă��������B</p>
61
+ <p>
62
+ <a href='FirstPage.edit'>FirstPage.edit</a>
63
+ </p>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ <div class='update day'>
68
+ <div class='comment'/>
69
+ </div>
70
+ </div>
71
+ </body>
72
+ </html>
73
+
74
+ EOT
75
+ #ok_eq(e, r.to_s(0))
76
+ end
77
+ end
@@ -0,0 +1,51 @@
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/testunit'
10
+
11
+ class CheckHTree < Test::Unit::TestCase
12
+ def assert_xhtml(expected, template, message=nil) # from htree/test
13
+ prefix = "<html\n>"
14
+ suffix = "</html\n>"
15
+ result = HTree.expand_template(''){"<html>#{template}</html>"}
16
+ assert_match(/\A#{Regexp.quote prefix}/, result)
17
+ assert_match(/#{Regexp.quote suffix}\z/, result)
18
+ result = result[prefix.length..(-suffix.length-1)]
19
+ ok_eq(expected, result, message)
20
+ end
21
+
22
+ def test_htree
23
+ return # do not test.
24
+
25
+ assert_xhtml("<b\n>t</b\n>", '<b>t</b>')
26
+ assert_xhtml("<e\n>1</e\n>", '<e _text=1>d</e>')
27
+ str = '<html><e _text=1>d</e></html>'
28
+
29
+ doc = HTree(str) # doc is a template
30
+ assert_instance_of(HTree::Doc, doc)
31
+ assert_instance_of(HTree::Elem, doc.root)
32
+ ok_eq('{http://www.w3.org/1999/xhtml}html', doc.root.name)
33
+ assert_instance_of(HTree::Elem, doc.root.children[0])
34
+ assert_instance_of(HTree::Elem, doc.root.children[0])
35
+ assert_instance_of(HTree::Text, doc.root.children[0].children[0])
36
+ assert_instance_of(String, doc.root.children[0].children[0].rcdata)
37
+ ok_eq('d', doc.root.children[0].children[0].rcdata)
38
+
39
+ doc = HTree{str} # doc is a document. the template is evaluated.
40
+ assert_instance_of(HTree::Doc, doc)
41
+ assert_instance_of(HTree::Elem, doc.root)
42
+ assert_instance_of(HTree::Elem, doc.root.children[0])
43
+ assert_instance_of(HTree::Text, doc.root.children[0].children[0])
44
+ ok_eq('1', doc.root.children[0].children[0].rcdata)
45
+
46
+ str = "<html>\n <body _text=\"body\"></body>\n</html>"
47
+ body = 'b'
48
+ result = HTree.expand_template(''){str}
49
+ ok_eq("<html\n><body\n>b</body\n></html\n>", result)
50
+ end
51
+ end
@@ -0,0 +1,135 @@
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-common'
7
+
8
+ begin
9
+ require 'xml/libxml'
10
+ $have_libxml_so = true
11
+ rescue LoadError
12
+ $have_libxml_so = false
13
+ end
14
+
15
+ if $0 == __FILE__
16
+ $test = true
17
+ end
18
+
19
+ class TestLibXml < Test::Unit::TestCase
20
+ def test_parser
21
+ str = <<'EOT'
22
+ <html><head id='header'><title>FrontPage - example.com/test</title><link href="/.theme/qwikgreen/qwikgreen.css" rel='stylesheet' media="screen,tv,print" type="text/css"/><link href="/.theme/base.css" rel='stylesheet' media="screen,tv,print" type="text/css"/></head><body><div class='container'><div class='main'><div class='adminmenu' id='adminmenu'><p><span class='loginstatus'>user | <em>user@e.com</em> (<a href=".logout">.logout</a>)</span></p>
23
+ <ul><li><a href=".new">�V�K�쐬</a></li>
24
+ <li><a href="FrontPage.edit">�ҏW</a></li>
25
+ </ul>
26
+ </div><h1 id="view_title">FrontPage</h1><div id='body'><div class='day'><h2>FrontPage</h2><div class='body'><div class='section'>
27
+ <p>����͐V�KqwikWeb�T�C�g�̓����ƂȂ�y�[�W�ł��B</p>
28
+ <h3>�g����</h3>
29
+ <p>�y�[�W�̏�̕��ɂ���u�ҏW�v�Ƃ��������N�����ǂ�ƁA���̃y�[�W�̕ҏW���[�h�ɂȂ�܂��B</p>
30
+ <p>�\�����ꂽ�e�L�X�g�̓��e��ύX���A�uSave�v�{�^�����N���b�N����ƁA���̃y�[�W�̓��e���ύX����܂��B</p>
31
+ <h3>�L�q���@</h3>
32
+ <p>�y�[�W�̓��e�̓e�L�X�g�ŏ�����Ă���A�����‚��̋L���ɂ���Č��o���Ȃǂ̎w������܂��B�ڂ������́A<a href="/test/TextFormat.html">TextFormat</a>�������������B</p>
33
+ <h3>qwikWeb</h3>
34
+ <p>�ڂ����́A<a href="http://example.com/" class='external'>qwikWeb</a>�z�[���y�[�W���������������B</p>
35
+ <h3>QuickML</h3>
36
+ <p>���[�����O���X�g�@�\�̎g�����́A<a href="http://www.quickml.com/" class='external'>QuickML</a>�z�[���y�[�W���������������B</p>
37
+ </div></div></div></div><div id="body_leave"><div class='day'><div class='comment'><div class='caption'><div class="page_attribute"><p><div class='qrcode'><a href="http://example.com/test/" class='external'><img src=".attach/qrcode-test.png" alt="http://example.com/test/"/><br/>http://example.com/test/</a></div><div>last modified: 2004-05-20</div></p>
38
+ </div></div></div><div class="body_leave"></div></div></div></div><div class='sidebar' id='sidemenu'><h2>menu</h2>
39
+ <ul><li><a href="/test/FrontPage.html">FrontPage</a></li>
40
+ <li><a href="/test/TitleList.html">TitleList</a></li>
41
+ <li><a href="/test/RecentList.html">RecentList</a></li>
42
+ <li><a href="/test/TextFormat.html">TextFormat</a></li>
43
+ <li><a href="/test/_SiteMenu.html">_SiteMenu</a></li>
44
+ </ul>
45
+ <h2>recent change</h2>
46
+ <p><h3>2004-09-09</h3>
47
+ <ul><li><a href="/test/_SiteMember.html">_SiteMember</a></li>
48
+ </ul>
49
+ </p>
50
+ </div><div class='footer' id='footer'><p>powered by <a href="http://example.com/" class='external'>qwikWeb</a></p>
51
+ </div></div></body></html>
52
+ EOT
53
+
54
+ if $have_libxml_so
55
+ ok_eq('2.6.11', XML::Parser::LIBXML_VERSION)
56
+ ok_eq(28, XML::Parser::VERNUM)
57
+ xp = XML::Parser.new
58
+ xp.string = str.page_to_xml
59
+ doc = xp.parse
60
+ assert_instance_of(XML::Document, doc)
61
+ e = nil
62
+ doc.find('//a'){|ee|
63
+ e = ee
64
+ }
65
+ end
66
+ end
67
+
68
+ def test_text
69
+ if $have_libxml_so
70
+ xp = XML::Parser.new
71
+ xp.string = '<html><p><b>a</b></p></html>'
72
+ doc = xp.parse
73
+ assert_instance_of(XML::Document, doc)
74
+ e = nil
75
+ doc.find('//title'){|e|
76
+ e = ee
77
+ }
78
+ end
79
+ end
80
+ end
81
+
82
+ class TestAssertXPath < Test::Unit::TestCase
83
+ include TestSession
84
+
85
+ def test_ok_xp
86
+ t_add_user
87
+ session('/test/')
88
+ ok_in(['FrontPage'], '//h1')
89
+ ok_xp([:a, {:href=>'.logout'}, 'Logout'], '//a')
90
+ ok_in(['Logout'], '//a')
91
+ end
92
+ end
93
+
94
+ class CheckLibXml_OriginalTest < Test::Unit::TestCase
95
+ def make_sample_xml
96
+ str = "<nodes>\n"
97
+ 10000.times {|i|
98
+ str << '<node sum="1" avg="'+i.to_s+'">Node sample text</node>'+"\n"
99
+ }
100
+ str << "</nodes>\n"
101
+ str
102
+ end
103
+
104
+ def nutest_rexml #9.851 seconds.
105
+ require 'rexml/document'
106
+ xmlStr = make_sample_xml
107
+ doc = REXML::Document.new xmlStr
108
+ sum = avgSum = count = 0
109
+ doc.elements.each('/nodes/node') { |e|
110
+ count += 1
111
+ sum += e.attributes['sum'].to_i
112
+ avgSum += e.attributes['avg'].to_i
113
+ }
114
+ puts "count(node): #{count}, sum(sum): #{sum}, avg(avg): #{avgSum/count}"
115
+ end
116
+
117
+ def nutest_libxml #4.685 seconds
118
+ require 'xml/libxml'
119
+ xmlStr = make_sample_xml
120
+ xp = XML::Parser.new
121
+ xp.string = xmlStr
122
+ doc = xp.parse
123
+ sum = avgSum = count = 0
124
+ doc.find('/nodes/node').each { |e|
125
+ count += 1
126
+ sum += e['sum'].to_i
127
+ avgSum += e['avg'].to_i
128
+ }
129
+ puts "count(node): #{count}, sum(sum): #{sum}, avg(avg): #{avgSum/count}"
130
+ end
131
+
132
+ def test_dummy #0.117 seconds.
133
+ xmlStr = make_sample_xml
134
+ end
135
+ end
@@ -0,0 +1,47 @@
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
+ if $0 == __FILE__
8
+ require 'qwik/test-common'
9
+ $test = true
10
+ end
11
+
12
+ if defined?($test) && $test
13
+ class CheckManyPages < Test::Unit::TestCase
14
+ include TestSession
15
+
16
+ def test_all
17
+ t_add_user
18
+
19
+ # page = @site.create_new
20
+ # page.store("* t")
21
+ # res = session('/test/1.html')
22
+ # ok_title('t')
23
+ # page = @site['1']
24
+
25
+ # num = 200
26
+ num = 10
27
+ (1..num).each {|n|
28
+ page = @site.create_new
29
+ page.store("* t#{n}")
30
+ }
31
+ (1..num).each {|n|
32
+ res = session("/test/#{n}.html")
33
+ ok_title("t#{n}")
34
+ }
35
+
36
+ #100 Finished in 28.170425 seconds.
37
+
38
+ #100 Finished in 9.680146 seconds.
39
+ #200 Finished in 28.170425 seconds.
40
+ #1000 Finished in 603.93911 seconds.
41
+
42
+ #100 Finished in 4.67007 seconds.
43
+ #200 Finished in 9.030136 seconds.
44
+ #1000 Finished in 47.230712 seconds.
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,33 @@
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
+ def check_monitor_main
6
+ require 'monitor.rb'
7
+
8
+ buf = []
9
+ buf.extend(MonitorMixin)
10
+ empty_cond = buf.new_cond
11
+
12
+ # consumer
13
+ Thread.start {
14
+ loop {
15
+ buf.synchronize {
16
+ empty_cond.wait_while { buf.empty? }
17
+ print buf.shift
18
+ }
19
+ }
20
+ }
21
+
22
+ # producer
23
+ while line = ARGF.gets
24
+ buf.synchronize {
25
+ buf.push(line)
26
+ empty_cond.signal
27
+ }
28
+ end
29
+ end
30
+
31
+ if $0 == __FILE__
32
+ check_monitor_main
33
+ end
@@ -0,0 +1,67 @@
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
+ require 'observer'
6
+
7
+ class Ticker ### Periodically fetch a stock price.
8
+ include Observable
9
+
10
+ def initialize(symbol)
11
+ @symbol = symbol
12
+ end
13
+
14
+ def run
15
+ lastPrice = nil
16
+ loop {
17
+ price = Price.fetch(@symbol)
18
+ print "Current price: #{price}\n"
19
+ if price != lastPrice
20
+ changed # notify observers
21
+ lastPrice = price
22
+ notify_observers(Time.now, price)
23
+ end
24
+ sleep 1
25
+ }
26
+ end
27
+ end
28
+
29
+ class Price ### A mock class to fetch a stock price (60 - 140).
30
+ def Price.fetch(symbol)
31
+ 60 + rand(80)
32
+ end
33
+ end
34
+
35
+ class Warner ### An abstract observer of Ticker objects.
36
+ def initialize(ticker, limit)
37
+ @limit = limit
38
+ ticker.add_observer(self)
39
+ end
40
+ end
41
+
42
+ class WarnLow < Warner
43
+ def update(time, price) # callback for observer
44
+ if price < @limit
45
+ print "--- #{time.to_s}: Price below #@limit: #{price}\n"
46
+ end
47
+ end
48
+ end
49
+
50
+ class WarnHigh < Warner
51
+ def update(time, price) # callback for observer
52
+ if price > @limit
53
+ print "+++ #{time.to_s}: Price above #@limit: #{price}\n"
54
+ end
55
+ end
56
+ end
57
+
58
+ def check_observer_main
59
+ ticker = Ticker.new('MSFT')
60
+ WarnLow.new(ticker, 80)
61
+ WarnHigh.new(ticker, 120)
62
+ ticker.run
63
+ end
64
+
65
+ if $0 == __FILE__
66
+ check_observer_main
67
+ end
@@ -0,0 +1,61 @@
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-server'
7
+
8
+ if $0 == __FILE__
9
+ $test = true
10
+ end
11
+
12
+ class CheckServer < Test::Unit::TestCase
13
+ include TestServerSetupModule
14
+ include TestServerModule
15
+
16
+ def test_basic
17
+ return if $0 != __FILE__ # Only for unit test.
18
+
19
+ Thread.abort_on_exception = true
20
+
21
+ server, config, memory, wreq, wres = setup_server
22
+ server_thread = Thread.new { server.start }
23
+
24
+ # In private mode.
25
+ write_page('1', "* t\ns\n")
26
+ str = get_path('1.html')
27
+ ok_in(['Members Only'], '//title', str)
28
+ #ok_in(['Login'], '//title', str)
29
+ #ok_in([[:p, 'Please login.'], [:p, [:a, {:href=>'.login'}, 'Login']]],
30
+ # "//div[@class='section']", str)
31
+
32
+ # In public mode.
33
+ write_page('_SiteConfig', ":open:true\n")
34
+ str = get_path('1.html')
35
+ ok_in(['t'], '//title', str)
36
+ ok_in([:p, 's'], "//div[@class='section']", str)
37
+
38
+ teardown_server(server)
39
+ end
40
+
41
+ def test_save
42
+ return if $0 != __FILE__ # Only for unit test.
43
+
44
+ server, config, memory, wreq, wres = setup_server
45
+ server_thread = Thread.new { server.start }
46
+
47
+ write_page('_SiteMember', ",user@e.com\n")
48
+ write_page('1', '* t')
49
+
50
+ str = get_path('1.html')
51
+ ok_in(['t'], '//title', str)
52
+
53
+ str = get_path("1.save?contents=*t2")
54
+ ok_in(['Page is saved.'], '//title', str)
55
+
56
+ str = get_path('1.html')
57
+ ok_in(['t2'], '//title', str)
58
+
59
+ teardown_server(server)
60
+ end
61
+ end