rabbit 0.6.2

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 (620) hide show
  1. data/COPYING +56 -0
  2. data/COPYING.ja +51 -0
  3. data/GPL +340 -0
  4. data/INSTALL.macosx-macports.en +75 -0
  5. data/INSTALL.macosx-macports.ja +101 -0
  6. data/INSTALL.win32.en +74 -0
  7. data/INSTALL.win32.ja +77 -0
  8. data/NEWS.en +337 -0
  9. data/NEWS.ja +338 -0
  10. data/README.en +836 -0
  11. data/README.ja +871 -0
  12. data/Rakefile +82 -0
  13. data/TODO +7 -0
  14. data/bin/rabbirc +86 -0
  15. data/bin/rabbit +759 -0
  16. data/bin/rabbit-command +95 -0
  17. data/bin/rabbit-theme-manager +133 -0
  18. data/bin/rabbit.bat +8 -0
  19. data/bin/rabrick +82 -0
  20. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  21. data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
  22. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  23. data/data/rabbit/image/clear-blue-images/clear-blue-headline-background.png +0 -0
  24. data/data/rabbit/image/clear-blue-images/clear-blue-icon.png +0 -0
  25. data/data/rabbit/image/clear-blue-images/clear-blue-images.rb +0 -0
  26. data/data/rabbit/image/clear-blue-images/property.rb +4 -0
  27. data/data/rabbit/image/cozmixng-images/cozmixchu.png +0 -0
  28. data/data/rabbit/image/cozmixng-images/cozmixng-images.rb +2 -0
  29. data/data/rabbit/image/cozmixng-images/powered-by-cozmixng.png +0 -0
  30. data/data/rabbit/image/cozmixng-images/property.rb +4 -0
  31. data/data/rabbit/image/rabbit-images/blue-item.png +0 -0
  32. data/data/rabbit/image/rabbit-images/close-quote-blue.png +0 -0
  33. data/data/rabbit/image/rabbit-images/close-quote-brown.png +0 -0
  34. data/data/rabbit/image/rabbit-images/close-quote-light-blue.png +0 -0
  35. data/data/rabbit/image/rabbit-images/goal-flag.png +0 -0
  36. data/data/rabbit/image/rabbit-images/green-item.png +0 -0
  37. data/data/rabbit/image/rabbit-images/kame.png +0 -0
  38. data/data/rabbit/image/rabbit-images/lavie-icon.png +0 -0
  39. data/data/rabbit/image/rabbit-images/lavie-with-logo.png +0 -0
  40. data/data/rabbit/image/rabbit-images/lavie.png +0 -0
  41. data/data/rabbit/image/rabbit-images/mini-alice.png +0 -0
  42. data/data/rabbit/image/rabbit-images/mini-horizontal-bar.png +0 -0
  43. data/data/rabbit/image/rabbit-images/mini-kame-taro.png +0 -0
  44. data/data/rabbit/image/rabbit-images/mini-tanu-kitaro.png +0 -0
  45. data/data/rabbit/image/rabbit-images/mini-usa-taro.png +0 -0
  46. data/data/rabbit/image/rabbit-images/mini-usagi.png +0 -0
  47. data/data/rabbit/image/rabbit-images/mini-vertical-bar.png +0 -0
  48. data/data/rabbit/image/rabbit-images/mini-yukidaru-taro.png +0 -0
  49. data/data/rabbit/image/rabbit-images/open-quote-blue.png +0 -0
  50. data/data/rabbit/image/rabbit-images/open-quote-brown.png +0 -0
  51. data/data/rabbit/image/rabbit-images/open-quote-light-blue.png +0 -0
  52. data/data/rabbit/image/rabbit-images/property.rb +4 -0
  53. data/data/rabbit/image/rabbit-images/rabbit-banner-blue.png +0 -0
  54. data/data/rabbit/image/rabbit-images/rabbit-banner-green.png +0 -0
  55. data/data/rabbit/image/rabbit-images/rabbit-banner-heads.png +0 -0
  56. data/data/rabbit/image/rabbit-images/rabbit-banner-pink.png +0 -0
  57. data/data/rabbit/image/rabbit-images/rabbit-banner.png +0 -0
  58. data/data/rabbit/image/rabbit-images/rabbit-banner2.png +0 -0
  59. data/data/rabbit/image/rabbit-images/rabbit-images.rb +2 -0
  60. data/data/rabbit/image/rabbit-images/rabbit-pink-logo.png +0 -0
  61. data/data/rabbit/image/rabbit-images/rabbit-pink-logo2.png +0 -0
  62. data/data/rabbit/image/rabbit-images/red-item.png +0 -0
  63. data/data/rabbit/image/rabbit-images/red-item2.png +0 -0
  64. data/data/rabbit/image/rabbit-images/start-flag.png +0 -0
  65. data/data/rabbit/image/rabbit-images/tanu-kitaro.png +0 -0
  66. data/data/rabbit/image/rabbit-images/usa-taro.png +0 -0
  67. data/data/rabbit/image/rabbit-images/usagi.png +0 -0
  68. data/data/rabbit/image/rabbit-images/yukiusa.png +0 -0
  69. data/data/rabbit/image/ruby-images/property.rb +4 -0
  70. data/data/rabbit/image/ruby-images/ruby-images.rb +2 -0
  71. data/data/rabbit/image/ruby-images/ruby-pink-circle-icon.png +0 -0
  72. data/data/rabbit/image/ruby-images/ruby-pink-circle-logo.png +0 -0
  73. data/data/rabbit/image/ruby-images/ruby-pink-circle-small-icon.png +0 -0
  74. data/data/rabbit/image/ruby-images/ruby-pink-circle.png +0 -0
  75. data/data/rabbit/image/ruby-images/ruby-pink-polygon-icon.png +0 -0
  76. data/data/rabbit/image/ruby-images/ruby-pink-polygon-logo.png +0 -0
  77. data/data/rabbit/image/ruby-images/ruby-pink-polygon-small-icon.png +0 -0
  78. data/data/rabbit/image/ruby-images/ruby-pink-polygon.png +0 -0
  79. data/entities/README +10 -0
  80. data/entities/ent2rb.rb +57 -0
  81. data/entities/isoamsa.ent +167 -0
  82. data/entities/isoamsb.ent +143 -0
  83. data/entities/isoamsc.ent +43 -0
  84. data/entities/isoamsn.ent +114 -0
  85. data/entities/isoamso.ent +73 -0
  86. data/entities/isoamsr.ent +204 -0
  87. data/entities/isobox.ent +61 -0
  88. data/entities/isocyr1.ent +88 -0
  89. data/entities/isocyr2.ent +47 -0
  90. data/entities/isodia.ent +35 -0
  91. data/entities/isogrk3.ent +64 -0
  92. data/entities/isolat1.ent +83 -0
  93. data/entities/isolat2.ent +142 -0
  94. data/entities/isomfrk.ent +75 -0
  95. data/entities/isomopf.ent +49 -0
  96. data/entities/isomscr.ent +75 -0
  97. data/entities/isonum.ent +97 -0
  98. data/entities/isopub.ent +105 -0
  99. data/entities/isotech.ent +182 -0
  100. data/entities/mmlalias.ent +564 -0
  101. data/entities/mmlextra.ent +122 -0
  102. data/lib/rabbit/action.rb +143 -0
  103. data/lib/rabbit/action/basic.rb +304 -0
  104. data/lib/rabbit/action/radio.rb +78 -0
  105. data/lib/rabbit/action/toggle.rb +89 -0
  106. data/lib/rabbit/canvas.rb +760 -0
  107. data/lib/rabbit/comment-canvas.rb +21 -0
  108. data/lib/rabbit/comment/log.rb +74 -0
  109. data/lib/rabbit/console.rb +133 -0
  110. data/lib/rabbit/console/roff.rb +84 -0
  111. data/lib/rabbit/cursor-manager.rb +62 -0
  112. data/lib/rabbit/default-config.rb +16 -0
  113. data/lib/rabbit/dependency-canvas.rb +14 -0
  114. data/lib/rabbit/div/comment-i.erb +7 -0
  115. data/lib/rabbit/div/comment.erb +45 -0
  116. data/lib/rabbit/div/css.erb +1 -0
  117. data/lib/rabbit/div/js.erb +1 -0
  118. data/lib/rabbit/div/log.erb +5 -0
  119. data/lib/rabbit/div/main-i.erb +24 -0
  120. data/lib/rabbit/div/main.css +40 -0
  121. data/lib/rabbit/div/main.erb +33 -0
  122. data/lib/rabbit/div/navi-i.erb +6 -0
  123. data/lib/rabbit/div/navi.erb +6 -0
  124. data/lib/rabbit/div/prototype.js +4320 -0
  125. data/lib/rabbit/div/slide-i.erb +2 -0
  126. data/lib/rabbit/div/slide.erb +5 -0
  127. data/lib/rabbit/div/tofu.rb +309 -0
  128. data/lib/rabbit/element.rb +8 -0
  129. data/lib/rabbit/element/base.rb +499 -0
  130. data/lib/rabbit/element/base/draw-hook.rb +75 -0
  131. data/lib/rabbit/element/block-element.rb +38 -0
  132. data/lib/rabbit/element/block.rb +53 -0
  133. data/lib/rabbit/element/container-element.rb +254 -0
  134. data/lib/rabbit/element/description-list.rb +56 -0
  135. data/lib/rabbit/element/enum-list.rb +33 -0
  136. data/lib/rabbit/element/footnote.rb +32 -0
  137. data/lib/rabbit/element/image-title-slide.rb +18 -0
  138. data/lib/rabbit/element/image.rb +167 -0
  139. data/lib/rabbit/element/index-slide.rb +190 -0
  140. data/lib/rabbit/element/item-list.rb +31 -0
  141. data/lib/rabbit/element/method-list.rb +50 -0
  142. data/lib/rabbit/element/poppler-page.rb +36 -0
  143. data/lib/rabbit/element/poppler-slide.rb +25 -0
  144. data/lib/rabbit/element/poppler-title-slide.rb +23 -0
  145. data/lib/rabbit/element/preformatted.rb +27 -0
  146. data/lib/rabbit/element/slide-element.rb +97 -0
  147. data/lib/rabbit/element/slide.rb +51 -0
  148. data/lib/rabbit/element/table.rb +100 -0
  149. data/lib/rabbit/element/tag.rb +29 -0
  150. data/lib/rabbit/element/text-container-element.rb +104 -0
  151. data/lib/rabbit/element/text-element.rb +59 -0
  152. data/lib/rabbit/element/text-renderer.rb +321 -0
  153. data/lib/rabbit/element/text.rb +82 -0
  154. data/lib/rabbit/element/title-slide.rb +190 -0
  155. data/lib/rabbit/formatter.rb +143 -0
  156. data/lib/rabbit/frame.rb +275 -0
  157. data/lib/rabbit/front.rb +238 -0
  158. data/lib/rabbit/gesture/handler.rb +232 -0
  159. data/lib/rabbit/gesture/processor.rb +118 -0
  160. data/lib/rabbit/gettext.rb +90 -0
  161. data/lib/rabbit/graffiti/config-dialog.rb +57 -0
  162. data/lib/rabbit/graffiti/processor.rb +116 -0
  163. data/lib/rabbit/html/generator.rb +458 -0
  164. data/lib/rabbit/html/template.erb +109 -0
  165. data/lib/rabbit/image.rb +35 -0
  166. data/lib/rabbit/image/base.rb +104 -0
  167. data/lib/rabbit/image/default.rb +27 -0
  168. data/lib/rabbit/image/dia.rb +63 -0
  169. data/lib/rabbit/image/eps.rb +113 -0
  170. data/lib/rabbit/image/gimp.rb +53 -0
  171. data/lib/rabbit/image/pdf.rb +77 -0
  172. data/lib/rabbit/image/svg.rb +78 -0
  173. data/lib/rabbit/info-window.rb +160 -0
  174. data/lib/rabbit/keys.rb +190 -0
  175. data/lib/rabbit/logger.rb +14 -0
  176. data/lib/rabbit/logger/base.rb +129 -0
  177. data/lib/rabbit/logger/gui.rb +172 -0
  178. data/lib/rabbit/logger/stderr.rb +28 -0
  179. data/lib/rabbit/menu.rb +287 -0
  180. data/lib/rabbit/parser.rb +24 -0
  181. data/lib/rabbit/parser/base.rb +20 -0
  182. data/lib/rabbit/parser/ext/anthy.rb +43 -0
  183. data/lib/rabbit/parser/ext/enscript.rb +122 -0
  184. data/lib/rabbit/parser/ext/entity.rb +4178 -0
  185. data/lib/rabbit/parser/ext/escape.rb +18 -0
  186. data/lib/rabbit/parser/ext/image.rb +102 -0
  187. data/lib/rabbit/parser/ext/inline.rb +29 -0
  188. data/lib/rabbit/parser/ext/tex.rb +77 -0
  189. data/lib/rabbit/parser/image.rb +34 -0
  190. data/lib/rabbit/parser/pause-support.rb +32 -0
  191. data/lib/rabbit/parser/pdf.rb +35 -0
  192. data/lib/rabbit/parser/rd.rb +54 -0
  193. data/lib/rabbit/parser/rd/ext/anthy.rb +29 -0
  194. data/lib/rabbit/parser/rd/ext/base.rb +79 -0
  195. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +103 -0
  196. data/lib/rabbit/parser/rd/ext/enscript.rb +24 -0
  197. data/lib/rabbit/parser/rd/ext/entity.rb +38 -0
  198. data/lib/rabbit/parser/rd/ext/image.rb +27 -0
  199. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +89 -0
  200. data/lib/rabbit/parser/rd/ext/refer.rb +34 -0
  201. data/lib/rabbit/parser/rd/ext/tex.rb +24 -0
  202. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +424 -0
  203. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +83 -0
  204. data/lib/rabbit/parser/rd/visitor.rb +56 -0
  205. data/lib/rabbit/parser/wiki.rb +30 -0
  206. data/lib/rabbit/parser/wiki/output.rb +460 -0
  207. data/lib/rabbit/post-setup.rb +8 -0
  208. data/lib/rabbit/pre-clean.rb +2 -0
  209. data/lib/rabbit/pre-distclean.rb +2 -0
  210. data/lib/rabbit/progress.rb +68 -0
  211. data/lib/rabbit/rabbit.rb +222 -0
  212. data/lib/rabbit/renderer.rb +27 -0
  213. data/lib/rabbit/renderer/base.rb +512 -0
  214. data/lib/rabbit/renderer/color.rb +80 -0
  215. data/lib/rabbit/renderer/display.rb +25 -0
  216. data/lib/rabbit/renderer/display/base.rb +93 -0
  217. data/lib/rabbit/renderer/display/button-handler.rb +145 -0
  218. data/lib/rabbit/renderer/display/clutter-embed.rb +634 -0
  219. data/lib/rabbit/renderer/display/comment-drawing-area.rb +173 -0
  220. data/lib/rabbit/renderer/display/comment.rb +194 -0
  221. data/lib/rabbit/renderer/display/cursor.rb +34 -0
  222. data/lib/rabbit/renderer/display/drawing-area-base.rb +395 -0
  223. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +219 -0
  224. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +33 -0
  225. data/lib/rabbit/renderer/display/drawing-area.rb +31 -0
  226. data/lib/rabbit/renderer/display/gesture.rb +94 -0
  227. data/lib/rabbit/renderer/display/gl.rb +98 -0
  228. data/lib/rabbit/renderer/display/graffiti.rb +120 -0
  229. data/lib/rabbit/renderer/display/info.rb +45 -0
  230. data/lib/rabbit/renderer/display/key-handler.rb +303 -0
  231. data/lib/rabbit/renderer/display/magnifier.rb +123 -0
  232. data/lib/rabbit/renderer/display/mask.rb +68 -0
  233. data/lib/rabbit/renderer/display/menu.rb +30 -0
  234. data/lib/rabbit/renderer/display/progress.rb +62 -0
  235. data/lib/rabbit/renderer/display/search.rb +107 -0
  236. data/lib/rabbit/renderer/display/spotlight.rb +117 -0
  237. data/lib/rabbit/renderer/engine.rb +18 -0
  238. data/lib/rabbit/renderer/engine/cairo.rb +438 -0
  239. data/lib/rabbit/renderer/engine/gdk.rb +229 -0
  240. data/lib/rabbit/renderer/gl.rb +176 -0
  241. data/lib/rabbit/renderer/kernel.rb +256 -0
  242. data/lib/rabbit/renderer/pixmap.rb +25 -0
  243. data/lib/rabbit/renderer/pixmap/base.rb +127 -0
  244. data/lib/rabbit/renderer/pixmap/cairo.rb +23 -0
  245. data/lib/rabbit/renderer/pixmap/gdk.rb +29 -0
  246. data/lib/rabbit/renderer/pixmap/gl.rb +46 -0
  247. data/lib/rabbit/renderer/print.rb +31 -0
  248. data/lib/rabbit/renderer/print/base.rb +73 -0
  249. data/lib/rabbit/renderer/print/cairo.rb +130 -0
  250. data/lib/rabbit/renderer/print/layout.rb +123 -0
  251. data/lib/rabbit/renderer/print/multiple.rb +205 -0
  252. data/lib/rabbit/search-window.rb +99 -0
  253. data/lib/rabbit/searcher.rb +106 -0
  254. data/lib/rabbit/soap/base.rb +17 -0
  255. data/lib/rabbit/soap/driver.rb +45 -0
  256. data/lib/rabbit/soap/server.rb +33 -0
  257. data/lib/rabbit/source.rb +14 -0
  258. data/lib/rabbit/source/argf.rb +29 -0
  259. data/lib/rabbit/source/base.rb +164 -0
  260. data/lib/rabbit/source/file.rb +65 -0
  261. data/lib/rabbit/source/hiki.rb +36 -0
  262. data/lib/rabbit/source/memory.rb +41 -0
  263. data/lib/rabbit/source/rwiki.rb +54 -0
  264. data/lib/rabbit/source/slide-share.rb +53 -0
  265. data/lib/rabbit/source/uri.rb +73 -0
  266. data/lib/rabbit/stock.rb +31 -0
  267. data/lib/rabbit/theme-browser.rb +104 -0
  268. data/lib/rabbit/theme-browser/default-tag.yaml +89 -0
  269. data/lib/rabbit/theme-browser/document.rb +200 -0
  270. data/lib/rabbit/theme-browser/ext/block-verbatim.rb +39 -0
  271. data/lib/rabbit/theme-browser/page.rb +133 -0
  272. data/lib/rabbit/theme-browser/rd2document-lib.rb +181 -0
  273. data/lib/rabbit/theme-browser/tag.rb +67 -0
  274. data/lib/rabbit/theme-browser/tree.rb +91 -0
  275. data/lib/rabbit/theme/applier.rb +613 -0
  276. data/lib/rabbit/theme/auto-slide/auto-slide.rb +6 -0
  277. data/lib/rabbit/theme/auto-slide/property.rb +4 -0
  278. data/lib/rabbit/theme/base/base.rb +76 -0
  279. data/lib/rabbit/theme/base/property.rb +4 -0
  280. data/lib/rabbit/theme/blue-bar/blue-bar.rb +93 -0
  281. data/lib/rabbit/theme/blue-bar/property.rb +3 -0
  282. data/lib/rabbit/theme/blue-circle/blue-circle.rb +14 -0
  283. data/lib/rabbit/theme/blue-circle/property.rb +3 -0
  284. data/lib/rabbit/theme/centering-rabbit/centering-rabbit.rb +5 -0
  285. data/lib/rabbit/theme/centering-rabbit/property.rb +3 -0
  286. data/lib/rabbit/theme/clear-blue/clear-blue.rb +100 -0
  287. data/lib/rabbit/theme/clear-blue/property.rb +3 -0
  288. data/lib/rabbit/theme/clock/clock.rb +37 -0
  289. data/lib/rabbit/theme/clock/property.rb +21 -0
  290. data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +26 -0
  291. data/lib/rabbit/theme/color-circle-block-quote/property.rb +4 -0
  292. data/lib/rabbit/theme/color-circle-common/color-circle-common.rb +48 -0
  293. data/lib/rabbit/theme/color-circle-common/property.rb +3 -0
  294. data/lib/rabbit/theme/color-circle-description/color-circle-description.rb +9 -0
  295. data/lib/rabbit/theme/color-circle-description/property.rb +4 -0
  296. data/lib/rabbit/theme/color-circle-foot-text/color-circle-foot-text.rb +14 -0
  297. data/lib/rabbit/theme/color-circle-foot-text/property.rb +4 -0
  298. data/lib/rabbit/theme/color-circle-item-mark/color-circle-item-mark.rb +77 -0
  299. data/lib/rabbit/theme/color-circle-item-mark/property.rb +4 -0
  300. data/lib/rabbit/theme/color-circle-method-list/color-circle-method-list.rb +8 -0
  301. data/lib/rabbit/theme/color-circle-method-list/property.rb +4 -0
  302. data/lib/rabbit/theme/color-circle-preformatted/color-circle-preformatted.rb +5 -0
  303. data/lib/rabbit/theme/color-circle-preformatted/property.rb +4 -0
  304. data/lib/rabbit/theme/color-circle-slide/color-circle-slide.rb +13 -0
  305. data/lib/rabbit/theme/color-circle-slide/property.rb +4 -0
  306. data/lib/rabbit/theme/color-circle-text/color-circle-text.rb +9 -0
  307. data/lib/rabbit/theme/color-circle-text/property.rb +4 -0
  308. data/lib/rabbit/theme/color-circle-title-slide/color-circle-title-slide.rb +27 -0
  309. data/lib/rabbit/theme/color-circle-title-slide/property.rb +4 -0
  310. data/lib/rabbit/theme/color-circle-title-text/color-circle-title-text.rb +7 -0
  311. data/lib/rabbit/theme/color-circle-title-text/property.rb +4 -0
  312. data/lib/rabbit/theme/color-circle/color-circle.rb +40 -0
  313. data/lib/rabbit/theme/color-circle/property.rb +4 -0
  314. data/lib/rabbit/theme/comment/comment.rb +5 -0
  315. data/lib/rabbit/theme/comment/property.rb +3 -0
  316. data/lib/rabbit/theme/cozmixng-powered-by/cozmixng-powered-by.rb +6 -0
  317. data/lib/rabbit/theme/cozmixng-powered-by/property.rb +7 -0
  318. data/lib/rabbit/theme/cozmixng/cozmixng.rb +55 -0
  319. data/lib/rabbit/theme/cozmixng/property.rb +3 -0
  320. data/lib/rabbit/theme/day-white/day-white.rb +14 -0
  321. data/lib/rabbit/theme/day-white/property.rb +3 -0
  322. data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +113 -0
  323. data/lib/rabbit/theme/default-block-quote/property.rb +3 -0
  324. data/lib/rabbit/theme/default-description/default-description.rb +64 -0
  325. data/lib/rabbit/theme/default-description/property.rb +5 -0
  326. data/lib/rabbit/theme/default-foot-text/default-foot-text.rb +52 -0
  327. data/lib/rabbit/theme/default-foot-text/property.rb +3 -0
  328. data/lib/rabbit/theme/default-icon/default-icon.rb +4 -0
  329. data/lib/rabbit/theme/default-icon/property.rb +5 -0
  330. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +116 -0
  331. data/lib/rabbit/theme/default-item-mark-setup/property.rb +3 -0
  332. data/lib/rabbit/theme/default-item-mark/default-item-mark.rb +92 -0
  333. data/lib/rabbit/theme/default-item-mark/property.rb +4 -0
  334. data/lib/rabbit/theme/default-method-list/default-method-list.rb +6 -0
  335. data/lib/rabbit/theme/default-method-list/property.rb +3 -0
  336. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +37 -0
  337. data/lib/rabbit/theme/default-preformatted/property.rb +3 -0
  338. data/lib/rabbit/theme/default-slide/default-slide.rb +33 -0
  339. data/lib/rabbit/theme/default-slide/property.rb +3 -0
  340. data/lib/rabbit/theme/default-text/default-text.rb +183 -0
  341. data/lib/rabbit/theme/default-text/property.rb +3 -0
  342. data/lib/rabbit/theme/default-title-slide/default-title-slide.rb +13 -0
  343. data/lib/rabbit/theme/default-title-slide/property.rb +6 -0
  344. data/lib/rabbit/theme/default-title-text/default-title-text.rb +48 -0
  345. data/lib/rabbit/theme/default-title-text/property.rb +3 -0
  346. data/lib/rabbit/theme/default/default.rb +22 -0
  347. data/lib/rabbit/theme/default/property.rb +3 -0
  348. data/lib/rabbit/theme/document.erb +35 -0
  349. data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +77 -0
  350. data/lib/rabbit/theme/edge-info-toolkit/property.rb +3 -0
  351. data/lib/rabbit/theme/emphasize-keyword/emphasize-keyword.rb +16 -0
  352. data/lib/rabbit/theme/emphasize-keyword/property.rb +4 -0
  353. data/lib/rabbit/theme/entry.rb +121 -0
  354. data/lib/rabbit/theme/footer-logo/footer-logo.rb +30 -0
  355. data/lib/rabbit/theme/footer-logo/property.rb +26 -0
  356. data/lib/rabbit/theme/green-circle/green-circle.rb +14 -0
  357. data/lib/rabbit/theme/green-circle/property.rb +3 -0
  358. data/lib/rabbit/theme/headline-logo/headline-logo.rb +24 -0
  359. data/lib/rabbit/theme/headline-logo/property.rb +10 -0
  360. data/lib/rabbit/theme/icon/icon.rb +8 -0
  361. data/lib/rabbit/theme/icon/property.rb +24 -0
  362. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +111 -0
  363. data/lib/rabbit/theme/image-slide-number/property.rb +64 -0
  364. data/lib/rabbit/theme/image-timer/image-timer.rb +109 -0
  365. data/lib/rabbit/theme/image-timer/property.rb +46 -0
  366. data/lib/rabbit/theme/image-viewer/image-viewer.rb +7 -0
  367. data/lib/rabbit/theme/image-viewer/property.rb +3 -0
  368. data/lib/rabbit/theme/image/image.rb +72 -0
  369. data/lib/rabbit/theme/image/property.rb +3 -0
  370. data/lib/rabbit/theme/lightning-clear-blue/lightning-clear-blue.rb +13 -0
  371. data/lib/rabbit/theme/lightning-clear-blue/property.rb +3 -0
  372. data/lib/rabbit/theme/lightning-rabbit/lightning-rabbit.rb +13 -0
  373. data/lib/rabbit/theme/lightning-rabbit/property.rb +3 -0
  374. data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +60 -0
  375. data/lib/rabbit/theme/lightning-simple/property.rb +3 -0
  376. data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +171 -0
  377. data/lib/rabbit/theme/lightning-talk-toolkit/property.rb +3 -0
  378. data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +65 -0
  379. data/lib/rabbit/theme/lightning-talk/property.rb +3 -0
  380. data/lib/rabbit/theme/manager.rb +35 -0
  381. data/lib/rabbit/theme/mirror-effect/mirror-effect.rb +27 -0
  382. data/lib/rabbit/theme/mirror-effect/property.rb +3 -0
  383. data/lib/rabbit/theme/newline-in-slides/newline-in-slides.rb +3 -0
  384. data/lib/rabbit/theme/newline-in-slides/property.rb +4 -0
  385. data/lib/rabbit/theme/newline-in-title/newline-in-title.rb +7 -0
  386. data/lib/rabbit/theme/newline-in-title/property.rb +4 -0
  387. data/lib/rabbit/theme/night-black/night-black.rb +25 -0
  388. data/lib/rabbit/theme/night-black/property.rb +3 -0
  389. data/lib/rabbit/theme/pdf-tortoise-and-hare/pdf-tortoise-and-hare.rb +18 -0
  390. data/lib/rabbit/theme/pdf-tortoise-and-hare/property.rb +3 -0
  391. data/lib/rabbit/theme/pdf/pdf.rb +4 -0
  392. data/lib/rabbit/theme/pdf/property.rb +3 -0
  393. data/lib/rabbit/theme/powered-by/powered-by.rb +67 -0
  394. data/lib/rabbit/theme/powered-by/property.rb +24 -0
  395. data/lib/rabbit/theme/rabbit-block-quote/property.rb +4 -0
  396. data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +16 -0
  397. data/lib/rabbit/theme/rabbit-headline-logo/property.rb +5 -0
  398. data/lib/rabbit/theme/rabbit-headline-logo/rabbit-headline-logo.rb +4 -0
  399. data/lib/rabbit/theme/rabbit-icon/property.rb +5 -0
  400. data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +4 -0
  401. data/lib/rabbit/theme/rabbit-item-mark/property.rb +5 -0
  402. data/lib/rabbit/theme/rabbit-item-mark/rabbit-item-mark.rb +53 -0
  403. data/lib/rabbit/theme/rabbit-powered-by/property.rb +7 -0
  404. data/lib/rabbit/theme/rabbit-powered-by/rabbit-powered-by.rb +5 -0
  405. data/lib/rabbit/theme/rabbit-title-logo/property.rb +5 -0
  406. data/lib/rabbit/theme/rabbit-title-logo/rabbit-title-logo.rb +4 -0
  407. data/lib/rabbit/theme/rabbit/property.rb +3 -0
  408. data/lib/rabbit/theme/rabbit/rabbit.rb +63 -0
  409. data/lib/rabbit/theme/red-frame/property.rb +3 -0
  410. data/lib/rabbit/theme/red-frame/red-frame.rb +96 -0
  411. data/lib/rabbit/theme/rotate-zoom-effect/property.rb +4 -0
  412. data/lib/rabbit/theme/rotate-zoom-effect/rotate-zoom-effect.rb +51 -0
  413. data/lib/rabbit/theme/ruby-gnome2-description/property.rb +7 -0
  414. data/lib/rabbit/theme/ruby-gnome2-description/ruby-gnome2-description.rb +7 -0
  415. data/lib/rabbit/theme/ruby-gnome2-foot-text/property.rb +5 -0
  416. data/lib/rabbit/theme/ruby-gnome2-foot-text/ruby-gnome2-foot-text.rb +3 -0
  417. data/lib/rabbit/theme/ruby-gnome2-headline/property.rb +7 -0
  418. data/lib/rabbit/theme/ruby-gnome2-headline/ruby-gnome2-headline.rb +47 -0
  419. data/lib/rabbit/theme/ruby-gnome2-icon/property.rb +5 -0
  420. data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +4 -0
  421. data/lib/rabbit/theme/ruby-gnome2-item-mark/property.rb +10 -0
  422. data/lib/rabbit/theme/ruby-gnome2-item-mark/ruby-gnome2-item-mark.rb +65 -0
  423. data/lib/rabbit/theme/ruby-gnome2-preformatted/property.rb +4 -0
  424. data/lib/rabbit/theme/ruby-gnome2-preformatted/ruby-gnome2-preformatted.rb +8 -0
  425. data/lib/rabbit/theme/ruby-gnome2-slide/property.rb +4 -0
  426. data/lib/rabbit/theme/ruby-gnome2-slide/ruby-gnome2-slide.rb +40 -0
  427. data/lib/rabbit/theme/ruby-gnome2/property.rb +3 -0
  428. data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +61 -0
  429. data/lib/rabbit/theme/scroll-effect/property.rb +3 -0
  430. data/lib/rabbit/theme/scroll-effect/scroll-effect.rb +32 -0
  431. data/lib/rabbit/theme/searcher.rb +120 -0
  432. data/lib/rabbit/theme/show-frame/property.rb +16 -0
  433. data/lib/rabbit/theme/show-frame/show-frame.rb +17 -0
  434. data/lib/rabbit/theme/simple-item-mark/property.rb +5 -0
  435. data/lib/rabbit/theme/simple-item-mark/simple-item-mark.rb +112 -0
  436. data/lib/rabbit/theme/slide-background-image/property.rb +10 -0
  437. data/lib/rabbit/theme/slide-background-image/slide-background-image.rb +25 -0
  438. data/lib/rabbit/theme/slide-background/property.rb +6 -0
  439. data/lib/rabbit/theme/slide-background/slide-background.rb +3 -0
  440. data/lib/rabbit/theme/slide-footer-info/property.rb +43 -0
  441. data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +42 -0
  442. data/lib/rabbit/theme/slide-header-info/property.rb +43 -0
  443. data/lib/rabbit/theme/slide-header-info/slide-header-info.rb +42 -0
  444. data/lib/rabbit/theme/slide-logo/property.rb +26 -0
  445. data/lib/rabbit/theme/slide-logo/slide-logo.rb +30 -0
  446. data/lib/rabbit/theme/slide-number/property.rb +21 -0
  447. data/lib/rabbit/theme/slide-number/slide-number.rb +28 -0
  448. data/lib/rabbit/theme/slide-show/property.rb +4 -0
  449. data/lib/rabbit/theme/slide-show/slide-show.rb +31 -0
  450. data/lib/rabbit/theme/table/property.rb +3 -0
  451. data/lib/rabbit/theme/table/table.rb +169 -0
  452. data/lib/rabbit/theme/timer/property.rb +3 -0
  453. data/lib/rabbit/theme/timer/timer.rb +63 -0
  454. data/lib/rabbit/theme/title-background-color/property.rb +10 -0
  455. data/lib/rabbit/theme/title-background-color/title-background-color.rb +17 -0
  456. data/lib/rabbit/theme/title-background-image/property.rb +11 -0
  457. data/lib/rabbit/theme/title-background-image/title-background-image.rb +25 -0
  458. data/lib/rabbit/theme/title-logo/property.rb +23 -0
  459. data/lib/rabbit/theme/title-logo/title-logo.rb +38 -0
  460. data/lib/rabbit/theme/title-on-image-toolkit/property.rb +3 -0
  461. data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +122 -0
  462. data/lib/rabbit/theme/title-shadow/property.rb +11 -0
  463. data/lib/rabbit/theme/title-shadow/title-shadow.rb +33 -0
  464. data/lib/rabbit/trackball.rb +228 -0
  465. data/lib/rabbit/utils.rb +459 -0
  466. data/lib/rabbit/xmlrpc/base.rb +6 -0
  467. data/lib/rabbit/xmlrpc/client.rb +17 -0
  468. data/lib/rabbit/xmlrpc/server.rb +23 -0
  469. data/lib/rt/rt2html-lib.rb +157 -0
  470. data/lib/rt/rtparser.rb +226 -0
  471. data/lib/rt/rtvisitor.rb +68 -0
  472. data/lib/rwiki/soap/common.rb +5 -0
  473. data/lib/rwiki/soap/driver.rb +43 -0
  474. data/lib/rwiki/soap/servant.rb +78 -0
  475. data/misc/emacs/README.ja +177 -0
  476. data/misc/emacs/rabbit-mode.el +375 -0
  477. data/misc/make-image-sample.rb +94 -0
  478. data/misc/make-print-sample.rb +95 -0
  479. data/misc/update-rd.rb +78 -0
  480. data/misc/xyzzy/rabbit-mode.l +775 -0
  481. data/po/en/rabbit.po +2356 -0
  482. data/po/fr/rabbit.po +2452 -0
  483. data/po/ja/rabbit.po +2465 -0
  484. data/sample/asahina/alice.png +0 -0
  485. data/sample/asahina/yukiusa.png +0 -0
  486. data/sample/blue-circle.rd +37 -0
  487. data/sample/can_rabbit.rd +470 -0
  488. data/sample/cozmixng.rd +85 -0
  489. data/sample/cozmixng_is_field.png +0 -0
  490. data/sample/cozmixng_is_field.svg +430 -0
  491. data/sample/equation.eps +571 -0
  492. data/sample/gl-sample.rd +10 -0
  493. data/sample/html_and_wiki.png +0 -0
  494. data/sample/html_and_wiki.svg +275 -0
  495. data/sample/join_cozmixng.png +0 -0
  496. data/sample/join_cozmixng.svg +293 -0
  497. data/sample/kof2005/gesture-flow.svg +329 -0
  498. data/sample/kof2005/gesture.rb +473 -0
  499. data/sample/kof2005/gtk+-widget.svg +128 -0
  500. data/sample/kof2005/high-light-architecture.svg +203 -0
  501. data/sample/kof2005/high-light-expose.rb +120 -0
  502. data/sample/kof2005/high-light-expose.svg +153 -0
  503. data/sample/kof2005/high-light-widget.rb +147 -0
  504. data/sample/kof2005/high-light-widget.svg +172 -0
  505. data/sample/kof2005/high-light.svg +132 -0
  506. data/sample/kof2005/mask-screenshot.png +0 -0
  507. data/sample/kof2005/mask.rb +105 -0
  508. data/sample/kof2005/mask.svg +120 -0
  509. data/sample/kof2005/ruby-gnome2-logo.png +0 -0
  510. data/sample/kof2005/ruby-pink-circle-logo.png +0 -0
  511. data/sample/kof2005/skip-up-with-ruby-gnome2.rd +450 -0
  512. data/sample/kof2005/widget.svg +202 -0
  513. data/sample/kou/clear-blue-headline-background.svg +283 -0
  514. data/sample/kou/clear-blue-icon.svg +194 -0
  515. data/sample/kou/horizontal-bar.svg +82 -0
  516. data/sample/kou/quote.svg +497 -0
  517. data/sample/kou/vertical-bar.svg +70 -0
  518. data/sample/lavie.png +0 -0
  519. data/sample/lightning-talk.rd +50 -0
  520. data/sample/lldn/input.svg +269 -0
  521. data/sample/lldn/interface.svg +410 -0
  522. data/sample/lldn/kame.png +0 -0
  523. data/sample/lldn/lavie.png +0 -0
  524. data/sample/lldn/lldn.rd +212 -0
  525. data/sample/lldn/output.svg +284 -0
  526. data/sample/lldn/rabbit-rwiki.svg +353 -0
  527. data/sample/lldn/rabbit_banner.png +0 -0
  528. data/sample/lldn/rabbit_banner2.png +0 -0
  529. data/sample/m17n.rd +138 -0
  530. data/sample/momo/banner/bn1.png +0 -0
  531. data/sample/momo/banner/bn2.png +0 -0
  532. data/sample/momo/banner/bn_psd.psd +0 -0
  533. data/sample/momo/banner/bn_psd2.psd +0 -0
  534. data/sample/momo/tailavi/tailavi-ruby.png +0 -0
  535. data/sample/momo/tailavi/tailavi-ruby.psd +0 -0
  536. data/sample/momo/tailavi/tailavi-taiyaki.png +0 -0
  537. data/sample/momo/tailavi/tailavi-taiyaki.psd +0 -0
  538. data/sample/momo/tailavi/tailavi-yokubari.png +0 -0
  539. data/sample/momo/tailavi/tailavi-yokubari.psd +0 -0
  540. data/sample/momo/tailavi/taiyaki.png +0 -0
  541. data/sample/momo/tailavi/taiyaki.psd +0 -0
  542. data/sample/momo/usako/blue_dot.png +0 -0
  543. data/sample/momo/usako/green_dot.png +0 -0
  544. data/sample/momo/usako/rabbit.png +0 -0
  545. data/sample/momo/usako/rabbit_mimi.png +0 -0
  546. data/sample/momo/usako/rabbit_mimi2.png +0 -0
  547. data/sample/momo/usako/red_dot.png +0 -0
  548. data/sample/momo/usako/ruby.png +0 -0
  549. data/sample/momo/usako/ruby_new.png +0 -0
  550. data/sample/momo/usako/usa1.png +0 -0
  551. data/sample/momo/usako/usa2.png +0 -0
  552. data/sample/momo/usako/usa3.png +0 -0
  553. data/sample/momo/usako/usako_psd.psd +0 -0
  554. data/sample/momo/usako/usako_psd_100.png +0 -0
  555. data/sample/momo/usako/usako_psd_200.png +0 -0
  556. data/sample/ppt/hare-and-tortoise-end.png +0 -0
  557. data/sample/ppt/hare-and-tortoise-middle.png +0 -0
  558. data/sample/ppt/hare-and-tortoise-start.png +0 -0
  559. data/sample/ppt/ppt.rd +207 -0
  560. data/sample/ppt/rabbit-with-ruby.png +0 -0
  561. data/sample/pre.rd +112 -0
  562. data/sample/rabbit-balloon.eps +233 -0
  563. data/sample/rabbit-balloon.obj +93 -0
  564. data/sample/rabbit-en.rd +376 -0
  565. data/sample/rabbit-history.svg +280 -0
  566. data/sample/rabbit-implementation.rd +187 -0
  567. data/sample/rabbit.dia +408 -0
  568. data/sample/rabbit.hiki +328 -0
  569. data/sample/rabbit.rd +383 -0
  570. data/sample/rabbit.xcf +0 -0
  571. data/sample/rabbit/theme/festival/festival.rb +6 -0
  572. data/sample/rabbit/theme/gl-sample/gl-sample.rb +29 -0
  573. data/sample/rabbit/theme/image-with-frame/image-with-frame.rb +2 -0
  574. data/sample/rabbit/theme/image-with-no-shadow-frame/image-with-no-shadow-frame.rb +3 -0
  575. data/sample/rabbit/theme/image-without-frame/image-without-frame.rb +2 -0
  576. data/sample/rabbit/theme/kof2005/kof2005.rb +9 -0
  577. data/sample/rabbit/theme/kof2005/property.rb +3 -0
  578. data/sample/rabbit/theme/lightning-talk-with-contact/lightning-talk-with-contact.rb +6 -0
  579. data/sample/rabbit/theme/lldn/lldn.rb +20 -0
  580. data/sample/rabbit/theme/pdf/pdf.rb +16 -0
  581. data/sample/rabbit/theme/pdf/property.rb +4 -0
  582. data/sample/rabbit/theme/ppt/ppt.rb +5 -0
  583. data/sample/rabbit/theme/rabbit-and-tortoise/rabbit-and-tortoise.rb +11 -0
  584. data/sample/rabbit/theme/rectangle-image-slide-number/rectangle-image-slide-number.rb +4 -0
  585. data/sample/rabbit/theme/stop-auto-slide/stop-auto-slide.rb +2 -0
  586. data/sample/rabbit/theme/triangle-image-slide-number/triangle-image-slide-number.rb +5 -0
  587. data/sample/rabbit_icon.ico +0 -0
  588. data/sample/rabbit_icon.png +0 -0
  589. data/sample/shocker.jpg +0 -0
  590. data/sample/slide-property.hiki +14 -0
  591. data/sample/slide-property.rab +18 -0
  592. data/sample/sode/kame-color.riff +0 -0
  593. data/sample/sode/kame.riff +0 -0
  594. data/sample/spiral.svg +29 -0
  595. data/sample/table-en.rd +55 -0
  596. data/sample/table.rd +55 -0
  597. data/sample/theme-bench-en.rab +127 -0
  598. data/sample/theme-bench.rab +128 -0
  599. data/sample/usagi.png +0 -0
  600. data/sample/usatti/kame-taro.png +0 -0
  601. data/sample/usatti/rabbit-pink-logo.png +0 -0
  602. data/sample/usatti/rabbit-pink-logo2.png +0 -0
  603. data/sample/usatti/ruby-pink-circle-logo.png +0 -0
  604. data/sample/usatti/ruby-pink-circle.png +0 -0
  605. data/sample/usatti/ruby-pink-polygon-logo.png +0 -0
  606. data/sample/usatti/ruby-pink-polygon.png +0 -0
  607. data/sample/usatti/tanu-kitaro.png +0 -0
  608. data/sample/usatti/usa-taro.png +0 -0
  609. data/sample/usatti/yukidaru-taro.png +0 -0
  610. data/setup.rb +1585 -0
  611. data/test/rabbit-test-utils.rb +24 -0
  612. data/test/run-test.rb +11 -0
  613. data/test/test_applier.rb +42 -0
  614. data/test/test_color.rb +42 -0
  615. data/test/test_element.rb +91 -0
  616. data/test/test_source.rb +47 -0
  617. data/test/test_utils.rb +50 -0
  618. data/update-mo.rb +20 -0
  619. data/update-po.rb +57 -0
  620. metadata +703 -0
