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,353 @@
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 'pp'
6
+
7
+ $LOAD_PATH << '..' unless $LOAD_PATH.include? '..'
8
+ require 'qwik/util-pathname'
9
+
10
+ def dummy_replace_line(line) # dummy
11
+ return line
12
+ end
13
+
14
+ def replace_line(line)
15
+ return line.gsub(/\$LOAD_PATH \<\< \'\.\.\'/) {
16
+ "$LOAD_PATH.unshift '..'"
17
+ }
18
+ end
19
+
20
+ def replace_content_by_line(content, dryrun)
21
+ replace = false
22
+ newcontent = ''
23
+ content.each {|line|
24
+ newline = replace_line(line)
25
+ if newline != line
26
+ yield
27
+ puts "-#{line}"
28
+ puts "+#{newline}"
29
+ replace = true
30
+ end
31
+ newline = line if dryrun # for debug
32
+ newcontent << newline
33
+ }
34
+ return replace, newcontent, dryrun
35
+ end
36
+
37
+ def main
38
+ #dryrun = false
39
+ dryrun = true
40
+
41
+ #Dir.glob('test-sub-*.rb') {|fname|
42
+
43
+ last_fname = ''
44
+
45
+ Dir.glob('*.rb') {|fname|
46
+ next if fname == 'dev-replace.rb'
47
+ content = open(fname, 'rb') {|f| f.read }
48
+
49
+ replace, newcontent, dryrun = replace_content_by_line(content, dryrun) {
50
+ if last_fname != fname
51
+ puts "��#{fname}"
52
+ last_fname = fname
53
+ end
54
+ }
55
+
56
+ if replace
57
+ open("#{fname}.bak", 'wb') {|f|
58
+ f.print content # make backup
59
+ }
60
+ open(fname, 'wb') {|f|
61
+ f.print newcontent # make new content
62
+ }
63
+ end
64
+ }
65
+ end
66
+ main
67
+
68
+ =begin
69
+
70
+ OLD_BANNER = <<"EOS"
71
+ #
72
+ # Copyright (C) 2003-2006 Kouichirou Eto
73
+ # All rights reserved.
74
+ # This is free software with ABSOLUTELY NO WARRANTY.
75
+ #
76
+ # You can redistribute it and/or modify it under the terms of
77
+ # the GNU General Public License version 2.
78
+ #
79
+ EOS
80
+
81
+ NEW_BANNER = <<"EOS"
82
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
83
+ # This is free software with ABSOLUTELY NO WARRANTY.
84
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
85
+ EOS
86
+
87
+ def replace_line(line)
88
+ return line.gsub(OLD_BANNER) {
89
+ NEW_BANNER
90
+ }
91
+ end
92
+
93
+ def nureplace_line(line)
94
+ return line.gsub(%r|2003-2005|) {
95
+ "2003-2006"
96
+ }
97
+ end
98
+
99
+ def nu2replace_line(line)
100
+ return line.gsub(%r|c_relative_to_absolute|) {
101
+ "c_relative_to_root"
102
+ }
103
+ end
104
+
105
+ def nu3replace_line(line)
106
+ return line.gsub(%r|c_relative_to_full|) {
107
+ "c_relative_to_absolute"
108
+ }
109
+ end
110
+
111
+ def replace_line(line)
112
+ return line.gsub(%r|\$LOAD_PATH \<\< '\.\.' unless \$LOAD_PATH\.include\?\('\.\.'\)|) {
113
+ "$LOAD_PATH << '..' unless $LOAD_PATH.include? '..'"
114
+ }
115
+ end
116
+
117
+ def replace_line(line)
118
+ return line.gsub(%r|\$LOAD_PATH\.unshift 'compat' unless \$LOAD_PATH\.include\? 'compat'|) {
119
+ "$LOAD_PATH << 'compat' unless $LOAD_PATH.include? 'compat'"
120
+ }
121
+ end
122
+
123
+ def nu3_replace_line(line)
124
+ return line.gsub(%r|\$LOAD_PATH\.unshift\('\.\.\/\.\.\/compat'\) unless \$LOAD_PATH\.include\?\('\.\.\/\.\.\/compat'\)|) {
125
+ "$LOAD_PATH.unshift 'compat' unless $LOAD_PATH.include? 'compat'"
126
+ }
127
+ end
128
+
129
+ def nu2_replace_line(line)
130
+ str = "\$LOAD_PATH << '..' unless \$LOAD_PATH.include?('..')"
131
+ restr = Regexp.escape(str)
132
+ #puts restr
133
+ # \$LOAD_PATH\ <<\ '\.\.'\ unless\ \$LOAD_PATH\.include\?\('\.\.'\)
134
+ re = Regexp.compile(restr)
135
+ out = "\$LOAD_PATH << '..' unless \$LOAD_PATH.include? '..'"
136
+ return line.gsub(re) {
137
+ out
138
+ }
139
+ end
140
+
141
+ def nu_replace_line(line)
142
+ return line.gsub(%r|\$LOAD_PATH << \'\.\./\.\./lib\' unless \$LOAD_PATH\.include\?\('\.\./\.\./lib'|) {
143
+ "\$LOAD_PATH << '..' unless \$LOAD_PATH.include?('..'"
144
+ }
145
+ end
146
+
147
+
148
+ # ============================== souko
149
+ def nu_replace_line(line)
150
+ return line.gsub(/require \"t\/test\"/) {
151
+ "require \"qwik\/test-common\""
152
+ }
153
+ end
154
+
155
+ def nu2replace_line(line)
156
+ return line.gsub(/class TC\_/) {
157
+ 'class Test'
158
+ }
159
+ end
160
+
161
+ def nu3replace_line(line)
162
+ return line.gsub(/if \$debug/) {
163
+ 'if defined?($debug) && $debug'
164
+ }
165
+ end
166
+
167
+ def nu4replace_line(line)
168
+ return line.gsub(/assert_wiki/) {
169
+ 'ok_wi'
170
+ }
171
+ end
172
+
173
+ def nu5replace_line(line)
174
+ return line.gsub(/assert_in\(/) {
175
+ 'ok_in('
176
+ }
177
+ end
178
+
179
+ def nu6replace_line(line)
180
+ return line.gsub(/assert_xpath/) {
181
+ 'ok_xp'
182
+ }
183
+ end
184
+
185
+ def nu7replace_line(line)
186
+ return line.gsub(/assert_equal/) {
187
+ 'ok_eq'
188
+ }
189
+ end
190
+
191
+ def nu8replace_line(line)
192
+ return line.gsub(/require \"test\/unit\"/) {
193
+ "require \"qwik\/testunit\""
194
+ }
195
+ end
196
+
197
+ def nu9replace_line(line)
198
+ return line.gsub(/assert_xml/) {
199
+ 'ok_in'
200
+ }
201
+ end
202
+
203
+ def nu10replace_line(line)
204
+ return line.gsub(/require \"qwik\/memory\"/) {
205
+ "require \"qwik\/server-memory\""
206
+ }
207
+ end
208
+
209
+ def nu11replace_line(line)
210
+ return line.gsub(/include TestQuickMLModule/) {
211
+ 'include TestModuleML'
212
+ }
213
+ end
214
+
215
+ def nu12replace_line(line)
216
+ return line.gsub(/include TestMLSessionModule/) {
217
+ 'include TestModuleML'
218
+ }
219
+ end
220
+
221
+ def nu13replace_line(line)
222
+ return line.gsub(/require \"qwik\/test-module-ms\"/) {
223
+ "require \"qwik/test-module-ml\""
224
+ }
225
+ end
226
+
227
+ def nu14replace_line(line)
228
+ return line.gsub(/user@e.com/) {
229
+ 'bob@example.net'
230
+ }
231
+ end
232
+
233
+ def nu15replace_line(line)
234
+ return line.gsub(/Mail\.send_mail/) {
235
+ 'Sendmail.send_mail'
236
+ }
237
+ end
238
+
239
+ def nu16replace_line(line)
240
+ return line.gsub(/class QuickML$/) {
241
+ 'class Group'
242
+ }
243
+ end
244
+
245
+ def nu17replace_line(line)
246
+ return line.gsub(/QuickML::QuickML/) {
247
+ 'QuickML::Group'
248
+ }
249
+ end
250
+
251
+ def nu18replace_line(line)
252
+ return line.gsub(/QuickML\./) {
253
+ "Group\."
254
+ }
255
+ end
256
+
257
+ def nu19replace_line(line)
258
+ return line.gsub(/require "qwik\/util-path"/) {
259
+ 'require "qwik/util-pathname'
260
+ }
261
+ end
262
+
263
+ def nu20replace_line(line)
264
+ return line.gsub(/require "qwik\/util-pathname$/) {
265
+ 'require "qwik\/util-pathname"'
266
+ }
267
+ end
268
+
269
+ def nu21replace_line(line)
270
+ return line.gsub(/require "qwik\\\/util-pathname"/) {
271
+ 'require "qwik/util-pathname"'
272
+ }
273
+ end
274
+
275
+ def nu22replace_line(line)
276
+ return line.gsub(/Qwik::Config.new\(true\)/) {
277
+ 'Qwik::Config.new(:debug=>true)'
278
+ }
279
+ end
280
+
281
+ def nu23replace_line(line)
282
+ if /\$debug/ =~ line
283
+ pp line
284
+ end
285
+ return line
286
+ end
287
+
288
+ def nu24replace_line(line)
289
+ return line.gsub(/\$debug/) {
290
+ '$test'
291
+ }
292
+ end
293
+
294
+ def nu25replace_line(line)
295
+ # return line.gsub(/charset='([\w]+)'/) {
296
+ # return line.gsub(/charset='([\w-]+)'/) {
297
+ #a = 'charset'
298
+ #a = 'filename'
299
+ #a = 'boundary'
300
+ #return line.gsub(/#{a}='([\w\.-]+)'/) {
301
+
302
+ return line.gsub(/; ([A-Za-z]+)='([\w \.-]+)'/) {
303
+ k = $1
304
+ v = $2
305
+ "; #{k}=\"#{v}\""
306
+ }
307
+ end
308
+
309
+ def nu27replace_line(line)
310
+ return line.gsub(%r|"../../lib"|) {
311
+ "'../../lib'"
312
+ }
313
+ end
314
+
315
+ def nu28replace_line(line)
316
+ return line if line.include?("\\")
317
+ return line.gsub(%r|""|) {
318
+ "''"
319
+ }
320
+ end
321
+
322
+ def nu29replace_line(line)
323
+ return line if line.include?("\\")
324
+ return line if line.include?('<')
325
+ return line if line.include?('>')
326
+
327
+ line = line.gsub(/\"(.*?)\"/) {
328
+ str = $1
329
+ ignore = %w(ascii section EOT)
330
+ if ignore.include?(str)
331
+ "\"#{str}\""
332
+ # elsif /\A[A-Za-z0-9\:\.\/_ |-]+\z/ =~ str
333
+ # elsif /\A[A-Za-z0-9\:\._ |-]+\z/ =~ str
334
+ # elsif /\A[A-Za-z0-9\@\:\._ |-]+\z/ =~ str
335
+ # elsif /\A[A-Za-z0-9\%\*\/\@\:\._ |-]+\z/ =~ str
336
+ # elsif /\A[A-Za-z0-9\%\*\/\@\:\._ |-]+\z/ =~ str
337
+ elsif /\A[A-Za-z0-9\,\%\*\/\@\:\._ \|-]+\z/ =~ str
338
+ "'#{str}'"
339
+ else
340
+ "\"#{str}\""
341
+ end
342
+ }
343
+
344
+ return line
345
+ end
346
+
347
+ def replace_line(line)
348
+ return line.gsub(%r|assert_text\(\'(.+)\', \'title\'\)|) {
349
+ "ok_title('#{$1}')"
350
+ }
351
+ end
352
+
353
+ =end
@@ -0,0 +1,25 @@
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
+ # You can send a mail using SMTP for checking the status.
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+ require 'qwik/config'
9
+ require 'qwik/util-sendmail'
10
+ require 'qwik/qwik-mail'
11
+
12
+ def main
13
+ config = Qwik::Config.new
14
+ config.update(:smtp_host => '127.0.0.1', :smtp_port => '25')
15
+ mail = {
16
+ :from => 'etocom@gmail.com',
17
+ :to => 'etoeto@qwik.jp',
18
+ :subject => 'test',
19
+ :content => 'test desu.',
20
+ }
21
+ sendmail = Qwik::Sendmail.new('127.0.0.1', '25')
22
+ sendmail.send(mail)
23
+ end
24
+
25
+ main
@@ -0,0 +1,283 @@
1
+ # -*- coding: shift_jis -*-
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.unshift '..' unless $LOAD_PATH.include? '..'
7
+ require 'qwik/site'
8
+ require 'qwik/util-pathname'
9
+ require 'qwik/util-time'
10
+
11
+ # $update_group_files = true
12
+ $update_group_files = false
13
+
14
+ module Qwik
15
+ # Bundle many sites to one object.
16
+ class Farm
17
+ def initialize(config, memory)
18
+ @config = config
19
+ @memory = memory
20
+ @logger = @memory[:logger]
21
+ @data_path = @config.sites_dir.path
22
+ @grave_path = @config.grave_dir.path
23
+ @top_sitename = @config.default_sitename
24
+ if $update_group_files
25
+ $update_group_files = false # Set before to do it.
26
+ update_group_files
27
+ end
28
+ end
29
+
30
+ def update_group_files
31
+ list().each {|sitename|
32
+ site = get_site(sitename)
33
+ site.member.update_group_files
34
+ }
35
+ end
36
+
37
+ def get_site(sitename)
38
+ sitepath = @data_path + sitename
39
+
40
+ # FIXME: Should we check the directory everytime?
41
+ if ! sitepath.directory? # At the first, check the directory.
42
+ return nil # No such site.
43
+ end
44
+
45
+ # Now, I am sure that we have the directory for the site.
46
+ # Create a new site object and return it.
47
+ return Site.new(@config, @memory, sitename)
48
+ end
49
+ alias exist? get_site
50
+
51
+ def get_top_site
52
+ return get_site(@top_sitename)
53
+ end
54
+
55
+ def list
56
+ return check_all_sites.sort
57
+ end
58
+
59
+ def close_all
60
+ list().each {|sitename|
61
+ site = self.get_site(sitename)
62
+ site.close if site
63
+ }
64
+ end
65
+
66
+ def make_site(sitename, now = Time.now)
67
+ sitepath = @data_path + sitename
68
+ raise 'site already exist' if sitepath.exist? # Check the path first.
69
+ sitepath.mkdir
70
+ page = (sitepath + "_QwikSite.txt")
71
+ page.write(now.rfc_date)
72
+ return nil
73
+ end
74
+
75
+ def sweep
76
+ @logger.log(WEBrick::Log::INFO, 'start sweep') unless $test
77
+
78
+ log = @memory[:bury_log]
79
+ unless $test
80
+ log.info("start sweep")
81
+ end
82
+
83
+ inactive_sites = check_inactive_sites
84
+ buried = []
85
+ inactive_sites.each {|sitename|
86
+ @logger.log(WEBrick::Log::INFO, 'sweep '+sitename) unless $test
87
+ buried << bury(sitename)
88
+ }
89
+
90
+ unless $test
91
+ log.info("end sweep")
92
+ end
93
+
94
+ return buried
95
+ end
96
+
97
+ def check_inactive_sites
98
+ inactive_sites = []
99
+ list().each {|sitename|
100
+ # Do not bury default site.
101
+ next if sitename == @top_sitename
102
+ site = get_site(sitename)
103
+ # Check a particular page to check the directory is a site or not.
104
+ next if ! site.exist?('_SiteConfig')
105
+ inactive_sites << sitename if site && site.inactive?
106
+ }
107
+ return inactive_sites
108
+ end
109
+
110
+ private
111
+
112
+ def check_all_sites
113
+ sites = Array.new
114
+
115
+ # Check the direcotry entries.
116
+ @data_path.each_entry {|entry|
117
+ pa = @data_path + entry
118
+ next if ! pa.directory? # is not a directory?
119
+ sitename = entry.to_s
120
+ next if sitename[0] == ?. # begin with dot?
121
+ next if sitename == 'CVS'
122
+ #next if (pa + '_SiteConfig.txt').exist? # check the site.
123
+ sites << sitename
124
+ }
125
+
126
+ return sites
127
+ end
128
+
129
+ def bury(sitename)
130
+ site = get_site(sitename)
131
+ if site.unconfirmed?
132
+ dump_site(site, 'deleted')
133
+ delete(site)
134
+ return
135
+ end
136
+ dump_site(site, 'buried')
137
+
138
+ sitepath = site.path
139
+ dirtime = sitepath.mtime.to_i
140
+ @grave_path.check_directory
141
+ (sitepath.parent + ".grave").check_directory
142
+ while true
143
+ tempgravepath = sitepath.parent + ".grave" + "#{dirtime}_#{sitename}"
144
+ gravesitepath = @grave_path + "#{dirtime}_#{sitename}"
145
+ unless tempgravepath.exist? || gravesitepath.exist?
146
+ # step1. move atomically on same disk volume
147
+ sitepath.rename(tempgravepath)
148
+ # step2. move across disk volume
149
+ #FileUtils.mv(tempgravepath, gravesitepath)
150
+ break
151
+ end
152
+ dirtime += 1
153
+ end
154
+ #return gravesitepath
155
+ return tempgravepath
156
+ end
157
+
158
+ def bury_dummy(sitename)
159
+ site = get_site(sitename)
160
+ dump_site(site, 'bury dummy')
161
+ return site.path
162
+ end
163
+
164
+ require 'stringio'
165
+ def dump_site(site, message)
166
+ log = @memory[:bury_log]
167
+ buff = StringIO.new
168
+ buff.puts("#{message}: #{site.sitename}")
169
+
170
+ ml_life_time = site.siteconfig['ml_life_time'].to_i
171
+ days = ml_life_time / (60*60*24)
172
+ buff.puts("ml_life_time: #{ml_life_time} (#{days}d)")
173
+
174
+ site.path.children.sort{|a,b| b.mtime <=> a.mtime }.each do |path|
175
+ buff << path.mtime.strftime("%Y-%m-%d %H:%M:%S ")
176
+ buff << sprintf("% 8d ", path.size)
177
+ buff << path.basename.to_s
178
+ buff << "\n"
179
+ end
180
+ unless $test
181
+ log.info(buff.string)
182
+ end
183
+ end
184
+
185
+ def delete(site)
186
+ sitepath = site.path
187
+ sitepath.remove_directory
188
+ end
189
+
190
+ end
191
+ end
192
+
193
+ if $0 == __FILE__
194
+ require 'qwik/test-module-session'
195
+ $test = true
196
+ end
197
+
198
+ if defined?($test) && $test
199
+ class TestFarm < Test::Unit::TestCase
200
+ include TestSession
201
+
202
+ def test_make_site
203
+ farm = @memory.farm
204
+ farm.close_all
205
+ @dir.teardown
206
+ @dir.rmtree if @dir.directory?
207
+ @dir.rmdir if @dir.directory?
208
+
209
+ dir = @config.sites_dir.path
210
+
211
+ # test_exist?
212
+ assert_equal false, !!farm.exist?('test')
213
+ assert_equal nil, farm.get_site('test')
214
+ assert_equal false, (dir + 'test').exist?
215
+
216
+ # test_make_site
217
+ assert_equal false, (dir + 'test').path.exist?
218
+ farm.make_site('test', Time.at(0))
219
+ assert_equal true, (dir + 'test').path.exist?
220
+ assert_equal true, (dir + 'test/_QwikSite.txt').path.exist?
221
+ assert_equal "1970-01-01T09:00:00", (dir + 'test/_QwikSite.txt').path.read
222
+ assert_equal false, (dir + 'test/test').path.exist?
223
+ assert_equal true, !!farm.exist?('test')
224
+ assert_equal false, (dir + 'test/test').path.exist?
225
+
226
+ site = farm.get_site('test')
227
+ assert_equal true, (dir + 'test'.path).exist?
228
+ assert_equal false, (dir + 'test/test').path.exist?
229
+ #assert_equal true, (dir + 'test/test').path.exist?
230
+ assert_equal 'test', site.sitename
231
+
232
+ # test_raise
233
+ assert_raise(RuntimeError) {
234
+ # Creating a site with same name cause error.
235
+ farm.make_site('test')
236
+ }
237
+ end
238
+
239
+ def test_all
240
+ farm = @memory.farm
241
+
242
+ # test_top_site
243
+ site = farm.get_top_site
244
+ eq @config.default_sitename, site.sitename
245
+
246
+ # test_list
247
+ is "Array", farm.list.class.name
248
+
249
+ #assert_equal false, (@dir+"test").exist?
250
+ end
251
+
252
+ def test_sweep
253
+ farm = @memory.farm
254
+
255
+ site = farm.get_site('test')
256
+ page = site['_SiteConfig']
257
+ page.put_with_time(':ml_life_time:0', 0) # Die soon.
258
+
259
+ # test_inactive?
260
+ eq true, site.inactive?
261
+
262
+ # test_sweep
263
+ buried = farm.sweep
264
+ site = farm.get_site('test')
265
+ eq nil, site
266
+
267
+ # Clean up the grave dir.
268
+ buried.each {|gravesitepath|
269
+ gravesitepath.teardown
270
+ gravesitepath.rmtree
271
+ }
272
+ end
273
+
274
+ def test_delete
275
+ farm = @memory.farm
276
+ site = farm.get_site('test')
277
+ site_path = site.path
278
+ t_make_public(Qwik::Farm, :delete)
279
+ farm.delete(site)
280
+ eq false, site_path.exist?
281
+ end
282
+ end
283
+ end