rabbit-qt 0.1.0

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 (710) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +1 -0
  3. data/GPL +339 -0
  4. data/Gemfile +37 -0
  5. data/README.md +87 -0
  6. data/Rakefile +285 -0
  7. data/bin/rabbirc +86 -0
  8. data/bin/rabbit +22 -0
  9. data/bin/rabbit-command +97 -0
  10. data/bin/rabbit-slide +22 -0
  11. data/bin/rabbit-theme +22 -0
  12. data/data/account.kou.gpg +3 -0
  13. data/data/rabbit/image/clear-blue-images/clear-blue-headline-background.png +0 -0
  14. data/data/rabbit/image/clear-blue-images/clear-blue-icon.png +0 -0
  15. data/data/rabbit/image/clear-blue-images/clear-blue-images.rb +0 -0
  16. data/data/rabbit/image/clear-blue-images/property.rb +4 -0
  17. data/data/rabbit/image/cozmixng-images/cozmixchu.png +0 -0
  18. data/data/rabbit/image/cozmixng-images/cozmixng-images.rb +2 -0
  19. data/data/rabbit/image/cozmixng-images/powered-by-cozmixng.png +0 -0
  20. data/data/rabbit/image/cozmixng-images/property.rb +4 -0
  21. data/data/rabbit/image/dark-gradation-images/background-gradation.png +0 -0
  22. data/data/rabbit/image/dark-gradation-images/dark-gradation-images.rb +2 -0
  23. data/data/rabbit/image/dark-gradation-images/property.rb +4 -0
  24. data/data/rabbit/image/debian-images/bottom.png +0 -0
  25. data/data/rabbit/image/debian-images/debian-images.rb +2 -0
  26. data/data/rabbit/image/debian-images/debian-logo-pink.png +0 -0
  27. data/data/rabbit/image/debian-images/debian-logo.png +0 -0
  28. data/data/rabbit/image/debian-images/debian-whirl.png +0 -0
  29. data/data/rabbit/image/debian-images/item1.png +0 -0
  30. data/data/rabbit/image/debian-images/property.rb +4 -0
  31. data/data/rabbit/image/debian-images/top.png +0 -0
  32. data/data/rabbit/image/nari-images/chibi_nari.png +0 -0
  33. data/data/rabbit/image/nari-images/gc_kun.png +0 -0
  34. data/data/rabbit/image/nari-images/nari-goal-flag.png +0 -0
  35. data/data/rabbit/image/nari-images/nari-images.rb +2 -0
  36. data/data/rabbit/image/nari-images/nari-start-flag.png +0 -0
  37. data/data/rabbit/image/nari-images/property.rb +4 -0
  38. data/data/rabbit/image/rabbit-images/blue-item.png +0 -0
  39. data/data/rabbit/image/rabbit-images/close-quote-blue.png +0 -0
  40. data/data/rabbit/image/rabbit-images/close-quote-brown.png +0 -0
  41. data/data/rabbit/image/rabbit-images/close-quote-light-blue.png +0 -0
  42. data/data/rabbit/image/rabbit-images/goal-flag.png +0 -0
  43. data/data/rabbit/image/rabbit-images/green-item.png +0 -0
  44. data/data/rabbit/image/rabbit-images/kame.png +0 -0
  45. data/data/rabbit/image/rabbit-images/lavie-icon.png +0 -0
  46. data/data/rabbit/image/rabbit-images/lavie-with-logo.png +0 -0
  47. data/data/rabbit/image/rabbit-images/lavie.png +0 -0
  48. data/data/rabbit/image/rabbit-images/mini-alice.png +0 -0
  49. data/data/rabbit/image/rabbit-images/mini-butler-rabbit.png +0 -0
  50. data/data/rabbit/image/rabbit-images/mini-horizontal-bar.png +0 -0
  51. data/data/rabbit/image/rabbit-images/mini-kame-taro.png +0 -0
  52. data/data/rabbit/image/rabbit-images/mini-tanu-kitaro.png +0 -0
  53. data/data/rabbit/image/rabbit-images/mini-usa-taro.png +0 -0
  54. data/data/rabbit/image/rabbit-images/mini-usagi.png +0 -0
  55. data/data/rabbit/image/rabbit-images/mini-vertical-bar.png +0 -0
  56. data/data/rabbit/image/rabbit-images/mini-yukidaru-taro.png +0 -0
  57. data/data/rabbit/image/rabbit-images/open-quote-blue.png +0 -0
  58. data/data/rabbit/image/rabbit-images/open-quote-brown.png +0 -0
  59. data/data/rabbit/image/rabbit-images/open-quote-light-blue.png +0 -0
  60. data/data/rabbit/image/rabbit-images/property.rb +4 -0
  61. data/data/rabbit/image/rabbit-images/rabbit-banner-blue.png +0 -0
  62. data/data/rabbit/image/rabbit-images/rabbit-banner-green.png +0 -0
  63. data/data/rabbit/image/rabbit-images/rabbit-banner-heads.png +0 -0
  64. data/data/rabbit/image/rabbit-images/rabbit-banner-pink.png +0 -0
  65. data/data/rabbit/image/rabbit-images/rabbit-banner.png +0 -0
  66. data/data/rabbit/image/rabbit-images/rabbit-banner2.png +0 -0
  67. data/data/rabbit/image/rabbit-images/rabbit-images.rb +2 -0
  68. data/data/rabbit/image/rabbit-images/rabbit-pink-logo.png +0 -0
  69. data/data/rabbit/image/rabbit-images/rabbit-pink-logo2.png +0 -0
  70. data/data/rabbit/image/rabbit-images/red-item.png +0 -0
  71. data/data/rabbit/image/rabbit-images/red-item2.png +0 -0
  72. data/data/rabbit/image/rabbit-images/start-flag.png +0 -0
  73. data/data/rabbit/image/rabbit-images/tanu-kitaro.png +0 -0
  74. data/data/rabbit/image/rabbit-images/usa-taro.png +0 -0
  75. data/data/rabbit/image/rabbit-images/usagi.png +0 -0
  76. data/data/rabbit/image/rabbit-images/yukiusa.png +0 -0
  77. data/data/rabbit/image/ranguba-images/ranguba-bar.png +0 -0
  78. data/data/rabbit/image/ranguba-images/ranguba-bar.svg +153 -0
  79. data/data/rabbit/image/ranguba-images/ranguba-images.rb +0 -0
  80. data/data/rabbit/image/ranguba-images/ranguba-item-mark-mini.png +0 -0
  81. data/data/rabbit/image/ranguba-images/ranguba-item-mark.png +0 -0
  82. data/data/rabbit/image/ranguba-images/ranguba-item-mark.svg +400 -0
  83. data/data/rabbit/image/ranguba-images/ranguba-mark.png +0 -0
  84. data/data/rabbit/image/ranguba-images/ranguba-mark.svg +587 -0
  85. data/data/rabbit/image/ruby-images/property.rb +4 -0
  86. data/data/rabbit/image/ruby-images/ruby-images.rb +2 -0
  87. data/data/rabbit/image/ruby-images/ruby-pink-circle-icon.png +0 -0
  88. data/data/rabbit/image/ruby-images/ruby-pink-circle-logo.png +0 -0
  89. data/data/rabbit/image/ruby-images/ruby-pink-circle-small-icon.png +0 -0
  90. data/data/rabbit/image/ruby-images/ruby-pink-circle.png +0 -0
  91. data/data/rabbit/image/ruby-images/ruby-pink-polygon-icon.png +0 -0
  92. data/data/rabbit/image/ruby-images/ruby-pink-polygon-logo.png +0 -0
  93. data/data/rabbit/image/ruby-images/ruby-pink-polygon-small-icon.png +0 -0
  94. data/data/rabbit/image/ruby-images/ruby-pink-polygon.png +0 -0
  95. data/data/rabbit/image/rubykaigi2011-images/property.rb +4 -0
  96. data/data/rabbit/image/rubykaigi2011-images/rubykaigi2011-background-black.jpg +0 -0
  97. data/data/rabbit/image/rubykaigi2011-images/rubykaigi2011-background-white.jpg +0 -0
  98. data/data/rabbit/image/rubykaigi2011-images/rubykaigi2011-images.rb +2 -0
  99. data/doc/_config.yml +29 -0
  100. data/doc/_includes/en.menu.html +8 -0
  101. data/doc/_includes/ja.menu.html +8 -0
  102. data/doc/_layouts/en.html +48 -0
  103. data/doc/_layouts/ja.html +48 -0
  104. data/doc/_layouts/skeleton.html +85 -0
  105. data/doc/_plugins/converters/hiki.rb +27 -0
  106. data/doc/_plugins/converters/markdown.rb +15 -0
  107. data/doc/_plugins/converters/rd.rb +73 -0
  108. data/doc/_plugins/support_symlink.rb +11 -0
  109. data/doc/css/rabbit.css +368 -0
  110. data/doc/css/syntax.scss +67 -0
  111. data/doc/en/development.rd +81 -0
  112. data/doc/en/faq.rd +152 -0
  113. data/doc/en/hiki.hiki +326 -0
  114. data/doc/en/how-to-make/hiki.hiki +9 -0
  115. data/doc/en/how-to-make/index.rd +26 -0
  116. data/doc/en/how-to-make/markdown.md +107 -0
  117. data/doc/en/how-to-make/pdf.rd +7 -0
  118. data/doc/en/how-to-make/rd.rd +92 -0
  119. data/doc/en/how-to-make/theme.rd +135 -0
  120. data/doc/en/index.rd +268 -0
  121. data/doc/en/install/homebrew.rd +22 -0
  122. data/doc/en/install/index.rd +50 -0
  123. data/doc/en/install/macports.rd +77 -0
  124. data/doc/en/install/windows.rd +45 -0
  125. data/doc/en/news.rd +2788 -0
  126. data/doc/en/rd.rd +482 -0
  127. data/doc/en/sample/hiki/rabbit.hiki +388 -0
  128. data/doc/en/sample/index.rd +15 -0
  129. data/doc/en/sample/markdown/rabbit.md +387 -0
  130. data/doc/en/sample/rd/rabbit.rd +463 -0
  131. data/doc/en/slides.rd +13 -0
  132. data/doc/en/usage/platform/os-x.rd +13 -0
  133. data/doc/en/usage/rabbit-slide.rd +239 -0
  134. data/doc/en/usage/rabbit-theme.rd +5 -0
  135. data/doc/en/usage/rabbit.rd +376 -0
  136. data/doc/en/usage.rd +24 -0
  137. data/doc/en/users.rd +35 -0
  138. data/doc/favicon.ico +0 -0
  139. data/doc/favicon.png +0 -0
  140. data/doc/images/background-sample.svg +290 -0
  141. data/doc/images/background.png +0 -0
  142. data/doc/images/background.svg +131 -0
  143. data/doc/images/hare-and-tortoise.png +0 -0
  144. data/doc/images/hare-and-tortoise.svg +541 -0
  145. data/doc/images/lavie-icon.png +0 -0
  146. data/doc/images/lavie.png +0 -0
  147. data/doc/images/rabbit-slide-show-logo.png +0 -0
  148. data/doc/images/rabbit-slide-show-logo.svg +597 -0
  149. data/doc/index.html.en +58 -0
  150. data/doc/index.html.ja +58 -0
  151. data/doc/ja/about.rd +21 -0
  152. data/doc/ja/development.rd +78 -0
  153. data/doc/ja/faq.rd +202 -0
  154. data/doc/ja/hiki.hiki +320 -0
  155. data/doc/ja/how-to-make/hiki.hiki +9 -0
  156. data/doc/ja/how-to-make/index.rd +26 -0
  157. data/doc/ja/how-to-make/markdown.md +107 -0
  158. data/doc/ja/how-to-make/pdf.rd +8 -0
  159. data/doc/ja/how-to-make/rd.rd +130 -0
  160. data/doc/ja/how-to-make/theme.rd +142 -0
  161. data/doc/ja/index.rd +283 -0
  162. data/doc/ja/install/homebrew.rd +23 -0
  163. data/doc/ja/install/index.rd +53 -0
  164. data/doc/ja/install/macports.rd +100 -0
  165. data/doc/ja/install/windows.rd +46 -0
  166. data/doc/ja/news.rd +2773 -0
  167. data/doc/ja/rd.rd +490 -0
  168. data/doc/ja/sample/hiki/rabbit.hiki +404 -0
  169. data/doc/ja/sample/index.rd +15 -0
  170. data/doc/ja/sample/markdown/rabbit.md +382 -0
  171. data/doc/ja/sample/rd/rabbit.rd +471 -0
  172. data/doc/ja/slides.rd +29 -0
  173. data/doc/ja/usage/rabbit-slide.rd +220 -0
  174. data/doc/ja/usage/rabbit-theme.rd +152 -0
  175. data/doc/ja/usage/rabbit.rd +377 -0
  176. data/doc/ja/usage.rd +19 -0
  177. data/doc/ja/users.rd +196 -0
  178. data/doc/screenshot.en.rab +10 -0
  179. data/doc/screenshot.ja.rab +10 -0
  180. data/entities/README +10 -0
  181. data/entities/ent2rb.rb +65 -0
  182. data/entities/isoamsa.ent +167 -0
  183. data/entities/isoamsb.ent +143 -0
  184. data/entities/isoamsc.ent +43 -0
  185. data/entities/isoamsn.ent +114 -0
  186. data/entities/isoamso.ent +73 -0
  187. data/entities/isoamsr.ent +204 -0
  188. data/entities/isobox.ent +61 -0
  189. data/entities/isocyr1.ent +88 -0
  190. data/entities/isocyr2.ent +47 -0
  191. data/entities/isodia.ent +35 -0
  192. data/entities/isogrk3.ent +64 -0
  193. data/entities/isolat1.ent +83 -0
  194. data/entities/isolat2.ent +142 -0
  195. data/entities/isomfrk.ent +75 -0
  196. data/entities/isomopf.ent +49 -0
  197. data/entities/isomscr.ent +75 -0
  198. data/entities/isonum.ent +97 -0
  199. data/entities/isopub.ent +105 -0
  200. data/entities/isotech.ent +182 -0
  201. data/entities/mmlalias.ent +564 -0
  202. data/entities/mmlextra.ent +122 -0
  203. data/lib/rabbit/actions.rb +427 -0
  204. data/lib/rabbit/author-configuration.rb +90 -0
  205. data/lib/rabbit/canvas.rb +844 -0
  206. data/lib/rabbit/command/rabbit-slide.rb +898 -0
  207. data/lib/rabbit/command/rabbit-theme.rb +300 -0
  208. data/lib/rabbit/command/rabbit.rb +854 -0
  209. data/lib/rabbit/config.rb +40 -0
  210. data/lib/rabbit/console/roff.rb +84 -0
  211. data/lib/rabbit/console.rb +218 -0
  212. data/lib/rabbit/cursor-manager.rb +66 -0
  213. data/lib/rabbit/dependency-canvas.rb +33 -0
  214. data/lib/rabbit/element/base/draw-hook.rb +75 -0
  215. data/lib/rabbit/element/base.rb +614 -0
  216. data/lib/rabbit/element/block-element.rb +56 -0
  217. data/lib/rabbit/element/block.rb +70 -0
  218. data/lib/rabbit/element/container-element.rb +321 -0
  219. data/lib/rabbit/element/description-list.rb +75 -0
  220. data/lib/rabbit/element/enum-list.rb +53 -0
  221. data/lib/rabbit/element/footnote.rb +48 -0
  222. data/lib/rabbit/element/image-title-slide.rb +34 -0
  223. data/lib/rabbit/element/image.rb +292 -0
  224. data/lib/rabbit/element/index-slide.rb +206 -0
  225. data/lib/rabbit/element/item-list.rb +50 -0
  226. data/lib/rabbit/element/method-list.rb +66 -0
  227. data/lib/rabbit/element/poppler-page.rb +52 -0
  228. data/lib/rabbit/element/poppler-slide.rb +47 -0
  229. data/lib/rabbit/element/poppler-title-slide.rb +45 -0
  230. data/lib/rabbit/element/preformatted.rb +48 -0
  231. data/lib/rabbit/element/slide-element.rb +140 -0
  232. data/lib/rabbit/element/slide.rb +67 -0
  233. data/lib/rabbit/element/syntax-highlighting.rb +31 -0
  234. data/lib/rabbit/element/table.rb +121 -0
  235. data/lib/rabbit/element/tag.rb +60 -0
  236. data/lib/rabbit/element/text-block-element.rb +27 -0
  237. data/lib/rabbit/element/text-container-element.rb +176 -0
  238. data/lib/rabbit/element/text-element.rb +83 -0
  239. data/lib/rabbit/element/text-renderer.rb +378 -0
  240. data/lib/rabbit/element/text.rb +146 -0
  241. data/lib/rabbit/element/title-slide.rb +190 -0
  242. data/lib/rabbit/element/video.rb +265 -0
  243. data/lib/rabbit/element.rb +35 -0
  244. data/lib/rabbit/error.rb +239 -0
  245. data/lib/rabbit/filename.rb +39 -0
  246. data/lib/rabbit/formatter.rb +211 -0
  247. data/lib/rabbit/frame.rb +292 -0
  248. data/lib/rabbit/front.rb +278 -0
  249. data/lib/rabbit/gem-builder.rb +42 -0
  250. data/lib/rabbit/gem-finder.rb +57 -0
  251. data/lib/rabbit/gem-pusher.rb +89 -0
  252. data/lib/rabbit/gesture/handler.rb +253 -0
  253. data/lib/rabbit/gesture/processor.rb +118 -0
  254. data/lib/rabbit/gettext.rb +14 -0
  255. data/lib/rabbit/graffiti/config-dialog.rb +47 -0
  256. data/lib/rabbit/graffiti/processor.rb +132 -0
  257. data/lib/rabbit/gtk.rb +93 -0
  258. data/lib/rabbit/html/generator.rb +477 -0
  259. data/lib/rabbit/html/template.erb +109 -0
  260. data/lib/rabbit/icon.rb +31 -0
  261. data/lib/rabbit/image/base.rb +270 -0
  262. data/lib/rabbit/image/default.rb +42 -0
  263. data/lib/rabbit/image/dia.rb +74 -0
  264. data/lib/rabbit/image/eps.rb +129 -0
  265. data/lib/rabbit/image/gimp.rb +69 -0
  266. data/lib/rabbit/image/mermaid.rb +74 -0
  267. data/lib/rabbit/image/pdf.rb +94 -0
  268. data/lib/rabbit/image/svg.rb +79 -0
  269. data/lib/rabbit/image-data-loader.rb +51 -0
  270. data/lib/rabbit/image.rb +53 -0
  271. data/lib/rabbit/info-window.rb +327 -0
  272. data/lib/rabbit/key-handler.rb +227 -0
  273. data/lib/rabbit/keys.rb +209 -0
  274. data/lib/rabbit/logger/base.rb +147 -0
  275. data/lib/rabbit/logger/gui.rb +113 -0
  276. data/lib/rabbit/logger/stderr.rb +42 -0
  277. data/lib/rabbit/logger.rb +40 -0
  278. data/lib/rabbit/menu.rb +242 -0
  279. data/lib/rabbit/pango-markup.rb +44 -0
  280. data/lib/rabbit/parser/base.rb +31 -0
  281. data/lib/rabbit/parser/ext/aafigure.rb +51 -0
  282. data/lib/rabbit/parser/ext/blockdiag.rb +68 -0
  283. data/lib/rabbit/parser/ext/charty.rb +67 -0
  284. data/lib/rabbit/parser/ext/coderay.rb +85 -0
  285. data/lib/rabbit/parser/ext/enscript.rb +136 -0
  286. data/lib/rabbit/parser/ext/entity.rb +4164 -0
  287. data/lib/rabbit/parser/ext/escape.rb +18 -0
  288. data/lib/rabbit/parser/ext/image.rb +157 -0
  289. data/lib/rabbit/parser/ext/inline.rb +45 -0
  290. data/lib/rabbit/parser/ext/rouge.rb +129 -0
  291. data/lib/rabbit/parser/ext/tex.rb +95 -0
  292. data/lib/rabbit/parser/ext/video.rb +37 -0
  293. data/lib/rabbit/parser/image.rb +62 -0
  294. data/lib/rabbit/parser/markdown/converter.rb +440 -0
  295. data/lib/rabbit/parser/markdown.rb +144 -0
  296. data/lib/rabbit/parser/pause-support.rb +33 -0
  297. data/lib/rabbit/parser/pdf.rb +56 -0
  298. data/lib/rabbit/parser/rd/ext/base.rb +95 -0
  299. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +190 -0
  300. data/lib/rabbit/parser/rd/ext/character-reference.rb +75 -0
  301. data/lib/rabbit/parser/rd/ext/image.rb +46 -0
  302. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +118 -0
  303. data/lib/rabbit/parser/rd/ext/refer.rb +50 -0
  304. data/lib/rabbit/parser/rd/ext/video.rb +32 -0
  305. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +458 -0
  306. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +105 -0
  307. data/lib/rabbit/parser/rd/visitor.rb +72 -0
  308. data/lib/rabbit/parser/rd.rb +92 -0
  309. data/lib/rabbit/parser/wiki/output.rb +545 -0
  310. data/lib/rabbit/parser/wiki.rb +61 -0
  311. data/lib/rabbit/parser.rb +73 -0
  312. data/lib/rabbit/password-reader.rb +34 -0
  313. data/lib/rabbit/path-manipulatable.rb +37 -0
  314. data/lib/rabbit/progress.rb +97 -0
  315. data/lib/rabbit/properties.rb +154 -0
  316. data/lib/rabbit/qt.rb +222 -0
  317. data/lib/rabbit/rabbit.rb +50 -0
  318. data/lib/rabbit/readme-parser.rb +112 -0
  319. data/lib/rabbit/relative-size.rb +28 -0
  320. data/lib/rabbit/renderer/base.rb +412 -0
  321. data/lib/rabbit/renderer/color.rb +130 -0
  322. data/lib/rabbit/renderer/display/base.rb +223 -0
  323. data/lib/rabbit/renderer/display/button-handler.rb +229 -0
  324. data/lib/rabbit/renderer/display/cursor.rb +49 -0
  325. data/lib/rabbit/renderer/display/drawing-area-base.rb +381 -0
  326. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +219 -0
  327. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +57 -0
  328. data/lib/rabbit/renderer/display/drawing-area.rb +29 -0
  329. data/lib/rabbit/renderer/display/gesture.rb +111 -0
  330. data/lib/rabbit/renderer/display/graffiti.rb +127 -0
  331. data/lib/rabbit/renderer/display/hook-handler.rb +64 -0
  332. data/lib/rabbit/renderer/display/info.rb +75 -0
  333. data/lib/rabbit/renderer/display/magnifier.rb +137 -0
  334. data/lib/rabbit/renderer/display/mask.rb +83 -0
  335. data/lib/rabbit/renderer/display/menu.rb +54 -0
  336. data/lib/rabbit/renderer/display/motion-handler.rb +34 -0
  337. data/lib/rabbit/renderer/display/progress.rb +85 -0
  338. data/lib/rabbit/renderer/display/qt-drawing-area-base.rb +336 -0
  339. data/lib/rabbit/renderer/display/qt-drawing-area-primitive.rb +189 -0
  340. data/lib/rabbit/renderer/display/qt-drawing-area-view-only.rb +53 -0
  341. data/lib/rabbit/renderer/display/qt-drawing-area.rb +29 -0
  342. data/lib/rabbit/renderer/display/qt-drawing-widget.rb +85 -0
  343. data/lib/rabbit/renderer/display/scroll-handler.rb +58 -0
  344. data/lib/rabbit/renderer/display/search.rb +114 -0
  345. data/lib/rabbit/renderer/display/spotlight.rb +122 -0
  346. data/lib/rabbit/renderer/display.rb +17 -0
  347. data/lib/rabbit/renderer/engine/cairo.rb +481 -0
  348. data/lib/rabbit/renderer/engine/qt_painter.rb +397 -0
  349. data/lib/rabbit/renderer/engine.rb +18 -0
  350. data/lib/rabbit/renderer/kernel.rb +233 -0
  351. data/lib/rabbit/renderer/offscreen.rb +117 -0
  352. data/lib/rabbit/renderer/print-layout.rb +150 -0
  353. data/lib/rabbit/renderer/printer.rb +223 -0
  354. data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
  355. data/lib/rabbit/renderer/scene-node-widget.rb +40 -0
  356. data/lib/rabbit/renderer/scene.rb +538 -0
  357. data/lib/rabbit/renderer.rb +20 -0
  358. data/lib/rabbit/search-window.rb +90 -0
  359. data/lib/rabbit/searcher.rb +40 -0
  360. data/lib/rabbit/size.rb +100 -0
  361. data/lib/rabbit/slide-configuration.rb +211 -0
  362. data/lib/rabbit/slide.rb +40 -0
  363. data/lib/rabbit/soap/base.rb +17 -0
  364. data/lib/rabbit/soap/driver.rb +61 -0
  365. data/lib/rabbit/soap/server.rb +49 -0
  366. data/lib/rabbit/source/argf.rb +45 -0
  367. data/lib/rabbit/source/base.rb +197 -0
  368. data/lib/rabbit/source/file.rb +85 -0
  369. data/lib/rabbit/source/memory.rb +61 -0
  370. data/lib/rabbit/source/uri.rb +93 -0
  371. data/lib/rabbit/source-generator/hiki.rb +58 -0
  372. data/lib/rabbit/source-generator/markdown.rb +56 -0
  373. data/lib/rabbit/source-generator/rd.rb +60 -0
  374. data/lib/rabbit/source-generator.rb +39 -0
  375. data/lib/rabbit/source.rb +30 -0
  376. data/lib/rabbit/task/slide.rb +221 -0
  377. data/lib/rabbit/task/theme.rb +202 -0
  378. data/lib/rabbit/task.rb +18 -0
  379. data/lib/rabbit/theme/applier.rb +690 -0
  380. data/lib/rabbit/theme/auto-slide/auto-slide.rb +6 -0
  381. data/lib/rabbit/theme/auto-slide/property.rb +4 -0
  382. data/lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb +125 -0
  383. data/lib/rabbit/theme/base/base.rb +85 -0
  384. data/lib/rabbit/theme/base/property.rb +4 -0
  385. data/lib/rabbit/theme/blue-bar/blue-bar.rb +80 -0
  386. data/lib/rabbit/theme/blue-bar/property.rb +3 -0
  387. data/lib/rabbit/theme/blue-circle/blue-circle.rb +14 -0
  388. data/lib/rabbit/theme/blue-circle/property.rb +3 -0
  389. data/lib/rabbit/theme/body-background-image/body-background-image.rb +8 -0
  390. data/lib/rabbit/theme/centering-rabbit/centering-rabbit.rb +5 -0
  391. data/lib/rabbit/theme/centering-rabbit/property.rb +3 -0
  392. data/lib/rabbit/theme/clear-blue/clear-blue.rb +101 -0
  393. data/lib/rabbit/theme/clear-blue/property.rb +3 -0
  394. data/lib/rabbit/theme/clock/clock.rb +37 -0
  395. data/lib/rabbit/theme/clock/property.rb +21 -0
  396. data/lib/rabbit/theme/color-circle/color-circle.rb +60 -0
  397. data/lib/rabbit/theme/color-circle/property.rb +4 -0
  398. data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +28 -0
  399. data/lib/rabbit/theme/color-circle-block-quote/property.rb +4 -0
  400. data/lib/rabbit/theme/color-circle-common/color-circle-common.rb +48 -0
  401. data/lib/rabbit/theme/color-circle-common/property.rb +3 -0
  402. data/lib/rabbit/theme/color-circle-description/color-circle-description.rb +9 -0
  403. data/lib/rabbit/theme/color-circle-description/property.rb +4 -0
  404. data/lib/rabbit/theme/color-circle-foot-text/color-circle-foot-text.rb +14 -0
  405. data/lib/rabbit/theme/color-circle-foot-text/property.rb +4 -0
  406. data/lib/rabbit/theme/color-circle-item-mark/color-circle-item-mark.rb +77 -0
  407. data/lib/rabbit/theme/color-circle-item-mark/property.rb +4 -0
  408. data/lib/rabbit/theme/color-circle-method-list/color-circle-method-list.rb +8 -0
  409. data/lib/rabbit/theme/color-circle-method-list/property.rb +4 -0
  410. data/lib/rabbit/theme/color-circle-preformatted/color-circle-preformatted.rb +5 -0
  411. data/lib/rabbit/theme/color-circle-preformatted/property.rb +4 -0
  412. data/lib/rabbit/theme/color-circle-slide/color-circle-slide.rb +13 -0
  413. data/lib/rabbit/theme/color-circle-slide/property.rb +4 -0
  414. data/lib/rabbit/theme/color-circle-text/color-circle-text.rb +9 -0
  415. data/lib/rabbit/theme/color-circle-text/property.rb +4 -0
  416. data/lib/rabbit/theme/color-circle-title-slide/color-circle-title-slide.rb +27 -0
  417. data/lib/rabbit/theme/color-circle-title-slide/property.rb +4 -0
  418. data/lib/rabbit/theme/color-circle-title-text/color-circle-title-text.rb +7 -0
  419. data/lib/rabbit/theme/color-circle-title-text/property.rb +4 -0
  420. data/lib/rabbit/theme/cozmixng/cozmixng.rb +44 -0
  421. data/lib/rabbit/theme/cozmixng/property.rb +3 -0
  422. data/lib/rabbit/theme/cozmixng-powered-by/cozmixng-powered-by.rb +6 -0
  423. data/lib/rabbit/theme/cozmixng-powered-by/property.rb +7 -0
  424. data/lib/rabbit/theme/dark-gradation/dark-gradation.rb +187 -0
  425. data/lib/rabbit/theme/dark-gradation/property.rb +3 -0
  426. data/lib/rabbit/theme/day-white/day-white.rb +8 -0
  427. data/lib/rabbit/theme/day-white/property.rb +3 -0
  428. data/lib/rabbit/theme/debian/debian.rb +232 -0
  429. data/lib/rabbit/theme/debian/property.rb +3 -0
  430. data/lib/rabbit/theme/default/default.rb +42 -0
  431. data/lib/rabbit/theme/default/property.rb +3 -0
  432. data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +219 -0
  433. data/lib/rabbit/theme/default-block-quote/property.rb +3 -0
  434. data/lib/rabbit/theme/default-comment/default-comment.rb +5 -0
  435. data/lib/rabbit/theme/default-comment/property.rb +4 -0
  436. data/lib/rabbit/theme/default-description/default-description.rb +64 -0
  437. data/lib/rabbit/theme/default-description/property.rb +5 -0
  438. data/lib/rabbit/theme/default-foot-text/default-foot-text.rb +52 -0
  439. data/lib/rabbit/theme/default-foot-text/property.rb +3 -0
  440. data/lib/rabbit/theme/default-icon/default-icon.rb +4 -0
  441. data/lib/rabbit/theme/default-icon/property.rb +5 -0
  442. data/lib/rabbit/theme/default-item-mark/default-item-mark.rb +104 -0
  443. data/lib/rabbit/theme/default-item-mark/property.rb +4 -0
  444. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +132 -0
  445. data/lib/rabbit/theme/default-item-mark-setup/property.rb +3 -0
  446. data/lib/rabbit/theme/default-method-list/default-method-list.rb +6 -0
  447. data/lib/rabbit/theme/default-method-list/property.rb +3 -0
  448. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +56 -0
  449. data/lib/rabbit/theme/default-preformatted/property.rb +3 -0
  450. data/lib/rabbit/theme/default-slide/default-slide.rb +62 -0
  451. data/lib/rabbit/theme/default-slide/property.rb +3 -0
  452. data/lib/rabbit/theme/default-text/default-text.rb +186 -0
  453. data/lib/rabbit/theme/default-text/property.rb +3 -0
  454. data/lib/rabbit/theme/default-title-slide/default-title-slide.rb +13 -0
  455. data/lib/rabbit/theme/default-title-slide/property.rb +6 -0
  456. data/lib/rabbit/theme/default-title-text/default-title-text.rb +53 -0
  457. data/lib/rabbit/theme/default-title-text/property.rb +3 -0
  458. data/lib/rabbit/theme/document.erb +35 -0
  459. data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +87 -0
  460. data/lib/rabbit/theme/edge-info-toolkit/property.rb +3 -0
  461. data/lib/rabbit/theme/emphasize-keyword/emphasize-keyword.rb +16 -0
  462. data/lib/rabbit/theme/emphasize-keyword/property.rb +4 -0
  463. data/lib/rabbit/theme/enishi-green/enishi-green.rb +61 -0
  464. data/lib/rabbit/theme/enishi-green/property.rb +3 -0
  465. data/lib/rabbit/theme/entry.rb +202 -0
  466. data/lib/rabbit/theme/footer-comment/footer-comment.rb +74 -0
  467. data/lib/rabbit/theme/footer-comment/property.rb +3 -0
  468. data/lib/rabbit/theme/footer-logo/footer-logo.rb +30 -0
  469. data/lib/rabbit/theme/footer-logo/property.rb +26 -0
  470. data/lib/rabbit/theme/green-circle/green-circle.rb +14 -0
  471. data/lib/rabbit/theme/green-circle/property.rb +3 -0
  472. data/lib/rabbit/theme/headline-logo/headline-logo.rb +24 -0
  473. data/lib/rabbit/theme/headline-logo/property.rb +10 -0
  474. data/lib/rabbit/theme/icon/icon.rb +3 -0
  475. data/lib/rabbit/theme/icon/property.rb +24 -0
  476. data/lib/rabbit/theme/image/image.rb +80 -0
  477. data/lib/rabbit/theme/image/property.rb +3 -0
  478. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +134 -0
  479. data/lib/rabbit/theme/image-slide-number/property.rb +64 -0
  480. data/lib/rabbit/theme/image-timer/image-timer.rb +119 -0
  481. data/lib/rabbit/theme/image-timer/property.rb +46 -0
  482. data/lib/rabbit/theme/image-viewer/image-viewer.rb +21 -0
  483. data/lib/rabbit/theme/image-viewer/property.rb +3 -0
  484. data/lib/rabbit/theme/lightning-clear-blue/lightning-clear-blue.rb +13 -0
  485. data/lib/rabbit/theme/lightning-clear-blue/property.rb +3 -0
  486. data/lib/rabbit/theme/lightning-monochrome/lightning-monochrome.rb +15 -0
  487. data/lib/rabbit/theme/lightning-monochrome/property.rb +3 -0
  488. data/lib/rabbit/theme/lightning-rabbit/lightning-rabbit.rb +13 -0
  489. data/lib/rabbit/theme/lightning-rabbit/property.rb +3 -0
  490. data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +60 -0
  491. data/lib/rabbit/theme/lightning-simple/property.rb +3 -0
  492. data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +67 -0
  493. data/lib/rabbit/theme/lightning-talk/property.rb +3 -0
  494. data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +179 -0
  495. data/lib/rabbit/theme/lightning-talk-toolkit/property.rb +3 -0
  496. data/lib/rabbit/theme/manager.rb +45 -0
  497. data/lib/rabbit/theme/mirror-effect/mirror-effect.rb +27 -0
  498. data/lib/rabbit/theme/mirror-effect/property.rb +3 -0
  499. data/lib/rabbit/theme/nari/nari.rb +215 -0
  500. data/lib/rabbit/theme/nari/property.rb +3 -0
  501. data/lib/rabbit/theme/newline-in-slides/newline-in-slides.rb +29 -0
  502. data/lib/rabbit/theme/newline-in-slides/property.rb +4 -0
  503. data/lib/rabbit/theme/newline-in-title/newline-in-title.rb +7 -0
  504. data/lib/rabbit/theme/newline-in-title/property.rb +4 -0
  505. data/lib/rabbit/theme/night-black/night-black.rb +19 -0
  506. data/lib/rabbit/theme/night-black/property.rb +3 -0
  507. data/lib/rabbit/theme/pdf/pdf.rb +24 -0
  508. data/lib/rabbit/theme/pdf/property.rb +3 -0
  509. data/lib/rabbit/theme/per-slide-background-color/per-slide-background-color.rb +18 -0
  510. data/lib/rabbit/theme/per-slide-background-color/property.rb +16 -0
  511. data/lib/rabbit/theme/per-slide-background-image/per-slide-background-image.rb +11 -0
  512. data/lib/rabbit/theme/per-slide-background-image/property.rb +16 -0
  513. data/lib/rabbit/theme/powered-by/powered-by.rb +67 -0
  514. data/lib/rabbit/theme/powered-by/property.rb +24 -0
  515. data/lib/rabbit/theme/rabbit/property.rb +3 -0
  516. data/lib/rabbit/theme/rabbit/rabbit.rb +57 -0
  517. data/lib/rabbit/theme/rabbit-block-quote/property.rb +4 -0
  518. data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +18 -0
  519. data/lib/rabbit/theme/rabbit-headline-logo/property.rb +5 -0
  520. data/lib/rabbit/theme/rabbit-headline-logo/rabbit-headline-logo.rb +4 -0
  521. data/lib/rabbit/theme/rabbit-icon/property.rb +5 -0
  522. data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +4 -0
  523. data/lib/rabbit/theme/rabbit-item-mark/property.rb +5 -0
  524. data/lib/rabbit/theme/rabbit-item-mark/rabbit-item-mark.rb +53 -0
  525. data/lib/rabbit/theme/rabbit-powered-by/property.rb +7 -0
  526. data/lib/rabbit/theme/rabbit-powered-by/rabbit-powered-by.rb +5 -0
  527. data/lib/rabbit/theme/rabbit-title-logo/property.rb +5 -0
  528. data/lib/rabbit/theme/rabbit-title-logo/rabbit-title-logo.rb +4 -0
  529. data/lib/rabbit/theme/ranguba/property.rb +3 -0
  530. data/lib/rabbit/theme/ranguba/ranguba.rb +218 -0
  531. data/lib/rabbit/theme/red-frame/property.rb +3 -0
  532. data/lib/rabbit/theme/red-frame/red-frame.rb +100 -0
  533. data/lib/rabbit/theme/rotate-zoom-effect/property.rb +4 -0
  534. data/lib/rabbit/theme/rotate-zoom-effect/rotate-zoom-effect.rb +51 -0
  535. data/lib/rabbit/theme/ruby-gnome2/property.rb +3 -0
  536. data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +65 -0
  537. data/lib/rabbit/theme/ruby-gnome2-description/property.rb +7 -0
  538. data/lib/rabbit/theme/ruby-gnome2-description/ruby-gnome2-description.rb +7 -0
  539. data/lib/rabbit/theme/ruby-gnome2-foot-text/property.rb +5 -0
  540. data/lib/rabbit/theme/ruby-gnome2-foot-text/ruby-gnome2-foot-text.rb +3 -0
  541. data/lib/rabbit/theme/ruby-gnome2-headline/property.rb +7 -0
  542. data/lib/rabbit/theme/ruby-gnome2-headline/ruby-gnome2-headline.rb +47 -0
  543. data/lib/rabbit/theme/ruby-gnome2-icon/property.rb +5 -0
  544. data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +4 -0
  545. data/lib/rabbit/theme/ruby-gnome2-item-mark/property.rb +10 -0
  546. data/lib/rabbit/theme/ruby-gnome2-item-mark/ruby-gnome2-item-mark.rb +65 -0
  547. data/lib/rabbit/theme/ruby-gnome2-preformatted/property.rb +4 -0
  548. data/lib/rabbit/theme/ruby-gnome2-preformatted/ruby-gnome2-preformatted.rb +8 -0
  549. data/lib/rabbit/theme/ruby-gnome2-slide/property.rb +4 -0
  550. data/lib/rabbit/theme/ruby-gnome2-slide/ruby-gnome2-slide.rb +40 -0
  551. data/lib/rabbit/theme/rubykaigi2011/property.rb +3 -0
  552. data/lib/rabbit/theme/rubykaigi2011/rubykaigi2011.rb +48 -0
  553. data/lib/rabbit/theme/scroll-effect/property.rb +3 -0
  554. data/lib/rabbit/theme/scroll-effect/scroll-effect.rb +32 -0
  555. data/lib/rabbit/theme/searcher.rb +179 -0
  556. data/lib/rabbit/theme/show-frame/property.rb +16 -0
  557. data/lib/rabbit/theme/show-frame/show-frame.rb +17 -0
  558. data/lib/rabbit/theme/simple-item-mark/property.rb +5 -0
  559. data/lib/rabbit/theme/simple-item-mark/simple-item-mark.rb +112 -0
  560. data/lib/rabbit/theme/slide-background/property.rb +6 -0
  561. data/lib/rabbit/theme/slide-background/slide-background.rb +3 -0
  562. data/lib/rabbit/theme/slide-background-image/property.rb +10 -0
  563. data/lib/rabbit/theme/slide-background-image/slide-background-image.rb +25 -0
  564. data/lib/rabbit/theme/slide-footer-info/property.rb +43 -0
  565. data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +51 -0
  566. data/lib/rabbit/theme/slide-header-info/property.rb +43 -0
  567. data/lib/rabbit/theme/slide-header-info/slide-header-info.rb +42 -0
  568. data/lib/rabbit/theme/slide-logo/property.rb +26 -0
  569. data/lib/rabbit/theme/slide-logo/slide-logo.rb +58 -0
  570. data/lib/rabbit/theme/slide-number/property.rb +21 -0
  571. data/lib/rabbit/theme/slide-number/slide-number.rb +34 -0
  572. data/lib/rabbit/theme/slide-show/property.rb +4 -0
  573. data/lib/rabbit/theme/slide-show/slide-show.rb +31 -0
  574. data/lib/rabbit/theme/stream-comment/property.rb +3 -0
  575. data/lib/rabbit/theme/stream-comment/stream-comment.rb +66 -0
  576. data/lib/rabbit/theme/syntax-highlighting/property.rb +4 -0
  577. data/lib/rabbit/theme/syntax-highlighting/syntax-highlighting.rb +177 -0
  578. data/lib/rabbit/theme/table/property.rb +3 -0
  579. data/lib/rabbit/theme/table/table.rb +173 -0
  580. data/lib/rabbit/theme/tag/property.rb +4 -0
  581. data/lib/rabbit/theme/tag/tag.rb +85 -0
  582. data/lib/rabbit/theme/timer/property.rb +3 -0
  583. data/lib/rabbit/theme/timer/timer.rb +63 -0
  584. data/lib/rabbit/theme/title-background-color/property.rb +10 -0
  585. data/lib/rabbit/theme/title-background-color/title-background-color.rb +17 -0
  586. data/lib/rabbit/theme/title-background-image/property.rb +11 -0
  587. data/lib/rabbit/theme/title-background-image/title-background-image.rb +28 -0
  588. data/lib/rabbit/theme/title-logo/property.rb +23 -0
  589. data/lib/rabbit/theme/title-logo/title-logo.rb +38 -0
  590. data/lib/rabbit/theme/title-on-image-toolkit/property.rb +3 -0
  591. data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +140 -0
  592. data/lib/rabbit/theme/title-shadow/property.rb +11 -0
  593. data/lib/rabbit/theme/title-shadow/title-shadow.rb +7 -0
  594. data/lib/rabbit/theme/title-slide-background-image/property.rb +10 -0
  595. data/lib/rabbit/theme/title-slide-background-image/title-slide-background-image.rb +25 -0
  596. data/lib/rabbit/theme/video/property.rb +3 -0
  597. data/lib/rabbit/theme/video/video.rb +5 -0
  598. data/lib/rabbit/theme-configuration.rb +101 -0
  599. data/lib/rabbit/utils.rb +435 -0
  600. data/lib/rabbit/version.rb +19 -0
  601. data/lib/rabbit/xmlrpc/base.rb +6 -0
  602. data/lib/rabbit/xmlrpc/client.rb +33 -0
  603. data/lib/rabbit/xmlrpc/server.rb +39 -0
  604. data/lib/rabbit/yaml-loader.rb +39 -0
  605. data/misc/emacs/README.ja +177 -0
  606. data/misc/emacs/rabbit-mode.el +378 -0
  607. data/misc/github-post-receiver/config.ru +170 -0
  608. data/misc/github-post-receiver/config.yaml.sample +3 -0
  609. data/misc/github-post-receiver/tmp/restart.txt +0 -0
  610. data/misc/make-image-sample.rb +95 -0
  611. data/misc/make-print-sample.rb +95 -0
  612. data/misc/update-rd.rb +85 -0
  613. data/misc/xyzzy/rabbit-mode.l +775 -0
  614. data/po/en/rabbit.po +2110 -0
  615. data/po/fr/rabbit.po +2109 -0
  616. data/po/ja/rabbit.po +2197 -0
  617. data/rabbit-qt.gemspec +80 -0
  618. data/sample/block-quote.rab +13 -0
  619. data/sample/blue-circle.rd +37 -0
  620. data/sample/can_rabbit.rd +425 -0
  621. data/sample/cozmixng.rd +85 -0
  622. data/sample/cozmixng_is_field.png +0 -0
  623. data/sample/cozmixng_is_field.svg +430 -0
  624. data/sample/description-list.rab +17 -0
  625. data/sample/enishi-green.rab +14 -0
  626. data/sample/equation.eps +571 -0
  627. data/sample/gl-sample.rd +8 -0
  628. data/sample/html_and_wiki.png +0 -0
  629. data/sample/html_and_wiki.svg +275 -0
  630. data/sample/image-reflection.rab +12 -0
  631. data/sample/info-window.png +0 -0
  632. data/sample/join_cozmixng.png +0 -0
  633. data/sample/join_cozmixng.svg +293 -0
  634. data/sample/kof2005/gesture-flow.svg +329 -0
  635. data/sample/kof2005/gesture.rb +473 -0
  636. data/sample/kof2005/gtk+-widget.svg +128 -0
  637. data/sample/kof2005/high-light-architecture.svg +203 -0
  638. data/sample/kof2005/high-light-expose.rb +120 -0
  639. data/sample/kof2005/high-light-expose.svg +153 -0
  640. data/sample/kof2005/high-light-widget.rb +147 -0
  641. data/sample/kof2005/high-light-widget.svg +172 -0
  642. data/sample/kof2005/high-light.svg +132 -0
  643. data/sample/kof2005/mask-screenshot.png +0 -0
  644. data/sample/kof2005/mask.rb +105 -0
  645. data/sample/kof2005/mask.svg +120 -0
  646. data/sample/kof2005/ruby-gnome2-logo.png +0 -0
  647. data/sample/kof2005/ruby-pink-circle-logo.png +0 -0
  648. data/sample/kof2005/skip-up-with-ruby-gnome2.rd +450 -0
  649. data/sample/kof2005/widget.svg +202 -0
  650. data/sample/lavie.png +0 -0
  651. data/sample/lightning-talk.rd +50 -0
  652. data/sample/lldn/input.svg +269 -0
  653. data/sample/lldn/interface.svg +410 -0
  654. data/sample/lldn/kame.png +0 -0
  655. data/sample/lldn/lavie.png +0 -0
  656. data/sample/lldn/lldn.rd +212 -0
  657. data/sample/lldn/output.svg +284 -0
  658. data/sample/lldn/rabbit-rwiki.svg +353 -0
  659. data/sample/lldn/rabbit_banner.png +0 -0
  660. data/sample/lldn/rabbit_banner2.png +0 -0
  661. data/sample/m17n.rd +138 -0
  662. data/sample/mermaid.rab +16 -0
  663. data/sample/note.rab +31 -0
  664. data/sample/ppt/hare-and-tortoise-end.png +0 -0
  665. data/sample/ppt/hare-and-tortoise-middle.png +0 -0
  666. data/sample/ppt/hare-and-tortoise-start.png +0 -0
  667. data/sample/ppt/ppt.rd +207 -0
  668. data/sample/ppt/rabbit-with-ruby.png +0 -0
  669. data/sample/pre.rd +123 -0
  670. data/sample/rabbit/theme/festival/festival.rb +6 -0
  671. data/sample/rabbit/theme/gl-sample/gl-sample.rb +29 -0
  672. data/sample/rabbit/theme/image-with-frame/image-with-frame.rb +2 -0
  673. data/sample/rabbit/theme/image-with-no-shadow-frame/image-with-no-shadow-frame.rb +3 -0
  674. data/sample/rabbit/theme/image-without-frame/image-without-frame.rb +2 -0
  675. data/sample/rabbit/theme/kof2005/kof2005.rb +9 -0
  676. data/sample/rabbit/theme/kof2005/property.rb +3 -0
  677. data/sample/rabbit/theme/lightning-talk-with-contact/lightning-talk-with-contact.rb +6 -0
  678. data/sample/rabbit/theme/lldn/lldn.rb +20 -0
  679. data/sample/rabbit/theme/pdf/pdf.rb +16 -0
  680. data/sample/rabbit/theme/pdf/property.rb +4 -0
  681. data/sample/rabbit/theme/ppt/ppt.rb +5 -0
  682. data/sample/rabbit/theme/rabbit-and-tortoise/rabbit-and-tortoise.rb +11 -0
  683. data/sample/rabbit/theme/rectangle-image-slide-number/rectangle-image-slide-number.rb +4 -0
  684. data/sample/rabbit/theme/stop-auto-slide/stop-auto-slide.rb +2 -0
  685. data/sample/rabbit/theme/triangle-image-slide-number/triangle-image-slide-number.rb +5 -0
  686. data/sample/rabbit-balloon.obj +93 -0
  687. data/sample/rabbit-en.hiki +399 -0
  688. data/sample/rabbit-en.md +410 -0
  689. data/sample/rabbit-en.rd +511 -0
  690. data/sample/rabbit-history.svg +280 -0
  691. data/sample/rabbit-implementation.rd +182 -0
  692. data/sample/rabbit-slide-show-logo.svg +597 -0
  693. data/sample/rabbit.dia +408 -0
  694. data/sample/rabbit.hiki +398 -0
  695. data/sample/rabbit.md +423 -0
  696. data/sample/rabbit.rd +520 -0
  697. data/sample/rabbit.xcf +0 -0
  698. data/sample/rabbit_icon.ico +0 -0
  699. data/sample/rabbit_icon.png +0 -0
  700. data/sample/shocker.jpg +0 -0
  701. data/sample/slide-property.hiki +14 -0
  702. data/sample/slide-property.rab +18 -0
  703. data/sample/spiral.svg +29 -0
  704. data/sample/table-en.rd +55 -0
  705. data/sample/table.hiki +34 -0
  706. data/sample/table.rd +55 -0
  707. data/sample/usagi.png +0 -0
  708. data/sample/video.md +19 -0
  709. data/sample/video.rab +17 -0
  710. metadata +1000 -0
