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,63 @@
1
+ #
2
+ # Copyright (C) 2002-2004 Satoru Takabayashi <satoru@namazu.org>
3
+ # Copyright (C) 2003-2006 Kouichirou Eto
4
+ # All rights reserved.
5
+ # This is free software with ABSOLUTELY NO WARRANTY.
6
+ #
7
+ # You can redistribute it and/or modify it under the terms of
8
+ # the GNU General Public License version 2.
9
+ #
10
+
11
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
12
+ require 'qwik/group'
13
+
14
+ module QuickML
15
+ class Group
16
+ def need_alert?(now = Time.now)
17
+ return false if forward? || @group_config.permanent? || alerted?
18
+ return @db.last_article_time + @group_config[:ml_alert_time] <= now
19
+ end
20
+
21
+ def inactive?(now = Time.now)
22
+ return false if forward? || @group_config.permanent?
23
+ return @db.last_article_time + @group_config[:ml_life_time] < now
24
+ end
25
+ end
26
+ end
27
+
28
+ if $0 == __FILE__
29
+ require 'qwik/group'
30
+ require 'qwik/test-module-ml'
31
+ $test = true
32
+ end
33
+
34
+ if defined?($test) && $test
35
+ class TestGroupSweep < Test::Unit::TestCase
36
+ include TestModuleML
37
+
38
+ def setup_group
39
+ return QuickML::Group.new(@ml_config, 'test@example.com')
40
+ end
41
+
42
+ def test_all
43
+ group = setup_group
44
+
45
+ ok_eq(false, group.forward?)
46
+
47
+ # t_make_public(QuickML::Group, :permanent?)
48
+ # ok_eq(false, group.permanent?)
49
+
50
+ t_make_readable(QuickML::Group, :db)
51
+ assert_instance_of(Time, group.db.last_article_time)
52
+
53
+ t_make_readable(QuickML::Group, :group_config)
54
+ ok_eq(2678400, group.group_config[:ml_life_time])
55
+
56
+ t_make_public(QuickML::Group, :alerted?)
57
+ ok_eq(false, group.alerted?)
58
+
59
+ ok_eq(false, group.need_alert?(Time.at(0)))
60
+ ok_eq(false, group.need_alert?(Time.at(1000000000)))
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,157 @@
1
+ #
2
+ # Copyright (C) 2002-2004 Satoru Takabayashi <satoru@namazu.org>
3
+ # Copyright (C) 2003-2006 Kouichirou Eto
4
+ # All rights reserved.
5
+ # This is free software with ABSOLUTELY NO WARRANTY.
6
+ #
7
+ # You can redistribute it and/or modify it under the terms of
8
+ # the GNU General Public License version 2.
9
+ #
10
+
11
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
12
+ require 'qwik/mail'
13
+ require 'qwik/config'
14
+ require 'qwik/ml-gettext'
15
+ require 'qwik/ml-exception'
16
+ require 'qwik/ml-generator'
17
+ require 'qwik/mailaddress'
18
+
19
+ require 'qwik/util-basic'
20
+ require 'qwik/util-safe'
21
+
22
+ require 'qwik/group-config'
23
+ require 'qwik/group-cond'
24
+ require 'qwik/group-member'
25
+
26
+ require 'qwik/group-site'
27
+ require 'qwik/group-sweep'
28
+ require 'qwik/group-mail'
29
+ require 'qwik/group-sendmail'
30
+ require 'qwik/group-confirm'
31
+
32
+ module QuickML
33
+ class Group
34
+ include GetText
35
+
36
+ # ============================== initialize
37
+ def initialize (config, address, creator = nil, message_charset = nil)
38
+ @config = config
39
+ @address = address
40
+ @name, domain = Group.get_name(@address)
41
+ @return_address = Group.generate_return_address(@address,
42
+ @config.use_qmail_verp)
43
+
44
+ # init_db
45
+ @db = GroupDB.new(@config.sites_dir, @name)
46
+ init_site # initialize for GroupSite
47
+ @db.set_site(@site)
48
+
49
+ @added_members = []
50
+
51
+ @logger = @config.logger
52
+ @catalog = @config.catalog
53
+
54
+ init_group_config
55
+ init_members
56
+ init_count
57
+ init_charset
58
+
59
+ @message_charset = message_charset || @charset
60
+ @logger.log "[#{@name}]: New ML by #{creator}" if newly_created?
61
+ end
62
+
63
+ attr_reader :name
64
+ attr_reader :address
65
+ attr_reader :return_address
66
+ attr_reader :count
67
+ attr_reader :charset
68
+
69
+ def close_dummy
70
+ @logger.log("[#{@name}]: ML will be closed")
71
+ end
72
+
73
+ def close
74
+ @db.delete(:Members)
75
+ @db.delete(:Count)
76
+ @db.delete(:Alerted)
77
+ @db.delete(:Charset)
78
+ @db.delete(:Config)
79
+ @db.delete(:WaitingMembers)
80
+ @db.delete(:WaitingMessage)
81
+ @logger.log("[#{@name}]: ML Closed")
82
+ end
83
+
84
+ private
85
+
86
+ def self.get_name(address)
87
+ raise InvalidMLName if /@.*@/ =~ address
88
+ name, host = address.split('@')
89
+ raise InvalidMLName if ! valid_name?(name)
90
+ return name, host
91
+ end
92
+
93
+ def self.valid_name? (name)
94
+ # Do not allow '_' and '.' for the name.
95
+ return /\A[0-9a-zA-Z-]+\z/ =~ name
96
+ end
97
+
98
+ def self.generate_return_address(address, use_qmail_verp = false)
99
+ name, domain = Group.get_name(address)
100
+
101
+ # e.g. <foo=return=@quickml.com-@[]>
102
+ return "#{name}=return=@#{domain}-@[]" if use_qmail_verp
103
+
104
+ # e.g. <foo=return@quickml.com>
105
+ return "#{name}=return@#{domain}"
106
+ end
107
+ end
108
+ end
109
+
110
+ if $0 == __FILE__
111
+ require 'qwik/test-module-ml'
112
+ $test = true
113
+ end
114
+
115
+ if defined?($test) && $test
116
+ class TestGroup < Test::Unit::TestCase
117
+ include TestModuleML
118
+
119
+ def setup_group
120
+ return QuickML::Group.new(@ml_config, 'test@example.com')
121
+ end
122
+
123
+ def test_class_method
124
+ c = QuickML::Group
125
+
126
+ # test_get_name
127
+ ok_eq(["test", "example.com"], c.get_name('test@example.com'))
128
+
129
+ # test_vaild_name
130
+ ok_eq(true, !!c.valid_name?('t'))
131
+ ok_eq(true, !!c.valid_name?('t-t'))
132
+ ok_eq(false, !!c.valid_name?('t_t'))
133
+ ok_eq(false, !!c.valid_name?('t.t'))
134
+ ok_eq(false, !!c.valid_name?('test@example.com'))
135
+ ok_eq(false, !!c.valid_name?('test@qwik@jp'))
136
+ ok_eq(true, !!c.valid_name?('test'))
137
+ ok_eq(false, !!c.valid_name?('te.st'))
138
+
139
+ # test_generate_return_address
140
+ ok_eq("test=return@example.com",
141
+ c.generate_return_address('test@example.com'))
142
+ ok_eq("test=return=@example.com-@[]",
143
+ c.generate_return_address('test@example.com', true))
144
+ end
145
+
146
+ def test_all
147
+ group = setup_group
148
+
149
+ # test_attr
150
+ ok_eq('test', group.name)
151
+ ok_eq('test@example.com', group.address)
152
+ ok_eq("test=return@example.com", group.return_address)
153
+ ok_eq(0, group.count)
154
+ ok_eq(nil, group.charset)
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,6 @@
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
+ dir = File.expand_path(File.dirname(__FILE__) + '/../../lib')
6
+ $LOAD_PATH.unshift(dir) if !$LOAD_PATH.include?(dir)
@@ -0,0 +1,104 @@
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 HtmlGeneratorUnit
6
+ def a(arg=[], title=nil, &block)
7
+ if arg.kind_of?(String)
8
+ ha = {:href=>arg}
9
+ ha.update(:title=>title) if title
10
+ return make(:a, ha, &block)
11
+ end
12
+ make(:a, arg, &block)
13
+ end
14
+
15
+ def img(src='', alt='')
16
+ make(:img, {:src=>src, :alt=>alt})
17
+ end
18
+
19
+ def text(name='', value=nil, size=nil, maxsize=nil)
20
+ hash = {:name=>name, :value=>value, :size=>size, :maxsize=>maxsize}
21
+ hash.delete_if {|k, v| v.nil? }
22
+ make(:input, hash)
23
+ end
24
+
25
+ def password(name='', value=nil, size=nil)
26
+ hash = {:type=>'password', :name=>name, :value=>value, :size=>size}
27
+ hash.delete_if {|k, v| v.nil? }
28
+ make(:input, hash)
29
+ end
30
+
31
+ def form(a=nil, b=nil, c=nil, &block)
32
+ ar = []
33
+ if a.is_a? Hash
34
+ ar << a
35
+ else
36
+ ar << {:method=>a} if a
37
+ ar << {:action=>b} if b
38
+ ar << {:enctype=>c} if c
39
+ end
40
+ make(:form, ar, &block)
41
+ end
42
+
43
+ def hidden(a='', b=nil)
44
+ ar = []
45
+ if a.is_a? Hash
46
+ ar << a
47
+ else
48
+ ar << {:type=>'hidden'}
49
+ ar << {:name=>a}
50
+ ar << {:value=>b} if b
51
+ end
52
+ make(:input, ar)
53
+ end
54
+
55
+ def select(name='', *args)
56
+ ar = []
57
+ args.each {|arg|
58
+ ar << make(:option, {:name=>arg}){arg}
59
+ }
60
+ make(:select, {:name=>name}){ar}
61
+ end
62
+
63
+ def textarea(name='', cols=nil, rows=nil, &block)
64
+ hash = {:name=>name, :cols=>cols, :rows=>rows}
65
+ hash.delete_if {|k, v| v.nil? }
66
+ make(:textarea, hash){
67
+ block.call
68
+ }
69
+ end
70
+
71
+ def submit(value=nil, name=nil)
72
+ hash = {:type=>'submit', :name=>name, :value=>value}
73
+ hash.delete_if {|k, v| v.nil? }
74
+ make(:input, hash)
75
+ end
76
+
77
+ def radio(a='', b=nil, c=nil)
78
+ ar = []
79
+ if a.is_a? Hash
80
+ a.update(:type=>'radio')
81
+ ar << a
82
+ else
83
+ ar << {:type=>'radio'}
84
+ ar << {:name=>a}
85
+ ar << {:value=>b} if b
86
+ ar << {:checkd=>'checkd'} if c
87
+ end
88
+ make(:input, ar)
89
+ end
90
+
91
+ def contenttype(content='')
92
+ make(:meta, {'http-equiv'=>'Content-Type', :content=>content})
93
+ end
94
+
95
+ def stylesheet(url='', media=nil)
96
+ hash = {:rel=>'stylesheet', :type=>'text/css', :href=>url, :media=>media}
97
+ hash.delete_if {|k, v| v.nil? }
98
+ make(:link, hash)
99
+ end
100
+
101
+ def refresh(sec=0, url='')
102
+ make(:meta, {'http-equiv'=>'Refresh', :content=>"#{sec}; url=#{url}"})
103
+ end
104
+ end
@@ -0,0 +1,149 @@
1
+ #encoding: sjis
2
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
3
+ # This is free software with ABSOLUTELY NO WARRANTY.
4
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
5
+
6
+ $LOAD_PATH << 'compat' unless $LOAD_PATH.include? 'compat'
7
+ #require 'htree'
8
+
9
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
10
+ require 'qwik/htree-to-wabisabi'
11
+ require 'qwik/wabisabi-template'
12
+ require 'qwik/util-string'
13
+
14
+ module Qwik
15
+ class HtmlToWabisabi
16
+ def self.parse(str)
17
+ html = "<html>"+str+"</html>"
18
+ html = html.normalize_newline
19
+
20
+ htree = HTree(html)
21
+ first_child = htree.children[0]
22
+ wabisabi = first_child.to_wabisabi
23
+ wabisabi = wabisabi.inside
24
+ return wabisabi
25
+ end
26
+ end
27
+ end
28
+
29
+ if $0 == __FILE__
30
+ require 'qwik/testunit'
31
+ $test = true
32
+ end
33
+
34
+ if defined?($test) && $test
35
+ class TestHtmlToWabisabi < Test::Unit::TestCase
36
+ def ok(e, s)
37
+ ok_eq(e, Qwik::HtmlToWabisabi.parse(s))
38
+ end
39
+
40
+ def test_ref
41
+ #ok(["\240"], "&nbsp;")
42
+ #ok(["?"], "&nbsp;")
43
+ ok(["<"], "&lt;")
44
+ ok([">"], "&gt;")
45
+ end
46
+
47
+ def test_html_parser
48
+ ok([], '')
49
+ ok(['a'], 'a')
50
+
51
+ # Div element can contain another div element.
52
+ ok([[:div, 't1', [:div, 't2']]], "<div>t1<div>t2")
53
+
54
+ # Span element can not contain div element.
55
+ ok([[:span, 't1'], [:div, 't2']], "<span>t1<div>t2")
56
+
57
+ # Fix the order.
58
+ ok([[:b, [:i, 't']]], "<b><i>t</i></b>")
59
+
60
+ # You can use incomplete html also.
61
+ ok([[:ul, [:li, 't1'], [:li, 't2']]], "<ul><li>t1<li>t2")
62
+
63
+ # test_long_html
64
+ html = <<'EOT'
65
+ <H2>�����ꗗ�ȈՔ�</H2>
66
+ <P>�ڍׂȐ�����<A href="TextFormat.html">TextFormat</A>������񂭂������B</P>
67
+ <H3>���o��2</H3>
68
+ <H4>���o��3</H4>
69
+ <H5>���o��4</H5>
70
+ <H6>���o��5</H6>
71
+ <UL>
72
+ <LI>�ӏ������x��1
73
+ <UL>
74
+ <LI>�ӏ������x��2
75
+ <UL>
76
+ <LI>�ӏ������x��3</LI></UL></LI></UL></LI></UL>
77
+ <OL>
78
+ <LI>�������X�g1
79
+ <OL>
80
+ <LI>�������X�g2
81
+ <OL>
82
+ <LI>�������X�g3</LI></OL></LI></OL></LI></OL><PRE>���`�ς݃e�L�X�g�B</PRE>
83
+ <BLOCKQUOTE>
84
+ <P>���p�B</P></BLOCKQUOTE>
85
+ <DL>
86
+ <DT>Wiki
87
+ <DD>�������݉”\��Web�y�[�W
88
+ <DT>QuickML
89
+ <DD>�ȒP�ɍ��郁�[�����O���X�g�V�X�e��</DD></DL>
90
+ <TABLE>
91
+ <TBODY>
92
+ <TR>
93
+ <TD>����1-1</TD>
94
+ <TD>����1-2</TD>
95
+ <TD>����1-3</TD></TR>
96
+ <TR>
97
+ <TD>����2-1</TD>
98
+ <TD>����2-2</TD>
99
+ <TD>����2-3</TD></TR></TBODY></TABLE>
100
+ <P><EM>����</EM>�A<STRONG>����ɋ���</STRONG>�A<DEL>��������</DEL> <IMG alt=new src="http://example.com/.theme/new.png"> <A href="FrontPage.html">FrontPage</A> <A href="http://www.yahoo.co.jp/">Yahoo!</A></P><PLUGIN param='1' method='recent'></PLUGIN>
101
+ EOT
102
+
103
+ result = [[:h2, "�����ꗗ�ȈՔ�"], "\n",
104
+ [:p, "�ڍׂȐ�����",
105
+ [:a, {:href=>'TextFormat.html'}, 'TextFormat'],
106
+ "������񂭂������B"], "\n",
107
+ [:h3, "���o��2"], "\n",
108
+ [:h4, "���o��3"], "\n",
109
+ [:h5, "���o��4"], "\n",
110
+ [:h6, "���o��5"], "\n",
111
+ [:ul, "\n",
112
+ [:li, "�ӏ������x��1\n",
113
+ [:ul, "\n",
114
+ [:li, "�ӏ������x��2\n",
115
+ [:ul, "\n", [:li, "�ӏ������x��3"]]]]]], "\n",
116
+ [:ol, "\n",
117
+ [:li, "�������X�g1\n",
118
+ [:ol, "\n", [:li, "�������X�g2\n",
119
+ [:ol, "\n", [:li, "�������X�g3"]]]]]],
120
+ [:pre, "���`�ς݃e�L�X�g�B"], "\n",
121
+ [:blockquote, "\n", [:p, "���p�B"]], "\n",
122
+ [:dl, "\n",
123
+ [:dt, "Wiki\n"],
124
+ [:dd, '�������݉”\��Web�y�[�W'+"\n"],
125
+ [:dt, "QuickML\n"],
126
+ [:dd, "�ȒP�ɍ��郁�[�����O���X�g�V�X�e��"]], "\n",
127
+ [:table, "\n",
128
+ [:tbody, "\n",
129
+ [:tr, "\n",
130
+ [:td, "����1-1"], "\n",
131
+ [:td, "����1-2"], "\n",
132
+ [:td, "����1-3"]], "\n",
133
+ [:tr, "\n",
134
+ [:td, "����2-1"], "\n",
135
+ [:td, "����2-2"], "\n",
136
+ [:td, "����2-3"]]]], "\n",
137
+ [:p,
138
+ [:em, "����"], "�A",
139
+ [:strong, "����ɋ���"], "�A",
140
+ [:del, "��������"], ' ',
141
+ [:img, {:alt=>'new', :src=>'http://example.com/.theme/new.png'}], ' ',
142
+ [:a, {:href=>'FrontPage.html'}, 'FrontPage'], ' ',
143
+ [:a, {:href=>'http://www.yahoo.co.jp/'}, "Yahoo!"]],
144
+ [:plugin, {:method=>'recent', :param=>'1'}], "\n"]
145
+
146
+ ok(result, html)
147
+ end
148
+ end
149
+ end