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,118 @@
1
+ module Rabbit
2
+ module Gesture
3
+ class Processor
4
+ DEFAULT_THRESHOLD = 48
5
+ DEFAULT_SKEW_THRESHOLD_ANGLE = 90 / 4
6
+
7
+ attr_accessor :threshold, :skew_threshold_angle
8
+ attr_reader :motions
9
+
10
+ def initialize(threshold=nil, skew_threshold_angle=nil)
11
+ @threshold = threshold || DEFAULT_THRESHOLD
12
+ @skew_threshold_angle = skew_threshold_angle
13
+ @skew_threshold_angle ||= DEFAULT_SKEW_THRESHOLD_ANGLE
14
+ reset
15
+ end
16
+
17
+ def started?
18
+ @started
19
+ end
20
+
21
+ MOTIONS = %w(L R U D UL UR LL LR)
22
+
23
+ def available_motion?(motion)
24
+ MOTIONS.include?(motion)
25
+ end
26
+
27
+ def start(x, y)
28
+ @prev_x = @x = x
29
+ @prev_y = @y = y
30
+ @started = true
31
+ @motions = []
32
+ end
33
+
34
+ def update_position(x, y)
35
+ mx = x - @prev_x
36
+ my = y - @prev_y
37
+
38
+ motion = judge_motion(mx, my)
39
+ if motion
40
+ @prev_x = @x = x
41
+ @prev_y = @y = y
42
+ if @motions.last == motion
43
+ false
44
+ else
45
+ @motions << motion
46
+ true
47
+ end
48
+ else
49
+ false
50
+ end
51
+ end
52
+
53
+ def reset
54
+ @started = false
55
+ @x = @y = -1
56
+ @motions = []
57
+ end
58
+
59
+ def to_a
60
+ @motions
61
+ end
62
+
63
+ def position
64
+ [@x, @y]
65
+ end
66
+
67
+ private
68
+ def judge_motion(dx, dy)
69
+ dxa = dx.abs
70
+ dya = dy.abs
71
+ distance = Math.sqrt(dxa ** 2 + dya ** 2)
72
+ upper_theta = (45 + @skew_threshold_angle) * (Math::PI / 180.0)
73
+ lower_theta = (45 - @skew_threshold_angle) * (Math::PI / 180.0)
74
+ if distance > @threshold and
75
+ dya < Math.tan(upper_theta) * dxa and
76
+ dya > Math.tan(lower_theta) * dxa
77
+ judge_corner_motion(dx, dy)
78
+ elsif dxa > @threshold or dya > @threshold
79
+ judge_cross_motion(dx, dy)
80
+ else
81
+ nil
82
+ end
83
+ end
84
+
85
+ def judge_corner_motion(dx, dy)
86
+ if dx < 0
87
+ if dy < 0
88
+ "UL"
89
+ else
90
+ "LL"
91
+ end
92
+ else
93
+ if dy < 0
94
+ "UR"
95
+ else
96
+ "LR"
97
+ end
98
+ end
99
+ end
100
+
101
+ def judge_cross_motion(dx, dy)
102
+ if dx.abs > dy.abs
103
+ if dx < 0
104
+ "L"
105
+ else
106
+ "R"
107
+ end
108
+ else
109
+ if dy < 0
110
+ "U"
111
+ else
112
+ "D"
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,90 @@
1
+ begin
2
+ begin
3
+ require "gettext"
4
+ rescue LoadError
5
+ require "rubygems"
6
+ require "gettext"
7
+ end
8
+ module GetText
9
+ if ::GetText::TextDomainManager.respond_to?(:textdomain)
10
+ alias _gettext gettext
11
+ module_function :_gettext
12
+ def gettext(msgid)
13
+ return msgid
14
+ if @@__textdomain[callersrc]
15
+ _gettext(msgid)
16
+ else
17
+ msgid
18
+ end
19
+ end
20
+ end
21
+ end
22
+ rescue LoadError
23
+ module GetText
24
+
25
+ module_function
26
+ def bindtextdomain(*args)
27
+ end
28
+
29
+ def gettext(msgid)
30
+ msgid
31
+ end
32
+ end
33
+
34
+ module Locale
35
+ module_function
36
+ def get
37
+ ["LC_ALL", "LC_MESSAGES", "LANG"].each do |env|
38
+ ret = ENV[env]
39
+ break if ret
40
+ end
41
+ ret = "C" unless ret
42
+ ret
43
+ end
44
+ end
45
+ end
46
+
47
+ module Rabbit
48
+ module GetText
49
+
50
+ DOMAIN = "rabbit"
51
+ module_function
52
+ def bindtextdomain(path=nil, locale=nil, charset=nil)
53
+ if Rabbit::Config.const_defined?(:GETTEXT_PATH)
54
+ path ||= Rabbit::Config::GETTEXT_PATH
55
+ end
56
+ charset ||= "UTF-8"
57
+ ::GetText.bindtextdomain(DOMAIN, path, locale, charset)
58
+ if defined?(::GetText::TextDomainManager) and path
59
+ if ::GetText::TextDomainManager.respond_to?(:textdomain)
60
+ # workaround for Ruby-GetText 1.6.0 < 2.0.0
61
+ textdomain = ::GetText::TextDomainManager.textdomain(DOMAIN)
62
+ locale_paths = ["#{path}/%{locale}/LC_MESSAGES/%{name}.mo",
63
+ "#{path}/%{locale}/%{name}.mo"]
64
+ textdomain.locale_paths.concat(locale_paths)
65
+ locale ||= textdomain.current_locale || Locale.get
66
+ textdomain.set_locale(locale, true)
67
+ end
68
+ end
69
+ end
70
+
71
+ def _(msgid)
72
+ ::GetText.gettext(msgid)
73
+ end
74
+
75
+ def N_(msgid)
76
+ msgid
77
+ end
78
+
79
+ def locale=(locale)
80
+ ::GetText.locale = locale
81
+ end
82
+ end
83
+
84
+ module Locale
85
+ module_function
86
+ def get
87
+ ::Locale.get
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,57 @@
1
+ require 'gtk2'
2
+
3
+ require 'rabbit/renderer/color'
4
+
5
+ module Rabbit
6
+ module Graffiti
7
+ class ConfigDialog
8
+ attr_reader :color, :line_width
9
+ def initialize(color, line_width)
10
+ @original_color = @color = color
11
+ @original_line_width = @line_width = line_width
12
+ end
13
+
14
+ def run(&block)
15
+ @callback = block
16
+ init_dialog
17
+ if @dialog.run != Gtk::Dialog::RESPONSE_OK
18
+ @callback.call(@original_color, @original_line_width)
19
+ end
20
+ @dialog.destroy
21
+ end
22
+
23
+ private
24
+ def init_dialog
25
+ @dialog = Gtk::ColorSelectionDialog.new
26
+ colorsel = @dialog.colorsel
27
+ colorsel.has_opacity_control = true
28
+ colorsel.has_palette = true
29
+ r, g, b, a = @original_color.to_gdk_rgba
30
+ colorsel.set_current_color(Gdk::Color.new(r, g, b))
31
+ colorsel.set_current_alpha(a)
32
+ add_line_width_control
33
+ colorsel.signal_connect("color_changed") do
34
+ color = Renderer::Color.new_from_gdk_color(colorsel.current_color)
35
+ color.have_alpha = true
36
+ alpha = colorsel.current_alpha / Renderer::Color::GDK_COLOR_NORMALIZE
37
+ color.alpha = alpha
38
+ @callback.call(color, nil)
39
+ end
40
+ end
41
+
42
+ def add_line_width_control
43
+ spin = Gtk::SpinButton.new(1, 72, 1)
44
+ spin.value = @original_line_width
45
+ spin.signal_connect("value_changed") do
46
+ @callback.call(nil, spin.value)
47
+ end
48
+ label = Gtk::Label.new(_("Line width:"))
49
+ hbox = Gtk::HBox.new
50
+ hbox.pack_end(spin, false, false, 5)
51
+ hbox.pack_end(label, false, false, 5)
52
+ hbox.show_all
53
+ @dialog.vbox.pack_end(hbox, false, false, 5)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,116 @@
1
+ require 'gtk2'
2
+
3
+ require 'rabbit/renderer/engine'
4
+ require 'rabbit/graffiti/config-dialog'
5
+
6
+ module Rabbit
7
+ module Graffiti
8
+ class Processor
9
+ DEFAULT_COLOR = Renderer::Color.parse("black")
10
+ DEFAULT_LINE_WIDTH = 3
11
+
12
+ attr_accessor :color, :line_width
13
+ def initialize(default_config={})
14
+ @default_color = default_config["color"] || DEFAULT_COLOR
15
+ @default_line_width = default_config["line_width"] || DEFAULT_LINE_WIDTH
16
+ clear
17
+ clear_config
18
+ end
19
+
20
+ def have_graffiti?
21
+ not @segments.empty?
22
+ end
23
+
24
+ def can_undo?
25
+ not @undo_stack.empty?
26
+ end
27
+
28
+ def button_press(x, y, width, height)
29
+ @pressed = true
30
+ @undo_index = nil
31
+ @segments << [[x.to_f / width, y.to_f / height]]
32
+ end
33
+
34
+ def button_release(x, y, width, height)
35
+ @pressed = false
36
+ @undo_stack << [:push]
37
+ end
38
+
39
+ def button_motion(x, y, width, height)
40
+ if @pressed
41
+ @segments.last << [x.to_f / width, y.to_f / height]
42
+ end
43
+ end
44
+
45
+ def draw_last_segment(renderer)
46
+ points = @segments.last
47
+ if points.size >= 2
48
+ width = renderer.width
49
+ height = renderer.height
50
+ prev, current = points[-2..-1]
51
+ prev_x, prev_y = prev
52
+ x, y = current
53
+ renderer.draw_line(prev_x * width, prev_y * height,
54
+ x * width, y * height,
55
+ @color, {:line_width => @line_width})
56
+ end
57
+ end
58
+
59
+ def draw_all_segment(renderer)
60
+ return if @segments.empty?
61
+ args = [@color, {:line_width => @line_width, :opened => true}]
62
+ width = renderer.width
63
+ height = renderer.height
64
+ @segments.each do |points|
65
+ converted_points = points.collect do |x, y|
66
+ [x * width, y * height]
67
+ end
68
+ renderer.draw_lines(converted_points, *args)
69
+ end
70
+ end
71
+
72
+ def dragging?
73
+ @pressed
74
+ end
75
+
76
+ def clear
77
+ @pressed = false
78
+ @segments = []
79
+ @undo_stack = []
80
+ @undo_index = nil
81
+ end
82
+
83
+ def change_color(&block)
84
+ dialog = Graffiti::ConfigDialog.new(@color, @line_width)
85
+ dialog.run do |color, line_width|
86
+ @color = color if color
87
+ @line_width = line_width if line_width
88
+ block.call
89
+ end
90
+ end
91
+
92
+ def clear_config
93
+ @color = @default_color
94
+ @line_width = @default_line_width
95
+ end
96
+
97
+ def undo
98
+ @undo_index ||= @undo_stack.size - 1
99
+ command, segment = @undo_stack[@undo_index]
100
+ case command
101
+ when :push
102
+ @undo_stack << [:pop, @segments.pop]
103
+ when :pop
104
+ @segments << segment
105
+ @undo_stack << [:push]
106
+ end
107
+
108
+ if @undo_index > 0
109
+ @undo_index -= 1
110
+ else
111
+ @undo_index = nil
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,458 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+
4
+ begin
5
+ require 'rss/maker'
6
+ rescue LoadError
7
+ end
8
+
9
+ require 'rabbit/rabbit'
10
+ require 'rabbit/front'
11
+ require 'rabbit/utils'
12
+ require 'rabbit/keys'
13
+
14
+ module Rabbit
15
+ module HTML
16
+ class Generator
17
+ include ERB::Util
18
+ public :h
19
+
20
+ path = ["rabbit", "html", "template.erb"]
21
+ template_path = Utils.find_path_in_load_path(*path)
22
+ raise CantFindHTMLTemplate.new(File.join(*path)) if template_path.nil?
23
+ erb = File.open(template_path) {|f| ERB.new(f.read, nil, "-")}
24
+ erb.def_method(self, "to_html", template_path)
25
+
26
+ attr_accessor :pdf_filename
27
+ def initialize(canvas, base_name, image_type,
28
+ output_html, output_index_html, rss_base_uri)
29
+ @canvas = canvas
30
+ @suffix = "html"
31
+ @rss_info = []
32
+ @rss_filename = "index.rdf"
33
+ rss_base_uri = rss_base_uri.chomp('/') + '/' if rss_base_uri
34
+ @rss_base_uri = rss_base_uri
35
+ @base_name = base_name
36
+ @base_dir = File.dirname(@base_name)
37
+ @image_type = image_type
38
+ @output_html = output_html
39
+ @output_index_html = output_index_html
40
+ @pdf_filename = nil
41
+ FileUtils.mkdir_p(to_filename_encoding(@base_dir))
42
+ end
43
+
44
+ def save
45
+ save_environment do
46
+ @outputting_index = false
47
+ @canvas.each_slide_pixbuf do |slide, pixbuf, slide_number|
48
+ message = _("Creating a image for the %dth page") % slide_number
49
+ @canvas.logger.info(message)
50
+ save_slide(slide, pixbuf, slide_number)
51
+ true
52
+ end
53
+ if output_index_html?
54
+ @canvas.with_index_mode(true) do
55
+ @canvas.slides.each_with_index do |slide, slide_number|
56
+ save_index(slide, slide_number)
57
+ end
58
+ end
59
+ end
60
+ unless save_rss
61
+ @canvas.logger.warn(_("can't generate RSS"))
62
+ end
63
+ end
64
+ end
65
+
66
+ def save_pixbuf(pixbuf, optional=nil)
67
+ pixbuf.save(pixbuf_filename(@slide_number, optional),
68
+ normalized_image_type)
69
+ image_src(@slide_number, optional)
70
+ end
71
+
72
+ def number_of_places(num)
73
+ n = 1
74
+ target = num
75
+ while target >= 10
76
+ target /= 10
77
+ n += 1
78
+ end
79
+ n
80
+ end
81
+
82
+ def output_index_html?
83
+ @output_index_html
84
+ end
85
+
86
+ def output_html?
87
+ @output_html
88
+ end
89
+
90
+ def output_slide_html?
91
+ output_html? and !@index_mode
92
+ end
93
+
94
+ def index_href(slide_number)
95
+ with_outputting_index(true) do
96
+ href(slide_number)
97
+ end
98
+ end
99
+
100
+ def slide_href(slide_number)
101
+ with_outputting_index(false) do
102
+ href(slide_number)
103
+ end
104
+ end
105
+
106
+ def index_image_title(slide_number)
107
+ @canvas.with_index_mode(true) do
108
+ with_outputting_index(true) do
109
+ image_title(slide_number)
110
+ end
111
+ end
112
+ end
113
+
114
+ def slide_image_title(slide_number)
115
+ @canvas.with_index_mode(false) do
116
+ with_outputting_index(false) do
117
+ image_title(slide_number)
118
+ end
119
+ end
120
+ end
121
+
122
+ def outputting_index?
123
+ @outputting_index
124
+ end
125
+
126
+ def with_outputting_index(index)
127
+ _index = @outputting_index
128
+ @outputting_index = index
129
+ yield
130
+ ensure
131
+ @outputting_index = _index
132
+ end
133
+
134
+ private
135
+ def save_environment
136
+ @index_mode = @canvas.index_mode?
137
+ @slide_size = @canvas.slide_size
138
+ @index_slide_size = 0
139
+ if output_index_html?
140
+ @canvas.with_index_mode(true) do
141
+ @index_slide_size = @canvas.slide_size
142
+ end
143
+ end
144
+ yield
145
+ ensure
146
+ @index_mode = nil
147
+ @slide_size = nil
148
+ @index_slide_size = nil
149
+ end
150
+
151
+ def save_html(slide, slide_number)
152
+ @slide = slide
153
+ @slide_number = slide_number
154
+ yield
155
+ ensure
156
+ @slide_number = nil
157
+ @slide = nil
158
+ end
159
+
160
+ def save_slide(slide, pixbuf, slide_number)
161
+ save_html(slide, slide_number) do
162
+ with_outputting_index(false) do
163
+ save_pixbuf(pixbuf)
164
+ filename = slide_filename
165
+ output_html(filename) if output_html?
166
+ if rss_available?
167
+ @rss_info << [filename, slide_title(slide_number),
168
+ @slide.to_rd, @slide.to_html(self)]
169
+ end
170
+ end
171
+ end
172
+ end
173
+
174
+ def save_index(slide, slide_number)
175
+ save_html(slide, slide_number) do
176
+ with_outputting_index(true) do
177
+ @slide_index_html = @slide.to_html(self)
178
+ filename = slide_filename
179
+ output_html(filename) if output_index_html?
180
+ if rss_available?
181
+ @rss_info << [filename, slide_title(slide_number),
182
+ @slide.to_rd, @slide_index_html]
183
+ end
184
+ @slide_index_html = nil
185
+ end
186
+ end
187
+ end
188
+
189
+ def save_rss
190
+ return true unless rss_available?
191
+ if Object.const_defined?(:RSS)
192
+ rss = make_rss
193
+ name = File.join(@base_dir, @rss_filename)
194
+ File.open(to_filename_encoding(name), "w") do |f|
195
+ f.print(rss.to_s)
196
+ end
197
+ true
198
+ else
199
+ false
200
+ end
201
+ end
202
+
203
+ def filename_format
204
+ format = @base_name.dup
205
+ format << "-index" if outputting_index?
206
+ slide_size = outputting_index? ? @index_slide_size : @slide_size
207
+ format << "-%0#{number_of_places(slide_size)}d%s.%s"
208
+ end
209
+
210
+ def to_filename_encoding(utf8_filename)
211
+ if GLib.const_defined?(:Win32)
212
+ GLib::Win32.locale_filename_from_utf8(utf8_filename)
213
+ else
214
+ if Utils.windows?
215
+ GLib.locale_from_utf8(utf8_filename)
216
+ else
217
+ GLib.filename_from_utf8(utf8_filename)
218
+ end
219
+ end
220
+ end
221
+
222
+ def make_filename(slide_number, suffix, optional=nil, convert=true)
223
+ optional = "-#{optional}" if optional
224
+ name = filename_format % [slide_number, optional || '', suffix]
225
+ if convert
226
+ to_filename_encoding(name)
227
+ else
228
+ name
229
+ end
230
+ end
231
+
232
+ def slide_filename(slide_number=@slide_number)
233
+ if !outputting_index? and slide_number.zero?
234
+ File.join(to_filename_encoding(@base_dir), "index.#{@suffix}")
235
+ else
236
+ make_filename(slide_number, @suffix)
237
+ end
238
+ end
239
+
240
+ def image_filename(slide_number=@slide_number, optional=nil)
241
+ make_filename(slide_number, @image_type, optional)
242
+ end
243
+
244
+ def pixbuf_filename(slide_number=@slide_number, optional=nil)
245
+ make_filename(slide_number, @image_type, optional, !Utils.windows?)
246
+ end
247
+
248
+ def output_html(filename)
249
+ File.open(filename, "w") do |f|
250
+ f.print(to_html)
251
+ end
252
+ end
253
+
254
+ def normalized_image_type
255
+ case @image_type
256
+ when /jpg/i
257
+ "jpeg"
258
+ else
259
+ @image_type.downcase
260
+ end
261
+ end
262
+
263
+ def href(slide_number)
264
+ name = slide_filename(slide_number)
265
+ u(File.basename(name))
266
+ end
267
+
268
+ def a_link(slide_number, label, label_only)
269
+ _href = href(slide_number)
270
+ HTML.a_link("<a href=\"#{_href}\">", label, label_only)
271
+ end
272
+
273
+ def slide_content
274
+ if outputting_index?
275
+ @slide_index_html
276
+ else
277
+ "<div class=\"slide\">#{slide_image}</div>"
278
+ end
279
+ end
280
+
281
+ def image_title(slide_number=@slide_number)
282
+ title = h(slide_title(slide_number))
283
+ title << "(#{slide_number}/#{@canvas.slide_size - 1})"
284
+ title
285
+ end
286
+
287
+ def slide_image(slide_number=@slide_number)
288
+ src = image_src(slide_number)
289
+ img = "<img title=\"#{image_title(slide_number)}\" src=\"#{src}\" />"
290
+ if last_slide?(slide_number)
291
+ img
292
+ else
293
+ href = next_href(slide_number)
294
+ "<a href=\"#{href}\">\n#{img}\n</a>"
295
+ end
296
+ end
297
+
298
+ def first_slide?(slide_number=@slide_number)
299
+ slide_number.zero?
300
+ end
301
+
302
+ def last_slide?(slide_number=@slide_number)
303
+ @canvas.slide_size.zero? or slide_number == @canvas.slide_size - 1
304
+ end
305
+
306
+ def first_index(slide_number=@slide_number)
307
+ 0
308
+ end
309
+
310
+ def previous_index(slide_number=@slide_number)
311
+ slide_number - 1
312
+ end
313
+
314
+ def next_index(slide_number=@slide_number)
315
+ slide_number + 1
316
+ end
317
+
318
+ def last_index(slide_number=@slide_number)
319
+ @canvas.slide_size - 1
320
+ end
321
+
322
+ def first_link(slide_number=@slide_number)
323
+ a_link(first_index(slide_number),
324
+ h("<<"), first_slide?(slide_number))
325
+ end
326
+
327
+ def previous_link(slide_number=@slide_number)
328
+ a_link(previous_index(slide_number),
329
+ h("<"), first_slide?(slide_number))
330
+ end
331
+
332
+ def next_link(slide_number=@slide_number)
333
+ a_link(next_index(slide_number),
334
+ h(">"), last_slide?(slide_number))
335
+ end
336
+
337
+ def last_link(slide_number=@slide_number)
338
+ a_link(last_index(slide_number),
339
+ h(">>"), last_slide?(slide_number))
340
+ end
341
+
342
+ def rss_link
343
+ if rss_available?
344
+ attrs = {
345
+ "rel" => "alternate",
346
+ "type" => "application/rss+xml",
347
+ "title" => "RSS",
348
+ "href" => rss_uri,
349
+ }.collect do |key, value|
350
+ "#{h(key)}=\"#{h(value)}\""
351
+ end.join(" ")
352
+ "<link #{attrs} />"
353
+ else
354
+ ''
355
+ end
356
+ end
357
+
358
+ def first_href(slide_number=@slide_number)
359
+ href(first_index(slide_number))
360
+ end
361
+
362
+ def previous_href(slide_number=@slide_number)
363
+ href(previous_index(slide_number))
364
+ end
365
+
366
+ def next_href(slide_number=@slide_number)
367
+ href(next_index(slide_number))
368
+ end
369
+
370
+ def last_href(slide_number=@slide_number)
371
+ href(last_index(slide_number))
372
+ end
373
+
374
+ def toggle_mode_href
375
+ with_outputting_index(!outputting_index?) do
376
+ first_href
377
+ end
378
+ end
379
+
380
+ def navi
381
+ result = ''
382
+ args = [first_index]
383
+ if outputting_index?
384
+ args.concat([h(_("Slide")), !output_html?])
385
+ else
386
+ args.concat([h(_("Index")), !output_index_html?])
387
+ end
388
+ with_outputting_index(!outputting_index?) do
389
+ result << a_link(*args)
390
+ end
391
+ if @pdf_filename
392
+ result << HTML.a_link("<a href=\"#{h(@pdf_filename)}\">",
393
+ h(_("PDF")), false)
394
+ end
395
+ unless result.empty?
396
+ result = "<div class=\"navi\">\n#{result}\n</div>"
397
+ end
398
+ result
399
+ end
400
+
401
+ def page_navi(slide_number=@slide_number)
402
+ result = ''
403
+ result << '<div class="page-navi">'
404
+ result << first_link(slide_number)
405
+ result << previous_link(slide_number)
406
+ result << next_link(slide_number)
407
+ result << last_link(slide_number)
408
+ result << '</div>'
409
+ result
410
+ end
411
+
412
+ def image_src(slide_number=@slide_number, optional=nil)
413
+ u(File.basename(image_filename(slide_number, optional)))
414
+ end
415
+
416
+ def slide_title(slide_number=@slide_number)
417
+ Utils.unescape_title(@canvas.slide_title(slide_number))
418
+ end
419
+
420
+ def rss_available?
421
+ not @rss_base_uri.nil?
422
+ end
423
+
424
+ def rss_uri
425
+ "#{@rss_base_uri}#{@rss_filename}"
426
+ end
427
+
428
+ def make_rss
429
+ RSS::Maker.make('1.0') do |maker|
430
+ now = Time.now
431
+ title_slide_info = @rss_info.first
432
+ filename, title, text, html = title_slide_info
433
+ maker.channel.about = rss_uri
434
+ maker.channel.title = title
435
+ maker.channel.description = text
436
+ maker.channel.link = @rss_base_uri
437
+ maker.channel.date = now
438
+
439
+ @rss_info.each_with_index do |info, i|
440
+ filename, title, text, html = info
441
+ item = maker.items.new_item
442
+ item.link = "#{@rss_base_uri}#{File.basename(filename)}"
443
+ item.title = title
444
+ item.description = text
445
+ item.content_encoded = normalize_html_reference(html, @rss_base_uri)
446
+ item.date = now - i
447
+ end
448
+ end
449
+ end
450
+
451
+ def normalize_html_reference(html, base_uri)
452
+ html.gsub(/(href|src)=(["'])((?:(?!\2)[^:])+)\2/) do
453
+ "#{$1}=#{$2}#{base_uri}#{$3}#{$2}"
454
+ end
455
+ end
456
+ end
457
+ end
458
+ end