@@ -0,0 +1,844 @@
1
+ # Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ require "forwardable"
18
+
19
+ require_relative "qt"
20
+
21
+ require_relative "actions"
22
+ require_relative "element"
23
+ require_relative "filename"
24
+ require_relative "frame"
25
+ require_relative "front"
26
+ require_relative "html/generator"
27
+ require_relative "key-handler"
28
+ require_relative "parser"
29
+ require_relative "rabbit"
30
+ require_relative "theme/manager"
31
+
32
+ module Rabbit
33
+ class Canvas
34
+ include Enumerable
35
+ extend Forwardable
36
+
37
+ include GetText
38
+
39
+ INTERNAL_DPI = 96.0
40
+
41
+ def_delegators(:@frame, :icon, :icon=, :set_icon)
42
+ def_delegators(:@frame, :icon_list, :icon_list=, :set_icon_list)
43
+ def_delegators(:@frame, :update_title)
44
+ def_delegators(:@frame, :toggle_fullscreen, :fullscreen?)
45
+ def_delegators(:@frame, :iconify, :window)
46
+ def_delegators(:@frame, :fullscreen_available?)
47
+ def_delegators(:@frame, :iconify_available?)
48
+ def_delegators(:@frame, :toggle_terminal)
49
+ def_delegators(:@frame, :in_terminal?)
50
+
51
+ def_delegators(:@renderer, :width, :height)
52
+ # Deprecated. Use #base_width= instead.
53
+ def_delegator(:@renderer, :base_width=, :width=)
54
+ # Deprecated. Use #base_height= instead.
55
+ def_delegator(:@renderer, :base_height=, :height=)
56
+ def_delegators(:@renderer, :base_width, :base_height)
57
+ def_delegators(:@renderer, :base_width=, :base_height=)
58
+ def_delegators(:@renderer, :paper_width, :paper_height)
59
+ def_delegators(:@renderer, :paper_width=, :paper_height=)
60
+ def_delegators(:@renderer, :margin_left, :margin_left=)
61
+ def_delegators(:@renderer, :margin_right, :margin_right=)
62
+ def_delegators(:@renderer, :margin_top, :margin_top=)
63
+ def_delegators(:@renderer, :margin_bottom, :margin_bottom=)
64
+ def_delegators(:@renderer, :page_margin_left, :page_margin_left=)
65
+ def_delegators(:@renderer, :page_margin_right, :page_margin_right=)
66
+ def_delegators(:@renderer, :page_margin_top, :page_margin_top=)
67
+ def_delegators(:@renderer, :page_margin_bottom, :page_margin_bottom=)
68
+ def_delegators(:@renderer, :slides_per_page, :slides_per_page=)
69
+ def_delegators(:@renderer, :font_families)
70
+ def_delegators(:@renderer, :redraw, :clear_slide)
71
+ def_delegators(:@renderer, :cursor=, :filename, :filename=)
72
+ def_delegators(:@renderer, :each_slide_pixbuf)
73
+ def_delegators(:@renderer, :offscreen_canvas)
74
+ def_delegators(:@renderer, :foreground, :background)
75
+ def_delegators(:@renderer, :foreground=, :background=)
76
+ def_delegators(:@renderer, :background_image, :background_image=)
77
+ def_delegators(:@renderer, :progress_foreground)
78
+ def_delegators(:@renderer, :progress_foreground=)
79
+ def_delegators(:@renderer, :progress_background)
80
+ def_delegators(:@renderer, :progress_background=)
81
+
82
+ def_delegators(:@renderer, :make_color, :make_layout)
83
+ def_delegators(:@renderer, :translate_context, :rotate_context)
84
+ def_delegators(:@renderer, :scale_context, :reflect_context)
85
+ def_delegators(:@renderer, :shear_context)
86
+ def_delegators(:@renderer, :save_context, :restore_context)
87
+ def_delegators(:@renderer, :draw_line, :draw_rectangle, :draw_arc)
88
+ def_delegators(:@renderer, :draw_lines)
89
+ def_delegators(:@renderer, :draw_polygon)
90
+ def_delegators(:@renderer, :draw_circle, :draw_layout, :draw_pixbuf)
91
+ def_delegators(:@renderer, :draw_arc_by_radius, :draw_circle_by_radius)
92
+ def_delegators(:@renderer, :draw_slide, :draw_polygon, :draw_flag)
93
+ def_delegators(:@renderer, :draw_rounded_rectangle)
94
+ def_delegators(:@renderer, :draw_rsvg_handle)
95
+ def_delegators(:@renderer, :draw_poppler_page)
96
+ def_delegators(:@renderer, :draw_link)
97
+
98
+ def_delegators(:@renderer, :z_far, :z_view)
99
+
100
+ def_delegators(:@renderer, :flag_size)
101
+
102
+ def_delegators(:@renderer, :create_pango_context, :pango_context=)
103
+
104
+ def_delegators(:@renderer, :confirm)
105
+
106
+ def_delegators(:@renderer, :display?, :printable?)
107
+
108
+ def_delegators(:@renderer, :whiteouting?, :blackouting?)
109
+ def_delegators(:@renderer, :toggle_whiteout, :toggle_blackout)
110
+
111
+ def_delegators(:@renderer, :adjustment_x, :adjustment_x=)
112
+ def_delegators(:@renderer, :adjustment_y, :adjustment_y=)
113
+ def_delegators(:@renderer, :reset_adjustment)
114
+
115
+ def_delegators(:@renderer, :graffiti_mode?, :have_graffiti?)
116
+ def_delegators(:@renderer, :can_undo_graffiti?, :toggle_graffiti_mode)
117
+ def_delegators(:@renderer, :clear_graffiti, :undo_graffiti)
118
+ def_delegators(:@renderer, :change_graffiti_color)
119
+ def_delegators(:@renderer, :graffiti_color, :graffiti_color=)
120
+ def_delegators(:@renderer, :graffiti_line_width, :graffiti_line_width=)
121
+
122
+ def_delegators(:@renderer, :toggle_info_window)
123
+ def_delegators(:@renderer, :info_window_showing?)
124
+ def_delegators(:@renderer, :toggle_spotlight)
125
+ def_delegators(:@renderer, :spotlighting?)
126
+ def_delegators(:@renderer, :toggle_magnifier)
127
+ def_delegators(:@renderer, :magnifying?)
128
+
129
+ def_delegators(:@renderer, :add_gesture_action)
130
+
131
+ def_delegators(:@renderer, :post_init_gui)
132
+
133
+ def_delegators(:@renderer, :expand_hole, :narrow_hole)
134
+
135
+ def_delegators(:@renderer, :search_slide, :stop_slide_search, :searching?)
136
+
137
+ def_delegators(:@renderer, :draw_scaled_image, :draw_scaled_image=)
138
+
139
+ def_delegators(:@source, :source=, :reset, :base)
140
+
141
+ attr_reader :renderer, :last_modified
142
+ attr_reader :comments, :actions
143
+
144
+ attr_writer :saved_image_base_name
145
+ attr_writer :use_gl, :allotted_time
146
+
147
+ attr_accessor :saved_image_type, :rss_base_uri
148
+ attr_accessor :output_html, :output_index_html
149
+ attr_accessor :source_filename
150
+ attr_accessor :migemo_dictionary_search_path, :migemo_dictionary_name
151
+ attr_accessor :font_resolution_ratio
152
+ attr_accessor :max_n_comments, :comment_theme
153
+
154
+ def initialize(renderer_class)
155
+ @frame = NullFrame.new
156
+ @theme_name = nil
157
+ @saved_image_base_name = nil
158
+ @saved_image_type = "png"
159
+ @processing = false
160
+ @quitted = false
161
+ @parse_request_queue = []
162
+ @apply_theme_request_queue = []
163
+ @auto_redraw_timer = nil
164
+ @output_html = false
165
+ @rss_base_uri = nil
166
+ @source_filename = nil
167
+ @migemo_dictionary_search_path = []
168
+ @migemo_dictionary_name = nil
169
+ @limit_time = nil
170
+ @use_gl = false
171
+ @font_resolution_ratio = 1
172
+ @max_n_comments = 100
173
+ @allotted_time = nil
174
+ @comment_theme = nil
175
+ @index_mode = false
176
+ @key_handler = nil
177
+ clear
178
+ @renderer = renderer_class.new(self)
179
+ @actions = Actions.new(self)
180
+ end
181
+
182
+ def logger
183
+ message = "Rabbit::Canvas#logger is deprecated. Use Rabbit.logger instead."
184
+ Rabbit.logger.warn(message)
185
+ Rabbit.logger
186
+ end
187
+
188
+ def quitted?
189
+ @quitted
190
+ end
191
+
192
+ def parsing?
193
+ not @parse_request_queue.empty?
194
+ end
195
+
196
+ def applying?
197
+ not @apply_theme_request_queue.empty?
198
+ end
199
+
200
+ def use_gl?
201
+ @use_gl
202
+ end
203
+
204
+ def quit
205
+ @quitted = true
206
+ @frame.quit
207
+ end
208
+
209
+ def front(public_level=nil)
210
+ Front.new(self, public_level)
211
+ end
212
+
213
+ def attach_to(frame, window, container=nil, &block)
214
+ @frame = frame if frame
215
+ if window
216
+ @key_handler = KeyHandler.new(self, window)
217
+ @renderer.attach_to(window, container, &block)
218
+ end
219
+ end
220
+
221
+ def detach
222
+ @frame = NullFrame.new
223
+ @key_handler&.detach
224
+ @renderer.detach
225
+ end
226
+
227
+ def title
228
+ ts = title_slide
229
+ if ts
230
+ ts.title
231
+ else
232
+ "Rabbit"
233
+ end
234
+ end
235
+
236
+ def slide_title(index=current_index)
237
+ return "" if slides.empty?
238
+ slide = slides[index]
239
+ return title if slide.nil?
240
+ if slide.is_a?(Element::TitleSlide)
241
+ slide.title
242
+ else
243
+ "#{title}: #{slide.title}"
244
+ end
245
+ end
246
+
247
+ def slide_text(index=current_index)
248
+ return "" if slides.empty?
249
+ slide = slides[index]
250
+ return "" if slide.nil?
251
+ slide.text.strip
252
+ end
253
+
254
+ def slides
255
+ if @index_mode
256
+ @index_slides
257
+ else
258
+ @slides
259
+ end
260
+ end
261
+
262
+ def find_slide(pattern)
263
+ slides.find {|slide| slide.match?(pattern)}
264
+ end
265
+
266
+ def slide_index(pattern)
267
+ slides.each_with_index do |slide, i|
268
+ return i if slide.match?(pattern)
269
+ end
270
+ nil
271
+ end
272
+
273
+ def slide_indexes(pattern)
274
+ indexes = []
275
+ slides.each_with_index do |slide, i|
276
+ indexes << i if slide.match?(pattern)
277
+ end
278
+ indexes
279
+ end
280
+
281
+ def n_slides
282
+ slides.size
283
+ end
284
+
285
+ def slide_size
286
+ warn("#{self.class.name}\##{__method__} is deprecated. " +
287
+ "Use \#n_slides instead.",
288
+ category: :deprecated)
289
+ n_slides
290
+ end
291
+
292
+ def current_slide
293
+ slide = slides[current_index]
294
+ if slide
295
+ slide
296
+ else
297
+ move_to_first
298
+ slides.first
299
+ end
300
+ end
301
+
302
+ def current_index
303
+ if @index_mode
304
+ @index_current_index
305
+ else
306
+ @current_index
307
+ end
308
+ end
309
+
310
+ def change_current_index(new_index)
311
+ mode = @index_mode
312
+ if mode
313
+ index = @index_current_index
314
+ @index_current_index = new_index
315
+ else
316
+ index = @current_index
317
+ @current_index = new_index
318
+ end
319
+ if 0 <= current_index and current_index < n_slides
320
+ yield
321
+ end
322
+ ensure
323
+ if mode
324
+ @index_current_index = index
325
+ else
326
+ @current_index = index
327
+ end
328
+ end
329
+
330
+ def next_slide
331
+ slides[current_index + 1]
332
+ end
333
+
334
+ def each(&block)
335
+ slides.each(&block)
336
+ end
337
+
338
+ def <<(slide)
339
+ slide.index = slides.size
340
+ slides << slide
341
+ end
342
+
343
+ def apply_theme(name=nil, &block)
344
+ _apply_theme(name, Object.new.__id__, &block)
345
+ end
346
+
347
+ def theme_name
348
+ @theme_name || default_theme || "default"
349
+ end
350
+
351
+ def merge_theme(name)
352
+ unless @slides.empty?
353
+ manager = Theme::Manager.new(self)
354
+ manager.apply(name)
355
+ @renderer.post_apply_theme
356
+ end
357
+ end
358
+
359
+ def reload_theme(&block)
360
+ apply_theme(@theme_name, &block)
361
+ end
362
+
363
+ def parse(source=nil, progress=nil, &block)
364
+ id = Object.new.__id__
365
+ @parse_request_queue.push(id)
366
+ @source = source || @source
367
+ begin
368
+ index = current_index
369
+ current_allotted_time = allotted_time
370
+ keep_index do
371
+ @renderer.pre_parse
372
+ clear
373
+ Parser.parse(self, @source, progress: progress)
374
+ new_allotted_time = allotted_time
375
+ reset_timer if new_allotted_time != current_allotted_time
376
+ apply_timer
377
+ set_current_index(index)
378
+ reload_theme do
379
+ if @parse_request_queue.last != id
380
+ raise ParseFinish
381
+ end
382
+ progress.call if progress
383
+ end
384
+ @renderer.post_parse
385
+ index = current_index
386
+ end
387
+ set_current_index(index)
388
+ rescue ParseFinish
389
+ rescue ParseError, UnsupportedFormatError
390
+ if block_given?
391
+ yield($!)
392
+ else
393
+ Rabbit.logger.warn($!.message)
394
+ end
395
+ ensure
396
+ @parse_request_queue.delete_if {|x| x == id}
397
+ end
398
+ end
399
+
400
+ def reload_source(progress=nil, &block)
401
+ if need_reload_source?
402
+ parse(nil, progress, &block)
403
+ end
404
+ end
405
+
406
+ def need_reload_source?
407
+ !@processing and @source and @source.modified?
408
+ end
409
+
410
+ def full_path(path)
411
+ @source and @source.full_path(path)
412
+ end
413
+
414
+ def tmp_dir_name
415
+ @source and @source.tmp_dir_name
416
+ end
417
+
418
+ def to_pixbuf(i)
419
+ move_to_if_can(i)
420
+ current_slide.flush
421
+ @renderer.to_pixbuf(current_slide)
422
+ end
423
+
424
+ def save_as_image
425
+ process do
426
+ generator = HTML::Generator.new(self,
427
+ saved_image_base_name,
428
+ @saved_image_type,
429
+ @output_html,
430
+ @output_index_html,
431
+ @rss_base_uri)
432
+ generator.pdf_filename = filename if /\.pdf\z/i =~ filename.to_s
433
+ generator.source_filename = @source_filename
434
+ generator.save
435
+ end
436
+ end
437
+
438
+ def print(&block)
439
+ process do
440
+ @renderer.print(&block)
441
+ end
442
+ end
443
+
444
+ def fullscreened
445
+ @renderer.post_fullscreen
446
+ end
447
+
448
+ def unfullscreened
449
+ @renderer.post_unfullscreen
450
+ end
451
+
452
+ def iconified
453
+ @renderer.post_iconify
454
+ end
455
+
456
+ def connect_key(keyval, modifier, flags, &block)
457
+ @key_handler.connect_key(keyval, modifier, flags, &block) if @key_handler
458
+ end
459
+
460
+ def disconnect_key(keyval, modifier)
461
+ @key_handler.disconnect_key(keyval, modifier) if @key_handler
462
+ end
463
+
464
+ def pre_terminal
465
+ @renderer.pre_terminal
466
+ @key_handler.pre_terminal if @key_handler
467
+ end
468
+
469
+ def post_terminal
470
+ @key_handler.post_terminal if @key_handler
471
+ @renderer.post_terminal
472
+ end
473
+
474
+ def saved_image_base_name
475
+ if @saved_image_base_name
476
+ base_name = @saved_image_base_name.encode("UTF-8")
477
+ else
478
+ base_name = Filename.sanitize(title)
479
+ end
480
+ base_name << "-index" if index_mode?
481
+ base_name
482
+ end
483
+
484
+ def move_to_if_can(index)
485
+ if index and 0 <= index and index < n_slides
486
+ move_to(index)
487
+ end
488
+ current_index
489
+ end
490
+
491
+ def move_to_next_if_can
492
+ slide = current_slide
493
+ if slide and !slide.last?
494
+ old_index = slide.drawing_index
495
+ slide.move_to_next
496
+ @actions.update_status
497
+ @renderer.post_move_in_slide(old_index, slide.drawing_index)
498
+ else
499
+ move_to_next_slide_if_can
500
+ end
501
+ end
502
+
503
+ def move_to_next_slide_if_can
504
+ move_to_if_can(current_index + 1)
505
+ end
506
+
507
+ def move_to_previous_if_can
508
+ slide = current_slide
509
+ if slide and !slide.first?
510
+ old_index = slide.drawing_index
511
+ slide.move_to_previous
512
+ @actions.update_status
513
+ @renderer.post_move_in_slide(old_index, slide.drawing_index)
514
+ else
515
+ move_to_previous_slide_if_can
516
+ end
517
+ end
518
+
519
+ def move_to_previous_slide_if_can
520
+ move_to_if_can(current_index - 1)
521
+ end
522
+
523
+ def move_to_first
524
+ move_to_if_can(0)
525
+ end
526
+
527
+ def move_to_last
528
+ move_to(n_slides - 1)
529
+ end
530
+
531
+ def index_mode?
532
+ @index_mode
533
+ end
534
+
535
+ def toggle_index_mode
536
+ @renderer.pre_toggle_index_mode
537
+ process do
538
+ if @index_mode
539
+ @index_mode = false
540
+ @renderer.index_mode_off
541
+ else
542
+ update_index_slides
543
+ @index_mode = true
544
+ @renderer.index_mode_on
545
+ end
546
+ modified
547
+ end
548
+ @renderer.post_toggle_index_mode
549
+ end
550
+
551
+ def update_index_slides
552
+ if @index_slides.empty?
553
+ @index_slides = Element::IndexSlide.make_index_slides(self)
554
+ end
555
+ end
556
+
557
+ def source_force_modified(force_modified)
558
+ prev = @source.force_modified
559
+ @source.force_modified = force_modified
560
+ yield @source
561
+ @source.force_modified = prev
562
+ end
563
+
564
+ def source
565
+ @source.read
566
+ end
567
+
568
+ def first_slide?
569
+ current_index.zero?
570
+ end
571
+
572
+ def last_slide?
573
+ n_slides.zero? or current_index == (n_slides - 1)
574
+ end
575
+
576
+ def have_previous_slide?
577
+ 0 < current_index
578
+ end
579
+
580
+ def have_previous?
581
+ return true if have_previous_slide?
582
+ return !current_slide.first? if current_slide
583
+ false
584
+ end
585
+
586
+ def have_next_slide?
587
+ n_slides - 1 > current_index
588
+ end
589
+
590
+ def have_next?
591
+ return true if have_next_slide?
592
+ return !current_slide.last? if current_slide
593
+ false
594
+ end
595
+
596
+ def cache_all_slides
597
+ process do
598
+ @renderer.cache_all_slides
599
+ end
600
+ end
601
+
602
+ def processing?
603
+ @processing
604
+ end
605
+
606
+ def start_auto_redraw_timer(interval)
607
+ stop_auto_redraw_timer
608
+ @auto_redraw_timer = GLib::Timeout.add(interval * 1000) do
609
+ if quitted?
610
+ @auto_redraw_timer = nil
611
+ GLib::Source::REMOVE
612
+ else
613
+ activate("Redraw")
614
+ GLib::Source::CONTINUE
615
+ end
616
+ end
617
+ end
618
+
619
+ def stop_auto_redraw_timer
620
+ if @auto_redraw_timer
621
+ GLib::Source.remove(@auto_redraw_timer)
622
+ @auto_redraw_timer = nil
623
+ end
624
+ end
625
+
626
+ def on_comment(name, &callback)
627
+ @on_comment_callbacks << [name, callback]
628
+ end
629
+
630
+ def delete_on_comment_proc_by_name(name)
631
+ @on_comment_callbacks.reject! do |callback_name, callback|
632
+ callback_name == name
633
+ end
634
+ end
635
+
636
+ def append_comment(comment)
637
+ @comments << comment
638
+ @comments.shift if @comments.size > @max_n_comments
639
+ @on_comment_callbacks.each do |name, callback|
640
+ begin
641
+ callback.call(comment)
642
+ rescue
643
+ Rabbit.logger.error($!)
644
+ end
645
+ end
646
+ true
647
+ end
648
+
649
+ def title_slide
650
+ @slides.find{|x| x.is_a?(Element::TitleSlide)}
651
+ end
652
+
653
+ def activate(name, argument=nil)
654
+ act = action(name)
655
+ if act and act.enabled?
656
+ act.trigger(argument)
657
+ true
658
+ else
659
+ false
660
+ end
661
+ end
662
+
663
+ def action(name)
664
+ act = @actions[name]
665
+ if act
666
+ act
667
+ else
668
+ Rabbit.logger.warn(_("Unknown action: %s") % name)
669
+ false
670
+ end
671
+ end
672
+
673
+ def with_index_mode(new_value)
674
+ current_index_mode = @index_mode
675
+ @index_mode = new_value
676
+ update_index_slides if @index_mode
677
+ yield
678
+ ensure
679
+ @index_mode = current_index_mode
680
+ end
681
+
682
+ def allotted_time
683
+ time = @allotted_time
684
+ if time.nil? and title_slide
685
+ time = title_slide.allotted_time
686
+ if time.nil?
687
+ start_time = title_slide.start_time
688
+ end_time = title_slide.end_time
689
+ if start_time and end_time
690
+ start_time = Time.parse(start_time)
691
+ end_time = Time.parse(end_time)
692
+ time = end_time - start_time
693
+ end
694
+ end
695
+ end
696
+ Utils.ensure_time(time)
697
+ end
698
+
699
+ def start_timer(limit)
700
+ @limit_time = Time.now + limit
701
+ end
702
+
703
+ def rest_time
704
+ @limit_time ? @limit_time - Time.now : nil
705
+ end
706
+
707
+ def reset_timer
708
+ @limit_time = nil
709
+ reload_theme
710
+ end
711
+
712
+ def apply_timer
713
+ return unless title_slide
714
+
715
+ start_time = title_slide.start_time
716
+ end_time = title_slide.end_time
717
+ return if start_time.nil?
718
+ return if end_time.nil?
719
+
720
+ start_time = Time.parse(start_time)
721
+ end_time = Time.parse(end_time)
722
+ return unless (start_time..end_time).cover?(Time.now)
723
+
724
+ @allotted_time = end_time - start_time
725
+ @limit_time = end_time
726
+ end
727
+
728
+ def font_resolution
729
+ INTERNAL_DPI * @font_resolution_ratio
730
+ end
731
+
732
+ private
733
+ def _apply_theme(name, id, &block)
734
+ @theme_name = name if name
735
+ _theme_name = name || theme_name
736
+ if _theme_name and not @slides.empty?
737
+ @apply_theme_request_queue.push(id)
738
+ success = false
739
+ index_mode = @index_mode
740
+ begin
741
+ @actions.update_status
742
+ clear_theme
743
+ clear_index_slides
744
+ manager = Theme::Manager.new(self) do
745
+ if @apply_theme_request_queue.last != id
746
+ raise ApplyFinish
747
+ end
748
+ block.call if block
749
+ end
750
+ manager.apply(_theme_name)
751
+ @renderer.post_apply_theme
752
+ success = true
753
+ rescue ApplyFinish
754
+ ensure
755
+ @apply_theme_request_queue.delete_if {|x| x == id}
756
+ @actions.update_status
757
+ end
758
+ activate("ToggleIndexMode") if success and index_mode
759
+ end
760
+ end
761
+
762
+ def process
763
+ if @processing
764
+ Rabbit.logger.info(_("Processing..."))
765
+ return
766
+ end
767
+ begin
768
+ @processing = true
769
+ @actions.update_status
770
+ yield
771
+ ensure
772
+ @processing = false
773
+ @actions.update_status
774
+ end
775
+ end
776
+
777
+ def modified
778
+ @last_modified = Time.now
779
+ end
780
+
781
+ def clear
782
+ clear_comments
783
+ stop_auto_redraw_timer
784
+ clear_slides
785
+ clear_index_slides
786
+ modified
787
+ end
788
+
789
+ def clear_comments
790
+ @comments = []
791
+ @on_comment_callbacks = []
792
+ end
793
+
794
+ def clear_slides
795
+ @current_index = 0
796
+ @slides = []
797
+ end
798
+
799
+ def clear_index_slides
800
+ activate("ToggleIndexMode") if @index_mode
801
+ @index_current_index = 0
802
+ @index_slides = []
803
+ end
804
+
805
+ def clear_theme
806
+ @font_resolution_ratio = 1
807
+ @slides.each do |slide|
808
+ slide.clear_theme
809
+ end
810
+ @renderer.clear_theme
811
+ modified
812
+ end
813
+
814
+ def keep_index
815
+ index_mode = @index_mode
816
+ index = @current_index
817
+ index_index = @index_current_index
818
+ yield
819
+ @current_index = index
820
+ @index_current_index = index_index
821
+ @index_mode = index_mode
822
+ end
823
+
824
+ def default_theme
825
+ ts = title_slide
826
+ ts and ts.theme
827
+ end
828
+
829
+ def set_current_index(new_index)
830
+ if @index_mode
831
+ @index_current_index = new_index
832
+ else
833
+ @current_index = new_index
834
+ end
835
+ end
836
+
837
+ def move_to(index)
838
+ old_index = current_index
839
+ set_current_index(index)
840
+ @actions.update_status
841
+ @renderer.post_move(old_index, current_index)
842
+ end
843
+ end
844
+ end