@@ -0,0 +1,78 @@
1
+ module Rabbit
2
+ module Action
3
+ module_function
4
+ @@radio_blank_values = [
5
+ [:white, 1],
6
+ [:black, 2],
7
+ [:show, 3],
8
+ ]
9
+ def act_radio_blank(action, current, group, canvas)
10
+ case @@radio_blank_values.rassoc(current.value)[0]
11
+ when :white
12
+ canvas.toggle_whiteout
13
+ when :black
14
+ canvas.toggle_blackout
15
+ when :show
16
+ if canvas.whiteouting?
17
+ canvas.toggle_whiteout
18
+ elsif canvas.blackouting?
19
+ canvas.toggle_blackout
20
+ end
21
+ else
22
+ p "????"
23
+ end
24
+ end
25
+
26
+ def act_radio_blank_whiteout_config(config, canvas)
27
+ config[:label] = N_("Whiteout")
28
+ config[:value] = @@radio_blank_values.assoc(:white)[1]
29
+ config[:default] = canvas.whiteouting?
30
+ end
31
+ def act_radio_blank_blackout_config(config, canvas)
32
+ config[:label] = N_("Blackout")
33
+ config[:value] = @@radio_blank_values.assoc(:black)[1]
34
+ config[:default] = canvas.blackouting?
35
+ end
36
+ def act_radio_blank_show_config(config, canvas)
37
+ config[:label] = N_("Show")
38
+ config[:value] = @@radio_blank_values.assoc(:show)[1]
39
+ config[:default] = !canvas.whiteouting? && !canvas.blackouting?
40
+ end
41
+
42
+
43
+ def act_radio_log_level(action, current, group, canvas)
44
+ canvas.logger.level = current.value
45
+ end
46
+
47
+ def act_radio_log_level_debug_config(config, canvas)
48
+ config[:label] = N_("Debug")
49
+ config[:value] = Logger::Severity::DEBUG
50
+ config[:default] = canvas.logger.level == config[:value]
51
+ end
52
+ def act_radio_log_level_info_config(config, canvas)
53
+ config[:label] = N_("Info")
54
+ config[:value] = Logger::Severity::INFO
55
+ config[:default] = canvas.logger.level == config[:value]
56
+ end
57
+ def act_radio_log_level_warning_config(config, canvas)
58
+ config[:label] = N_("Warning")
59
+ config[:value] = Logger::Severity::WARNING
60
+ config[:default] = canvas.logger.level == config[:value]
61
+ end
62
+ def act_radio_log_level_error_config(config, canvas)
63
+ config[:label] = N_("Error")
64
+ config[:value] = Logger::Severity::ERROR
65
+ config[:default] = canvas.logger.level == config[:value]
66
+ end
67
+ def act_radio_log_level_fatal_config(config, canvas)
68
+ config[:label] = N_("Fatal")
69
+ config[:value] = Logger::Severity::FATAL
70
+ config[:default] = canvas.logger.level == config[:value]
71
+ end
72
+ def act_radio_log_level_unknown_config(config, canvas)
73
+ config[:label] = N_("Unknown")
74
+ config[:value] = Logger::Severity::UNKNOWN
75
+ config[:default] = canvas.logger.level == config[:value]
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,89 @@
1
+ module Rabbit
2
+ module Action
3
+ module_function
4
+ def act_toggle_whiteout(action, group, canvas)
5
+ if canvas.whiteouting?
6
+ canvas.activate("RadioBlankShow")
7
+ else
8
+ canvas.activate("RadioBlankWhiteout")
9
+ end
10
+ end
11
+ def act_toggle_whiteout_config(config, canvas)
12
+ config[:label] = N_("Whiteout")
13
+ end
14
+
15
+ def act_toggle_blackout(action, group, canvas)
16
+ if canvas.blackouting?
17
+ canvas.activate("RadioBlankShow")
18
+ else
19
+ canvas.activate("RadioBlankBlackout")
20
+ end
21
+ end
22
+ def act_toggle_blackout_config(config, canvas)
23
+ config[:label] = N_("Blackout")
24
+ end
25
+
26
+ def act_toggle_comment_frame(action, group, canvas)
27
+ canvas.toggle_comment_frame
28
+ end
29
+ def act_toggle_comment_frame_config(config, canvas)
30
+ config[:label] = N_("Comment frame")
31
+ end
32
+
33
+ def act_toggle_comment_view(action, group, canvas)
34
+ canvas.toggle_comment_view
35
+ end
36
+ def act_toggle_comment_view_config(config, canvas)
37
+ config[:label] = N_("Comment view")
38
+ end
39
+
40
+ def act_toggle_index_mode(action, group, canvas)
41
+ canvas.toggle_index_mode
42
+ end
43
+ def act_toggle_index_mode_config(config, canvas)
44
+ config[:label] = N_("Index mode")
45
+ config[:stock_id] = Gtk::Stock::INDEX
46
+ end
47
+
48
+ def act_toggle_full_screen(action, group, canvas)
49
+ canvas.toggle_fullscreen
50
+ end
51
+ def act_toggle_full_screen_config(config, canvas)
52
+ config[:label] = N_("Full screen")
53
+ if Gtk::Stock.const_defined?(:FULLSCREEN)
54
+ config[:stock_id] = Gtk::Stock::FULLSCREEN
55
+ else
56
+ config[:stock_id] = Gtk::Stock::ZOOM_FIT
57
+ end
58
+ end
59
+
60
+ def act_toggle_graffiti_mode(action, group, canvas)
61
+ canvas.toggle_graffiti_mode
62
+ end
63
+ def act_toggle_graffiti_mode_config(config, canvas)
64
+ config[:label] = N_("Graffiti mode")
65
+ config[:stock_id] = Gtk::Stock::EDIT
66
+ end
67
+
68
+ def act_toggle_info_window(action, group, canvas)
69
+ canvas.toggle_info_window
70
+ end
71
+ def act_toggle_info_window_config(config, canvas)
72
+ config[:label] = N_("Information window")
73
+ end
74
+
75
+ def act_toggle_spotlight(action, group, canvas)
76
+ canvas.toggle_spotlight
77
+ end
78
+ def act_toggle_spotlight_config(config, canvas)
79
+ config[:label] = N_("Spotlight")
80
+ end
81
+
82
+ def act_toggle_magnifier(action, group, canvas)
83
+ canvas.toggle_magnifier
84
+ end
85
+ def act_toggle_magnifier_config(config, canvas)
86
+ config[:label] = N_("Magnifier")
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,760 @@
1
+ require "forwardable"
2
+ require "gtk2"
3
+ require "rd/rdfmt"
4
+
5
+ require "rabbit/rabbit"
6
+ require 'rabbit/frame'
7
+ require 'rabbit/renderer'
8
+ require 'rabbit/element'
9
+ require "rabbit/parser"
10
+ require "rabbit/theme/manager"
11
+ require "rabbit/front"
12
+ require "rabbit/action"
13
+ require "rabbit/html/generator"
14
+
15
+ module Rabbit
16
+ class Canvas
17
+ include Enumerable
18
+ extend Forwardable
19
+
20
+ include GetText
21
+
22
+ INTERNAL_DPI = 80.0
23
+
24
+ def_delegators(:@frame, :icon, :icon=, :set_icon)
25
+ def_delegators(:@frame, :icon_list, :icon_list=, :set_icon_list)
26
+ def_delegators(:@frame, :update_title)
27
+ def_delegators(:@frame, :toggle_fullscreen, :fullscreen?)
28
+ def_delegators(:@frame, :iconify, :window)
29
+ def_delegators(:@frame, :fullscreen_available?)
30
+ def_delegators(:@frame, :iconify_available?)
31
+
32
+ def_delegators(:@renderer, :width, :height)
33
+ def_delegators(:@renderer, :width=, :height=)
34
+ def_delegators(:@renderer, :paper_width, :paper_height)
35
+ def_delegators(:@renderer, :paper_width=, :paper_height=)
36
+ def_delegators(:@renderer, :margin_left, :margin_left=)
37
+ def_delegators(:@renderer, :margin_right, :margin_right=)
38
+ def_delegators(:@renderer, :margin_top, :margin_top=)
39
+ def_delegators(:@renderer, :margin_bottom, :margin_bottom=)
40
+ def_delegators(:@renderer, :page_margin_left, :page_margin_left=)
41
+ def_delegators(:@renderer, :page_margin_right, :page_margin_right=)
42
+ def_delegators(:@renderer, :page_margin_top, :page_margin_top=)
43
+ def_delegators(:@renderer, :page_margin_bottom, :page_margin_bottom=)
44
+ def_delegators(:@renderer, :slides_per_page, :slides_per_page=)
45
+ def_delegators(:@renderer, :font_families)
46
+ def_delegators(:@renderer, :redraw, :clear_slide)
47
+ def_delegators(:@renderer, :cursor=, :filename, :filename=)
48
+ def_delegators(:@renderer, :each_slide_pixbuf)
49
+ def_delegators(:@renderer, :off_screen_canvas)
50
+ def_delegators(:@renderer, :foreground, :background)
51
+ def_delegators(:@renderer, :foreground=, :background=)
52
+ def_delegators(:@renderer, :background_image, :background_image=)
53
+ def_delegators(:@renderer, :progress_foreground)
54
+ def_delegators(:@renderer, :progress_foreground=)
55
+ def_delegators(:@renderer, :progress_background)
56
+ def_delegators(:@renderer, :progress_background=)
57
+
58
+ def_delegators(:@renderer, :make_color, :make_layout)
59
+ def_delegators(:@renderer, :translate_context, :rotate_context)
60
+ def_delegators(:@renderer, :scale_context, :reflect_context)
61
+ def_delegators(:@renderer, :shear_context)
62
+ def_delegators(:@renderer, :save_context, :restore_context)
63
+ def_delegators(:@renderer, :draw_line, :draw_rectangle, :draw_arc)
64
+ def_delegators(:@renderer, :draw_circle, :draw_layout, :draw_pixbuf)
65
+ def_delegators(:@renderer, :draw_arc_by_radius, :draw_circle_by_radius)
66
+ def_delegators(:@renderer, :draw_slide, :draw_polygon, :draw_flag)
67
+ def_delegators(:@renderer, :draw_rounded_rectangle)
68
+ def_delegators(:@renderer, :draw_rsvg_handle, :rsvg_available?)
69
+ def_delegators(:@renderer, :draw_poppler_page, :poppler_available?)
70
+
71
+ def_delegators(:@renderer, :draw_cube, :draw_sphere, :draw_cone)
72
+ def_delegators(:@renderer, :draw_torus, :draw_tetrahedron)
73
+ def_delegators(:@renderer, :draw_octahedron, :draw_dodecahedron)
74
+ def_delegators(:@renderer, :draw_icosahedron, :draw_teapot)
75
+
76
+ def_delegators(:@renderer, :gl_compile, :gl_call_list)
77
+ def_delegators(:@renderer, :new_list_id)
78
+
79
+ def_delegators(:@renderer, :z_far, :z_view)
80
+
81
+ def_delegators(:@renderer, :to_attrs, :flag_size)
82
+
83
+ def_delegators(:@renderer, :create_pango_context, :pango_context=)
84
+
85
+ def_delegators(:@renderer, :confirm)
86
+
87
+ def_delegators(:@renderer, :display?, :printable?)
88
+ def_delegators(:@renderer, :x_dpi, :y_dpi)
89
+
90
+ def_delegators(:@renderer, :whiteouting?, :blackouting?)
91
+ def_delegators(:@renderer, :toggle_whiteout, :toggle_blackout)
92
+
93
+ def_delegators(:@renderer, :showing_comment_frame?, :showing_comment_view?)
94
+ def_delegators(:@renderer, :toggle_comment_frame, :toggle_comment_view)
95
+ def_delegators(:@renderer, :comment_frame_available?)
96
+ def_delegators(:@renderer, :comment_view_available?)
97
+
98
+ def_delegators(:@renderer, :adjustment_x, :adjustment_x=)
99
+ def_delegators(:@renderer, :adjustment_y, :adjustment_y=)
100
+ def_delegators(:@renderer, :reset_adjustment)
101
+
102
+ def_delegators(:@renderer, :graffiti_mode?, :have_graffiti?)
103
+ def_delegators(:@renderer, :can_undo_graffiti?, :toggle_graffiti_mode)
104
+ def_delegators(:@renderer, :clear_graffiti, :undo_graffiti)
105
+ def_delegators(:@renderer, :change_graffiti_color)
106
+ def_delegators(:@renderer, :graffiti_color, :graffiti_color=)
107
+ def_delegators(:@renderer, :graffiti_line_width, :graffiti_line_width=)
108
+
109
+ def_delegators(:@renderer, :toggle_info_window)
110
+ def_delegators(:@renderer, :toggle_spotlight, :toggle_magnifier)
111
+
112
+ def_delegators(:@renderer, :add_gesture_action)
113
+
114
+ def_delegators(:@renderer, :post_init_gui)
115
+
116
+ def_delegators(:@renderer, :connect_key, :disconnect_key)
117
+
118
+ def_delegators(:@renderer, :expand_hole, :narrow_hole)
119
+
120
+ def_delegators(:@renderer, :search_slide, :stop_slide_search, :searching?)
121
+
122
+ def_delegators(:@source, :source=, :reset, :base)
123
+
124
+ attr_reader :logger, :renderer, :last_modified
125
+ attr_reader :comment_source, :actions
126
+
127
+ attr_writer :saved_image_base_name
128
+ attr_writer :use_gl
129
+
130
+ attr_accessor :saved_image_type, :rss_base_uri
131
+ attr_accessor :output_html, :output_index_html
132
+ attr_accessor :migemo_dictionary_search_path, :migemo_dictionary_name
133
+ attr_accessor :font_resolution_ratio
134
+
135
+ def initialize(logger, renderer, comment_source=nil, comment_encoding=nil)
136
+ @logger = logger
137
+ @frame = NullFrame.new
138
+ @theme_name = nil
139
+ @saved_image_base_name = nil
140
+ @saved_image_type = "png"
141
+ @processing = false
142
+ @quitted = false
143
+ @parse_request_queue = []
144
+ @apply_theme_request_queue = []
145
+ @auto_redraw_timer = nil
146
+ @output_html = false
147
+ @rss_base_uri = true
148
+ @migemo_dictionary_search_path = []
149
+ @migemo_dictionary_name = nil
150
+ @limit_time = nil
151
+ @use_gl = false
152
+ @font_resolution_ratio = 1
153
+ init_comment(comment_source, comment_encoding)
154
+ clear
155
+ @renderer = renderer.new(self)
156
+ @actions = Action.action_group(self)
157
+ end
158
+
159
+ def quitted?
160
+ @quitted
161
+ end
162
+
163
+ def parsing?
164
+ not @parse_request_queue.empty?
165
+ end
166
+
167
+ def applying?
168
+ not @apply_theme_request_queue.empty?
169
+ end
170
+
171
+ def use_gl?
172
+ @use_gl
173
+ end
174
+
175
+ def quit
176
+ @quitted = true
177
+ @frame.quit
178
+ end
179
+
180
+ def front(public_level=nil)
181
+ Front.new(self, public_level)
182
+ end
183
+
184
+ def attach_to(frame, window)
185
+ @frame = frame if frame
186
+ @renderer.attach_to(window) if window
187
+ end
188
+
189
+ def detach
190
+ @frame = NullFrame.new
191
+ @renderer.detach
192
+ end
193
+
194
+ def title
195
+ ts = title_slide
196
+ if ts
197
+ ts.title
198
+ else
199
+ "Rabbit"
200
+ end
201
+ end
202
+
203
+ def slide_title(index=current_index)
204
+ return "" if slides.empty?
205
+ slide = slides[index]
206
+ return title if slide.nil?
207
+ if slide.is_a?(Element::TitleSlide)
208
+ slide.title
209
+ else
210
+ "#{title}: #{slide.title}"
211
+ end
212
+ end
213
+
214
+ def slides
215
+ if @index_mode
216
+ @index_slides
217
+ else
218
+ @slides
219
+ end
220
+ end
221
+
222
+ def find_slide(pattern)
223
+ slides.find {|slide| slide.match?(pattern)}
224
+ end
225
+
226
+ def slide_index(pattern)
227
+ slides.each_with_index do |slide, i|
228
+ return i if slide.match?(pattern)
229
+ end
230
+ nil
231
+ end
232
+
233
+ def slide_indexes(pattern)
234
+ indexes = []
235
+ slides.each_with_index do |slide, i|
236
+ indexes << i if slide.match?(pattern)
237
+ end
238
+ indexes
239
+ end
240
+
241
+ def slide_size
242
+ slides.size
243
+ end
244
+
245
+ def current_slide
246
+ slide = slides[current_index]
247
+ if slide
248
+ slide
249
+ else
250
+ move_to_first
251
+ slides.first
252
+ end
253
+ end
254
+
255
+ def current_index
256
+ if @index_mode
257
+ @index_current_index
258
+ else
259
+ @current_index
260
+ end
261
+ end
262
+
263
+ def change_current_index(new_index)
264
+ mode = @index_mode
265
+ if mode
266
+ index = @index_current_index
267
+ @index_current_index = new_index
268
+ else
269
+ index = @current_index
270
+ @current_index = new_index
271
+ end
272
+ if 0 <= current_index and current_index < slide_size
273
+ yield
274
+ end
275
+ ensure
276
+ if mode
277
+ @index_current_index = index
278
+ else
279
+ @current_index = index
280
+ end
281
+ end
282
+
283
+ def next_slide
284
+ slides[current_index + 1]
285
+ end
286
+
287
+ def each(&block)
288
+ slides.each(&block)
289
+ end
290
+
291
+ def <<(slide)
292
+ slide.index = slides.size
293
+ slides << slide
294
+ end
295
+
296
+ def apply_theme(name=nil, &block)
297
+ _apply_theme(name, Object.new.__id__, &block)
298
+ end
299
+
300
+ def theme_name
301
+ @theme_name || default_theme || "default"
302
+ end
303
+
304
+ def merge_theme(name)
305
+ unless @slides.empty?
306
+ manager = Theme::Manager.new(self)
307
+ manager.apply(name)
308
+ @renderer.post_apply_theme
309
+ end
310
+ end
311
+
312
+ def reload_theme(&block)
313
+ apply_theme(@theme_name, &block)
314
+ end
315
+
316
+ def parse(source=nil, callback=nil, &block)
317
+ id = Object.new.__id__
318
+ @parse_request_queue.push(id)
319
+ @source = source || @source
320
+ begin
321
+ index = current_index
322
+ keep_index do
323
+ @renderer.pre_parse
324
+ clear
325
+ Parser.parse(self, @source)
326
+ set_current_index(index)
327
+ reload_theme do
328
+ if @parse_request_queue.last != id
329
+ raise ParseFinish
330
+ end
331
+ callback.call if callback
332
+ end
333
+ @renderer.post_parse
334
+ index = current_index
335
+ end
336
+ set_current_index(index)
337
+ rescue ParseFinish
338
+ rescue ParseError, UnsupportedFormatError
339
+ if block_given?
340
+ yield($!)
341
+ else
342
+ logger.warn($!.message)
343
+ end
344
+ ensure
345
+ @parse_request_queue.delete_if {|x| x == id}
346
+ end
347
+ end
348
+
349
+ def reload_source(callback=nil, &block)
350
+ if need_reload_source?
351
+ parse(nil, callback, &block)
352
+ end
353
+ end
354
+
355
+ def need_reload_source?
356
+ !@processing and @source and @source.modified?
357
+ end
358
+
359
+ def full_path(path)
360
+ @source and @source.full_path(path)
361
+ end
362
+
363
+ def tmp_dir_name
364
+ @source and @source.tmp_dir_name
365
+ end
366
+
367
+ def to_pixbuf(i)
368
+ move_to_if_can(i)
369
+ current_slide.flush
370
+ @renderer.to_pixbuf(current_slide)
371
+ end
372
+
373
+ def save_as_image
374
+ process do
375
+ generator = HTML::Generator.new(self,
376
+ saved_image_base_name,
377
+ @saved_image_type,
378
+ @output_html,
379
+ @output_index_html,
380
+ @rss_base_uri)
381
+ generator.pdf_filename = filename if /\.pdf/i =~ filename.to_s
382
+ generator.save
383
+ end
384
+ end
385
+
386
+ def print(&block)
387
+ process do
388
+ @renderer.print(&block)
389
+ end
390
+ end
391
+
392
+ def fullscreened
393
+ @renderer.post_fullscreen
394
+ end
395
+
396
+ def unfullscreened
397
+ @renderer.post_unfullscreen
398
+ end
399
+
400
+ def iconified
401
+ @renderer.post_iconify
402
+ end
403
+
404
+ def saved_image_base_name
405
+ if @saved_image_base_name
406
+ base_name = GLib.filename_to_utf8(@saved_image_base_name)
407
+ else
408
+ base_name = title.dup
409
+ end
410
+ base_name << "-index" if index_mode?
411
+ base_name
412
+ end
413
+
414
+ def move_to_if_can(index)
415
+ if index and 0 <= index and index < slide_size
416
+ move_to(index)
417
+ end
418
+ current_index
419
+ end
420
+
421
+ def move_to_next_if_can
422
+ slide = current_slide
423
+ if slide and !slide.last?
424
+ old_index = slide.drawing_index
425
+ slide.move_to_next
426
+ Action.update_status(self)
427
+ @renderer.post_move_in_slide(old_index, slide.drawing_index)
428
+ else
429
+ move_to_next_slide_if_can
430
+ end
431
+ end
432
+
433
+ def move_to_next_slide_if_can
434
+ move_to_if_can(current_index + 1)
435
+ end
436
+
437
+ def move_to_previous_if_can
438
+ slide = current_slide
439
+ if slide and !slide.first?
440
+ old_index = slide.drawing_index
441
+ slide.move_to_previous
442
+ Action.update_status(self)
443
+ @renderer.post_move_in_slide(old_index, slide.drawing_index)
444
+ else
445
+ move_to_previous_slide_if_can
446
+ end
447
+ end
448
+
449
+ def move_to_previous_slide_if_can
450
+ move_to_if_can(current_index - 1)
451
+ end
452
+
453
+ def move_to_first
454
+ move_to_if_can(0)
455
+ end
456
+
457
+ def move_to_last
458
+ move_to(slide_size - 1)
459
+ end
460
+
461
+ def index_mode?
462
+ @index_mode
463
+ end
464
+
465
+ def toggle_index_mode
466
+ @renderer.pre_toggle_index_mode
467
+ process do
468
+ if @index_mode
469
+ @index_mode = false
470
+ @renderer.index_mode_off
471
+ else
472
+ update_index_slides
473
+ @index_mode = true
474
+ @renderer.index_mode_on
475
+ end
476
+ modified
477
+ end
478
+ @renderer.post_toggle_index_mode
479
+ end
480
+
481
+ def update_index_slides
482
+ if @index_slides.empty?
483
+ @index_slides = Element::IndexSlide.make_index_slides(self)
484
+ end
485
+ end
486
+
487
+ def source_force_modified(force_modified)
488
+ prev = @source.force_modified
489
+ @source.force_modified = force_modified
490
+ yield @source
491
+ @source.force_modified = prev
492
+ end
493
+
494
+ def source
495
+ @source.read
496
+ end
497
+
498
+ def first_slide?
499
+ current_index.zero?
500
+ end
501
+
502
+ def last_slide?
503
+ slide_size.zero? or current_index == (slide_size - 1)
504
+ end
505
+
506
+ def have_previous_slide?
507
+ 0 < current_index
508
+ end
509
+
510
+ def have_previous?
511
+ have_previous_slide? or (current_slide and !current_slide.first?)
512
+ end
513
+
514
+ def have_next_slide?
515
+ slide_size - 1 > current_index
516
+ end
517
+
518
+ def have_next?
519
+ have_next_slide? or (current_slide and !current_slide.last?)
520
+ end
521
+
522
+ def cache_all_slides
523
+ process do
524
+ @renderer.cache_all_slides
525
+ end
526
+ end
527
+
528
+ def processing?
529
+ @processing
530
+ end
531
+
532
+ def start_auto_redraw_timer(interval)
533
+ stop_auto_redraw_timer
534
+ timer = GLib::Timeout.add(interval * 1000) do
535
+ if quitted?
536
+ false
537
+ else
538
+ activate("Redraw")
539
+ true
540
+ end
541
+ end
542
+ @auto_redraw_timer = timer
543
+ end
544
+
545
+ def stop_auto_redraw_timer
546
+ if @auto_redraw_timer
547
+ if GLib::Source.respond_to?(:remove)
548
+ GLib::Source.remove(@auto_redraw_timer)
549
+ else
550
+ Gtk.timeout_remove(@auto_redraw_timer)
551
+ end
552
+ @auto_redraw_timer = nil
553
+ end
554
+ end
555
+
556
+ def append_comment(comment)
557
+ comment = prepare_comment(comment)
558
+ comment = "\n= #{comment}" if /\A\s*\z/ !~ comment
559
+ prev_source = @comment_source.read
560
+ @comment_source.source = "#{prev_source}#{comment}"
561
+ @renderer.update_comment(@comment_source) do |error|
562
+ @comment_source.source = prev_source
563
+ if block_given?
564
+ yield(error)
565
+ else
566
+ logger.warn(error)
567
+ end
568
+ return false
569
+ end
570
+ true
571
+ end
572
+
573
+ def comments
574
+ comments = @comment_source.read.split(/^=\s*(?=[^=]+$)/)[2..-1]
575
+ comments.collect do |comment|
576
+ comment.strip
577
+ end
578
+ end
579
+
580
+ def title_slide
581
+ @slides.find{|x| x.is_a?(Element::TitleSlide)}
582
+ end
583
+
584
+ def activate(name, &block)
585
+ act = action(name)
586
+ if act and act.sensitive?
587
+ act.activate(&block)
588
+ true
589
+ else
590
+ false
591
+ end
592
+ end
593
+
594
+ def action(name)
595
+ act = @actions.get_action(name)
596
+ if act
597
+ act
598
+ else
599
+ logger.warn(_("Unknown action: %s") % name)
600
+ false
601
+ end
602
+ end
603
+
604
+ def with_index_mode(new_value)
605
+ current_index_mode = @index_mode
606
+ @index_mode = new_value
607
+ update_index_slides if @index_mode
608
+ yield
609
+ ensure
610
+ @index_mode = current_index_mode
611
+ end
612
+
613
+ def allotted_time
614
+ slide = title_slide
615
+ slide ? slide.allotted_time : nil
616
+ end
617
+
618
+ def start_timer(limit)
619
+ @limit_time = Time.now + limit
620
+ end
621
+
622
+ def rest_time
623
+ @limit_time ? @limit_time - Time.now : nil
624
+ end
625
+
626
+ def reset_timer
627
+ @limit_time = nil
628
+ end
629
+
630
+ def font_resolution
631
+ INTERNAL_DPI * @font_resolution_ratio
632
+ end
633
+
634
+ private
635
+ def _apply_theme(name, id, &block)
636
+ @theme_name = name if name
637
+ _theme_name = name || theme_name
638
+ if _theme_name and not @slides.empty?
639
+ @apply_theme_request_queue.push(id)
640
+ success = false
641
+ index_mode = @index_mode
642
+ begin
643
+ Action.update_status(self)
644
+ clear_theme
645
+ clear_index_slides
646
+ manager = Theme::Manager.new(self) do
647
+ if @apply_theme_request_queue.last != id
648
+ raise ApplyFinish
649
+ end
650
+ block.call if block
651
+ end
652
+ manager.apply(_theme_name)
653
+ @renderer.post_apply_theme
654
+ success = true
655
+ rescue ApplyFinish
656
+ ensure
657
+ @apply_theme_request_queue.delete_if {|x| x == id}
658
+ Action.update_status(self)
659
+ end
660
+ activate("ToggleIndexMode") if success and index_mode
661
+ end
662
+ end
663
+
664
+ def process
665
+ if @processing
666
+ @logger.info(_("Processing..."))
667
+ return
668
+ end
669
+ begin
670
+ @processing = true
671
+ Action.update_status(self)
672
+ yield
673
+ ensure
674
+ @processing = false
675
+ Action.update_status(self)
676
+ end
677
+ end
678
+
679
+ def modified
680
+ @last_modified = Time.now
681
+ end
682
+
683
+ def clear
684
+ reset_timer
685
+ stop_auto_redraw_timer
686
+ clear_slides
687
+ clear_index_slides
688
+ modified
689
+ end
690
+
691
+ def clear_slides
692
+ @current_index = 0
693
+ @slides = []
694
+ end
695
+
696
+ def clear_index_slides
697
+ activate("ToggleIndexMode") if @index_mode
698
+ @index_current_index = 0
699
+ @index_slides = []
700
+ end
701
+
702
+ def clear_theme
703
+ @font_resolution_ratio = 1
704
+ @slides.each do |slide|
705
+ slide.clear_theme
706
+ end
707
+ @renderer.clear_theme
708
+ modified
709
+ end
710
+
711
+ def keep_index
712
+ index_mode = @index_mode
713
+ index = @current_index
714
+ index_index = @index_current_index
715
+ yield
716
+ @current_index = index
717
+ @index_current_index = index_index
718
+ @index_mode = index_mode
719
+ end
720
+
721
+ def default_theme
722
+ ts = title_slide
723
+ ts and ts.theme
724
+ end
725
+
726
+ def set_current_index(new_index)
727
+ if @index_mode
728
+ @index_current_index = new_index
729
+ else
730
+ @current_index = new_index
731
+ end
732
+ end
733
+
734
+ def move_to(index)
735
+ old_index = current_index
736
+ set_current_index(index)
737
+ Action.update_status(self)
738
+ @renderer.post_move(old_index, current_index)
739
+ end
740
+
741
+ def init_comment(comment_source, comment_encoding)
742
+ args = [comment_encoding, logger, comment_source]
743
+ @comment_source = Source::Memory.new(*args)
744
+ if /^=\s*[^=]+$/ !~ @comment_source.read
745
+ @comment_source.source = default_comment_source
746
+ end
747
+ end
748
+
749
+ def default_comment_source
750
+ source = "= " + _("Comment") + "\n"
751
+ source << ": theme\n"
752
+ source << " comment\n"
753
+ source
754
+ end
755
+
756
+ def prepare_comment(comment)
757
+ comment.to_s.gsub(/\r?\n/, '')
758
+ end
759
+ end
760
+ end