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,230 @@
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
+
8
+ require 'open3'
9
+
10
+ module Qwik
11
+ class Action
12
+ D_PluginPovray = {
13
+ :dt => 'PovRay plugin',
14
+ :dd => 'You can embed ray tracing rendered 3D CG.',
15
+ :dc => "* Example
16
+ {{povray
17
+ sphere { <0, 0, 9>, 3
18
+ finish { ambient 0.2 diffuse 0.8 phong 1 }
19
+ pigment { red 1 }
20
+ }
21
+ light_source { <-9, 9, 0> rgb 1 }
22
+ }}
23
+ {{povray
24
+ sphere { <0, 0, 9>, 3
25
+ finish { ambient 0.2 diffuse 0.8 phong 1 }
26
+ pigment { red 1 }
27
+ }
28
+ light_source { <-9, 9, 0> rgb 1 }
29
+ }}
30
+ - I recommend [[POVRay Short Code Contest, Round 3|http://astronomy.swin.edu.au/~pbourke/raytracing/scc3/final/]] for samples of POV-Ray source code.
31
+ "
32
+ }
33
+
34
+ D_PluginPovray_ja = {
35
+ :dt => 'PovRay�v���O�C��',
36
+ :dd => '���C�g���[�V���O�ɂ��3D CG�𖄂ߍ��߂܂��B',
37
+ :dc => '* ��
38
+ {{povray
39
+ sphere { <0, 0, 9>, 3
40
+ finish { ambient 0.2 diffuse 0.8 phong 1 }
41
+ pigment { red 1 }
42
+ }
43
+ light_source { <-9, 9, 0> rgb 1 }
44
+ }}
45
+ {{povray
46
+ sphere { <0, 0, 9>, 3
47
+ finish { ambient 0.2 diffuse 0.8 phong 1 }
48
+ pigment { red 1 }
49
+ }
50
+ light_source { <-9, 9, 0> rgb 1 }
51
+ }}
52
+ - [[POVRay Short Code Contest, Round 3|http://astronomy.swin.edu.au/~pbourke/raytracing/scc3/final/]]�Ȃǂ̃T���v�������Ă݂�Ɩʔ�����������܂���B
53
+ '
54
+ }
55
+
56
+ MIN_COLS = 50
57
+ MIN_ROWS = 7
58
+ MAX_COLS = 100
59
+ MAX_ROWS = 50
60
+ def plg_povray
61
+ if ! povray_exist?
62
+ return [:div, {:class=>'povray'},
63
+ [:p, 'No povray command.']
64
+ ]
65
+ end
66
+
67
+ # Generate a povray file.
68
+ content = ''
69
+ content = yield if block_given?
70
+
71
+ pngfilename, stapath = povray_generate(content)
72
+
73
+ # @povray_num is global for an action.
74
+ @povray_num = 0 if ! defined?(@povray_num)
75
+ @povray_num += 1
76
+ action = "#{@req.base}.#{@povray_num}.povray"
77
+
78
+ cols = 0
79
+ rows = 1 # Add an empty line.
80
+ content.each_line {|line|
81
+ len = line.chomp.length
82
+ cols = len if cols < len
83
+ rows += 1
84
+ }
85
+ cols = MIN_COLS if cols < MIN_COLS
86
+ rows = MIN_ROWS if rows < MIN_ROWS
87
+ cols = MAX_COLS if MAX_COLS < cols
88
+ rows = MAX_ROWS if MAX_ROWS < rows
89
+
90
+ status = [:div, {:class=>'status'}]
91
+ begin
92
+ sta = stapath.read
93
+ st, et = sta.to_a
94
+ status << [:p, 'Start : ', Time.at(st.to_i).ymdax] if st
95
+ status << [:p, 'End : ', Time.at(et.to_i).ymdax] if et
96
+ status << [:p, 'Past : ', Time.at(et.to_i).ymdax] if et
97
+ rescue
98
+ status << [:p, 'The rendering is started.']
99
+ end
100
+
101
+ div = [:div, {:class=>'povray'},
102
+ [:img, {:src=>"#{@req.base}.files/#{pngfilename}"}],
103
+ [:br],
104
+ [:form, {:method=>'POST', :action=>action},
105
+ [:textarea, {:name=>'t', :cols=>cols, :rows=>rows}, content],
106
+ [:br],
107
+ [:input, {:type=>'submit', :value=>_('Update')}]],
108
+ [:br],
109
+ status]
110
+
111
+ return div
112
+ end
113
+
114
+ POVRAY_CMD = '/usr/bin/povray'
115
+ # POVRAY_CMD = '/usr/local/bin/povray'
116
+ MV_CMD = '/bin/mv'
117
+ def povray_exist?
118
+ return POVRAY_CMD.path.exist?
119
+ end
120
+
121
+ def povray_generate(content)
122
+ files = @site.files(@req.base)
123
+ base = content.md5hex
124
+ povfilename = "#{base}.pov"
125
+ pngfilename = "#{base}.png"
126
+
127
+ povpath = files.path(povfilename)
128
+ pngpath = files.path(pngfilename)
129
+ pngtmppath = "/tmp/#{pngfilename}"
130
+
131
+ msgpath = files.path("#{base}.povmsg").path
132
+ stapath = files.path("#{base}.povsta").path
133
+
134
+ return pngfilename, stapath if stapath.exist? # Already started.
135
+
136
+ files.overwrite(povfilename, content)
137
+
138
+ # Render it background.
139
+ t = Thread.new {
140
+ cmd = "#{POVRAY_CMD} #{povpath} -O#{pngtmppath}"
141
+ #system cmd
142
+ stapath.open('wb') {|sta|
143
+ sta.puts Time.now.to_i.to_s
144
+ msgpath.open('wb') {|msg|
145
+ Open3.popen3(cmd) {|stdin, stdout, stderr|
146
+ while line = stderr.gets
147
+ msg.print line
148
+ end
149
+ }
150
+ }
151
+ sta.puts Time.now.to_i.to_s
152
+ }
153
+ system "#{MV_CMD} #{pngtmppath} #{pngpath}"
154
+ }
155
+ return pngfilename, stapath
156
+ end
157
+
158
+ def ext_povray
159
+ c_require_post
160
+ c_require_page_exist
161
+
162
+ num = @req.ext_args[0].to_i
163
+ return c_nerror(_('Error')) if num < 1
164
+
165
+ text = @req.query['t']
166
+ return c_nerror(_('No text.')) if text.nil? || text.empty?
167
+ text = text.normalize_newline
168
+
169
+ begin
170
+ plugin_edit(:povray, num) {|content|
171
+ text
172
+ }
173
+ rescue NoCorrespondingPlugin
174
+ return c_nerror(_('Failed'))
175
+ rescue PageCollisionError
176
+ return mcomment_error(_('Page collision detected.'))
177
+ end
178
+
179
+ c_make_log('povray') # TEXTAREA
180
+
181
+ url = "#{@req.base}.html"
182
+ return c_notice(_('Edit text done.'), url){
183
+ [[:h2, _('Edit text done.')],
184
+ [:p, [:a, {:href=>url}, _('Go back')]]]
185
+ }
186
+ end
187
+
188
+ end
189
+ end
190
+
191
+ if $0 == __FILE__
192
+ require 'qwik/test-common'
193
+ $test = true
194
+ end
195
+
196
+ if defined?($test) && $test
197
+ class TestActPovray < Test::Unit::TestCase
198
+ include TestSession
199
+
200
+ def test_all
201
+ t_add_user
202
+
203
+ page = @site.create_new
204
+ page.store '{{povray
205
+ sphere { <0, 0, 9>, 3
206
+ finish { ambient 0.2 diffuse 0.8 phong 1 }
207
+ pigment { red 1 }
208
+ }
209
+ light_source { <-9, 9, 0> rgb 1 }
210
+ }}'
211
+
212
+ res = session
213
+
214
+ return if ! @action.povray_exist?
215
+
216
+ res = session '/test/1.html'
217
+ ok_xp [:div, {:class=>"povray"},
218
+ [:img, {:src=>"1.files/4c5c412765d503e22d83bd5fdd4a1c80.png"}], [:br],
219
+ [:form, {:method=>"POST", :action=>"1.1.povray"},
220
+ [:textarea, {:name=>"t", :cols=>50, :rows=>7},
221
+ "sphere { <0, 0, 9>, 3\nfinish { ambient 0.2 diffuse 0.8 phong 1 }\npigment { red 1 }\n}\nlight_source { <-9, 9, 0> rgb 1 }\n"], [:br],
222
+ [:input, {:type=>"submit", :value=>"Update"}]], [:br],
223
+ [:div, {:class=>"status"}]],
224
+ "//div[@class='povray']"
225
+
226
+ files = @site.files('1')
227
+ ok files.exist?('4c5c412765d503e22d83bd5fdd4a1c80.pov')
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,380 @@
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
+
8
+ module Qwik
9
+ class Action
10
+ D_ExtPresen = {
11
+ :dt => 'Presentaion mode',
12
+ :dd => 'You can show the page in presentation mode.',
13
+ :dc => "* How to
14
+ [[FrontPage.presen]]
15
+ [[FrontPage.presen]]
16
+ Follow this link and you'll see the presen mode of the FrontPage.
17
+ {{presen}}
18
+ You can show a link to presentation mode.
19
+ ** Specify Presentation theme
20
+ {{presen_theme(qwikblack)}}
21
+ You can specify the presentation theme by this plugin.
22
+ {{presen_theme_list}}
23
+ You can choose from this list.
24
+ * Thanks
25
+ I use
26
+ [[S5: A Simple Standards-Based Slide Show System|http://www.meyerweb.com/eric/tools/s5/]]
27
+ by Mr. Eric Meyer for this presentation mode. Thank you very much.
28
+ "
29
+ }
30
+
31
+ D_ExtPresen_ja = {
32
+ :dt => '�v���[���E���[�h',
33
+ :dd => '�v���[���E���[�h�ŕ\�����܂��B',
34
+ :dc => '* �g����
35
+ [[FrontPage.presen]]
36
+ [[FrontPage.presen]]
37
+ ���̃����N�����ǂ�ƁAFrontPage���v���[���E���[�h�ŕ\�����܂��B
38
+ {{presen}}
39
+ ����y�[�W���v���[���E���[�h�ɂ��郊���N��\���������ꍇ�́A
40
+ ���̃v���O�C���������p�������B
41
+ ** �v���[���e�[�}�w��
42
+ {{presen_theme(qwikblack)}}
43
+ ���̂悤�ɂ��āA�v���[���e�[�}���w��ł��܂��B
44
+ {{presen_theme_list}}
45
+ ���̈ꗗ�̒�����I�ׂ܂��B
46
+ * ����
47
+ �v���[���E���[�h�ɂ́AEric Meyer���ɂ��
48
+ [[S5: A Simple Standards-Based Slide Show System|http://www.meyerweb.com/eric/tools/s5/]]
49
+ ���g�킹�Ă��������Ă���܂��B�ǂ������肪�Ƃ��������܂��B
50
+ '
51
+ }
52
+
53
+ def plg_presen_switch
54
+ return nil if ! defined?(@req.base) || @req.base.nil?
55
+ return plg_ext('presen', _('Present')) if /^Presen/ =~ @req.base
56
+ return nil
57
+ end
58
+
59
+ def plg_presen
60
+ return nil if ! defined?(@req.base) || @req.base.nil?
61
+ return page_attribute('presen', _('Presentation mode'))
62
+ end
63
+ alias plg_show_presen plg_presen # FIXME: Make this obsolete.
64
+
65
+ def plg_presen_theme(theme)
66
+ return # Do nothing.
67
+ end
68
+
69
+ def plg_presen_theme_list
70
+ return [:ul, *presen_theme_list.map {|t| [:li, t] }]
71
+ end
72
+
73
+ PRESEN_THEME_IGNORE_DIR = %(default)
74
+
75
+ def presen_theme_list
76
+ themes = []
77
+ theme_path = @config.theme_dir.path+'s5'
78
+ theme_path.each_entry {|d|
79
+ s = d.to_s
80
+ next if /\A\./ =~ s
81
+ next if PRESEN_THEME_IGNORE_DIR.include?(s)
82
+ dir = theme_path+d
83
+ next unless dir.directory?
84
+ themes << d.to_s
85
+ }
86
+ return themes.sort
87
+ end
88
+
89
+ # ============================== ext_presen
90
+ PRESEN_DEFAULT_THEME = 'qwikworld'
91
+
92
+ def ext_presen
93
+ c_require_pagename
94
+ c_require_page_exist
95
+ c_require_no_path_args
96
+ c_require_no_ext_args
97
+
98
+ # Get theme.
99
+ page = @site[@req.base]
100
+ content = page.load
101
+
102
+ w = c_parse(content)
103
+ theme = presen_get_theme(w)
104
+ theme ||= PRESEN_DEFAULT_THEME
105
+
106
+ w = c_res(content)
107
+
108
+ w = presen_patch(w)
109
+
110
+ c_set_html
111
+ c_set_no_cache
112
+ @res.body = PresenGenerator.generate(@site, @req.base, w, theme)
113
+ end
114
+
115
+ def presen_patch(wabisabi)
116
+ if wabisabi.is_a?(String) # for test
117
+ wabisabi = c_parse(wabisabi)
118
+ end
119
+
120
+ nw = []
121
+ wabisabi.each {|ele|
122
+ if ele.is_a?(Array) && ele[0] == :plugin &&
123
+ ele.attr[:method] == 'com'
124
+ # do nothing
125
+ else
126
+ nw << ele
127
+ end
128
+ }
129
+ return nw
130
+ end
131
+
132
+ def presen_get_theme(wabisabi)
133
+ if wabisabi.is_a?(String) # for test
134
+ wabisabi = c_parse(wabisabi)
135
+ end
136
+
137
+ theme = nil
138
+ wabisabi.each {|ele|
139
+ if ele.is_a?(Array) && ele[0] == :plugin &&
140
+ ele.attr[:method] == 'presen_theme'
141
+ theme = ele.attr[:param]
142
+ end
143
+ }
144
+ return theme
145
+ end
146
+
147
+ def nu_presen_get_theme(content)
148
+ theme = 'i18n'
149
+ wabisabi = c_res(content)
150
+ wabisabi.each {|ele|
151
+ if ele.is_a?(Array) && ele[0] == :plugin &&
152
+ ele.attr[:method] == 'presen_theme'
153
+ theme = ele.attr[:param]
154
+ end
155
+ }
156
+ theme
157
+ end
158
+ end
159
+
160
+ class PresenGenerator
161
+ def self.generate(site, pagename, wabisabi, theme=nil)
162
+ page = site[pagename]
163
+ title = page.get_title
164
+
165
+ wabisabi = resolve_h(wabisabi)
166
+ wabisabi = resolve_slide(wabisabi)
167
+
168
+ #theme ||= 'i18n'
169
+ theme ||= 'qwikworld'
170
+ #theme = 'qwikblack'
171
+ #theme = 'qwikborder'
172
+
173
+ return html_page(title, theme, wabisabi, pagename)
174
+ end
175
+
176
+ REPLACE_H = {:h2=>:h1, :h3=>:h2, :h4=>:h3, :h5=>:h4, :h6=>:h5}
177
+ def self.resolve_h(wabisabi)
178
+ wabisabi.each_tag(:h2, :h3, :h4, :h5, :h6){|w|
179
+ w[0] = REPLACE_H[w[0]]
180
+ w
181
+ }
182
+ end
183
+
184
+ def self.resolve_slide(wabisabi)
185
+ presentation = []
186
+ slide = []
187
+ presentation << slide
188
+ wabisabi.each {|e|
189
+ if e.is_a?(Array) && e[0] == :h1 && 0 < slide.size
190
+ slide = []
191
+ presentation << slide
192
+ end
193
+ slide << e
194
+ }
195
+
196
+ return presentation.map {|slide|
197
+ [:div, {:class=>'slide'}, slide]
198
+ }
199
+ end
200
+
201
+ private
202
+
203
+ def self.html_page(title, theme, wabisabi, pagename)
204
+ theme_href = ".theme/s5/#{theme}/slides.css"
205
+ html = [[:"!DOCTYPE", 'html', 'PUBLIC',
206
+ '-//W3C//DTD HTML 4.01 Transitional//EN',
207
+ 'http://www.w3.org/TR/html4/loose.dtd'],
208
+ [:html,
209
+ {:'xmlns'=>'http://www.w3.org/1999/xhtml',
210
+ :'xmlns:v'=>'urn:schemas-microsoft-com:vml'},
211
+ [:head,
212
+ [:title, title],
213
+ [:meta, {:name=>'defaultView', :content=>'slideshow'}],
214
+ [:meta, {:name=>'controlVis', :content=>'hidden'}],
215
+ [:link, {:rel=>'stylesheet', :href=>theme_href,
216
+ :type=>'text/css', :media=>'projection', :id=>'slideProj'}],
217
+ [:link, {:rel=>'stylesheet', :href=>'.theme/s5/default/outline.css',
218
+ :type=>'text/css', :media=>'screen', :id=>'outlineStyle'}],
219
+ [:link, {:rel=>'stylesheet', :href=>'.theme/s5/default/print.css',
220
+ :type=>'text/css', :media=>'print', :id=>'slidePrint'}],
221
+ [:link, {:rel=>'stylesheet', :href=>'.theme/s5/default/opera.css',
222
+ :type=>'text/css', :media=>'projection', :id=>'operaFix'}],
223
+ [:style, {:type=>'text/css', :media=>'all'}, ''],
224
+ [:script, {:src=>'.theme/s5/default/slides.js',
225
+ :type=>'text/javascript'}, '']],
226
+ [:body,
227
+ [:div, {:class=>'layout'},
228
+ [:div, {:id=>'controls'}, ''],
229
+ [:div, {:id=>'currentSlide'}, ''],
230
+ [:div, {:id=>'header'}, ''],
231
+ [:div, {:id=>'footer'},
232
+ [:h1, [:a, {:href=>"#{pagename}.html"}, title]]]],
233
+ [:div, {:class=>'presentation'}, wabisabi]]]]
234
+ return html
235
+ end
236
+ end
237
+ end
238
+
239
+ if $0 == __FILE__
240
+ require 'qwik/test-common'
241
+ $test = true
242
+ end
243
+
244
+ if defined?($test) && $test
245
+ class TestActPresen < Test::Unit::TestCase
246
+ include TestSession
247
+
248
+ def test_plg_presen
249
+ ok_wi [:span, {:class=>'attribute'}, [:a, {:href=>'1.presen'},
250
+ 'Presentation mode']], '{{presen}}'
251
+
252
+ # test_plg_presen_switch
253
+ ok_wi [], '{{presen_switch}}'
254
+
255
+ page = @site.create("PresenTest")
256
+ page.store('{{presen_switch}}')
257
+ res = session('/test/PresenTest.html')
258
+ ok_in([:a, {:href=>"PresenTest.presen"}, "Present"],
259
+ "//div[@class='section']")
260
+ end
261
+
262
+ def test_plg_presen_theme
263
+ ok_wi [], '{{presen_theme(q)}}'
264
+ end
265
+
266
+ def test_act_presen
267
+ t_add_user
268
+
269
+ page = @site.create_new
270
+ page.store('* ��')
271
+ res = session('/test/1.presen')
272
+ assert_text('��', 'title')
273
+ end
274
+
275
+ def test_get_theme
276
+ res = session
277
+ ok_eq(nil, @action.presen_get_theme('a'))
278
+ ok_eq('q', @action.presen_get_theme('{{presen_theme(q)}}'))
279
+ ok_eq('q', @action.presen_get_theme('a
280
+ {{presen_theme(q)}}
281
+ b
282
+ '))
283
+ end
284
+ end
285
+
286
+ class TestPresenGenerator < Test::Unit::TestCase
287
+ include TestSession
288
+
289
+ def ok_re(e, w)
290
+ ok_eq(e, Qwik::PresenGenerator.resolve_h(w))
291
+ end
292
+
293
+ def ok_slide(e, w)
294
+ ok_eq(e, Qwik::PresenGenerator.resolve_slide(w))
295
+ end
296
+
297
+ def test_resolve_h
298
+ res = session
299
+ ok_re([[:h1, 'h']], [[:h2, 'h']])
300
+ ok_re([[:h1, 'h', 'h2']], [[:h2, 'h', 'h2']])
301
+ ok_re([[:h1, 'h', [:b, 'b'], 'c']], [[:h2, 'h', [:b, 'b'], 'c']])
302
+ ok_re([[:h2, 'h']], [[:h3, 'h']])
303
+ end
304
+
305
+ def test_resolve_slide
306
+ c = Qwik::PresenGenerator
307
+
308
+ # test_resolve_slide
309
+ ok_slide([[:div, {:class=>'slide'}, [[:h1, 'h']]]],
310
+ [[:h1, 'h']])
311
+ ok_slide([[:div, {:class=>'slide'}, [[:h1, 'h'], [:p, 'p']]]],
312
+ [[:h1, 'h'], [:p, 'p']])
313
+ ok_slide([[:div, {:class=>'slide'}, [[:h1, 'h'], [:p, 'p']]],
314
+ [:div, {:class=>'slide'}, [[:h1, 'h'], [:p, 'p']]]],
315
+ [[:h1, 'h'], [:p, 'p'], [:h1, 'h'], [:p, 'p']])
316
+ end
317
+
318
+ def test_get_html
319
+ res = session
320
+
321
+ c = Qwik::PresenGenerator
322
+ page = @site.create_new
323
+ page.store("* h\np\n* h2\np2\n")
324
+ wabisabi = @action.c_page_res(page.key)
325
+ w = c.generate(@site, page.key, wabisabi)
326
+
327
+ wpage = [[:'!DOCTYPE',
328
+ 'html',
329
+ 'PUBLIC',
330
+ '-//W3C//DTD HTML 4.01 Transitional//EN',
331
+ 'http://www.w3.org/TR/html4/loose.dtd'],
332
+ [:html,
333
+ {:'xmlns:v'=>'urn:schemas-microsoft-com:vml',
334
+ :xmlns=>'http://www.w3.org/1999/xhtml'},
335
+ [:head,
336
+ [:title, 'h'],
337
+ [:meta, {:content=>'slideshow', :name=>'defaultView'}],
338
+ [:meta, {:content=>'hidden', :name=>'controlVis'}],
339
+ [:link,
340
+ {:id=>'slideProj',
341
+ :rel=>'stylesheet',
342
+ :type=>'text/css',
343
+ :href=>'.theme/s5/qwikworld/slides.css',
344
+ :media=>'projection'}],
345
+ [:link,
346
+ {:id=>'outlineStyle',
347
+ :rel=>'stylesheet',
348
+ :type=>'text/css',
349
+ :href=>'.theme/s5/default/outline.css',
350
+ :media=>'screen'}],
351
+ [:link,
352
+ {:id=>'slidePrint',
353
+ :rel=>'stylesheet',
354
+ :type=>'text/css',
355
+ :href=>'.theme/s5/default/print.css',
356
+ :media=>'print'}],
357
+ [:link,
358
+ {:id=>'operaFix',
359
+ :rel=>'stylesheet',
360
+ :type=>'text/css',
361
+ :href=>'.theme/s5/default/opera.css',
362
+ :media=>'projection'}],
363
+ [:style, {:type=>'text/css', :media=>'all'}, ''],
364
+ [:script, {:type=>'text/javascript',
365
+ :src=>'.theme/s5/default/slides.js'}, '']],
366
+ [:body,
367
+ [:div,
368
+ {:class=>'layout'},
369
+ [:div, {:id=>'controls'}, ''],
370
+ [:div, {:id=>'currentSlide'}, ''],
371
+ [:div, {:id=>'header'}, ''],
372
+ [:div, {:id=>"footer"}, [:h1, [:a, {:href=>"1.html"}, "h"]]]],
373
+ [:div,
374
+ {:class=>'presentation'},
375
+ [[:div, {:class=>'slide'}, [[:h1, 'h'], [:p, 'p']]],
376
+ [:div, {:class=>'slide'}, [[:h1, 'h2'], [:p, 'p2']]]]]]]]
377
+ ok_eq(wpage, w)
378
+ end
379
+ end
380
+ end