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,261 @@
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/act-basic'
7
+ require 'qwik/wabisabi-index'
8
+
9
+ module Qwik
10
+ class Action
11
+ # ==================== c_surface
12
+ # http://co/qwik/.test_surface
13
+ # Only for page design check.
14
+ def act_test_surface
15
+ w = c_page_res('TextFormat')
16
+ c_surface('act_test_surface') { w }
17
+ end
18
+
19
+ def c_surface(title, patch=true, &b)
20
+ msg = yield
21
+ c_set_status
22
+ c_set_contenttype
23
+ c_set_no_cache
24
+ body = surface_generate(title, msg, patch)
25
+ c_set_body(body)
26
+ end
27
+
28
+ def surface_generate(title, msg, patch=true)
29
+ template = @memory.template.get('surface')
30
+ adminmenu = c_page_res('_AdminMenu')
31
+ if patch
32
+ li = adminmenu.get_path('//ul/li[2]')
33
+ li.clear if li
34
+ end
35
+ data = {
36
+ :title => title,
37
+ :theme_path => site_theme_path,
38
+ :adminmenu => adminmenu,
39
+ :toc => nil, # Do not use toc.
40
+ :h1 => title, # same as title.
41
+ :body => msg,
42
+ :sidemenu => surface_get_sidemenu,
43
+ :pageattribute => c_page_res('_PageAttribute'),
44
+ }
45
+ surface_template(template, data)
46
+ return template
47
+ end
48
+
49
+ # ==================== view page
50
+ # Called from act-html.rb:28, 57
51
+ def surface_view(pagename)
52
+ c_set_status
53
+ c_set_contenttype
54
+ c_set_no_cache
55
+ body = surface_view_generate(pagename)
56
+ c_set_body(body)
57
+ end
58
+
59
+ def surface_view_generate(pagename)
60
+ page = @site[pagename]
61
+ template = @memory.template.get('surface')
62
+ data = {
63
+ :title => @site.get_page_title(pagename),
64
+ :theme_path => site_theme_path,
65
+ :adminmenu => c_page_res('_AdminMenu'),
66
+ :toc => toc_inside,
67
+ :h1 => page.get_title,
68
+ :body => surface_get_body(page),
69
+ :sidemenu => surface_get_sidemenu,
70
+ :pageattribute => c_page_res('_PageAttribute'),
71
+ }
72
+ surface_template(template, data)
73
+ return template
74
+ end
75
+
76
+ # act-include:22, act-tag:49
77
+ def surface_get_body(page)
78
+ tree = page.get_body_tree
79
+ w = Resolver.resolve(@site, self, tree)
80
+ w = TDiaryResolver.resolve(@config, @site, self, w)
81
+ return w
82
+ end
83
+
84
+ private
85
+
86
+ def surface_get_sidemenu
87
+ page = @site.get_superpage('SideMenu')
88
+ tree = page.get_tree
89
+ w = Resolver.resolve(@site, self, tree)
90
+ return w
91
+ end
92
+
93
+ # ==================== build using template
94
+ # Destructive for template.
95
+ def old_surface_template(template, data)
96
+ w = template.get_tag('head') # TAKETIME: Here!
97
+ w.insert(1, [:title, data[:title]])
98
+ media = 'screen,tv,print'
99
+ w.insert(w.length, [:link, {:href=>'.theme/css/base.css', :media=>media,
100
+ :rel=>'stylesheet', :type=>'text/css'}])
101
+ w.insert(w.length, [:link, {:href=>data[:theme_path], :media=>media,
102
+ :rel=>'stylesheet', :type=>'text/css'}])
103
+ js = Action.generate_js
104
+ w.insert(w.length, *js)
105
+
106
+ w = template.get_by_class('adminmenu') # TAKETIME: Here!
107
+ w << data[:adminmenu]
108
+
109
+ w = template.get_by_class('toc') # TAKETIME: Here!
110
+ if data[:toc].nil?
111
+ w.clear
112
+ else
113
+ w << data[:toc]
114
+ end
115
+
116
+ w = template.get_tag('h1') # TAKETIME: Here!
117
+ w << data[:h1]
118
+
119
+ w = template.get_by_class('body_enter') # TAKETIME: Here!
120
+ w.clear
121
+
122
+ w = template.get_by_class('body_main') # TAKETIME: Here!
123
+ w << data[:body]
124
+
125
+ w = template.get_by_class('sidebar') # TAKETIME: Here!
126
+ w << data[:sidemenu]
127
+
128
+ w = template.get_by_class('body_leave') # TAKETIME: Here!
129
+ w << [:div, {:class=>'day'},
130
+ [:div, {:class=>'comment'},
131
+ [:div, {:class=>'caption'},
132
+ [:div, {:class=>'page_attribute'},
133
+ data[:pageattribute]]]]]
134
+
135
+ return nil # Do not return any value. Just destruct the template.
136
+ end
137
+
138
+ def new_surface_template(template, data)
139
+ template.make_index
140
+
141
+ w = template.index_tag(:head)
142
+
143
+ w.insert(1, [:title, data[:title]])
144
+
145
+ media = 'screen,tv,print'
146
+ w.insert(w.length, [:link, {:href=>'.theme/css/base.css', :media=>media,
147
+ :rel=>'stylesheet', :type=>'text/css'}])
148
+ w.insert(w.length, [:link, {:href=>data[:theme_path], :media=>media,
149
+ :rel=>'stylesheet', :type=>'text/css'}])
150
+ w.insert(w.length, [:link, {:href=>'rss.xml', :title=>'RSS 0.91',
151
+ :rel=>'alternate', :type=>"application/rss+xml"}])
152
+
153
+ js = Action.generate_js
154
+ w.insert(w.length, *js)
155
+
156
+ w = template.index_class('adminmenu')
157
+ w << data[:adminmenu]
158
+
159
+ w = template.index_class('toc')
160
+ if data[:toc].nil?
161
+ w.clear
162
+ else
163
+ w << data[:toc]
164
+ end
165
+
166
+ w = template.index_tag(:h1)
167
+ w << data[:h1]
168
+
169
+ w = template.index_class('body_enter')
170
+ w.clear
171
+
172
+ w = template.index_class('body_main')
173
+ w << data[:body]
174
+
175
+ w = template.index_class('sidebar')
176
+ w << data[:sidemenu]
177
+
178
+ w = template.index_class('body_leave')
179
+ w << [:div, {:class=>'day'},
180
+ [:div, {:class=>'comment'},
181
+ [:div, {:class=>'caption'},
182
+ [:div, {:class=>'page_attribute'},
183
+ data[:pageattribute]]]]]
184
+
185
+ return nil # Do not return any value. Just destruct the template.
186
+ end
187
+
188
+ #alias surface_template old_surface_template
189
+ alias surface_template new_surface_template
190
+ end
191
+ end
192
+
193
+ if $0 == __FILE__
194
+ require 'qwik/test-common'
195
+ $test = true
196
+ end
197
+
198
+ if defined?($test) && $test
199
+ require 'qwik/test-module-public'
200
+
201
+ class TestActSurface < Test::Unit::TestCase
202
+ include TestSession
203
+ include TestModulePublic
204
+
205
+ def test_test_surface
206
+ t_add_user
207
+ res = session('/test/.test_surface')
208
+ ok_title 'act_test_surface'
209
+ end
210
+
211
+ def test_all
212
+ res = session
213
+
214
+ # @action.generate_surface_page('title', 'msg')
215
+ # ok_xp([:title, 'title'], 'title', res)
216
+
217
+ @action.c_surface('c_surface title') { 'msg' }
218
+ ok_title 'c_surface title'
219
+ end
220
+
221
+ def test_surface_generate
222
+ res = session
223
+
224
+ # test_original_template
225
+ template = @memory.template.get('surface')
226
+ eq [:h1], template.get_tag('h1')
227
+ eq [:div, {:class=>'body_main'}],
228
+ template.get_by_class('body_main')
229
+
230
+ # test_surface_generate
231
+ res = @action.surface_generate('title', 'msg')
232
+ eq [:title, 'title'], res.get_tag('title')
233
+ # eq [:script, {:src=>'.theme/js/base.js',
234
+ # :type=>'text/javascript'}, ''], res.get_tag('script')
235
+ eq [:h1, 'title'], res.get_tag('h1')
236
+ eq [:div, {:class=>'body_main'}, 'msg'],
237
+ res.get_path("//div[@class='body_main']")
238
+ end
239
+
240
+ def test_surface_build_template
241
+ res = session
242
+ t_make_public(Qwik::Action, :surface_template)
243
+ template = @memory.template.get('surface')
244
+ data = {
245
+ :title => 'title',
246
+ :theme_path => 'theme_path',
247
+ :adminmenu => 'adminmenu',
248
+ :toc => 'toc',
249
+ :h1 => 'h1',
250
+ :body => 'body',
251
+ :sidemenu => 'sidemenu',
252
+ :pageattribute => 'pageattribute',
253
+ }
254
+ @action.surface_template(template, data)
255
+ res.body = template
256
+ ok_title 'title'
257
+ ok_xp([:div, {:class=>'sidebar'}, 'sidemenu'],
258
+ "//div[@class='sidebar']")
259
+ end
260
+ end
261
+ end
@@ -0,0 +1,90 @@
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 'uri'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+
9
+ module Qwik
10
+ class Action
11
+ # 1.html -> /test/1.html
12
+ def c_relative_to_root(url)
13
+ return url if /\A\// =~ url # It's already from root path.
14
+ uri = URI(@config.public_url)
15
+ return "#{uri.path}#{@site.url_path}#{url}"
16
+ end
17
+
18
+ # 1.html -> http://example.com/test/1.html
19
+ def c_relative_to_absolute(url)
20
+ if /\Ahttp:\/\// =~ url || /\Ahttps:\/\// =~ url
21
+ return url # It's already absolute URL.
22
+ end
23
+
24
+ # make absolute url
25
+ fromrootpath = c_relative_to_root(url)
26
+ return "#{@site.host_url.chomp('/')}#{fromrootpath}"
27
+ end
28
+
29
+ def is_valid_url?(str)
30
+ return %r!\Ahttp://[\-\_\.\/\?A-Za-z]+\z! =~ str
31
+ end
32
+ end
33
+ end
34
+
35
+ if $0 == __FILE__
36
+ require 'qwik/test-common'
37
+ $test = true
38
+ end
39
+
40
+ if defined?($test) && $test
41
+ class TestActUrl < Test::Unit::TestCase
42
+ include TestSession
43
+
44
+ def test_normal_site
45
+ res = session
46
+ eq '/test/1.html', @action.c_relative_to_root('1.html')
47
+ eq 'http://example.com/test/1.html',
48
+ @action.c_relative_to_absolute('1.html')
49
+ end
50
+
51
+ def test_top_site
52
+ res = session
53
+ @action.instance_eval {
54
+ @site = @memory.farm.get_top_site
55
+ }
56
+ eq '/1.html', @action.c_relative_to_root('1.html')
57
+ eq 'http://example.com/1.html', @action.c_relative_to_absolute('1.html')
58
+ end
59
+
60
+ def test_external_site
61
+ res = session
62
+ page = @site['_SiteConfig']
63
+ page.store(':siteurl:http://example.org/')
64
+ eq '/1.html', @action.c_relative_to_root('1.html')
65
+ eq 'http://example.org/1.html', @action.c_relative_to_absolute('1.html')
66
+ end
67
+
68
+ def test_with_path
69
+ t_with_path {
70
+ res = session
71
+ eq '/qwik/test/1.html', @action.c_relative_to_root('1.html')
72
+ eq 'http://www.example.org/qwik/test/1.html',
73
+ @action.c_relative_to_absolute('1.html')
74
+ }
75
+ end
76
+
77
+ def test_anomaly
78
+ res = session
79
+ eq '/.theme', @action.c_relative_to_root('/.theme')
80
+ eq 'http://example.gov/',
81
+ @action.c_relative_to_absolute('http://example.gov/')
82
+ end
83
+
84
+ def test_is_valid_url?
85
+ res = session
86
+ eq true, !!@action.is_valid_url?('http://e.com/')
87
+ eq true, !!@action.is_valid_url?("http://e.com/?")
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,12 @@
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
+ all:
6
+ echo 'You can download dependencies by "make get"'
7
+
8
+ get: get_typekey
9
+
10
+ get_typekey:
11
+ wget http://jouno.s11.xrea.com/x/script/typekey/TypeKey.rb
12
+
@@ -0,0 +1 @@
1
+ $LOAD_PATH << File.expand_path(File::dirname(__FILE__))
@@ -0,0 +1,299 @@
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 'optparse'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+ require 'qwik/version'
9
+
10
+ module Qwik
11
+ class Config
12
+ LIBDIR = File.dirname(__FILE__)
13
+ DEBUG_BASEDIR = File.expand_path(LIBDIR+'/../../')
14
+
15
+ QuickMLInternal = {
16
+ # QuickML Internal use.
17
+ :logger => nil,
18
+ :ml_mutexes => nil,
19
+ :catalog => nil,
20
+ :message_catalog => nil,
21
+ :content_type => 'text/plain',
22
+ }
23
+
24
+ DefaultConfig = {
25
+ # For test and debug.
26
+ :debug => false,
27
+ :test => false,
28
+ :verbose_mode => false,
29
+
30
+ # Server setting.
31
+ :server_type => 'webrick',
32
+ #:server_type => 'mongrel',
33
+ :user => 'daemon',
34
+ :group => 'daemon',
35
+ :bind_address => '0.0.0.0',
36
+ :web_port => 9190,
37
+ :ml_port => 9195,
38
+
39
+ # Public Web address.
40
+ :public_url => 'http://example.com/',
41
+ :default_sitename => 'www',
42
+
43
+ # Mailing list setting.
44
+ :ml_domain => 'example.com',
45
+ :ml_postmaster => 'postmaster@example.com',
46
+
47
+ # Send mail setting.
48
+ :smtp_host => '127.0.0.1',
49
+ :smtp_port => 25,
50
+
51
+ # Experimental.
52
+ :db => 'fsdb',
53
+ :ssl => false,
54
+ :enable_ruby => false,
55
+
56
+ # For Graphviz plugin.
57
+ :graphviz_dot_path => '/usr/bin/dot',
58
+ :graphviz_font_size => '10',
59
+ :graphviz_font_name => 'Sazanami Gothic',
60
+
61
+ # Mailing list server setting.
62
+ :sweep_interval => 3600,
63
+ :allowable_error_interval => 8600,
64
+ :max_threads => 10, # Number of working threads.
65
+ :timeout => 120,
66
+ :use_qmail_verp => false,
67
+ :confirm_ml_creation => false,
68
+
69
+ # Config for each group.
70
+ :auto_unsubscribe_count => 5,
71
+ :max_mail_length => 100 * 1024, # 100KB
72
+ :max_ml_mail_length => 100 * 1024, # 100KB
73
+ :max_members => 100,
74
+ :ml_alert_time => 86400 * 24,
75
+ :ml_life_time => 86400 * 31,
76
+
77
+ # Setting for production mode.
78
+ :sites_dir => '/var/lib/qwik/data',
79
+ :grave_dir => '/var/lib/qwik/grave',
80
+ :cache_dir => '/var/cache/qwik',
81
+ :super_dir => '/usr/share/qwik/super',
82
+ :theme_dir => '/usr/share/qwik/theme',
83
+ :template_dir => '/usr/share/qwik/template',
84
+ :qrcode_dir => '/usr/share/qwik/qrcode',
85
+ :etc_dir => '/etc/qwik',
86
+ :config_file => '/etc/qwik/config.txt',
87
+ :log_dir => '/var/log/qwik',
88
+ :web_pid_file => '/var/run/qwikweb.pid',
89
+ :ml_pid_file => '/var/run/quickml.pid',
90
+ # total size of attachments for each site
91
+ :max_total_file_size => 1 * 1024 * 1024 * 1024, # 1GB
92
+ :max_total_warn_size => 10 * 1024 * 1024, # 10MB
93
+
94
+ # search word cloud
95
+ :search_word_display_num => 100, #number of search words to display
96
+ :search_word_max_num => 10000, #number of search wrods to save
97
+ }
98
+
99
+ DebugConfig = {
100
+ # Setting for debug mode.
101
+ :super_dir => DEBUG_BASEDIR+'/share/super',
102
+ :theme_dir => DEBUG_BASEDIR+'/share/theme',
103
+ :template_dir => DEBUG_BASEDIR+'/share/template',
104
+ :qrcode_dir => DEBUG_BASEDIR+'/share/qrcode',
105
+ }
106
+
107
+ TestConfig = {
108
+ # Setting for test mode.
109
+ :debug => true,
110
+ :test => true, # Do not send mail.
111
+ # :public_url => 'http://example.com/q/',
112
+ # :default_sitename => 'top',
113
+ :ml_domain => 'q.example.com',
114
+ :ml_postmaster => 'postmaster@q.example.com',
115
+ =begin
116
+ :sites_dir => '.',
117
+ :grave_dir => '.',
118
+ :cache_dir => '.',
119
+ :etc_dir => '.',
120
+ :log_dir => '.',
121
+ =end
122
+ :sites_dir => '.test/data',
123
+ :grave_dir => '.test/grave',
124
+ :cache_dir => '.test/cache',
125
+ :etc_dir => '.test/etc',
126
+ :log_dir => '.test/log',
127
+ :web_pid_file => 'qwikweb.pid',
128
+ :ml_pid_file => 'quickml.pid',
129
+ }
130
+
131
+ def initialize
132
+ @config = {}
133
+ @config.update(QuickMLInternal)
134
+ @config.update(DefaultConfig)
135
+ Config.make_accessor(Config, @config, @config[:debug])
136
+ end
137
+
138
+ def [](k)
139
+ return @config[k]
140
+ end
141
+
142
+ def []=(k, v)
143
+ @config[k] = v
144
+ end
145
+
146
+ def update(hash)
147
+ @config.update(hash)
148
+ end
149
+
150
+ # class method
151
+
152
+ def self.load_args_and_config(config, progname, args)
153
+ args_conf = Config.parse_args(progname, args)
154
+ config.update(args_conf) # config file is specified by args
155
+ file_conf = Config.load_config_file(config[:config_file])
156
+ config.update(file_conf)
157
+ config.update(args_conf) # Set args again to override.
158
+ end
159
+
160
+ def self.load_config_file(file)
161
+ raise "can not open #{file}" if ! FileTest.exist?(file)
162
+ content = open(file) {|fh| fh.read }
163
+ return parse_config(content)
164
+ end
165
+
166
+ def self.parse_config(str)
167
+ config = {}
168
+ str.each_line {|line|
169
+ next unless /\A\:/ =~ line
170
+ ar = line.chomp.split(':', 3)
171
+ next if ar[1].empty?
172
+ config[ar[1].intern] = parse_value(ar[2])
173
+ }
174
+ return config
175
+ end
176
+
177
+ def self.parse_value(v)
178
+ v = $1 if /\A(.+?)\#.*\z/ =~ v # remove comment
179
+ v = v.strip
180
+ case v
181
+ when 'true'; return true
182
+ when 'false'; return false
183
+ when 'nil'; return nil
184
+ when /\A\d+\z/; return v.to_i
185
+ # Only numbers, * and spaces are allowable.
186
+ # It is allowable to use eval in this context.
187
+ when /\A[\d\ \*]+\z/; return eval(v)
188
+ when /\A(\d+)m\z/; return $1.to_i * 60
189
+ when /\A(\d+)h\z/; return $1.to_i * 60 * 60
190
+ when /\A(\d+)d\z/; return $1.to_i * 60 * 60 * 24
191
+ when /\A(\d+)w\z/; return $1.to_i * 60 * 60 * 24 * 7
192
+ when /\A(\d+)KB\z/; return $1.to_i * 1024
193
+ when /\A(\d+)MB\z/; return $1.to_i * 1024 * 1024
194
+ when /\A(\d+)GB\z/; return $1.to_i * 1024 * 1024 * 1024
195
+ end
196
+ v.gsub!('$BASEDIR') { DEBUG_BASEDIR }
197
+ return v
198
+ end
199
+
200
+ def self.make_accessor(klass, config, debug=false)
201
+ config.each_key {|k|
202
+ if ! klass.method_defined?(k)
203
+ klass.class_eval "
204
+ def #{k}
205
+ return @config[:#{k}]
206
+ end
207
+ "
208
+ end
209
+ }
210
+ end
211
+
212
+ def self.parse_args(myprog, args)
213
+ config = {}
214
+ optionparser = OptionParser.new {|opts|
215
+ opts.banner = "Usage: #{myprog} [options]"
216
+ opts.separator ''
217
+ opts.separator 'Specific options:'
218
+ opts.on('-c', '--config file', 'Specify config file.') {|a|
219
+ config[:config_file] = a
220
+ }
221
+ opts.on('-d', '--[no-]debug', 'Run in debug mode') {|a|
222
+ config[:debug] = a
223
+ }
224
+ opts.separator ''
225
+ opts.separator 'Common options:'
226
+ opts.on_tail('-h', '--help', 'Show this message') {
227
+ puts opts
228
+ exit
229
+ }
230
+ opts.on_tail('-v', '--version', 'Show version') {
231
+ puts VERSION
232
+ exit
233
+ }
234
+ }
235
+ optionparser.parse!(args)
236
+ return config
237
+ end
238
+ end
239
+ end
240
+
241
+ if $0 == __FILE__
242
+ require 'test/unit'
243
+ $test = true
244
+ end
245
+
246
+ if defined?($test) && $test
247
+ class TestConfig < Test::Unit::TestCase
248
+ def test_class_method
249
+ c = Qwik::Config
250
+
251
+ # test_parse_config
252
+ assert_equal({}, c.parse_config('::'))
253
+ assert_equal({}, c.parse_config('::v'))
254
+ assert_equal({:k=>''}, c.parse_config(':k:'))
255
+ assert_equal({:k=>''}, c.parse_config(':k: '))
256
+
257
+ assert_equal({:k=>'v'}, c.parse_config(':k:v'))
258
+ assert_equal({:k=>'v:v'}, c.parse_config(':k:v:v'))
259
+ assert_equal({:k=>'v'}, c.parse_config("\#c\n:k:v"))
260
+ assert_equal({:k=>'v'}, c.parse_config(':k:v#comment'))
261
+ assert_equal({:k=>'v'}, c.parse_config(':k:v #comment'))
262
+
263
+ assert_equal({:k=>4}, c.parse_config(':k: 2 * 2'))
264
+ assert_equal({:k=>'1.1'}, c.parse_config(':k:1.1'))
265
+
266
+ assert_equal({:k=>Qwik::Config::DEBUG_BASEDIR},
267
+ c.parse_config(':k:$BASEDIR'))
268
+
269
+ # test_parse_value
270
+ assert_equal true, c.parse_value('true')
271
+ assert_equal false, c.parse_value('false')
272
+ assert_equal nil, c.parse_value('nil')
273
+
274
+ assert_equal 1, c.parse_value('1')
275
+ assert_equal 4, c.parse_value('2*2')
276
+ assert_equal 4, c.parse_value('2 * 2')
277
+
278
+ assert_equal 60, c.parse_value('1m')
279
+ assert_equal 3600, c.parse_value('1h')
280
+ assert_equal 86400, c.parse_value('1d')
281
+ assert_equal 604800, c.parse_value('1w')
282
+ assert_equal 1024, c.parse_value('1KB')
283
+ assert_equal 1048576, c.parse_value('1MB')
284
+ assert_equal 1073741824, c.parse_value('1GB')
285
+
286
+ # test_parse_args
287
+ assert_equal({:debug=>true}, c.parse_args('myprog', ['-d']))
288
+ end
289
+
290
+ def test_all
291
+ # test_new
292
+ config = Qwik::Config.new
293
+ assert_equal false, config.debug
294
+ assert_equal false, config.test
295
+ config[:debug] = true
296
+ assert_equal true, config.debug
297
+ end
298
+ end
299
+ end