rabbit-qt 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COPYING +1 -0
- data/GPL +339 -0
- data/Gemfile +37 -0
- data/README.md +87 -0
- data/Rakefile +285 -0
- data/bin/rabbirc +86 -0
- data/bin/rabbit +22 -0
- data/bin/rabbit-command +97 -0
- data/bin/rabbit-slide +22 -0
- data/bin/rabbit-theme +22 -0
- data/data/account.kou.gpg +3 -0
- data/data/rabbit/image/clear-blue-images/clear-blue-headline-background.png +0 -0
- data/data/rabbit/image/clear-blue-images/clear-blue-icon.png +0 -0
- data/data/rabbit/image/clear-blue-images/clear-blue-images.rb +0 -0
- data/data/rabbit/image/clear-blue-images/property.rb +4 -0
- data/data/rabbit/image/cozmixng-images/cozmixchu.png +0 -0
- data/data/rabbit/image/cozmixng-images/cozmixng-images.rb +2 -0
- data/data/rabbit/image/cozmixng-images/powered-by-cozmixng.png +0 -0
- data/data/rabbit/image/cozmixng-images/property.rb +4 -0
- data/data/rabbit/image/dark-gradation-images/background-gradation.png +0 -0
- data/data/rabbit/image/dark-gradation-images/dark-gradation-images.rb +2 -0
- data/data/rabbit/image/dark-gradation-images/property.rb +4 -0
- data/data/rabbit/image/debian-images/bottom.png +0 -0
- data/data/rabbit/image/debian-images/debian-images.rb +2 -0
- data/data/rabbit/image/debian-images/debian-logo-pink.png +0 -0
- data/data/rabbit/image/debian-images/debian-logo.png +0 -0
- data/data/rabbit/image/debian-images/debian-whirl.png +0 -0
- data/data/rabbit/image/debian-images/item1.png +0 -0
- data/data/rabbit/image/debian-images/property.rb +4 -0
- data/data/rabbit/image/debian-images/top.png +0 -0
- data/data/rabbit/image/nari-images/chibi_nari.png +0 -0
- data/data/rabbit/image/nari-images/gc_kun.png +0 -0
- data/data/rabbit/image/nari-images/nari-goal-flag.png +0 -0
- data/data/rabbit/image/nari-images/nari-images.rb +2 -0
- data/data/rabbit/image/nari-images/nari-start-flag.png +0 -0
- data/data/rabbit/image/nari-images/property.rb +4 -0
- data/data/rabbit/image/rabbit-images/blue-item.png +0 -0
- data/data/rabbit/image/rabbit-images/close-quote-blue.png +0 -0
- data/data/rabbit/image/rabbit-images/close-quote-brown.png +0 -0
- data/data/rabbit/image/rabbit-images/close-quote-light-blue.png +0 -0
- data/data/rabbit/image/rabbit-images/goal-flag.png +0 -0
- data/data/rabbit/image/rabbit-images/green-item.png +0 -0
- data/data/rabbit/image/rabbit-images/kame.png +0 -0
- data/data/rabbit/image/rabbit-images/lavie-icon.png +0 -0
- data/data/rabbit/image/rabbit-images/lavie-with-logo.png +0 -0
- data/data/rabbit/image/rabbit-images/lavie.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-alice.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-butler-rabbit.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-horizontal-bar.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-kame-taro.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-tanu-kitaro.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-usa-taro.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-usagi.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-vertical-bar.png +0 -0
- data/data/rabbit/image/rabbit-images/mini-yukidaru-taro.png +0 -0
- data/data/rabbit/image/rabbit-images/open-quote-blue.png +0 -0
- data/data/rabbit/image/rabbit-images/open-quote-brown.png +0 -0
- data/data/rabbit/image/rabbit-images/open-quote-light-blue.png +0 -0
- data/data/rabbit/image/rabbit-images/property.rb +4 -0
- data/data/rabbit/image/rabbit-images/rabbit-banner-blue.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-banner-green.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-banner-heads.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-banner-pink.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-banner.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-banner2.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-images.rb +2 -0
- data/data/rabbit/image/rabbit-images/rabbit-pink-logo.png +0 -0
- data/data/rabbit/image/rabbit-images/rabbit-pink-logo2.png +0 -0
- data/data/rabbit/image/rabbit-images/red-item.png +0 -0
- data/data/rabbit/image/rabbit-images/red-item2.png +0 -0
- data/data/rabbit/image/rabbit-images/start-flag.png +0 -0
- data/data/rabbit/image/rabbit-images/tanu-kitaro.png +0 -0
- data/data/rabbit/image/rabbit-images/usa-taro.png +0 -0
- data/data/rabbit/image/rabbit-images/usagi.png +0 -0
- data/data/rabbit/image/rabbit-images/yukiusa.png +0 -0
- data/data/rabbit/image/ranguba-images/ranguba-bar.png +0 -0
- data/data/rabbit/image/ranguba-images/ranguba-bar.svg +153 -0
- data/data/rabbit/image/ranguba-images/ranguba-images.rb +0 -0
- data/data/rabbit/image/ranguba-images/ranguba-item-mark-mini.png +0 -0
- data/data/rabbit/image/ranguba-images/ranguba-item-mark.png +0 -0
- data/data/rabbit/image/ranguba-images/ranguba-item-mark.svg +400 -0
- data/data/rabbit/image/ranguba-images/ranguba-mark.png +0 -0
- data/data/rabbit/image/ranguba-images/ranguba-mark.svg +587 -0
- data/data/rabbit/image/ruby-images/property.rb +4 -0
- data/data/rabbit/image/ruby-images/ruby-images.rb +2 -0
- data/data/rabbit/image/ruby-images/ruby-pink-circle-icon.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-circle-logo.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-circle-small-icon.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-circle.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-polygon-icon.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-polygon-logo.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-polygon-small-icon.png +0 -0
- data/data/rabbit/image/ruby-images/ruby-pink-polygon.png +0 -0
- data/data/rabbit/image/rubykaigi2011-images/property.rb +4 -0
- data/data/rabbit/image/rubykaigi2011-images/rubykaigi2011-background-black.jpg +0 -0
- data/data/rabbit/image/rubykaigi2011-images/rubykaigi2011-background-white.jpg +0 -0
- data/data/rabbit/image/rubykaigi2011-images/rubykaigi2011-images.rb +2 -0
- data/doc/_config.yml +29 -0
- data/doc/_includes/en.menu.html +8 -0
- data/doc/_includes/ja.menu.html +8 -0
- data/doc/_layouts/en.html +48 -0
- data/doc/_layouts/ja.html +48 -0
- data/doc/_layouts/skeleton.html +85 -0
- data/doc/_plugins/converters/hiki.rb +27 -0
- data/doc/_plugins/converters/markdown.rb +15 -0
- data/doc/_plugins/converters/rd.rb +73 -0
- data/doc/_plugins/support_symlink.rb +11 -0
- data/doc/css/rabbit.css +368 -0
- data/doc/css/syntax.scss +67 -0
- data/doc/en/development.rd +81 -0
- data/doc/en/faq.rd +152 -0
- data/doc/en/hiki.hiki +326 -0
- data/doc/en/how-to-make/hiki.hiki +9 -0
- data/doc/en/how-to-make/index.rd +26 -0
- data/doc/en/how-to-make/markdown.md +107 -0
- data/doc/en/how-to-make/pdf.rd +7 -0
- data/doc/en/how-to-make/rd.rd +92 -0
- data/doc/en/how-to-make/theme.rd +135 -0
- data/doc/en/index.rd +268 -0
- data/doc/en/install/homebrew.rd +22 -0
- data/doc/en/install/index.rd +50 -0
- data/doc/en/install/macports.rd +77 -0
- data/doc/en/install/windows.rd +45 -0
- data/doc/en/news.rd +2788 -0
- data/doc/en/rd.rd +482 -0
- data/doc/en/sample/hiki/rabbit.hiki +388 -0
- data/doc/en/sample/index.rd +15 -0
- data/doc/en/sample/markdown/rabbit.md +387 -0
- data/doc/en/sample/rd/rabbit.rd +463 -0
- data/doc/en/slides.rd +13 -0
- data/doc/en/usage/platform/os-x.rd +13 -0
- data/doc/en/usage/rabbit-slide.rd +239 -0
- data/doc/en/usage/rabbit-theme.rd +5 -0
- data/doc/en/usage/rabbit.rd +376 -0
- data/doc/en/usage.rd +24 -0
- data/doc/en/users.rd +35 -0
- data/doc/favicon.ico +0 -0
- data/doc/favicon.png +0 -0
- data/doc/images/background-sample.svg +290 -0
- data/doc/images/background.png +0 -0
- data/doc/images/background.svg +131 -0
- data/doc/images/hare-and-tortoise.png +0 -0
- data/doc/images/hare-and-tortoise.svg +541 -0
- data/doc/images/lavie-icon.png +0 -0
- data/doc/images/lavie.png +0 -0
- data/doc/images/rabbit-slide-show-logo.png +0 -0
- data/doc/images/rabbit-slide-show-logo.svg +597 -0
- data/doc/index.html.en +58 -0
- data/doc/index.html.ja +58 -0
- data/doc/ja/about.rd +21 -0
- data/doc/ja/development.rd +78 -0
- data/doc/ja/faq.rd +202 -0
- data/doc/ja/hiki.hiki +320 -0
- data/doc/ja/how-to-make/hiki.hiki +9 -0
- data/doc/ja/how-to-make/index.rd +26 -0
- data/doc/ja/how-to-make/markdown.md +107 -0
- data/doc/ja/how-to-make/pdf.rd +8 -0
- data/doc/ja/how-to-make/rd.rd +130 -0
- data/doc/ja/how-to-make/theme.rd +142 -0
- data/doc/ja/index.rd +283 -0
- data/doc/ja/install/homebrew.rd +23 -0
- data/doc/ja/install/index.rd +53 -0
- data/doc/ja/install/macports.rd +100 -0
- data/doc/ja/install/windows.rd +46 -0
- data/doc/ja/news.rd +2773 -0
- data/doc/ja/rd.rd +490 -0
- data/doc/ja/sample/hiki/rabbit.hiki +404 -0
- data/doc/ja/sample/index.rd +15 -0
- data/doc/ja/sample/markdown/rabbit.md +382 -0
- data/doc/ja/sample/rd/rabbit.rd +471 -0
- data/doc/ja/slides.rd +29 -0
- data/doc/ja/usage/rabbit-slide.rd +220 -0
- data/doc/ja/usage/rabbit-theme.rd +152 -0
- data/doc/ja/usage/rabbit.rd +377 -0
- data/doc/ja/usage.rd +19 -0
- data/doc/ja/users.rd +196 -0
- data/doc/screenshot.en.rab +10 -0
- data/doc/screenshot.ja.rab +10 -0
- data/entities/README +10 -0
- data/entities/ent2rb.rb +65 -0
- data/entities/isoamsa.ent +167 -0
- data/entities/isoamsb.ent +143 -0
- data/entities/isoamsc.ent +43 -0
- data/entities/isoamsn.ent +114 -0
- data/entities/isoamso.ent +73 -0
- data/entities/isoamsr.ent +204 -0
- data/entities/isobox.ent +61 -0
- data/entities/isocyr1.ent +88 -0
- data/entities/isocyr2.ent +47 -0
- data/entities/isodia.ent +35 -0
- data/entities/isogrk3.ent +64 -0
- data/entities/isolat1.ent +83 -0
- data/entities/isolat2.ent +142 -0
- data/entities/isomfrk.ent +75 -0
- data/entities/isomopf.ent +49 -0
- data/entities/isomscr.ent +75 -0
- data/entities/isonum.ent +97 -0
- data/entities/isopub.ent +105 -0
- data/entities/isotech.ent +182 -0
- data/entities/mmlalias.ent +564 -0
- data/entities/mmlextra.ent +122 -0
- data/lib/rabbit/actions.rb +427 -0
- data/lib/rabbit/author-configuration.rb +90 -0
- data/lib/rabbit/canvas.rb +844 -0
- data/lib/rabbit/command/rabbit-slide.rb +898 -0
- data/lib/rabbit/command/rabbit-theme.rb +300 -0
- data/lib/rabbit/command/rabbit.rb +854 -0
- data/lib/rabbit/config.rb +40 -0
- data/lib/rabbit/console/roff.rb +84 -0
- data/lib/rabbit/console.rb +218 -0
- data/lib/rabbit/cursor-manager.rb +66 -0
- data/lib/rabbit/dependency-canvas.rb +33 -0
- data/lib/rabbit/element/base/draw-hook.rb +75 -0
- data/lib/rabbit/element/base.rb +614 -0
- data/lib/rabbit/element/block-element.rb +56 -0
- data/lib/rabbit/element/block.rb +70 -0
- data/lib/rabbit/element/container-element.rb +321 -0
- data/lib/rabbit/element/description-list.rb +75 -0
- data/lib/rabbit/element/enum-list.rb +53 -0
- data/lib/rabbit/element/footnote.rb +48 -0
- data/lib/rabbit/element/image-title-slide.rb +34 -0
- data/lib/rabbit/element/image.rb +292 -0
- data/lib/rabbit/element/index-slide.rb +206 -0
- data/lib/rabbit/element/item-list.rb +50 -0
- data/lib/rabbit/element/method-list.rb +66 -0
- data/lib/rabbit/element/poppler-page.rb +52 -0
- data/lib/rabbit/element/poppler-slide.rb +47 -0
- data/lib/rabbit/element/poppler-title-slide.rb +45 -0
- data/lib/rabbit/element/preformatted.rb +48 -0
- data/lib/rabbit/element/slide-element.rb +140 -0
- data/lib/rabbit/element/slide.rb +67 -0
- data/lib/rabbit/element/syntax-highlighting.rb +31 -0
- data/lib/rabbit/element/table.rb +121 -0
- data/lib/rabbit/element/tag.rb +60 -0
- data/lib/rabbit/element/text-block-element.rb +27 -0
- data/lib/rabbit/element/text-container-element.rb +176 -0
- data/lib/rabbit/element/text-element.rb +83 -0
- data/lib/rabbit/element/text-renderer.rb +378 -0
- data/lib/rabbit/element/text.rb +146 -0
- data/lib/rabbit/element/title-slide.rb +190 -0
- data/lib/rabbit/element/video.rb +265 -0
- data/lib/rabbit/element.rb +35 -0
- data/lib/rabbit/error.rb +239 -0
- data/lib/rabbit/filename.rb +39 -0
- data/lib/rabbit/formatter.rb +211 -0
- data/lib/rabbit/frame.rb +292 -0
- data/lib/rabbit/front.rb +278 -0
- data/lib/rabbit/gem-builder.rb +42 -0
- data/lib/rabbit/gem-finder.rb +57 -0
- data/lib/rabbit/gem-pusher.rb +89 -0
- data/lib/rabbit/gesture/handler.rb +253 -0
- data/lib/rabbit/gesture/processor.rb +118 -0
- data/lib/rabbit/gettext.rb +14 -0
- data/lib/rabbit/graffiti/config-dialog.rb +47 -0
- data/lib/rabbit/graffiti/processor.rb +132 -0
- data/lib/rabbit/gtk.rb +93 -0
- data/lib/rabbit/html/generator.rb +477 -0
- data/lib/rabbit/html/template.erb +109 -0
- data/lib/rabbit/icon.rb +31 -0
- data/lib/rabbit/image/base.rb +270 -0
- data/lib/rabbit/image/default.rb +42 -0
- data/lib/rabbit/image/dia.rb +74 -0
- data/lib/rabbit/image/eps.rb +129 -0
- data/lib/rabbit/image/gimp.rb +69 -0
- data/lib/rabbit/image/mermaid.rb +74 -0
- data/lib/rabbit/image/pdf.rb +94 -0
- data/lib/rabbit/image/svg.rb +79 -0
- data/lib/rabbit/image-data-loader.rb +51 -0
- data/lib/rabbit/image.rb +53 -0
- data/lib/rabbit/info-window.rb +327 -0
- data/lib/rabbit/key-handler.rb +227 -0
- data/lib/rabbit/keys.rb +209 -0
- data/lib/rabbit/logger/base.rb +147 -0
- data/lib/rabbit/logger/gui.rb +113 -0
- data/lib/rabbit/logger/stderr.rb +42 -0
- data/lib/rabbit/logger.rb +40 -0
- data/lib/rabbit/menu.rb +242 -0
- data/lib/rabbit/pango-markup.rb +44 -0
- data/lib/rabbit/parser/base.rb +31 -0
- data/lib/rabbit/parser/ext/aafigure.rb +51 -0
- data/lib/rabbit/parser/ext/blockdiag.rb +68 -0
- data/lib/rabbit/parser/ext/charty.rb +67 -0
- data/lib/rabbit/parser/ext/coderay.rb +85 -0
- data/lib/rabbit/parser/ext/enscript.rb +136 -0
- data/lib/rabbit/parser/ext/entity.rb +4164 -0
- data/lib/rabbit/parser/ext/escape.rb +18 -0
- data/lib/rabbit/parser/ext/image.rb +157 -0
- data/lib/rabbit/parser/ext/inline.rb +45 -0
- data/lib/rabbit/parser/ext/rouge.rb +129 -0
- data/lib/rabbit/parser/ext/tex.rb +95 -0
- data/lib/rabbit/parser/ext/video.rb +37 -0
- data/lib/rabbit/parser/image.rb +62 -0
- data/lib/rabbit/parser/markdown/converter.rb +440 -0
- data/lib/rabbit/parser/markdown.rb +144 -0
- data/lib/rabbit/parser/pause-support.rb +33 -0
- data/lib/rabbit/parser/pdf.rb +56 -0
- data/lib/rabbit/parser/rd/ext/base.rb +95 -0
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +190 -0
- data/lib/rabbit/parser/rd/ext/character-reference.rb +75 -0
- data/lib/rabbit/parser/rd/ext/image.rb +46 -0
- data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +118 -0
- data/lib/rabbit/parser/rd/ext/refer.rb +50 -0
- data/lib/rabbit/parser/rd/ext/video.rb +32 -0
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +458 -0
- data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +105 -0
- data/lib/rabbit/parser/rd/visitor.rb +72 -0
- data/lib/rabbit/parser/rd.rb +92 -0
- data/lib/rabbit/parser/wiki/output.rb +545 -0
- data/lib/rabbit/parser/wiki.rb +61 -0
- data/lib/rabbit/parser.rb +73 -0
- data/lib/rabbit/password-reader.rb +34 -0
- data/lib/rabbit/path-manipulatable.rb +37 -0
- data/lib/rabbit/progress.rb +97 -0
- data/lib/rabbit/properties.rb +154 -0
- data/lib/rabbit/qt.rb +222 -0
- data/lib/rabbit/rabbit.rb +50 -0
- data/lib/rabbit/readme-parser.rb +112 -0
- data/lib/rabbit/relative-size.rb +28 -0
- data/lib/rabbit/renderer/base.rb +412 -0
- data/lib/rabbit/renderer/color.rb +130 -0
- data/lib/rabbit/renderer/display/base.rb +223 -0
- data/lib/rabbit/renderer/display/button-handler.rb +229 -0
- data/lib/rabbit/renderer/display/cursor.rb +49 -0
- data/lib/rabbit/renderer/display/drawing-area-base.rb +381 -0
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +219 -0
- data/lib/rabbit/renderer/display/drawing-area-view-only.rb +57 -0
- data/lib/rabbit/renderer/display/drawing-area.rb +29 -0
- data/lib/rabbit/renderer/display/gesture.rb +111 -0
- data/lib/rabbit/renderer/display/graffiti.rb +127 -0
- data/lib/rabbit/renderer/display/hook-handler.rb +64 -0
- data/lib/rabbit/renderer/display/info.rb +75 -0
- data/lib/rabbit/renderer/display/magnifier.rb +137 -0
- data/lib/rabbit/renderer/display/mask.rb +83 -0
- data/lib/rabbit/renderer/display/menu.rb +54 -0
- data/lib/rabbit/renderer/display/motion-handler.rb +34 -0
- data/lib/rabbit/renderer/display/progress.rb +85 -0
- data/lib/rabbit/renderer/display/qt-drawing-area-base.rb +336 -0
- data/lib/rabbit/renderer/display/qt-drawing-area-primitive.rb +189 -0
- data/lib/rabbit/renderer/display/qt-drawing-area-view-only.rb +53 -0
- data/lib/rabbit/renderer/display/qt-drawing-area.rb +29 -0
- data/lib/rabbit/renderer/display/qt-drawing-widget.rb +85 -0
- data/lib/rabbit/renderer/display/scroll-handler.rb +58 -0
- data/lib/rabbit/renderer/display/search.rb +114 -0
- data/lib/rabbit/renderer/display/spotlight.rb +122 -0
- data/lib/rabbit/renderer/display.rb +17 -0
- data/lib/rabbit/renderer/engine/cairo.rb +481 -0
- data/lib/rabbit/renderer/engine/qt_painter.rb +397 -0
- data/lib/rabbit/renderer/engine.rb +18 -0
- data/lib/rabbit/renderer/kernel.rb +233 -0
- data/lib/rabbit/renderer/offscreen.rb +117 -0
- data/lib/rabbit/renderer/print-layout.rb +150 -0
- data/lib/rabbit/renderer/printer.rb +223 -0
- data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
- data/lib/rabbit/renderer/scene-node-widget.rb +40 -0
- data/lib/rabbit/renderer/scene.rb +538 -0
- data/lib/rabbit/renderer.rb +20 -0
- data/lib/rabbit/search-window.rb +90 -0
- data/lib/rabbit/searcher.rb +40 -0
- data/lib/rabbit/size.rb +100 -0
- data/lib/rabbit/slide-configuration.rb +211 -0
- data/lib/rabbit/slide.rb +40 -0
- data/lib/rabbit/soap/base.rb +17 -0
- data/lib/rabbit/soap/driver.rb +61 -0
- data/lib/rabbit/soap/server.rb +49 -0
- data/lib/rabbit/source/argf.rb +45 -0
- data/lib/rabbit/source/base.rb +197 -0
- data/lib/rabbit/source/file.rb +85 -0
- data/lib/rabbit/source/memory.rb +61 -0
- data/lib/rabbit/source/uri.rb +93 -0
- data/lib/rabbit/source-generator/hiki.rb +58 -0
- data/lib/rabbit/source-generator/markdown.rb +56 -0
- data/lib/rabbit/source-generator/rd.rb +60 -0
- data/lib/rabbit/source-generator.rb +39 -0
- data/lib/rabbit/source.rb +30 -0
- data/lib/rabbit/task/slide.rb +221 -0
- data/lib/rabbit/task/theme.rb +202 -0
- data/lib/rabbit/task.rb +18 -0
- data/lib/rabbit/theme/applier.rb +690 -0
- data/lib/rabbit/theme/auto-slide/auto-slide.rb +6 -0
- data/lib/rabbit/theme/auto-slide/property.rb +4 -0
- data/lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb +125 -0
- data/lib/rabbit/theme/base/base.rb +85 -0
- data/lib/rabbit/theme/base/property.rb +4 -0
- data/lib/rabbit/theme/blue-bar/blue-bar.rb +80 -0
- data/lib/rabbit/theme/blue-bar/property.rb +3 -0
- data/lib/rabbit/theme/blue-circle/blue-circle.rb +14 -0
- data/lib/rabbit/theme/blue-circle/property.rb +3 -0
- data/lib/rabbit/theme/body-background-image/body-background-image.rb +8 -0
- data/lib/rabbit/theme/centering-rabbit/centering-rabbit.rb +5 -0
- data/lib/rabbit/theme/centering-rabbit/property.rb +3 -0
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +101 -0
- data/lib/rabbit/theme/clear-blue/property.rb +3 -0
- data/lib/rabbit/theme/clock/clock.rb +37 -0
- data/lib/rabbit/theme/clock/property.rb +21 -0
- data/lib/rabbit/theme/color-circle/color-circle.rb +60 -0
- data/lib/rabbit/theme/color-circle/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +28 -0
- data/lib/rabbit/theme/color-circle-block-quote/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-common/color-circle-common.rb +48 -0
- data/lib/rabbit/theme/color-circle-common/property.rb +3 -0
- data/lib/rabbit/theme/color-circle-description/color-circle-description.rb +9 -0
- data/lib/rabbit/theme/color-circle-description/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-foot-text/color-circle-foot-text.rb +14 -0
- data/lib/rabbit/theme/color-circle-foot-text/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-item-mark/color-circle-item-mark.rb +77 -0
- data/lib/rabbit/theme/color-circle-item-mark/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-method-list/color-circle-method-list.rb +8 -0
- data/lib/rabbit/theme/color-circle-method-list/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-preformatted/color-circle-preformatted.rb +5 -0
- data/lib/rabbit/theme/color-circle-preformatted/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-slide/color-circle-slide.rb +13 -0
- data/lib/rabbit/theme/color-circle-slide/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-text/color-circle-text.rb +9 -0
- data/lib/rabbit/theme/color-circle-text/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-title-slide/color-circle-title-slide.rb +27 -0
- data/lib/rabbit/theme/color-circle-title-slide/property.rb +4 -0
- data/lib/rabbit/theme/color-circle-title-text/color-circle-title-text.rb +7 -0
- data/lib/rabbit/theme/color-circle-title-text/property.rb +4 -0
- data/lib/rabbit/theme/cozmixng/cozmixng.rb +44 -0
- data/lib/rabbit/theme/cozmixng/property.rb +3 -0
- data/lib/rabbit/theme/cozmixng-powered-by/cozmixng-powered-by.rb +6 -0
- data/lib/rabbit/theme/cozmixng-powered-by/property.rb +7 -0
- data/lib/rabbit/theme/dark-gradation/dark-gradation.rb +187 -0
- data/lib/rabbit/theme/dark-gradation/property.rb +3 -0
- data/lib/rabbit/theme/day-white/day-white.rb +8 -0
- data/lib/rabbit/theme/day-white/property.rb +3 -0
- data/lib/rabbit/theme/debian/debian.rb +232 -0
- data/lib/rabbit/theme/debian/property.rb +3 -0
- data/lib/rabbit/theme/default/default.rb +42 -0
- data/lib/rabbit/theme/default/property.rb +3 -0
- data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +219 -0
- data/lib/rabbit/theme/default-block-quote/property.rb +3 -0
- data/lib/rabbit/theme/default-comment/default-comment.rb +5 -0
- data/lib/rabbit/theme/default-comment/property.rb +4 -0
- data/lib/rabbit/theme/default-description/default-description.rb +64 -0
- data/lib/rabbit/theme/default-description/property.rb +5 -0
- data/lib/rabbit/theme/default-foot-text/default-foot-text.rb +52 -0
- data/lib/rabbit/theme/default-foot-text/property.rb +3 -0
- data/lib/rabbit/theme/default-icon/default-icon.rb +4 -0
- data/lib/rabbit/theme/default-icon/property.rb +5 -0
- data/lib/rabbit/theme/default-item-mark/default-item-mark.rb +104 -0
- data/lib/rabbit/theme/default-item-mark/property.rb +4 -0
- data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +132 -0
- data/lib/rabbit/theme/default-item-mark-setup/property.rb +3 -0
- data/lib/rabbit/theme/default-method-list/default-method-list.rb +6 -0
- data/lib/rabbit/theme/default-method-list/property.rb +3 -0
- data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +56 -0
- data/lib/rabbit/theme/default-preformatted/property.rb +3 -0
- data/lib/rabbit/theme/default-slide/default-slide.rb +62 -0
- data/lib/rabbit/theme/default-slide/property.rb +3 -0
- data/lib/rabbit/theme/default-text/default-text.rb +186 -0
- data/lib/rabbit/theme/default-text/property.rb +3 -0
- data/lib/rabbit/theme/default-title-slide/default-title-slide.rb +13 -0
- data/lib/rabbit/theme/default-title-slide/property.rb +6 -0
- data/lib/rabbit/theme/default-title-text/default-title-text.rb +53 -0
- data/lib/rabbit/theme/default-title-text/property.rb +3 -0
- data/lib/rabbit/theme/document.erb +35 -0
- data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +87 -0
- data/lib/rabbit/theme/edge-info-toolkit/property.rb +3 -0
- data/lib/rabbit/theme/emphasize-keyword/emphasize-keyword.rb +16 -0
- data/lib/rabbit/theme/emphasize-keyword/property.rb +4 -0
- data/lib/rabbit/theme/enishi-green/enishi-green.rb +61 -0
- data/lib/rabbit/theme/enishi-green/property.rb +3 -0
- data/lib/rabbit/theme/entry.rb +202 -0
- data/lib/rabbit/theme/footer-comment/footer-comment.rb +74 -0
- data/lib/rabbit/theme/footer-comment/property.rb +3 -0
- data/lib/rabbit/theme/footer-logo/footer-logo.rb +30 -0
- data/lib/rabbit/theme/footer-logo/property.rb +26 -0
- data/lib/rabbit/theme/green-circle/green-circle.rb +14 -0
- data/lib/rabbit/theme/green-circle/property.rb +3 -0
- data/lib/rabbit/theme/headline-logo/headline-logo.rb +24 -0
- data/lib/rabbit/theme/headline-logo/property.rb +10 -0
- data/lib/rabbit/theme/icon/icon.rb +3 -0
- data/lib/rabbit/theme/icon/property.rb +24 -0
- data/lib/rabbit/theme/image/image.rb +80 -0
- data/lib/rabbit/theme/image/property.rb +3 -0
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +134 -0
- data/lib/rabbit/theme/image-slide-number/property.rb +64 -0
- data/lib/rabbit/theme/image-timer/image-timer.rb +119 -0
- data/lib/rabbit/theme/image-timer/property.rb +46 -0
- data/lib/rabbit/theme/image-viewer/image-viewer.rb +21 -0
- data/lib/rabbit/theme/image-viewer/property.rb +3 -0
- data/lib/rabbit/theme/lightning-clear-blue/lightning-clear-blue.rb +13 -0
- data/lib/rabbit/theme/lightning-clear-blue/property.rb +3 -0
- data/lib/rabbit/theme/lightning-monochrome/lightning-monochrome.rb +15 -0
- data/lib/rabbit/theme/lightning-monochrome/property.rb +3 -0
- data/lib/rabbit/theme/lightning-rabbit/lightning-rabbit.rb +13 -0
- data/lib/rabbit/theme/lightning-rabbit/property.rb +3 -0
- data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +60 -0
- data/lib/rabbit/theme/lightning-simple/property.rb +3 -0
- data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +67 -0
- data/lib/rabbit/theme/lightning-talk/property.rb +3 -0
- data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +179 -0
- data/lib/rabbit/theme/lightning-talk-toolkit/property.rb +3 -0
- data/lib/rabbit/theme/manager.rb +45 -0
- data/lib/rabbit/theme/mirror-effect/mirror-effect.rb +27 -0
- data/lib/rabbit/theme/mirror-effect/property.rb +3 -0
- data/lib/rabbit/theme/nari/nari.rb +215 -0
- data/lib/rabbit/theme/nari/property.rb +3 -0
- data/lib/rabbit/theme/newline-in-slides/newline-in-slides.rb +29 -0
- data/lib/rabbit/theme/newline-in-slides/property.rb +4 -0
- data/lib/rabbit/theme/newline-in-title/newline-in-title.rb +7 -0
- data/lib/rabbit/theme/newline-in-title/property.rb +4 -0
- data/lib/rabbit/theme/night-black/night-black.rb +19 -0
- data/lib/rabbit/theme/night-black/property.rb +3 -0
- data/lib/rabbit/theme/pdf/pdf.rb +24 -0
- data/lib/rabbit/theme/pdf/property.rb +3 -0
- data/lib/rabbit/theme/per-slide-background-color/per-slide-background-color.rb +18 -0
- data/lib/rabbit/theme/per-slide-background-color/property.rb +16 -0
- data/lib/rabbit/theme/per-slide-background-image/per-slide-background-image.rb +11 -0
- data/lib/rabbit/theme/per-slide-background-image/property.rb +16 -0
- data/lib/rabbit/theme/powered-by/powered-by.rb +67 -0
- data/lib/rabbit/theme/powered-by/property.rb +24 -0
- data/lib/rabbit/theme/rabbit/property.rb +3 -0
- data/lib/rabbit/theme/rabbit/rabbit.rb +57 -0
- data/lib/rabbit/theme/rabbit-block-quote/property.rb +4 -0
- data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +18 -0
- data/lib/rabbit/theme/rabbit-headline-logo/property.rb +5 -0
- data/lib/rabbit/theme/rabbit-headline-logo/rabbit-headline-logo.rb +4 -0
- data/lib/rabbit/theme/rabbit-icon/property.rb +5 -0
- data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +4 -0
- data/lib/rabbit/theme/rabbit-item-mark/property.rb +5 -0
- data/lib/rabbit/theme/rabbit-item-mark/rabbit-item-mark.rb +53 -0
- data/lib/rabbit/theme/rabbit-powered-by/property.rb +7 -0
- data/lib/rabbit/theme/rabbit-powered-by/rabbit-powered-by.rb +5 -0
- data/lib/rabbit/theme/rabbit-title-logo/property.rb +5 -0
- data/lib/rabbit/theme/rabbit-title-logo/rabbit-title-logo.rb +4 -0
- data/lib/rabbit/theme/ranguba/property.rb +3 -0
- data/lib/rabbit/theme/ranguba/ranguba.rb +218 -0
- data/lib/rabbit/theme/red-frame/property.rb +3 -0
- data/lib/rabbit/theme/red-frame/red-frame.rb +100 -0
- data/lib/rabbit/theme/rotate-zoom-effect/property.rb +4 -0
- data/lib/rabbit/theme/rotate-zoom-effect/rotate-zoom-effect.rb +51 -0
- data/lib/rabbit/theme/ruby-gnome2/property.rb +3 -0
- data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +65 -0
- data/lib/rabbit/theme/ruby-gnome2-description/property.rb +7 -0
- data/lib/rabbit/theme/ruby-gnome2-description/ruby-gnome2-description.rb +7 -0
- data/lib/rabbit/theme/ruby-gnome2-foot-text/property.rb +5 -0
- data/lib/rabbit/theme/ruby-gnome2-foot-text/ruby-gnome2-foot-text.rb +3 -0
- data/lib/rabbit/theme/ruby-gnome2-headline/property.rb +7 -0
- data/lib/rabbit/theme/ruby-gnome2-headline/ruby-gnome2-headline.rb +47 -0
- data/lib/rabbit/theme/ruby-gnome2-icon/property.rb +5 -0
- data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +4 -0
- data/lib/rabbit/theme/ruby-gnome2-item-mark/property.rb +10 -0
- data/lib/rabbit/theme/ruby-gnome2-item-mark/ruby-gnome2-item-mark.rb +65 -0
- data/lib/rabbit/theme/ruby-gnome2-preformatted/property.rb +4 -0
- data/lib/rabbit/theme/ruby-gnome2-preformatted/ruby-gnome2-preformatted.rb +8 -0
- data/lib/rabbit/theme/ruby-gnome2-slide/property.rb +4 -0
- data/lib/rabbit/theme/ruby-gnome2-slide/ruby-gnome2-slide.rb +40 -0
- data/lib/rabbit/theme/rubykaigi2011/property.rb +3 -0
- data/lib/rabbit/theme/rubykaigi2011/rubykaigi2011.rb +48 -0
- data/lib/rabbit/theme/scroll-effect/property.rb +3 -0
- data/lib/rabbit/theme/scroll-effect/scroll-effect.rb +32 -0
- data/lib/rabbit/theme/searcher.rb +179 -0
- data/lib/rabbit/theme/show-frame/property.rb +16 -0
- data/lib/rabbit/theme/show-frame/show-frame.rb +17 -0
- data/lib/rabbit/theme/simple-item-mark/property.rb +5 -0
- data/lib/rabbit/theme/simple-item-mark/simple-item-mark.rb +112 -0
- data/lib/rabbit/theme/slide-background/property.rb +6 -0
- data/lib/rabbit/theme/slide-background/slide-background.rb +3 -0
- data/lib/rabbit/theme/slide-background-image/property.rb +10 -0
- data/lib/rabbit/theme/slide-background-image/slide-background-image.rb +25 -0
- data/lib/rabbit/theme/slide-footer-info/property.rb +43 -0
- data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +51 -0
- data/lib/rabbit/theme/slide-header-info/property.rb +43 -0
- data/lib/rabbit/theme/slide-header-info/slide-header-info.rb +42 -0
- data/lib/rabbit/theme/slide-logo/property.rb +26 -0
- data/lib/rabbit/theme/slide-logo/slide-logo.rb +58 -0
- data/lib/rabbit/theme/slide-number/property.rb +21 -0
- data/lib/rabbit/theme/slide-number/slide-number.rb +34 -0
- data/lib/rabbit/theme/slide-show/property.rb +4 -0
- data/lib/rabbit/theme/slide-show/slide-show.rb +31 -0
- data/lib/rabbit/theme/stream-comment/property.rb +3 -0
- data/lib/rabbit/theme/stream-comment/stream-comment.rb +66 -0
- data/lib/rabbit/theme/syntax-highlighting/property.rb +4 -0
- data/lib/rabbit/theme/syntax-highlighting/syntax-highlighting.rb +177 -0
- data/lib/rabbit/theme/table/property.rb +3 -0
- data/lib/rabbit/theme/table/table.rb +173 -0
- data/lib/rabbit/theme/tag/property.rb +4 -0
- data/lib/rabbit/theme/tag/tag.rb +85 -0
- data/lib/rabbit/theme/timer/property.rb +3 -0
- data/lib/rabbit/theme/timer/timer.rb +63 -0
- data/lib/rabbit/theme/title-background-color/property.rb +10 -0
- data/lib/rabbit/theme/title-background-color/title-background-color.rb +17 -0
- data/lib/rabbit/theme/title-background-image/property.rb +11 -0
- data/lib/rabbit/theme/title-background-image/title-background-image.rb +28 -0
- data/lib/rabbit/theme/title-logo/property.rb +23 -0
- data/lib/rabbit/theme/title-logo/title-logo.rb +38 -0
- data/lib/rabbit/theme/title-on-image-toolkit/property.rb +3 -0
- data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +140 -0
- data/lib/rabbit/theme/title-shadow/property.rb +11 -0
- data/lib/rabbit/theme/title-shadow/title-shadow.rb +7 -0
- data/lib/rabbit/theme/title-slide-background-image/property.rb +10 -0
- data/lib/rabbit/theme/title-slide-background-image/title-slide-background-image.rb +25 -0
- data/lib/rabbit/theme/video/property.rb +3 -0
- data/lib/rabbit/theme/video/video.rb +5 -0
- data/lib/rabbit/theme-configuration.rb +101 -0
- data/lib/rabbit/utils.rb +435 -0
- data/lib/rabbit/version.rb +19 -0
- data/lib/rabbit/xmlrpc/base.rb +6 -0
- data/lib/rabbit/xmlrpc/client.rb +33 -0
- data/lib/rabbit/xmlrpc/server.rb +39 -0
- data/lib/rabbit/yaml-loader.rb +39 -0
- data/misc/emacs/README.ja +177 -0
- data/misc/emacs/rabbit-mode.el +378 -0
- data/misc/github-post-receiver/config.ru +170 -0
- data/misc/github-post-receiver/config.yaml.sample +3 -0
- data/misc/github-post-receiver/tmp/restart.txt +0 -0
- data/misc/make-image-sample.rb +95 -0
- data/misc/make-print-sample.rb +95 -0
- data/misc/update-rd.rb +85 -0
- data/misc/xyzzy/rabbit-mode.l +775 -0
- data/po/en/rabbit.po +2110 -0
- data/po/fr/rabbit.po +2109 -0
- data/po/ja/rabbit.po +2197 -0
- data/rabbit-qt.gemspec +80 -0
- data/sample/block-quote.rab +13 -0
- data/sample/blue-circle.rd +37 -0
- data/sample/can_rabbit.rd +425 -0
- data/sample/cozmixng.rd +85 -0
- data/sample/cozmixng_is_field.png +0 -0
- data/sample/cozmixng_is_field.svg +430 -0
- data/sample/description-list.rab +17 -0
- data/sample/enishi-green.rab +14 -0
- data/sample/equation.eps +571 -0
- data/sample/gl-sample.rd +8 -0
- data/sample/html_and_wiki.png +0 -0
- data/sample/html_and_wiki.svg +275 -0
- data/sample/image-reflection.rab +12 -0
- data/sample/info-window.png +0 -0
- data/sample/join_cozmixng.png +0 -0
- data/sample/join_cozmixng.svg +293 -0
- data/sample/kof2005/gesture-flow.svg +329 -0
- data/sample/kof2005/gesture.rb +473 -0
- data/sample/kof2005/gtk+-widget.svg +128 -0
- data/sample/kof2005/high-light-architecture.svg +203 -0
- data/sample/kof2005/high-light-expose.rb +120 -0
- data/sample/kof2005/high-light-expose.svg +153 -0
- data/sample/kof2005/high-light-widget.rb +147 -0
- data/sample/kof2005/high-light-widget.svg +172 -0
- data/sample/kof2005/high-light.svg +132 -0
- data/sample/kof2005/mask-screenshot.png +0 -0
- data/sample/kof2005/mask.rb +105 -0
- data/sample/kof2005/mask.svg +120 -0
- data/sample/kof2005/ruby-gnome2-logo.png +0 -0
- data/sample/kof2005/ruby-pink-circle-logo.png +0 -0
- data/sample/kof2005/skip-up-with-ruby-gnome2.rd +450 -0
- data/sample/kof2005/widget.svg +202 -0
- data/sample/lavie.png +0 -0
- data/sample/lightning-talk.rd +50 -0
- data/sample/lldn/input.svg +269 -0
- data/sample/lldn/interface.svg +410 -0
- data/sample/lldn/kame.png +0 -0
- data/sample/lldn/lavie.png +0 -0
- data/sample/lldn/lldn.rd +212 -0
- data/sample/lldn/output.svg +284 -0
- data/sample/lldn/rabbit-rwiki.svg +353 -0
- data/sample/lldn/rabbit_banner.png +0 -0
- data/sample/lldn/rabbit_banner2.png +0 -0
- data/sample/m17n.rd +138 -0
- data/sample/mermaid.rab +16 -0
- data/sample/note.rab +31 -0
- data/sample/ppt/hare-and-tortoise-end.png +0 -0
- data/sample/ppt/hare-and-tortoise-middle.png +0 -0
- data/sample/ppt/hare-and-tortoise-start.png +0 -0
- data/sample/ppt/ppt.rd +207 -0
- data/sample/ppt/rabbit-with-ruby.png +0 -0
- data/sample/pre.rd +123 -0
- data/sample/rabbit/theme/festival/festival.rb +6 -0
- data/sample/rabbit/theme/gl-sample/gl-sample.rb +29 -0
- data/sample/rabbit/theme/image-with-frame/image-with-frame.rb +2 -0
- data/sample/rabbit/theme/image-with-no-shadow-frame/image-with-no-shadow-frame.rb +3 -0
- data/sample/rabbit/theme/image-without-frame/image-without-frame.rb +2 -0
- data/sample/rabbit/theme/kof2005/kof2005.rb +9 -0
- data/sample/rabbit/theme/kof2005/property.rb +3 -0
- data/sample/rabbit/theme/lightning-talk-with-contact/lightning-talk-with-contact.rb +6 -0
- data/sample/rabbit/theme/lldn/lldn.rb +20 -0
- data/sample/rabbit/theme/pdf/pdf.rb +16 -0
- data/sample/rabbit/theme/pdf/property.rb +4 -0
- data/sample/rabbit/theme/ppt/ppt.rb +5 -0
- data/sample/rabbit/theme/rabbit-and-tortoise/rabbit-and-tortoise.rb +11 -0
- data/sample/rabbit/theme/rectangle-image-slide-number/rectangle-image-slide-number.rb +4 -0
- data/sample/rabbit/theme/stop-auto-slide/stop-auto-slide.rb +2 -0
- data/sample/rabbit/theme/triangle-image-slide-number/triangle-image-slide-number.rb +5 -0
- data/sample/rabbit-balloon.obj +93 -0
- data/sample/rabbit-en.hiki +399 -0
- data/sample/rabbit-en.md +410 -0
- data/sample/rabbit-en.rd +511 -0
- data/sample/rabbit-history.svg +280 -0
- data/sample/rabbit-implementation.rd +182 -0
- data/sample/rabbit-slide-show-logo.svg +597 -0
- data/sample/rabbit.dia +408 -0
- data/sample/rabbit.hiki +398 -0
- data/sample/rabbit.md +423 -0
- data/sample/rabbit.rd +520 -0
- data/sample/rabbit.xcf +0 -0
- data/sample/rabbit_icon.ico +0 -0
- data/sample/rabbit_icon.png +0 -0
- data/sample/shocker.jpg +0 -0
- data/sample/slide-property.hiki +14 -0
- data/sample/slide-property.rab +18 -0
- data/sample/spiral.svg +29 -0
- data/sample/table-en.rd +55 -0
- data/sample/table.hiki +34 -0
- data/sample/table.rd +55 -0
- data/sample/usagi.png +0 -0
- data/sample/video.md +19 -0
- data/sample/video.rab +17 -0
- metadata +1000 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
6
|
+
# (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
require "forwardable"
|
|
18
|
+
require "digest/sha2"
|
|
19
|
+
|
|
20
|
+
require "gdk_pixbuf2"
|
|
21
|
+
|
|
22
|
+
require_relative "../image-data-loader"
|
|
23
|
+
require_relative "../properties"
|
|
24
|
+
require_relative "../utils"
|
|
25
|
+
|
|
26
|
+
module Rabbit
|
|
27
|
+
module ImageManipulable
|
|
28
|
+
class Base
|
|
29
|
+
extend ModuleLoader
|
|
30
|
+
|
|
31
|
+
class << self
|
|
32
|
+
def delegate
|
|
33
|
+
extend Forwardable
|
|
34
|
+
|
|
35
|
+
def_delegators(:@delegated_loader,
|
|
36
|
+
:draw,
|
|
37
|
+
:ensure_resize,
|
|
38
|
+
:height,
|
|
39
|
+
:internal_pixbuf,
|
|
40
|
+
:keep_ratio,
|
|
41
|
+
:keep_ratio=,
|
|
42
|
+
:keep_ratio?,
|
|
43
|
+
:original_height,
|
|
44
|
+
:original_width,
|
|
45
|
+
:pixbuf,
|
|
46
|
+
:resize,
|
|
47
|
+
:update_size,
|
|
48
|
+
:width)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
attr_reader :filename
|
|
53
|
+
attr_reader :properties
|
|
54
|
+
attr_reader :original_width
|
|
55
|
+
attr_reader :original_height
|
|
56
|
+
attr_reader :animation
|
|
57
|
+
|
|
58
|
+
def initialize(filename, props, canvas: nil)
|
|
59
|
+
@filename = filename
|
|
60
|
+
@properties = Properties.new(props)
|
|
61
|
+
@canvas = canvas
|
|
62
|
+
initialize_keep_ratio
|
|
63
|
+
@animation = nil
|
|
64
|
+
@animation_iterator = nil
|
|
65
|
+
@animation_timeout = nil
|
|
66
|
+
update_size
|
|
67
|
+
@original_width = @width
|
|
68
|
+
@original_height = @height
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def [](key)
|
|
72
|
+
@properties[key]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def []=(key, value)
|
|
76
|
+
@properties[key] = value
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def keep_ratio?
|
|
80
|
+
@properties.keep_ratio
|
|
81
|
+
end
|
|
82
|
+
# For backward compatibility
|
|
83
|
+
alias_method :keep_ratio, :keep_ratio?
|
|
84
|
+
|
|
85
|
+
def keep_ratio=(value)
|
|
86
|
+
@properties.keep_ratio = value
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def pixbuf
|
|
90
|
+
@pixbuf
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def width
|
|
94
|
+
(relative_clip_width&.resolve(@width) || @width) -
|
|
95
|
+
(relative_clip_x&.resolve(@width) || 0)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def height
|
|
99
|
+
(relative_clip_height&.resolve(@height) || @height) -
|
|
100
|
+
(relative_clip_y&.resolve(@height) || 0)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def relative_clip_x
|
|
104
|
+
@properties.get_relative_size("relative_clip_x", @filename)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def relative_clip_y
|
|
108
|
+
@properties.get_relative_size("relative_clip_y", @filename)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def relative_clip_width
|
|
112
|
+
@properties.get_relative_size("relative_clip_width", @filename)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def relative_clip_height
|
|
116
|
+
@properties.get_relative_size("relative_clip_height", @filename)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def resize(w, h)
|
|
120
|
+
return if w.nil? and h.nil?
|
|
121
|
+
|
|
122
|
+
if keep_ratio?
|
|
123
|
+
if w and h.nil?
|
|
124
|
+
h = (original_height * w.to_f / original_width).ceil
|
|
125
|
+
elsif w.nil? and h
|
|
126
|
+
w = (original_width * h.to_f / original_height).ceil
|
|
127
|
+
end
|
|
128
|
+
else
|
|
129
|
+
w ||= width
|
|
130
|
+
h ||= height
|
|
131
|
+
end
|
|
132
|
+
w = w.ceil if w
|
|
133
|
+
h = h.ceil if h
|
|
134
|
+
if w and w > 0 and h and h > 0 and [w, h] != [width, height]
|
|
135
|
+
@width = w
|
|
136
|
+
@height = h
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def draw(canvas, x, y, params={})
|
|
141
|
+
default_params = default_draw_params(x, y)
|
|
142
|
+
target_pixbuf = pixbuf
|
|
143
|
+
if @animation_iterator
|
|
144
|
+
@animation_iterator.advance
|
|
145
|
+
target_pixbuf = @animation_iterator.pixbuf
|
|
146
|
+
update_animation_timeout(canvas)
|
|
147
|
+
end
|
|
148
|
+
canvas.draw_pixbuf(target_pixbuf, x, y, default_params.merge(params))
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
private
|
|
152
|
+
def initialize_keep_ratio
|
|
153
|
+
return unless @properties["keep_ratio"].nil?
|
|
154
|
+
# For backward compatibility
|
|
155
|
+
keep_scale = @properties["keep_scale"]
|
|
156
|
+
if keep_scale.nil?
|
|
157
|
+
@properties["keep_ratio"] = true
|
|
158
|
+
else
|
|
159
|
+
@properties["keep_ratio"] = keep_scale
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def load_data(data)
|
|
164
|
+
loader = ImageDataLoader.new(data)
|
|
165
|
+
begin
|
|
166
|
+
loader.load
|
|
167
|
+
rescue ImageLoadError
|
|
168
|
+
raise ImageLoadError.new("#{@filename}: #{$!.message}")
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
@width = loader.width
|
|
172
|
+
@height = loader.height
|
|
173
|
+
@pixbuf = loader.pixbuf
|
|
174
|
+
@animation = loader.animation
|
|
175
|
+
if @animation and not @animation.static_image?
|
|
176
|
+
@animation_iterator = @animation.get_iter
|
|
177
|
+
else
|
|
178
|
+
@animation_iterator = nil
|
|
179
|
+
end
|
|
180
|
+
if @animation_timeout
|
|
181
|
+
GLib::Source.remove(@animation_timeout)
|
|
182
|
+
@animation_timeout = nil
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def update_animation_timeout(canvas)
|
|
187
|
+
delay_time = @animation_iterator.delay_time
|
|
188
|
+
if delay_time > 0 and @animation_timeout.nil?
|
|
189
|
+
@animation_timeout = GLib::Timeout.add(delay_time) do
|
|
190
|
+
canvas.redraw
|
|
191
|
+
@animation_timeout = nil
|
|
192
|
+
# update_animation_timeout(canvas)
|
|
193
|
+
GLib::Source::REMOVE
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def default_draw_params(x, y)
|
|
199
|
+
_relative_clip_x = relative_clip_x
|
|
200
|
+
_relative_clip_y = relative_clip_y
|
|
201
|
+
_relative_clip_width = relative_clip_width
|
|
202
|
+
_relative_clip_height = relative_clip_height
|
|
203
|
+
if _relative_clip_x or
|
|
204
|
+
_relative_clip_y or
|
|
205
|
+
_relative_clip_width or
|
|
206
|
+
_relative_clip_height
|
|
207
|
+
clip_x = _relative_clip_x&.resolve(@width) || 0
|
|
208
|
+
clip_y = _relative_clip_y&.resolve(@height) || 0
|
|
209
|
+
clip_width = _relative_clip_width&.resolve(@width) || @width
|
|
210
|
+
clip_height = _relative_clip_height&.resolve(@height) || @height
|
|
211
|
+
uncliped_width = width - (clip_width - clip_x) + @width
|
|
212
|
+
uncliped_height = height - (clip_height - clip_y) + @height
|
|
213
|
+
{
|
|
214
|
+
width: uncliped_width,
|
|
215
|
+
height: uncliped_height,
|
|
216
|
+
clip_x: x + clip_x,
|
|
217
|
+
clip_y: y + clip_y,
|
|
218
|
+
clip_width: clip_width,
|
|
219
|
+
clip_height: clip_height,
|
|
220
|
+
}
|
|
221
|
+
else
|
|
222
|
+
{
|
|
223
|
+
width: width,
|
|
224
|
+
height: height,
|
|
225
|
+
}
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# TODO: Move to more suitable location
|
|
230
|
+
def cache_processed_data(canvas, input, extension)
|
|
231
|
+
tmp_dir_name = canvas&.tmp_dir_name
|
|
232
|
+
return yield unless tmp_dir_name
|
|
233
|
+
hash = compute_hash(input)
|
|
234
|
+
cached_path = File.join(tmp_dir_name, "#{hash}.#{extension}")
|
|
235
|
+
unless File.exist?(cached_path)
|
|
236
|
+
processed_path = yield
|
|
237
|
+
FileUtils.cp(processed_path, cached_path)
|
|
238
|
+
end
|
|
239
|
+
cached_path
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def compute_hash(input)
|
|
243
|
+
digest = Digest::SHA2.new
|
|
244
|
+
add_data = lambda do |data|
|
|
245
|
+
case data
|
|
246
|
+
when Array
|
|
247
|
+
data.each do |element|
|
|
248
|
+
add_data.call(element)
|
|
249
|
+
end
|
|
250
|
+
when Hash
|
|
251
|
+
data.each do |key, value|
|
|
252
|
+
add_data.call(key)
|
|
253
|
+
add_data.call(value)
|
|
254
|
+
end
|
|
255
|
+
when String
|
|
256
|
+
digest << data
|
|
257
|
+
when IO
|
|
258
|
+
loop do
|
|
259
|
+
chunk = data.read(4096)
|
|
260
|
+
break if chunk.nil?
|
|
261
|
+
digest << chunk
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
add_data.call(input)
|
|
266
|
+
digest.hexdigest
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
6
|
+
# (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
require_relative "base"
|
|
18
|
+
|
|
19
|
+
module Rabbit
|
|
20
|
+
module ImageManipulable
|
|
21
|
+
|
|
22
|
+
class Default < Base
|
|
23
|
+
|
|
24
|
+
push_loader(self)
|
|
25
|
+
|
|
26
|
+
class << self
|
|
27
|
+
def match?(filename)
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
def update_size
|
|
34
|
+
File.open(@filename, "rb") do |file|
|
|
35
|
+
Dir.chdir(File.dirname(@filename)) do
|
|
36
|
+
load_data(file.read)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
6
|
+
# (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
require_relative "base"
|
|
18
|
+
|
|
19
|
+
module Rabbit
|
|
20
|
+
module ImageManipulable
|
|
21
|
+
class Dia < Base
|
|
22
|
+
|
|
23
|
+
unshift_loader(self)
|
|
24
|
+
|
|
25
|
+
DIA_COMMANDS = %w(dia)
|
|
26
|
+
|
|
27
|
+
include SystemRunner
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def match?(filename)
|
|
31
|
+
return true if File.extname(filename).downcase.end_with?(".dia")
|
|
32
|
+
|
|
33
|
+
File.open(filename) do |f|
|
|
34
|
+
begin
|
|
35
|
+
first_line = f.gets
|
|
36
|
+
second_line = f.gets
|
|
37
|
+
return false unless second_line
|
|
38
|
+
return false unless first_line.start_with?("<?xml")
|
|
39
|
+
return false unless second_line.start_with?("<dia:diagram")
|
|
40
|
+
true
|
|
41
|
+
rescue EncodingError
|
|
42
|
+
false
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
delegate
|
|
49
|
+
|
|
50
|
+
def initialize(filename, props, canvas: nil)
|
|
51
|
+
init_delegated_loader(filename, props, canvas)
|
|
52
|
+
super
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
def init_delegated_loader(filename, props, canvas)
|
|
57
|
+
@svg_file = Tempfile.new(["rabbit-image-loader-dia", ".svg"])
|
|
58
|
+
args = ["--export=#{@svg_file.path}"]
|
|
59
|
+
args << "--filter=svg"
|
|
60
|
+
args << filename
|
|
61
|
+
if DIA_COMMANDS.any? {|dia| run(dia, *args)}
|
|
62
|
+
@delegated_loader = SVG.new(@svg_file.path, props)
|
|
63
|
+
else
|
|
64
|
+
raise DiaCanNotHandleError.new("dia #{args.join(' ')}",
|
|
65
|
+
DIA_COMMANDS)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def load_image
|
|
70
|
+
# do nothing
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
6
|
+
# (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
require_relative "base"
|
|
18
|
+
|
|
19
|
+
module Rabbit
|
|
20
|
+
module ImageManipulable
|
|
21
|
+
class EPS < Base
|
|
22
|
+
|
|
23
|
+
unshift_loader(self)
|
|
24
|
+
|
|
25
|
+
GS_COMMANDS = %w(gs gswin32c)
|
|
26
|
+
|
|
27
|
+
include SystemRunner
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def match?(filename)
|
|
31
|
+
File.open(filename) do |f|
|
|
32
|
+
begin
|
|
33
|
+
f.each_line do |line|
|
|
34
|
+
case line
|
|
35
|
+
when /^%!PS-Adobe-\d+.\d+ EPS/i
|
|
36
|
+
return true
|
|
37
|
+
when /^%%/
|
|
38
|
+
# ignore
|
|
39
|
+
else
|
|
40
|
+
return false
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
false
|
|
44
|
+
rescue EncodingError, ArgumentError
|
|
45
|
+
false
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
def update_size
|
|
53
|
+
load_image
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def load_image(width=nil, height=nil)
|
|
57
|
+
data = begin
|
|
58
|
+
eps_to_png(width, height)
|
|
59
|
+
rescue EPSCanNotHandleError
|
|
60
|
+
eps_to_pnm(width, height)
|
|
61
|
+
end
|
|
62
|
+
load_data(data)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def eps_to_png(width=nil, height=nil)
|
|
66
|
+
eps_to(width, height, "pngalpha")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def eps_to_pnm(width=nil, height=nil)
|
|
70
|
+
eps_to(width, height, "pnm")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def eps_to(width, height, device, *gs_options)
|
|
74
|
+
x, y, w, h, r = eps_size
|
|
75
|
+
resolution = (r || Canvas::INTERNAL_DPI).round
|
|
76
|
+
ratio = resolution.to_f / Canvas::INTERNAL_DPI
|
|
77
|
+
width = ((width || w) * ratio).round
|
|
78
|
+
height = ((height || h) * ratio).round
|
|
79
|
+
|
|
80
|
+
adjust_eps_if_need(x, y) do |path|
|
|
81
|
+
tmp = Tempfile.new("rabbit-image-eps")
|
|
82
|
+
args = %W(-q -dBATCH -dNOPAUSE -sDEVICE=#{device}
|
|
83
|
+
-sOutputFile=#{tmp.path} -dEPSFitPage
|
|
84
|
+
-dGraphicsAlphaBits=4 -dTextAlphaBits=4
|
|
85
|
+
-g#{width}x#{height} -r#{resolution}x#{resolution}
|
|
86
|
+
#{path})
|
|
87
|
+
if GS_COMMANDS.any? {|gs| run(gs, *args)}
|
|
88
|
+
begin
|
|
89
|
+
tmp.open
|
|
90
|
+
tmp.binmode
|
|
91
|
+
tmp.read
|
|
92
|
+
ensure
|
|
93
|
+
tmp.close
|
|
94
|
+
end
|
|
95
|
+
else
|
|
96
|
+
raise EPSCanNotHandleError.new("gs #{args.join(' ')}", GS_COMMANDS)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def eps_size
|
|
102
|
+
sx, sy, w, h, r = nil
|
|
103
|
+
File.read(@filename).split(/(?:\r\n?|\n)/).each do |line|
|
|
104
|
+
if /^%%BoundingBox:\s*/ =~ line
|
|
105
|
+
next if $POSTMATCH.chomp == '(atend)'
|
|
106
|
+
sx, sy, ex, ey = $POSTMATCH.scan(/-?\d+/).map{|x| Integer(x)}
|
|
107
|
+
w, h = ex - sx, ey - sy
|
|
108
|
+
elsif /^%%Feature:\s*\*Resolution\s*(\d+)dpi/ =~ line
|
|
109
|
+
r = $1.to_i
|
|
110
|
+
end
|
|
111
|
+
break if r and sx and sy and w and h
|
|
112
|
+
end
|
|
113
|
+
[sx, sy, w, h, r]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def adjust_eps_if_need(x, y)
|
|
117
|
+
if x and y and x > 0 and y > 0
|
|
118
|
+
tmp = Tempfile.new("rabbit-loader-adjusted-eps")
|
|
119
|
+
tmp.puts("#{x} neg #{y} neg translate")
|
|
120
|
+
tmp.print(File.open(@filename) {|f| f.read})
|
|
121
|
+
tmp.close
|
|
122
|
+
yield tmp.path
|
|
123
|
+
else
|
|
124
|
+
yield @filename
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
6
|
+
# (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
require_relative "../utils"
|
|
18
|
+
require_relative "base"
|
|
19
|
+
|
|
20
|
+
module Rabbit
|
|
21
|
+
module ImageManipulable
|
|
22
|
+
class GIMP < Base
|
|
23
|
+
|
|
24
|
+
unshift_loader(self)
|
|
25
|
+
|
|
26
|
+
GIMP_COMMANDS = %w(gimp)
|
|
27
|
+
HEADER = "gimp xcf file"
|
|
28
|
+
HEADER_SIZE = HEADER.size
|
|
29
|
+
|
|
30
|
+
include SystemRunner
|
|
31
|
+
|
|
32
|
+
class << self
|
|
33
|
+
def match?(filename)
|
|
34
|
+
File.open(filename, "rb") do |f|
|
|
35
|
+
HEADER == f.read(HEADER_SIZE)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
def update_size
|
|
42
|
+
png_file = Tempfile.new(["rabbit-loader-gimp-png", ".png"])
|
|
43
|
+
png_path = png_file.path
|
|
44
|
+
clip_to_image = 1
|
|
45
|
+
merge_type = clip_to_image
|
|
46
|
+
command = <<-COMMAND
|
|
47
|
+
(let ((image (car (gimp-file-load RUN-NONINTERACTIVE
|
|
48
|
+
"#{@filename}" "#{@filename}"))))
|
|
49
|
+
(gimp-file-save RUN-NONINTERACTIVE image "#{png_path}")
|
|
50
|
+
(gimp-image-delete image))
|
|
51
|
+
COMMAND
|
|
52
|
+
args = [
|
|
53
|
+
"--no-interface",
|
|
54
|
+
"--batch-interpreter", "plug-in-script-fu-eval",
|
|
55
|
+
"--batch", command,
|
|
56
|
+
"--batch", "(gimp-quit TRUE)",
|
|
57
|
+
]
|
|
58
|
+
if GIMP_COMMANDS.any? {|gimp| run(gimp, *args); File.exist?(png_path)}
|
|
59
|
+
png_file.open
|
|
60
|
+
png_file.binmode
|
|
61
|
+
load_data(png_file.read)
|
|
62
|
+
else
|
|
63
|
+
raise GIMPCanNotHandleError.new("gimp #{args.join(' ')}",
|
|
64
|
+
GIMP_COMMANDS)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Copyright (C) 2022-2025 Sutou Kouhei <kou@cozmixng.org>
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
6
|
+
# (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
require_relative "../gettext"
|
|
18
|
+
require_relative "pdf"
|
|
19
|
+
|
|
20
|
+
module Rabbit
|
|
21
|
+
module ImageManipulable
|
|
22
|
+
class Mermaid < Base
|
|
23
|
+
include GetText
|
|
24
|
+
include SystemRunner
|
|
25
|
+
|
|
26
|
+
unshift_loader(self)
|
|
27
|
+
|
|
28
|
+
class << self
|
|
29
|
+
def match?(filename)
|
|
30
|
+
File.extname(filename).downcase.end_with?(".mmd")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
delegate
|
|
35
|
+
|
|
36
|
+
def initialize(filename, props, canvas: nil)
|
|
37
|
+
init_delegated_loader(filename, props, canvas)
|
|
38
|
+
super
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
def init_delegated_loader(filename, props, canvas)
|
|
43
|
+
background_color = props["background_color"] || "transparent"
|
|
44
|
+
pdf_path = File.open(filename, "rb") do |source|
|
|
45
|
+
cache_processed_data(canvas, [source, background_color], "pdf") do
|
|
46
|
+
@pdf_file = Tempfile.new(["rabbit-image-loader-mermaid", ".pdf"])
|
|
47
|
+
command_line = [
|
|
48
|
+
"npx",
|
|
49
|
+
"--yes",
|
|
50
|
+
"--package=@mermaid-js/mermaid-cli",
|
|
51
|
+
"mmdc",
|
|
52
|
+
"--backgroundColor", background_color,
|
|
53
|
+
"--input", filename,
|
|
54
|
+
"--output", @pdf_file.path,
|
|
55
|
+
"--pdfFit",
|
|
56
|
+
]
|
|
57
|
+
unless SystemRunner.run(*command_line)
|
|
58
|
+
format = _("tried mermaid command: %s")
|
|
59
|
+
additional_info = format % command_line.inspect
|
|
60
|
+
raise MermaidCanNotHandleError.new(command_line.join(' '),
|
|
61
|
+
additional_info)
|
|
62
|
+
end
|
|
63
|
+
@pdf_file.path
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
@delegated_loader = PDF.new(pdf_path, props)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def load_image
|
|
70
|
+
# do nothing
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|