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,159 @@
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-text'
7
+
8
+ module Qwik
9
+ class Action
10
+ def plg_mail(from = '', time = nil)
11
+ h2 = [:h2]
12
+ h2 << plg_date(time) if time
13
+ h2 << ' From: '+MailAddress.obfuscate(from)
14
+
15
+ content = yield
16
+ content = MailAddress.obfuscate_str(content)
17
+ content = c_pre_text { content }
18
+
19
+ ar = []
20
+ ar << h2
21
+ ar += content
22
+ return ar
23
+ end
24
+
25
+ def plg_date(time_str = nil)
26
+ return unless time_str.is_a?(String)
27
+
28
+ if /\A\d+\z/ =~ time_str # Only number.
29
+ time = Time.at(time_str.to_i)
30
+ date = time.strftime("%b #{time.day}, %Y")
31
+ return [:span, {:class=>'date'}, date]
32
+ elsif /\A\d\d\d\d\-\d\d\-\d\d\z/ =~ time_str # 2005-04-19
33
+ return [:span, {:class=>'date'}, time_str]
34
+ end
35
+ return
36
+ end
37
+ end
38
+ end
39
+
40
+ if $0 == __FILE__
41
+ require 'qwik/test-common'
42
+ $test = true
43
+ end
44
+
45
+ if defined?($test) && $test
46
+ class TestActMail < Test::Unit::TestCase
47
+ include TestSession
48
+
49
+ def ok(e, w, user=DEFAULT_USER) # assert_body_main
50
+ assert_path(e, w, user, "//div[@class='body_main']")
51
+ end
52
+
53
+ def nu_test_mail_old
54
+ ok([:div, {:class=>'day'}, [:h2, {:id=>'From'}, 'From:'],
55
+ [:div, {:class=>'body'},
56
+ [:div, {:class=>'section'}, [[:p, 'a']]]]],
57
+ "{{mail\na\n}}")
58
+ ok([:div,
59
+ {:class=>'day'},
60
+ [:h2, {:id=>'From'}, 'From:'],
61
+ [:div,
62
+ {:class=>'body'},
63
+ [:div, {:class=>'section'}, [[:p, '�e�X�g�ł��B'], ["\n"]]]]],
64
+ "* �e�X�g\n{{mail\n�e�X�g�ł��B\n\n}}")
65
+ ok([:div,
66
+ {:class=>'day'},
67
+ [:h2, {:id=>'979dff15c789fca0315256fc8af6fa64'}, 'From: t@e...'],
68
+ [:div, {:class=>'body'}, [:div, {:class=>'section'},
69
+ [[:p, '�X'], ["\n"]]]]],
70
+ "* �e\n{{mail(t@e.com)\n�X\n\n}}")
71
+ ok([:div,
72
+ {:class=>'day'},
73
+ [:h2,
74
+ {:id=>'979dff15c789fca0315256fc8af6fa64'},
75
+ [:span, {:class=>'date'}, 'Jan 1, 1970'],
76
+ ' From: t@e...'],
77
+ [:div, {:class=>'body'}, [:div, {:class=>'section'},
78
+ [[:p, '�X'], ["\n"]]]]],
79
+ "* �e\n{{mail(t@e.com,0)\n�X\n\n}}")
80
+ ok([:div,
81
+ {:class=>'day'},
82
+ [:h2, {:id=>'979dff15c789fca0315256fc8af6fa64'}, 'From: t@e...'],
83
+ [:div,
84
+ {:class=>'body'},
85
+ [:div, {:class=>'section'}, [[:p, 't@e...'], ["\n"]]]]],
86
+ "* �e\n{{mail(t@e.com)\nt@e.com\n\n}}")
87
+ end
88
+
89
+ def test_mail_new
90
+ ok([:div, {:class=>'day'},
91
+ [:h2, {:id=>'From'}, ' From: '],
92
+ [:div, {:class=>'body'},
93
+ [:div, {:class=>'section'},
94
+ [[:p, 'a']]]]],
95
+ "{{mail\na\n}}")
96
+ ok([:div, {:class=>'day'},
97
+ [:h2, {:id=>'From'}, ' From: '],
98
+ [:div, {:class=>'body'},
99
+ [:div, {:class=>'section'}, [[:p, '�e�X�g�ł��B'], ["\n"]]]]],
100
+ "* �e�X�g\n{{mail\n�e�X�g�ł��B\n\n}}")
101
+ ok([:div, {:class=>'day'},
102
+ [:h2, {:id=>'979dff15c789fca0315256fc8af6fa64'}, ' From: t@e...'],
103
+ [:div, {:class=>'body'},
104
+ [:div, {:class=>'section'}, [[:p, '�X'], ["\n"]]]]],
105
+ "* �e\n{{mail(t@e.com)\n�X\n\n}}")
106
+ ok([:div, {:class=>'day'},
107
+ [:h2, {:id=>'979dff15c789fca0315256fc8af6fa64'},
108
+ [:span, {:class=>'date'}, 'Jan 1, 1970'],
109
+ ' From: t@e...'],
110
+ [:div, {:class=>'body'},
111
+ [:div, {:class=>'section'}, [[:p, '�X'], ["\n"]]]]],
112
+ "* �e\n{{mail(t@e.com,0)\n�X\n\n}}")
113
+ ok([:div, {:class=>'day'},
114
+ [:h2, {:id=>'979dff15c789fca0315256fc8af6fa64'}, ' From: t@e...'],
115
+ [:div, {:class=>'body'},
116
+ [:div, {:class=>'section'}, [[:p, 't@e...'], ["\n"]]]]],
117
+ "* �e\n{{mail(t@e.com)\nt@e.com\n\n}}")
118
+ ok([:div, {:class=>'day'},
119
+ [:h2, {:id=>'979dff15c789fca0315256fc8af6fa64'},
120
+ [:span, {:class=>'date'}, 'Jan 1, 1970'], ' From: t@e...'],
121
+ [:div, {:class=>'body'},
122
+ [:div, {:class=>'section'}, [[:p, 'a', [:br], 'b']]]]],
123
+ "* Test\n{{mail(t@e.com,0)\na\nb\n}}")
124
+ end
125
+
126
+ def test_date
127
+ ok_wi([:span, {:class=>'date'}, '2001-01-01'], '{{date(2001-01-01)}}')
128
+ ok_wi([:span, {:class=>'date'}, 'Jan 1, 1970'], '{{date(0)}}')
129
+ ok_wi([:span, {:class=>'date'}, 'Sep 9, 2001'], '{{date(1000000000)}}')
130
+ ok_wi([], '{{date(a)}}')
131
+ end
132
+
133
+ def nu_test_all_old
134
+ res = session
135
+ ok_wi([:p, 'a ',
136
+ [:h2, 'From: a'], ' b'],
137
+ 'a {{mail(a)}} b')
138
+ ok_wi([:p, 'a ', [:span, {:class=>'date'}, 'Jan 1, 1970'], ' b'],
139
+ 'a {{date(0)}} b')
140
+ ok_wi([:p, 'a ',
141
+ [:h2, [:span, {:class=>'date'}, 'Jan 1, 1970'], ' From: a'],
142
+ ' b'],
143
+ 'a {{mail(a,0)}} b')
144
+ end
145
+
146
+ def test_all_new
147
+ res = session
148
+ ok_wi([:p, 'a ',
149
+ [:h2, ' From: a'], ' b'],
150
+ 'a {{mail(a)}} b')
151
+ ok_wi([:p, 'a ', [:span, {:class=>'date'}, 'Jan 1, 1970'], ' b'],
152
+ 'a {{date(0)}} b')
153
+ ok_wi([:p, 'a ',
154
+ [:h2, [:span, {:class=>'date'}, 'Jan 1, 1970'], ' From: a'],
155
+ ' b'],
156
+ 'a {{mail(a,0)}} b')
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,292 @@
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
+ module Qwik
8
+ class Action
9
+ D_PluginMap = {
10
+ :dt => 'Map plugin',
11
+ :dd => 'You can embed a map and create makers.',
12
+ :dc => "* Example
13
+ {{{
14
+ {{map(139.7005, 35.6595, 3)
15
+ * [139.7005,35.6595] Shibuya
16
+ - Hachiko Mae
17
+ * [139.7030,35.6715] Harajuku
18
+ - Takeshita St.
19
+ }}
20
+ }}}
21
+ See [[PluginMap]] for example.
22
+ * Thanks
23
+ I use '[[Google Local|http://maps.google.com/]]' for the map.
24
+ Thank you very much.
25
+ "
26
+ }
27
+
28
+ def plg_map(clat, clng, mag=0)
29
+ # Prepare maplink div.
30
+
31
+ href = ".map?s=#{@req.sitename}&k=#{@req.base}"
32
+ fullhref = "#{href}&m=full"
33
+
34
+ #href = c_relative_to_root(href)
35
+ #fullhref = c_relative_to_root(fullhref)
36
+ href = "/#{href}"
37
+ fullhref = "/#{fullhref}"
38
+
39
+ div = [:div, {:class=>'maplink'},
40
+ [:iframe, {:src=>href,
41
+ :style=>'width:700px;height:400px;border:0;'}, ''],
42
+ [:br],
43
+ [:div, {:style=>'margin: 0 0 1em 0;'},
44
+ [:a, {:href=>fullhref, :style=>'font-size:x-small;'},
45
+ _('Show map in full screen.')]]]
46
+ content = yield
47
+ elements = c_res(content)
48
+ div += elements
49
+ return div
50
+ end
51
+
52
+ def pre_act_map
53
+ sitename = @req.query['s']
54
+ pagekey = @req.query['k']
55
+ mode = @req.query['m']
56
+
57
+ # Prepare site.
58
+ @site = @memory.farm.get_site(sitename)
59
+ if @site.nil?
60
+ @site = @memory.farm.get_top_site
61
+ return action_no_such_site(@req.sitename)
62
+ end
63
+ if ! @site.is_open?
64
+ c_require_member # IMPORTANT: Security check.
65
+ end
66
+
67
+ page = @site[pagekey]
68
+ c_nerror('No such page.') if page.nil?
69
+ plugin = get_first_plugin(page, 'map')
70
+
71
+ param = plugin[1][:param]
72
+ args = Action.plugin_parse_args(param)
73
+ clat = args.shift.to_f
74
+ clng = args.shift.to_f
75
+ mag = args.shift.to_i
76
+
77
+ content = plugin[2]
78
+
79
+ ar = []
80
+ ar << map_style
81
+ maparea = map_maparea(clat, clng, mag, content, mode)
82
+ ar << maparea
83
+
84
+ title = 'map'
85
+ c_plain(title){ar}
86
+
87
+ head = @res.body.get_path('/head')
88
+ head << map_initial_script
89
+ head << map_script(clat, clng, mag, content, mode)
90
+
91
+ body = @res.body.get_path('/body')
92
+ body[1][:onload] = 'qwikMakeMap();'
93
+
94
+ footer= @res.body.get_path("//div[@class='footer']")
95
+ footer.clear
96
+
97
+ if ! @config.test
98
+ map_make_page_utf8
99
+ end
100
+ end
101
+
102
+ def map_make_page_utf8
103
+ @res.body = @res.body.format_xml.page_to_xml
104
+ @res['Content-Type'] = "text/html; charset=#{Charset::UTF8}"
105
+ end
106
+
107
+ def get_first_plugin(page, method)
108
+ str = page.load
109
+ elements = c_parse(str)
110
+ elements.each {|element|
111
+ if element[0] == :plugin && element[1][:method] == method
112
+ return element
113
+ end
114
+ }
115
+ return nil
116
+ end
117
+
118
+ GOOGLE_MAPS_API_KEY_FILE = 'google-maps-api-key.txt'
119
+
120
+ def map_get_api_key
121
+ file = @config.etc_dir.path+GOOGLE_MAPS_API_KEY_FILE
122
+ return if ! file.exist?
123
+ return file.open {|f| f.gets }.chomp
124
+ end
125
+
126
+ def map_style
127
+ return [:style, '.header { display: none ! important; }
128
+ body { background: #fff; }']
129
+ end
130
+
131
+ def map_initial_script
132
+ key = map_get_api_key
133
+ #return if key.nil? # Fatal error.
134
+ key ||= '' # Ad hoc.
135
+ src = "http://maps.google.com/maps?file=api&v=1&key=#{key}"
136
+ return [:script, {:src=>src, :type=>'text/javascript'}, '']
137
+ end
138
+
139
+ def map_script(clat, clng, mag, content, mode='iframe')
140
+ maparea = []
141
+
142
+ # Prepare markers.
143
+ elements = c_parse(content)
144
+
145
+ markers = []
146
+ marker = nil
147
+
148
+ elements.each {|element|
149
+ if element[0] == :h2
150
+ marker = []
151
+ markers << marker
152
+ marker << element
153
+ else
154
+ if marker
155
+ marker << element
156
+ end
157
+ end
158
+ }
159
+
160
+ ms = []
161
+ markers.each {|marker|
162
+ h2 = marker[0]
163
+ if h2[1] == '[' && h2[3] == ']'
164
+ lat, lng = h2[2].split(',')
165
+ h2[1] = '' # Destruct headers.
166
+ h2[2] = ''
167
+ h2[3] = ''
168
+ ms << [lat, lng, marker]
169
+ end
170
+ }
171
+
172
+ marker_script = ''
173
+ ms.each {|lat, lng, marker|
174
+ s = marker.rb_format_xml(-1, -1)
175
+ s = s.sub(/\n/, '')
176
+ marker_script << "qwikSetMark(#{lat}, #{lng}, '#{s}');\n"
177
+ }
178
+
179
+ # Add script.
180
+ clat = clat.to_f
181
+ clng = clng.to_f
182
+ mag = mag.to_i
183
+ # You should set width for div element in the marker.
184
+ script = "
185
+ function qwikMakeMap() {
186
+ if (GBrowserIsCompatible()) {
187
+ // Define the function inside.
188
+ function qwikSetMark(lat, lng, body) {
189
+ var point = new GPoint(lng, lat);
190
+ var html=\"<div style='width:220px'>\"+body+\"</div>\";
191
+ var marker = new GMarker(point);
192
+ map.addOverlay(marker);
193
+ GEvent.addListener(marker, 'click', function() {
194
+ marker.openInfoWindowHtml(html);
195
+ });
196
+ marker.openInfoWindowHtml(html);
197
+ }
198
+
199
+ var map = new GMap(document.getElementById('map'));
200
+ map.addControl(new GLargeMapControl());
201
+ map.addControl(new GMapTypeControl());
202
+ map.centerAndZoom(new GPoint(#{clng}, #{clat}), #{mag});
203
+ GEvent.addListener(map, 'moveend', function() {
204
+ var center = map.getCenterLatLng();
205
+ var latLngStr = '* [' + center.y + ',' + center.x + '] ';
206
+ document.getElementById('message').innerHTML = latLngStr;
207
+ });
208
+
209
+ #{marker_script}
210
+ }
211
+ }
212
+ "
213
+ maparea << [:script, {:type=>'text/javascript'},
214
+ "\n//",
215
+ [:'![CDATA[', "\n\n"+script+"\n//"],
216
+ "\n"]
217
+ return maparea
218
+ end
219
+
220
+ def map_maparea(clat, clng, mag, content, mode='iframe')
221
+ maparea = [:div, {:class=>'maparea'}]
222
+
223
+ # Add initial script.
224
+ #maparea << map_initial_script
225
+
226
+ # Add <div id='map'></div>
227
+ style = 'width: 696px; height: 382px;'
228
+ style = 'width: 100%; height: 600px;' if mode == 'full'
229
+ maparea << [:div, {:id=>'map', :style=>style}, '']
230
+ maparea << [:div, {:id=>'message', :style=>'font-size:x-small;'}, '']
231
+ end
232
+ end
233
+ end
234
+
235
+ if $0 == __FILE__
236
+ require 'qwik/test-common'
237
+ require 'qwik/wabisabi-format-xml'
238
+ $test = true
239
+ end
240
+
241
+ if defined?($test) && $test
242
+ class TestActMap < Test::Unit::TestCase
243
+ include TestSession
244
+
245
+ TEST_MAP_CONTENT = '
246
+ {{map(139.7005, 35.6595, 3)
247
+ * [139.7005,35.6595] Shibuya
248
+ - Hachiko Mae
249
+ * [139.7030,35.6715] Harajuku
250
+ - Takeshita St.
251
+ }}
252
+ '
253
+
254
+ def test_all
255
+ t_add_user
256
+
257
+ page = @site.create_new
258
+ str = TEST_MAP_CONTENT
259
+ page.store(str)
260
+ res = session '/test/1.html'
261
+
262
+ ok_title '1'
263
+ w = res.body.get_path("//div[@class='maplink']")
264
+ eq [:div, {:class=>'maplink'},
265
+ [:iframe, {:src=>'/.map?s=test&k=1',
266
+ :style=>'width:700px;height:400px;border:0;'}, '']],
267
+ w[0..2]
268
+
269
+ res = session '/.map?s=test&k=1'
270
+ ok_title 'map'
271
+ w = res.body.get_path("//div[@class='maparea']")
272
+ end
273
+
274
+ def nutest_map
275
+ str = '
276
+ {{map(1, 2, 3, 400, 300)
277
+ * StoreA
278
+ ,4,5
279
+ - List1
280
+ - http://example.com/StoreA
281
+ > CommentA
282
+ * StoreB
283
+ ,6,7
284
+ {{file(StoreB.jpg)}}
285
+ - List2
286
+ - http://example.com/StoreB
287
+ > CommentB
288
+ }}
289
+ '
290
+ end
291
+ end
292
+ end