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,255 @@
1
+ # Copyright (C) 2009 AIST, 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
+ =begin
6
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
7
+
8
+ require 'qwik/act-backup'
9
+
10
+ module Qwik
11
+ class Action
12
+ def plg_rrefs
13
+ rrefs = @site.rrefs(@req.base)
14
+ wabisabi = []
15
+ if rrefs
16
+ w = []
17
+ rrefs.each{|key|
18
+ page = @site[key]
19
+ if page
20
+ w.push([:span, {:class => "rref"}, [:a, {:href => "#{key}.html"}, page.get_title]])
21
+ else
22
+ rrefs.delete(key)
23
+ end
24
+ }
25
+ if w.size > 0
26
+ wabisabi = [:div, {:class => "rrefs"}] + w
27
+ end
28
+ end
29
+ return wabisabi
30
+ end
31
+
32
+ private
33
+ def clear_rrefs(mykey)
34
+ @site.each {|page|
35
+ page.rrefs.delete(mykey) unless page.rrefs.nil?
36
+ }
37
+ end
38
+
39
+ def create_rrefs(mykey)
40
+ links = find_links_to_this_page(mykey)
41
+ @site.rrefs(mykey).put(links) if links.size > 0
42
+ end
43
+
44
+ def find_links_to_this_page(mykey)
45
+ links = []
46
+ @site.each {|page|
47
+ l = extract_wiki_links(page.get)
48
+ if l.include?(mykey)
49
+ links.push(page.key)
50
+ end
51
+ }
52
+ links
53
+ end
54
+
55
+ def update_rrefs
56
+ list = backup_list(@site,@req.base)
57
+ # new page already has two pages at this point
58
+ list = list.sort {|a,b| a[1] <=> b[1]}[-2..-1]
59
+ if list
60
+ links = list.map{|w|
61
+ extract_wiki_links(w[0])
62
+ }
63
+
64
+ new_links = links[1] - links[0]
65
+ deleted_links = links[0] - links[1]
66
+
67
+ update_links(new_links,"add")
68
+ update_links(deleted_links,"delete")
69
+ end
70
+ end
71
+
72
+ def update_links(links, method)
73
+ links.each {|key|
74
+ rrefs = @site.rrefs(key)
75
+ rrefs.send(method, @req.base) unless rrefs.nil?
76
+ }
77
+ end
78
+
79
+ def extract_wiki_links(wiki)
80
+ links = []
81
+ wabisabi = wiki_to_wabisabi(wiki)
82
+ wabisabi.each_tag(:a) {|e|
83
+ href = e.attr[:href]
84
+ if (!href.nil? and !href.empty?)
85
+ key = href_to_key(href)
86
+ links.push(key) if !key.nil?
87
+ end
88
+ }
89
+ return links
90
+ end
91
+
92
+ def wiki_to_wabisabi(wiki)
93
+ tokens = Qwik::TextTokenizer.tokenize(wiki)
94
+ return Qwik::TextParser.make_tree(tokens)
95
+ end
96
+
97
+ def href_to_key(href)
98
+ #fix me! this is from site-reslove.rb#resolve_ref
99
+ return nil if /^(?:http|https|ftp|file):\/\// =~ href
100
+ return nil if href.include?('?') # ignore command link
101
+ return nil if href[0] == ?/ # already resolved
102
+ return nil if /\.html\z/ !~ href # ignore not html file
103
+ key = href.sub(/\.html\z/, '')
104
+ page = @site.get_by_title(key)
105
+ if page && page.key != key
106
+ key = page.key
107
+ end
108
+ return key
109
+ end
110
+ end
111
+ end
112
+
113
+ if $0 == __FILE__
114
+ require 'qwik/test-common'
115
+ $test = true
116
+ end
117
+
118
+ if defined?($test) && $test
119
+ class TestActRRefs < Test::Unit::TestCase
120
+ include TestSession
121
+
122
+ def test_plg_rrefs
123
+ t_add_user
124
+ #test empty rrefs
125
+ ok_wi([],'{{rrefs}}')
126
+
127
+ page = @site['_PageAttribute']
128
+ page.store('{{rrefs}}')
129
+
130
+ ## assertion for a new page
131
+ #create page contatins a link to page2
132
+ res = session('POST /test/.new?t=page1')
133
+ res = session('/test/page1.save?contents=%5b%5bpage2%5d%5d')
134
+
135
+ #create page2
136
+ res = session('POST /test/.new?t=page2')
137
+ res = session('/test/page2.save?contents=page2')
138
+
139
+ #load page2
140
+ res = session('/test/page2.html')
141
+
142
+ #check if page2 has a rref to page1
143
+ ok_xp([:div, {:class => "rrefs"}, [:span, {:class => "rref"}, [:a, {:href => "page1.html"}, "page1"]]],'//div[@class="rrefs"]/')
144
+
145
+
146
+ ## assertion for adding a link to existing page
147
+ #ensure to differ backup epoch time of page2
148
+ sleep(1)
149
+
150
+ #modify page2 to add a link to page1
151
+ res = session('/test/page2.edit')
152
+ md5hex = session_md5(res.body)
153
+ res = session('/test/page2.save?contents=page2%5b%5bpage1%5d%5d&md5hex=' + md5hex)
154
+ ok_in(['Page is saved.'],'title')
155
+
156
+ #check if page1's rrefs has page2
157
+ # comment outed due to cache issue.
158
+ # ok_eq("page2" + $/, @site["page1"].rrefs.get)
159
+
160
+ #load page1
161
+ res = session('/test/page1.html')
162
+
163
+ #check if page1 has a rref to page2
164
+ ok_xp([:div, {:class => "rrefs"}, [:span, {:class => "rref"}, [:a, {:href => "page2.html"}, "page2"]]],'//div[@class="rrefs"]/')
165
+
166
+ ## assetion for deleting a link to page
167
+ #ensure to differ backup epoch time of page2
168
+ sleep(1)
169
+
170
+ #modify page2 to delete a link to page1
171
+ res = session('/test/page2.edit')
172
+ md5hex = session_md5(res.body)
173
+ res = session('/test/page2.save?contents=page2&md5hex=' + md5hex)
174
+ ok_in(['Page is saved.'],'title')
175
+
176
+ #check if page1's rrefs has no content
177
+ # comment outed due to cache issue.
178
+ # ok_eq("",@site["page1"].rrefs.get)
179
+
180
+ ## assetion for deleting page1
181
+ res = session('/test/page1.edit')
182
+ md5hex = session_md5(res.body)
183
+ res = session('/test/page1.save?contents=&md5hex=' + md5hex)
184
+ ok_in(['Page is deleted.'],'title')
185
+
186
+ #check if page2's rrefs has no content
187
+ # comment outed due to cache issue.
188
+ # ok_eq("",@site["page2"].rrefs.get)
189
+ end
190
+
191
+ #=begin
192
+ # check exclusive rrefs update
193
+ # this test takes too long to run as regression
194
+ # please uncomment when needed to test
195
+ def test_multi_pages_update
196
+ t_add_user
197
+
198
+
199
+ # number of pages to update at once.
200
+ # This number should be even.
201
+ # Adequate number is upto the test environment.
202
+ num = 300
203
+
204
+ #create pages0~num
205
+ 0.upto(num){|i|
206
+ t = "page#{i}"
207
+ res = session("POST /test/.new?t=#{t}")
208
+ if ((i&0x1) == 0x1) #odd pages have a link to page0
209
+ res = session("/test/#{t}.save?contents=%5b%5bpage0%5d%5d")
210
+ else #even pages have no links
211
+ res = session("/test/#{t}.save?contents=#{t}")
212
+ end
213
+ }
214
+
215
+ #update page1~num
216
+ 1.upto(num) {|i|
217
+ p = "page#{i}"
218
+ res = session("/test/#{p}.edit")
219
+ }
220
+ sleep(1)
221
+
222
+ ths = []
223
+ 1.upto(num) {|i|
224
+ ths[i] = Thread.new {
225
+ p = "page#{i}"
226
+ if ((i&0x1) == 0x1) #odd pages: remove a link to page0
227
+ res = session("/test/#{p}.save?contents=page0")
228
+ else #even pages: add a link to page0
229
+ res = session("/test/#{p}.save?contents=%5b%5bpage0%5d%5d")
230
+ end
231
+ }
232
+ }
233
+ 1.upto(num){|i|
234
+ ths[i].join
235
+ }
236
+
237
+ #check if page0's rrefs has num/2 pages
238
+ r = @site["page0"].rrefs.get.sort
239
+ ok_eq(num/2,r.to_a.size)
240
+ end
241
+ #=end
242
+
243
+ private
244
+ def session_md5(body)
245
+ md5hex = nil
246
+ body.each_tag(:input) {|e|
247
+ if e.attr[:name] == "md5hex"
248
+ md5hex = e.attr[:value]
249
+ end
250
+ }
251
+ return md5hex
252
+ end
253
+ end
254
+ end
255
+ =end
@@ -0,0 +1,116 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ module Qwik
6
+ class Action
7
+ D_PluginRuby = {
8
+ :dt => 'Embed Ruby code plugin',
9
+ :dd => 'You can embed ruby code on pages.',
10
+ :dc => "* Examples
11
+ {{ruby
12
+ \"<b>hello</b>\"
13
+ }}
14
+ {{ruby
15
+ \"<b>hello</b>\"
16
+ }}
17
+
18
+ * enable_ruby
19
+
20
+ Please enable ruby plugin from 'config.txt'.
21
+ Ask for the administrator.
22
+ }}
23
+ "
24
+ }
25
+
26
+ def plg_ruby(*argv)
27
+ return [:p, "Ruby plugin is not enabled."] if ! @config.enable_ruby
28
+
29
+ return if ! block_given?
30
+ ruby_code = yield
31
+
32
+ require 'date'
33
+
34
+ th = Thread.new {
35
+ $SAFE = 4
36
+ eval(ruby_code)
37
+ }
38
+ result = th.value.to_s
39
+ wabisabi = HTree(result).to_wabisabi
40
+ return [:p, wabisabi]
41
+ end
42
+ end
43
+ end
44
+
45
+ if $0 == __FILE__
46
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
47
+ require 'qwik/test-common'
48
+ $test = true
49
+ end
50
+
51
+ if defined?($test) && $test
52
+ class TestActRuby < Test::Unit::TestCase
53
+ include TestSession
54
+
55
+ def test_plg_ruby
56
+ res = session
57
+ ok_wi [:p, "Ruby plugin is not enabled."],
58
+ "{{ruby
59
+ 'hello'
60
+ }}"
61
+
62
+ @config[:enable_ruby] = true
63
+
64
+ ok_wi [], "{{ruby}}"
65
+
66
+ ok_wi [:p, ["hello"]],
67
+ "{{ruby
68
+ \"hello\"
69
+ }}"
70
+
71
+ ok_wi [:p, ["2"]],
72
+ "{{ruby
73
+ 1 + 1
74
+ }}"
75
+
76
+ ok_wi [:p, ["11"]],
77
+ "{{ruby(1, 1)
78
+ argv[0] + argv[1]
79
+ }}"
80
+
81
+ ok_wi [:p, ["2"]],
82
+ "{{ruby(1, 1)
83
+ argv[0].to_i + argv[1].to_i
84
+ }}"
85
+
86
+ ok_wi [:p,
87
+ [[:pre,
88
+ "\nSun Mon Tue Wed Thu Fri Sat\n 1 2 3 4 \n 5 6 7 8 9 10 11 \n 12 13 14 15 16 17 18 \n 19 20 21 22 23 24 25 \n 26 27 28 29 30 31 \n"],
89
+ "\n"]],
90
+ '{{ruby(2007, 8)
91
+ year = argv[0].to_i
92
+ month = argv[1].to_i
93
+
94
+ str = ""
95
+ str << "<pre>\n"
96
+ str << Date::ABBR_DAYNAMES.join(" ")
97
+ str << "\n"
98
+
99
+ day = Date.new(year, month)
100
+
101
+ str << (" " * day.wday)
102
+ loop do
103
+ str << day.strftime(" %e ")
104
+ str << "\n" if day.wday == 6
105
+ day += 1
106
+ break if day.month != month
107
+ end
108
+ str << "\n"
109
+ str << "</pre>\n"
110
+
111
+ str
112
+ }}'
113
+
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,170 @@
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
+ # This is a sample plugin for qwikWeb.
7
+ # If you'd like to check the details of qwikWeb plugin, please see URL below.
8
+ # http://qwik.jp/HowToMakePlugin.html
9
+ #
10
+
11
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
12
+
13
+ module Qwik
14
+ class Action
15
+ D_PluginSample = {
16
+ :dt => 'Sample plugins',
17
+ :dd => 'These are sample plugins.',
18
+ :dc => "* Example
19
+ You can show famous \"hello, world!\" string by this plugin.
20
+
21
+ As you know, this \"hello world\" plugin is an example to describe
22
+ how you can create your own plugin.
23
+
24
+ Please check this URL for detail.
25
+ http://qwik.jp/HowToMakePlugin.html
26
+
27
+ ** hello world plugin
28
+ {{hello}}
29
+ {{hello}}
30
+ {{hello(\"qwik users\")}}
31
+ {{hello(\"qwik users\")}}
32
+ You can specify the target in the argument.
33
+ ** hello world action
34
+ [[.hello]]
35
+ [[.hello]]
36
+ You can see a page with 'hello world' message.
37
+ ** Monospace plugin
38
+ {{tt(\"This is a test.\")}}
39
+ {{tt(\"This is a test.\")}}
40
+ You can make the string as monotype font face.
41
+
42
+ ** Quote plugin
43
+ {{quote
44
+ This is a text to quote.
45
+ }}
46
+ {{quote
47
+ This is a text to quote.
48
+ }}
49
+ You can make block quote of the string.
50
+ "
51
+ }
52
+
53
+ D_PluginSample_ja = {
54
+ :dt => '�T���v���E�v���O�C��',
55
+ :dd => '�v���O�C���̃T���v���ł��B',
56
+ :dc => '
57
+ qwikWeb�̃v���O�C���������ō���Ă݂�ۂ̎Q�l�ƂȂ�v���O�C����񋟂�
58
+ �Ă��܂��B���̃v���O�C�����������āA���R�Ɏ����Ȃ�̃v���O�C���������
59
+ �݂Ă��������B
60
+
61
+ �ڂ����́A�������URL������񂭂������B
62
+ http://qwik.jp/HowToMakePlugin.html
63
+ * ��
64
+ ** �n���[���[���h�E�v���O�C��
65
+ {{hello}}
66
+ {{hello}}
67
+ �L���ȁuhello, world!�v����ʂɕ\�������邱�Ƃ��ł��܂��B
68
+ {{hello(\"qwik users\")}}
69
+ {{hello(\"qwik users\")}}
70
+ �������Ƃ邱�Ƃ��ł��܂��B
71
+ ** �n���[���[���h�E�A�N�V����
72
+ [[.hello]]
73
+ [[.hello]]
74
+ �uhello, world!�v�ƕ\������܂��B
75
+ ** �����v���O�C��
76
+ {{tt(\"This is a test.\")}}
77
+ {{tt(\"This is a test.\")}}
78
+ �������w�肵�܂��B
79
+ ** ���p�v���O�C��
80
+ {{quote
81
+ This is a text to quote.
82
+ }}
83
+ {{quote
84
+ This is a text to quote.
85
+ }}
86
+ ���p�ł��܂��B
87
+ '
88
+ }
89
+
90
+ def plg_hello(target='world')
91
+ return [:strong, "hello, #{target}!"]
92
+ end
93
+
94
+ def plg_bhello
95
+ content = yield
96
+ content = content.map {|line|
97
+ "hello, #{line.chomp}!\n"
98
+ }.join
99
+ return [:pre, content]
100
+ end
101
+
102
+ def act_hello
103
+ c_notice('hello, world!') {
104
+ 'hi, there.'
105
+ }
106
+ end
107
+
108
+ def plg_tt(text)
109
+ return [:tt, text]
110
+ end
111
+
112
+ def plg_quote
113
+ text = ''
114
+ text = yield if block_given?
115
+ ar = []
116
+ text.each {|line|
117
+ ar << line
118
+ ar << [:br]
119
+ }
120
+ bq = [:blockquote, [:p, {:style=>'font-size:smaller;'}, *ar]]
121
+ return bq
122
+ end
123
+ end
124
+ end
125
+
126
+ if $0 == __FILE__
127
+ require 'qwik/test-common'
128
+ $test = true
129
+ end
130
+
131
+ if defined?($test) && $test
132
+ class TestActSample < Test::Unit::TestCase
133
+ include TestSession
134
+
135
+ def test_plg_hello
136
+ ok_wi([:strong, 'hello, world!'], '{{hello}}')
137
+ ok_wi([:strong, 'hello, qwik!'], '{{hello(qwik)}}')
138
+ ok_wi [:pre, "hello, s!\nhello, t!\n"], '{{bhello
139
+ s
140
+ t
141
+ }}'
142
+ end
143
+
144
+ def test_act_hello
145
+ t_add_user
146
+ res = session('/test/.hello')
147
+ ok_title 'hello, world!'
148
+ ok_in(['hi, there.'], '//div[@class="section"]')
149
+ end
150
+
151
+ def test_plg_tt
152
+ ok_wi([:tt, 't'], '{{tt(t)}}')
153
+ end
154
+
155
+ def test_plg_quote
156
+ ok_wi([:blockquote, [:p, {:style=>'font-size:smaller;'}]],
157
+ '{{quote}}')
158
+ ok_wi([:blockquote, [:p, {:style=>'font-size:smaller;'}]],
159
+ "{{quote\n\n}}")
160
+ ok_wi([:blockquote, [:p, {:style=>'font-size:smaller;'}, "t\n", [:br]]],
161
+ "{{quote\nt\n}}")
162
+ ok_wi([:blockquote, [:p, {:style=>'font-size:smaller;'}, "t\n", [:br]]],
163
+ "{{quote\n\nt\n}}")
164
+ ok_wi([:blockquote, [:p, {:style=>'font-size:smaller;'},
165
+ "t1\n", [:br],
166
+ "t2\n", [:br]]],
167
+ "{{quote\nt1\nt2\n}}")
168
+ end
169
+ end
170
+ end