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,118 @@
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_SiteLog = {
10
+ :dt => 'Show SiteLog',
11
+ :dd => 'You can see sitelog of this site.',
12
+ :dc => "* How to
13
+ [[.sitelog]]
14
+ Follow this link. [[.sitelog]]
15
+ "
16
+ }
17
+
18
+ D_SiteLog_ja = {
19
+ :dt => '�ҏW����',
20
+ :dd => '���܂܂ł̕ҏW���������邱�Ƃ��ł��܂��B',
21
+ :dc => "* �g����
22
+ [[.sitelog]]
23
+ [[.sitelog]]��H�����������B
24
+ "
25
+ }
26
+
27
+ # sitelog viewer
28
+ def plg_sitelog
29
+ dl = [:dl]
30
+ @site.sitelog.list.each {|k, v|
31
+ user, cmd, pagename = v
32
+ user = 'anonymous' if user.nil? || user.empty?
33
+ user = MailAddress.obfuscate(user) if ! user.empty?
34
+ dl << [:dt, "#{Time.at(k.to_i).ymdx} - #{user}"]
35
+ dl << [:dd, "#{cmd}: ", [:a, {:href=>"#{pagename}.html"}, pagename]]
36
+ }
37
+ return dl
38
+ end
39
+
40
+ # sitelog viewer
41
+ def act_sitelog
42
+ return c_plain('SiteLog') {
43
+ [:div, {:class=>'day'},
44
+ [:div, {:class=>'section'}, plg_sitelog]]
45
+ }
46
+ end
47
+
48
+ def c_time_str(time=nil)
49
+ time ||= @req.start_time
50
+ return sprintf('%.6f', time.to_i + time.usec/1000000.0)
51
+ end
52
+
53
+ def c_make_log(cmd, pagename=@req.base)
54
+ timestr = c_time_str
55
+ @site.log(timestr, @req.user, cmd, pagename)
56
+ end
57
+ end
58
+ end
59
+
60
+ if $0 == __FILE__
61
+ require 'qwik/test-common'
62
+ $test = true
63
+ end
64
+
65
+ if defined?($test) && $test
66
+ class TestActSiteLog < Test::Unit::TestCase
67
+ include TestSession
68
+
69
+ def test_time_str
70
+ res = session
71
+ assert_match(/\d+\.\d{6}/, @action.c_time_str)
72
+ ok_eq('0.000000', @action.c_time_str)
73
+ end
74
+
75
+ def test_sitelog
76
+ t_add_user
77
+
78
+ # Create a page.
79
+ res = session('POST /test/.new?t=TestPage'){|req|
80
+ req.start_time += 1
81
+ }
82
+ ok_eq(',1.000000,user@e.com,create,TestPage
83
+ ', @site['_SiteLog'].load)
84
+
85
+ # Save a page.
86
+ res = session('POST /test/TestPage.save?contents=t'){|req|
87
+ req.start_time += 2
88
+ }
89
+ ok_eq(',1.000000,user@e.com,create,TestPage
90
+ ,2.000000,user@e.com,save,TestPage
91
+ ', @site['_SiteLog'].load)
92
+
93
+ # Delete a page.
94
+ res = session('POST /test/TestPage.save?contents='){|req| # null content
95
+ req.start_time += 3
96
+ }
97
+ ok_eq(',1.000000,user@e.com,create,TestPage
98
+ ,2.000000,user@e.com,save,TestPage
99
+ ,3.000000,user@e.com,delete,TestPage
100
+ ', @site['_SiteLog'].load)
101
+
102
+ # See the SiteLog.
103
+ page = @site.create_new
104
+ page.store('{{sitelog}}')
105
+ res = session('/test/1.html'){|req|
106
+ req.start_time += 4
107
+ }
108
+ div = @res.body.get_path("//div[@class='section']")
109
+ div = div.inside.remove_comment.get_single
110
+ ok_eq([:dd, 'create: ',
111
+ [:a, {:href=>'TestPage.html'}, 'TestPage']], div[2])
112
+ ok_eq([:dd, 'save: ',
113
+ [:a, {:href=>'TestPage.html'}, 'TestPage']], div[4])
114
+ ok_eq([:dd, 'delete: ',
115
+ [:a, {:href=>'TestPage.html'}, 'TestPage']], div[6])
116
+ end
117
+ end
118
+ end
@@ -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
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/tokenizer'
7
+ require 'qwik/act-media'
8
+ require 'qwik/smil-time'
9
+
10
+ module Qwik
11
+ class Action
12
+ D_PluginSmil = {
13
+ :dt => 'Video editing plugin',
14
+ :dd => 'You can control the timeline of the video.',
15
+ :dc => "* Example
16
+ ** Tokyo Setagaya ward Congress
17
+ {{smil
18
+ :url:rtsp://realgi.city.setagaya.tokyo.jp/20030918-2.rm
19
+ |3:12:15|3:12:20|
20
+ |3:19:58|3:21:12|
21
+ }}
22
+ {{smil
23
+ :url:rtsp://realgi.city.setagaya.tokyo.jp/20030918-2.rm
24
+ |3:12:15|3:12:20|
25
+ |3:19:58|3:21:12|
26
+ }}
27
+ This is just an example to use smil plugin.
28
+ "
29
+ }
30
+
31
+ def plg_smil(title=nil)
32
+ @smil_num = 0 if !defined?(@smil_num)
33
+ @smil_num += 1
34
+ file = "#{@req.base}.#{@smil_num}.smil"
35
+ str = yield
36
+ title = file if title.nil?
37
+
38
+ gen = SmilGenerator.new
39
+ gen.parse(str)
40
+ smil = gen.generate_smil
41
+ smil_str = smil.format_xml.page_to_xml # make it to utf8
42
+ @site.files(@req.base).put(file, smil_str, true) # override
43
+
44
+ table = gen.generate_html
45
+
46
+ div = [:div, {:class=>'smil'},
47
+ table,
48
+ [:p, [:a, {:href=>file}, file]]]
49
+
50
+ return div
51
+ end
52
+
53
+ def plg_video(*args)
54
+ name = @req.base
55
+ name = args.shift if 0 < args.length
56
+ msg = yield
57
+ v = Video.new(@site, name)
58
+ v.parse(msg)
59
+ v.generate_file
60
+ return v.to_xml
61
+ end
62
+
63
+ def ext_smil
64
+ # $smil_debug = true
65
+ $smil_debug = false
66
+ ar = []
67
+ ar << @req.base
68
+ ar += @req.ext_args
69
+ ar << @req.ext
70
+ filename = ar.join('.')
71
+ file = @site.files(@req.base).path(filename)
72
+ if $smil_debug
73
+ return c_notice(1) { "filename is #{filename}" }
74
+ end
75
+
76
+ return c_simple_send(file.to_s, 'application/smil')
77
+ end
78
+ end
79
+
80
+ class SmilGenerator
81
+ def initialize
82
+ @width, @height = 320, 240
83
+ @time_table = []
84
+ end
85
+
86
+ def parse(str)
87
+ url = nil
88
+ @width, @height = 320, 240
89
+ @time_table = []
90
+ tokens = tokenize(str)
91
+ tokens.each {|token|
92
+ case token[0]
93
+ when :dl
94
+ case token[1]
95
+ when 'url' then url = token[2]
96
+ when 'width' then @width = token[2]
97
+ when 'height' then @height = token[2]
98
+ else
99
+ raise 'unknown param type'
100
+ end
101
+ when :table
102
+ time_begin = SmilTime.at_smil(token[1])
103
+ time_end = SmilTime.at_smil(token[2])
104
+ title = token[3]
105
+ @time_table << [url, time_begin, time_end, title]
106
+ else
107
+ raise 'unknown type'
108
+ end
109
+ }
110
+ return [@width, @height, @time_table] # only for test
111
+ end
112
+
113
+ def tokenize(str)
114
+ return TextTokenizer.tokenize(str)
115
+ end
116
+
117
+ def generate_smil
118
+ time = 0.0
119
+ par = []
120
+ @time_table.each {|url, time_begin, time_end, title|
121
+ duration = time_end.to_f - time_begin.to_f
122
+ par << [:video, {:region=>'v', :begin=>"#{time}s",
123
+ :src=>url, :'clip-begin'=>time_begin.to_smil,
124
+ :'clip-end'=>time_end.to_smil}]
125
+ time += duration
126
+ }
127
+ smil = [:smil, {:xmlns=>'http://www.w3.org/2001/SMIL20/Language',
128
+ :'xmlns:rn'=>'http://features.real.com/2001/SMIL20/Extensions'},
129
+ [:head,
130
+ [:layout,
131
+ [:'root-layout', {:width=>@width, :height=>@height}],
132
+ [:region, {:id=>'v', :fit=>'meet'}]]],
133
+ [:body, [:par, *par]]]
134
+ return smil
135
+ end
136
+
137
+ def generate_html
138
+ table = [:table]
139
+ table << [:tr,
140
+ [:th, 'IN'],
141
+ [:th, 'OUT'],
142
+ [:th, 'MSG']
143
+ ]
144
+ @time_table.each {|url, time_begin, time_end, title|
145
+ table << [:tr,
146
+ [:td, time_begin.to_smil],
147
+ [:td, time_end.to_smil],
148
+ [:td, title]]
149
+ }
150
+ return table
151
+ end
152
+ end
153
+ end
154
+
155
+ if $0 == __FILE__
156
+ require 'qwik/test-common'
157
+ require 'qwik/testunit'
158
+ $test = true
159
+ end
160
+
161
+ if defined?($test) && $test
162
+ class TestActSmil < Test::Unit::TestCase
163
+ include TestSession
164
+
165
+ def test_plg_video
166
+ t_add_user
167
+ page = @site.create_new
168
+ page.put('{{smil
169
+ :url:rtsp://example.com/test/1.files/t.rm
170
+ ,00,05.05,msg1
171
+ ,12:10,12:15.15,msg2
172
+ }}')
173
+ res = session('/test/1.html')
174
+ ok_in([:div, {:class=>'smil'},
175
+ [:table,
176
+ [:tr, [:th, 'IN'], [:th, 'OUT'], [:th, 'MSG']],
177
+ [:tr, [:td, '00:00:00'], [:td, '00:00:05.05'],
178
+ [:td, 'msg1']],
179
+ [:tr, [:td, '00:12:10'], [:td, '00:12:15.15'],
180
+ [:td, 'msg2']]],
181
+ [:p, [:a, {:href=>'1.1.smil'}, '1.1.smil']]],
182
+ '//div[@class="section"]')
183
+
184
+ path = @site.files('1').path('1.1.smil')
185
+ str = path.read
186
+ assert(str.include?('http://www.w3.org/2001/SMIL20/Language'))
187
+
188
+ res = session('/test/1.1.smil') # get the file
189
+ str = res.body
190
+ assert(str.include?('http://www.w3.org/2001/SMIL20/Language'))
191
+ ok_eq('application/smil', res['Content-Type'])
192
+ end
193
+
194
+ def test_media_plugin
195
+ ok_wi([:div, {:class=>'box'},
196
+ [:table, [:tr, [:td, 'IN'], [:td, 'OUT'], [:td, 'MSG']]],
197
+ [:p, [:a, {:href=>'.attach/1.smil'}, '1']]],
198
+ "{{video\n,k,v\n}}")
199
+
200
+ t_add_user
201
+ res = session('/test/.attach/1.smil') # get a file
202
+ str = res.body
203
+ ok_eq('application/smil', res['Content-Type'])
204
+
205
+ # test real situation
206
+ ok_wi([:div, {:class=>'box'},
207
+ [:table,
208
+ [:tr, [:td, 'IN'], [:td, 'OUT'], [:td, 'MSG']],
209
+ [:tr, [:td, '00:03'], [:td, '00:13']],
210
+ [:tr, [:td, '00:20'], [:td, '00:28']]],
211
+ [:p, [:a, {:href=>'.attach/TestSmil.smil'}, 'TestSmil']]],
212
+ '{{video(TestSmil)
213
+ :width:160
214
+ :height:120
215
+ :url:rtsp://stream.nhk.or.jp/news/20030914000046002.rm
216
+ ,00:03,00:13,
217
+ ,00:20,00:28,
218
+ }}')
219
+ res = session('/test/.attach/TestSmil.smil')
220
+
221
+ # test real situation
222
+ ok_wi([:div, {:class=>'box'},
223
+ [:table,
224
+ [:tr, [:td, 'IN'], [:td, 'OUT'], [:td, 'MSG']],
225
+ [:tr, [:td, '00:03'], [:td, '00:13'], [:td, '��']],
226
+ [:tr, [:td, '00:20'], [:td, '00:28']]],
227
+ [:p, [:a, {:href=>'.attach/TestSmil.smil'}, 'TestSmil']]],
228
+ '{{video(TestSmil)
229
+ :width:160
230
+ :height:120
231
+ :url:rtsp://stream.nhk.or.jp/news/20030914000046002.rm
232
+ ,00:03,00:13,��
233
+ ,00:20,00:28,
234
+ }}')
235
+ res = session('/test/.attach/TestSmil.smil')
236
+ str = res.body
237
+ assert(str.include?('http://www.w3.org/2001/SMIL20/Language'))
238
+ end
239
+ end
240
+
241
+ class TestSmil < Test::Unit::TestCase
242
+ def test_smil_generator
243
+ gen = Qwik::SmilGenerator.new
244
+
245
+ str = ':url:rtsp://example.com/test/1.files/t.rm
246
+ ,00,05.05,msg1
247
+ ,12:10,12:15.15,msg2'
248
+
249
+ # test_tokenize
250
+ tokens = gen.tokenize(str)
251
+ ok_eq([[:dl, 'url', 'rtsp://example.com/test/1.files/t.rm'],
252
+ [:table, '00', '05.05', 'msg1'],
253
+ [:table, '12:10', '12:15.15', 'msg2']], tokens)
254
+
255
+ # test parse
256
+ width, height, time_table = gen.parse(str)
257
+ ok_eq(320, width)
258
+ ok_eq(240, height)
259
+ ok_eq([['rtsp://example.com/test/1.files/t.rm',
260
+ Qwik::SmilTime.at_smil('00'),
261
+ Qwik::SmilTime.at_smil('05.05'), 'msg1'],
262
+ ['rtsp://example.com/test/1.files/t.rm',
263
+ Qwik::SmilTime.at_smil('12:10'),
264
+ Qwik::SmilTime.at_smil('12:15.15'),'msg2']],
265
+ time_table)
266
+
267
+ # test generate_smil
268
+ w = gen.generate_smil
269
+ ok_eq([:head, [:layout,
270
+ [:'root-layout', {:height=>240, :width=>320}],
271
+ [:region, {:id=>'v', :fit=>'meet'}]]],
272
+ w.get_path('//head'))
273
+ ok_eq([:video,
274
+ {:'clip-end'=>'00:00:05.05',
275
+ :begin=>'0.0s',
276
+ :region=>'v',
277
+ :src=>'rtsp://example.com/test/1.files/t.rm',
278
+ :'clip-begin'=>'00:00:00'}],
279
+ w.get_path('//video'))
280
+ ok_eq([:video,
281
+ {:'clip-end'=>'00:12:15.15',
282
+ :begin=>'5.166666s',
283
+ :region=>'v',
284
+ :src=>'rtsp://example.com/test/1.files/t.rm',
285
+ :'clip-begin'=>'00:12:10'}],
286
+ w.get_path('//video[2]'))
287
+
288
+ # test generate_html
289
+ w = gen.generate_html
290
+ ok_eq([:table,
291
+ [:tr, [:th, 'IN'], [:th, 'OUT'], [:th, 'MSG']],
292
+ [:tr, [:td, '00:00:00'], [:td, '00:00:05.05'],
293
+ [:td, 'msg1']],
294
+ [:tr, [:td, '00:12:10'], [:td, '00:12:15.15'],
295
+ [:td, 'msg2']]],
296
+ w)
297
+ end
298
+ end
299
+ end
@@ -0,0 +1,220 @@
1
+ # Copyright (C) 2003-2009 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
+ def status_get_date(time)
10
+ return "* " + time.strftime("%Y-%m-%dT%H:%M:%S") + "\n"
11
+ end
12
+
13
+ def status_get_memory(ps)
14
+ str = ''
15
+ ps.each_line {|line|
16
+ user, pid, cpu, mem, vsz, rss, tty, stat, start, time, command =
17
+ line.split(nil, 11)
18
+ next if /^sh/ =~ command
19
+ next if /^grep/ =~ command
20
+ next if /^ruby/ =~ command
21
+ next if %r|^/bin/sh| =~ command
22
+ next if time == "0:00"
23
+
24
+ command = 'quickml-server' if /quickml-server/ =~ command
25
+ command = 'qwikweb-server' if /qwikweb-server/ =~ command
26
+
27
+ vsz = vsz.to_i / 1000
28
+ rss = rss.to_i / 1000
29
+
30
+ str << "#{vsz}MB #{rss}MB #{command}\n"
31
+ }
32
+ str
33
+ end
34
+
35
+ def status_get_objects
36
+ ar = []
37
+ num = 0
38
+ string_length = 0
39
+ ObjectSpace.each_object {|obj|
40
+ num += 1
41
+
42
+ name = obj.class.name
43
+ ar << name
44
+
45
+ if name == "String"
46
+ string_length += obj.length
47
+ end
48
+
49
+ =begin
50
+ if name == "String" ||
51
+ name == "Regexp" ||
52
+ name == "Class" ||
53
+ name == "Hash" ||
54
+ name == "Bignum" ||
55
+ name == "Module" ||
56
+ name == "Float" ||
57
+ name == "Array"
58
+ # do nothing
59
+ else
60
+ ar << name
61
+ end
62
+ =end
63
+ }
64
+
65
+ hash = Hash.new(0)
66
+ ar.each {|classname|
67
+ hash[classname] += 1
68
+ }
69
+
70
+ ar2 = []
71
+ hash.each {|k, v|
72
+ ar2 << [v, k]
73
+ }
74
+
75
+ ar3 = ar2.sort.reverse
76
+
77
+ str = "* get_objects\n"
78
+ str << "object num #{num.commify}\n"
79
+ str << "string_length #{string_length.commify}\n"
80
+
81
+ ar3.each {|v, k|
82
+ str << "#{v}\t#{k}\n"
83
+ }
84
+ str
85
+ end
86
+
87
+ def status_get_objects2
88
+ ar = []
89
+ num = 0
90
+ ObjectSpace.each_object {|obj|
91
+ ar << obj.class.name
92
+ num += 1
93
+ }
94
+
95
+ ar3 = ar.sort.uniq
96
+
97
+ str = ''
98
+ str << "object num #{num}\n"
99
+
100
+ ar3.each {|v|
101
+ str << "#{v}\n"
102
+ }
103
+
104
+ str
105
+ end
106
+
107
+ def status_show_httprequests(now)
108
+ ar = []
109
+ ObjectSpace.each_object {|obj|
110
+ ar << obj if obj.class.name == "WEBrick::HTTPRequest"
111
+ }
112
+
113
+ str = "* WEBrick::HTTPRequest\n"
114
+ ar.each {|req|
115
+ #diff = now - req.start_time
116
+ path = req.unparsed_uri
117
+ ua = req["user-agent"]
118
+ #str << "#{path}\t#{ua}\n"
119
+ str << "#{path}\n"
120
+ str << "#{ua}\n"
121
+ }
122
+ str
123
+ end
124
+
125
+ def status_show_requests(now)
126
+ ar = []
127
+ ObjectSpace.each_object {|obj|
128
+ ar << obj if obj.class.name == "Qwik::Request"
129
+ }
130
+
131
+ str = "* Qwik::Request\n"
132
+ ar.each {|req|
133
+ diff = now - req.start_time
134
+ path = req.unparsed_uri
135
+ str << "#{path}\t#{diff}\n"
136
+ }
137
+ str
138
+ end
139
+
140
+ def is_administrator?
141
+ file = @config.etc_dir.path + "administrator.txt"
142
+ return false if ! file.exist?
143
+ admin = file.read.chomp
144
+ return false if @req.user != admin
145
+ return true
146
+ end
147
+
148
+ def act_status
149
+ c_require_login
150
+ return c_nerror("You are not administrator.") if ! is_administrator?
151
+
152
+ str = ""
153
+
154
+ now = @req.start_time
155
+
156
+ str << status_get_date(now)
157
+
158
+ ps = `ps auxww | grep -i ruby`
159
+ str << status_get_memory(ps)
160
+ str << "\n"
161
+
162
+ str << status_show_httprequests(now)
163
+ str << "\n"
164
+
165
+ str << status_show_requests(now)
166
+ str << "\n"
167
+
168
+ str << status_get_objects
169
+ # str << status_get_objects2
170
+ str << "\n"
171
+
172
+ # return c_notice(_('Status')) {
173
+ return c_plain(_('Status')) {
174
+ [[:h2, _('Status')],
175
+ # [:pre, str]]
176
+ [:pre, c_pre_text { str }]]
177
+ }
178
+ end
179
+ end
180
+ end
181
+
182
+ if $0 == __FILE__
183
+ require 'qwik/test-common'
184
+ $test = true
185
+ end
186
+
187
+ if defined?($test) && $test
188
+ class TestActStatus < Test::Unit::TestCase
189
+ include TestSession
190
+
191
+ def test_all
192
+ res = session
193
+
194
+ time = Time.at(0)
195
+ str = @action.status_get_date(time)
196
+ is "* 1970-01-01T09:00:00\n", str
197
+
198
+ ps = <<'EOS'
199
+ qwik 14611 0.0 0.0 3468 1260 ? Ss 17:19 0:00 /bin/sh -c /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/quickml-server -d -c /home/qwik/qwik/etc/config-debug.txt >> /home/qwik/qwik/log/quickml-out 2>&1
200
+ qwik 14612 0.0 0.0 3468 1260 ? Ss 17:19 0:00 /bin/sh -c /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/qwikweb-server -d -c /home/qwik/qwik/etc/config-debug.txt >> /home/qwik/qwik/log/out 2>&1
201
+ qwik 14613 0.5 0.2 12964 9520 ? S 17:19 0:01 /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/quickml-server -d -c /home/qwik/qwik/etc/config-debug.txt
202
+ qwik 14614 6.9 0.8 35792 29504 ? S 17:19 0:15 /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/qwikweb-server -d -c /home/qwik/qwik/etc/config-debug.txt
203
+ qwik 14615 0.0 0.2 12964 9520 ? S 17:19 0:00 /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/quickml-server -d -c /home/qwik/qwik/etc/config-debug.txt
204
+ qwik 14616 0.0 0.2 12964 9520 ? S 17:19 0:00 /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/quickml-server -d -c /home/qwik/qwik/etc/config-debug.txt
205
+ qwik 14617 0.0 0.8 35792 29504 ? S 17:19 0:00 /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/qwikweb-server -d -c /home/qwik/qwik/etc/config-debug.txt
206
+ qwik 14618 0.0 0.8 35792 29504 ? S 17:19 0:00 /usr/bin/ruby -I/home/qwik/qwik/lib /home/qwik/qwik/bin/qwikweb-server -d -c /home/qwik/qwik/etc/config-debug.txt
207
+ EOS
208
+ str = @action.status_get_memory(ps)
209
+ is "12MB\t9MB\tquickml-server\n35MB\t29MB\tqwikweb-server\n", str
210
+
211
+ now = Time.at(0)
212
+ str = @action.status_show_httprequests(now)
213
+ is "* WEBrick::HTTPRequest\n", str
214
+
215
+ str = @action.status_show_requests(now)
216
+ #is "* Qwik::Request\n/test/\t0.0\n", str
217
+ is "String", str.class.name
218
+ end
219
+ end
220
+ end