rabbit 3.0.5 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/en/news.rd +63 -0
- data/doc/ja/news.rd +63 -0
- data/lib/rabbit/actions.rb +446 -0
- data/lib/rabbit/author-configuration.rb +7 -10
- data/lib/rabbit/canvas.rb +74 -42
- data/lib/rabbit/command/rabbit-slide.rb +11 -13
- data/lib/rabbit/command/rabbit-theme.rb +10 -12
- data/lib/rabbit/command/rabbit.rb +31 -43
- data/lib/rabbit/console.rb +20 -22
- data/lib/rabbit/dependency-canvas.rb +2 -2
- data/lib/rabbit/element/base.rb +93 -6
- data/lib/rabbit/element/block-element.rb +17 -1
- data/lib/rabbit/element/block.rb +17 -1
- data/lib/rabbit/element/container-element.rb +59 -3
- data/lib/rabbit/element/description-list.rb +18 -2
- data/lib/rabbit/element/enum-list.rb +18 -2
- data/lib/rabbit/element/footnote.rb +18 -2
- data/lib/rabbit/element/image-title-slide.rb +17 -1
- data/lib/rabbit/element/image.rb +32 -2
- data/lib/rabbit/element/index-slide.rb +29 -13
- data/lib/rabbit/element/item-list.rb +18 -2
- data/lib/rabbit/element/method-list.rb +18 -2
- data/lib/rabbit/element/poppler-page.rb +17 -1
- data/lib/rabbit/element/poppler-slide.rb +18 -2
- data/lib/rabbit/element/poppler-title-slide.rb +18 -2
- data/lib/rabbit/element/preformatted.rb +18 -2
- data/lib/rabbit/element/slide-element.rb +29 -2
- data/lib/rabbit/element/slide.rb +18 -2
- data/lib/rabbit/element/syntax-highlighting.rb +17 -1
- data/lib/rabbit/element/table.rb +19 -3
- data/lib/rabbit/element/tag.rb +18 -2
- data/lib/rabbit/element/text-block-element.rb +18 -2
- data/lib/rabbit/element/text-container-element.rb +41 -2
- data/lib/rabbit/element/text-element.rb +17 -1
- data/lib/rabbit/element/text-renderer.rb +17 -1
- data/lib/rabbit/element/text.rb +4 -4
- data/lib/rabbit/element/title-slide.rb +19 -3
- data/lib/rabbit/element/video.rb +157 -56
- data/lib/rabbit/element.rb +20 -20
- data/lib/rabbit/formatter.rb +18 -1
- data/lib/rabbit/frame.rb +101 -93
- data/lib/rabbit/front.rb +11 -4
- data/lib/rabbit/gem-finder.rb +4 -8
- data/lib/rabbit/gem-pusher.rb +4 -4
- data/lib/rabbit/gesture/handler.rb +26 -21
- data/lib/rabbit/graffiti/config-dialog.rb +18 -2
- data/lib/rabbit/graffiti/processor.rb +20 -4
- data/lib/rabbit/gtk.rb +48 -14
- data/lib/rabbit/html/generator.rb +18 -18
- data/{test/helper/fixture.rb → lib/rabbit/icon.rb} +16 -6
- data/lib/rabbit/image/base.rb +7 -6
- data/lib/rabbit/image/default.rb +17 -1
- data/lib/rabbit/image/dia.rb +2 -2
- data/lib/rabbit/image/eps.rb +16 -2
- data/lib/rabbit/image/gimp.rb +28 -11
- data/lib/rabbit/image/mermaid.rb +3 -3
- data/lib/rabbit/image/pdf.rb +3 -3
- data/lib/rabbit/image/svg.rb +2 -2
- data/lib/rabbit/image.rb +8 -8
- data/lib/rabbit/info-window.rb +55 -18
- data/lib/rabbit/key-handler.rb +381 -0
- data/lib/rabbit/keys.rb +31 -2
- data/lib/rabbit/logger/base.rb +17 -1
- data/lib/rabbit/logger/gui.rb +20 -4
- data/lib/rabbit/logger/stderr.rb +16 -2
- data/lib/rabbit/logger.rb +4 -4
- data/lib/rabbit/menu.rb +200 -220
- data/lib/rabbit/parser/base.rb +17 -1
- data/lib/rabbit/parser/ext/aafigure.rb +17 -1
- data/lib/rabbit/parser/ext/blockdiag.rb +17 -1
- data/lib/rabbit/parser/ext/charty.rb +2 -2
- data/lib/rabbit/parser/ext/coderay.rb +20 -4
- data/lib/rabbit/parser/ext/enscript.rb +31 -15
- data/lib/rabbit/parser/ext/entity.rb +17 -1
- data/lib/rabbit/parser/ext/image.rb +6 -6
- data/lib/rabbit/parser/ext/inline.rb +17 -1
- data/lib/rabbit/parser/ext/rouge.rb +7 -4
- data/lib/rabbit/parser/ext/tex.rb +18 -2
- data/lib/rabbit/parser/ext/video.rb +4 -4
- data/lib/rabbit/parser/image.rb +20 -4
- data/lib/rabbit/parser/markdown/converter.rb +12 -13
- data/lib/rabbit/parser/markdown.rb +18 -2
- data/lib/rabbit/parser/pause-support.rb +1 -0
- data/lib/rabbit/parser/pdf.rb +3 -3
- data/lib/rabbit/parser/rd/ext/base.rb +20 -4
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +24 -28
- data/lib/rabbit/parser/rd/ext/character-reference.rb +18 -2
- data/lib/rabbit/parser/rd/ext/image.rb +3 -3
- data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +6 -6
- data/lib/rabbit/parser/rd/ext/refer.rb +18 -2
- data/lib/rabbit/parser/rd/ext/video.rb +19 -2
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +24 -8
- data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +18 -2
- data/lib/rabbit/parser/rd/visitor.rb +18 -2
- data/lib/rabbit/parser/rd.rb +18 -2
- data/lib/rabbit/parser/wiki/output.rb +25 -28
- data/lib/rabbit/parser/wiki.rb +18 -2
- data/lib/rabbit/parser.rb +6 -6
- data/lib/rabbit/path-manipulatable.rb +4 -4
- data/lib/rabbit/progress.rb +17 -1
- data/lib/rabbit/properties.rb +3 -3
- data/lib/rabbit/rabbit.rb +15 -7
- data/lib/rabbit/readme-parser.rb +4 -6
- data/lib/rabbit/renderer/base.rb +44 -36
- data/lib/rabbit/renderer/color.rb +18 -2
- data/lib/rabbit/renderer/display/base.rb +10 -12
- data/lib/rabbit/renderer/display/button-handler.rb +141 -60
- data/lib/rabbit/renderer/display/cursor.rb +4 -5
- data/lib/rabbit/renderer/display/drawing-area-base.rb +32 -48
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +10 -61
- data/lib/rabbit/renderer/display/drawing-area-view-only.rb +19 -8
- data/lib/rabbit/renderer/display/drawing-area.rb +19 -15
- data/lib/rabbit/renderer/display/gesture.rb +9 -9
- data/lib/rabbit/renderer/display/graffiti.rb +22 -13
- data/lib/rabbit/renderer/display/info.rb +22 -2
- data/lib/rabbit/renderer/display/magnifier.rb +30 -17
- data/lib/rabbit/renderer/display/mask.rb +17 -1
- data/lib/rabbit/renderer/display/menu.rb +27 -3
- data/lib/rabbit/renderer/display/motion-handler.rb +45 -0
- data/lib/rabbit/renderer/display/progress.rb +17 -2
- data/lib/rabbit/renderer/display/scroll-handler.rb +60 -13
- data/lib/rabbit/renderer/display/search.rb +19 -2
- data/lib/rabbit/renderer/display/spotlight.rb +39 -25
- data/lib/rabbit/renderer/display.rb +16 -36
- data/lib/rabbit/renderer/engine/cairo.rb +4 -11
- data/lib/rabbit/renderer/engine.rb +17 -1
- data/lib/rabbit/renderer/kernel.rb +2 -20
- data/lib/rabbit/renderer/offscreen.rb +8 -14
- data/lib/rabbit/renderer/print-layout.rb +2 -2
- data/lib/rabbit/renderer/printer.rb +9 -16
- data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
- data/lib/rabbit/renderer/scene-node-widget.rb +63 -0
- data/lib/rabbit/renderer/scene.rb +508 -0
- data/lib/rabbit/renderer.rb +6 -6
- data/lib/rabbit/search-window.rb +18 -2
- data/lib/rabbit/searcher.rb +15 -1
- data/lib/rabbit/size.rb +9 -1
- data/lib/rabbit/slide-configuration.rb +11 -14
- data/lib/rabbit/soap/driver.rb +20 -4
- data/lib/rabbit/soap/server.rb +17 -1
- data/lib/rabbit/source/argf.rb +5 -5
- data/lib/rabbit/source/base.rb +5 -6
- data/lib/rabbit/source/file.rb +5 -5
- data/lib/rabbit/source/memory.rb +20 -4
- data/lib/rabbit/source/uri.rb +9 -11
- data/lib/rabbit/source-generator/hiki.rb +2 -7
- data/lib/rabbit/source-generator/markdown.rb +2 -7
- data/lib/rabbit/source-generator/rd.rb +2 -7
- data/lib/rabbit/source-generator.rb +4 -4
- data/lib/rabbit/source.rb +5 -5
- data/lib/rabbit/task/slide.rb +13 -11
- data/lib/rabbit/task/theme.rb +8 -11
- data/lib/rabbit/task.rb +3 -3
- data/lib/rabbit/theme/applier.rb +27 -11
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
- data/lib/rabbit/theme/color-circle/color-circle.rb +18 -1
- data/lib/rabbit/theme/cozmixng/cozmixng.rb +1 -1
- data/lib/rabbit/theme/default/default.rb +1 -0
- data/lib/rabbit/theme/default-icon/default-icon.rb +1 -1
- data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +17 -1
- data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +9 -1
- data/lib/rabbit/theme/enishi-green/enishi-green.rb +1 -1
- data/lib/rabbit/theme/entry.rb +10 -12
- data/lib/rabbit/theme/icon/icon.rb +3 -8
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +5 -5
- data/lib/rabbit/theme/image-timer/image-timer.rb +3 -3
- data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +1 -0
- data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +1 -0
- data/lib/rabbit/theme/manager.rb +19 -9
- data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +1 -1
- data/lib/rabbit/theme/ranguba/ranguba.rb +1 -1
- data/lib/rabbit/theme/red-frame/red-frame.rb +6 -2
- data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +1 -0
- data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +1 -1
- data/lib/rabbit/theme/searcher.rb +23 -7
- data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
- data/lib/rabbit/theme/slide-show/slide-show.rb +1 -1
- data/lib/rabbit/theme/table/table.rb +2 -2
- data/lib/rabbit/theme/video/property.rb +3 -0
- data/lib/rabbit/theme/video/video.rb +5 -0
- data/lib/rabbit/theme-configuration.rb +9 -11
- data/lib/rabbit/utils.rb +12 -94
- data/lib/rabbit/version.rb +1 -1
- data/lib/rabbit/xmlrpc/client.rb +17 -1
- data/lib/rabbit/xmlrpc/server.rb +17 -1
- data/po/en/rabbit.edit.po +324 -316
- data/po/en/rabbit.po +61 -55
- data/po/fr/rabbit.edit.po +324 -316
- data/po/fr/rabbit.po +61 -55
- data/po/ja/rabbit.edit.po +345 -370
- data/po/ja/rabbit.po +83 -80
- data/rabbit.gemspec +4 -2
- data/sample/block-quote.rab +13 -0
- data/sample/description-list.rab +17 -0
- data/sample/mermaid.rab +16 -0
- data/sample/rabbit-en.hiki +0 -1
- data/sample/rabbit-en.md +0 -1
- data/sample/rabbit-en.rd +0 -1
- data/sample/rabbit.hiki +0 -1
- data/sample/rabbit.md +0 -1
- data/sample/rabbit.rd +0 -1
- data/sample/video.rab +17 -0
- metadata +33 -65
- data/lib/rabbit/action/basic.rb +0 -304
- data/lib/rabbit/action/radio.rb +0 -78
- data/lib/rabbit/action/toggle.rb +0 -82
- data/lib/rabbit/action.rb +0 -140
- data/lib/rabbit/renderer/display/gl.rb +0 -98
- data/lib/rabbit/renderer/display/key-handler.rb +0 -321
- data/lib/rabbit/renderer/gl.rb +0 -95
- data/lib/rabbit/renderer/screen.rb +0 -286
- data/lib/rabbit/renderer/widget/drawing-area.rb +0 -93
- data/lib/rabbit/stock.rb +0 -31
- data/lib/rabbit/trackball.rb +0 -228
- data/lib/rabbit/video-window.rb +0 -123
- data/test/command/test-rabbit.rb +0 -101
- data/test/helper/parser.rb +0 -48
- data/test/helper.rb +0 -24
- data/test/image/test-dia.rb +0 -54
- data/test/image/test-eps.rb +0 -41
- data/test/parser/test-markdown.rb +0 -360
- data/test/parser/test-rd.rb +0 -43
- data/test/parser/test-wiki.rb +0 -71
- data/test/run-test.rb +0 -27
- data/test/source-generator/test-hiki.rb +0 -68
- data/test/source-generator/test-markdown.rb +0 -67
- data/test/source-generator/test-rd.rb +0 -69
- data/test/test-applier.rb +0 -73
- data/test/test-author-configuration.rb +0 -37
- data/test/test-canvas.rb +0 -70
- data/test/test-color.rb +0 -51
- data/test/test-element.rb +0 -103
- data/test/test-readme-parser.rb +0 -160
- data/test/test-size.rb +0 -155
- data/test/test-slide-configuration.rb +0 -74
- data/test/test-source.rb +0 -122
- data/test/test-theme-configuration.rb +0 -47
- data/test/test-utils.rb +0 -64
data/lib/rabbit/logger.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2004-
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -14,10 +14,10 @@
|
|
14
14
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
|
-
|
17
|
+
require_relative "utils"
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
require_relative "logger/stderr"
|
20
|
+
require_relative "logger/gui"
|
21
21
|
|
22
22
|
module Rabbit
|
23
23
|
module Logger
|
data/lib/rabbit/menu.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2004-
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -15,69 +15,78 @@
|
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
17
|
require "erb"
|
18
|
-
require "stringio"
|
19
18
|
|
20
|
-
|
19
|
+
require_relative "gtk"
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
require_relative "gettext"
|
22
|
+
require_relative "utils"
|
23
|
+
require_relative "theme/searcher"
|
24
|
+
require_relative "image"
|
25
|
+
require_relative "actions"
|
27
26
|
|
28
27
|
module Rabbit
|
29
28
|
class Menu
|
30
29
|
include ERB::Util
|
31
30
|
include GetText
|
32
31
|
|
33
|
-
@@icon = nil
|
34
|
-
|
35
32
|
def initialize(actions)
|
36
|
-
@
|
37
|
-
@merge.insert_action_group(actions, 0)
|
38
|
-
@jump_to_actions = nil
|
39
|
-
@jump_to_merge_id = nil
|
40
|
-
@theme_actions = nil
|
41
|
-
@theme_merge_id = nil
|
42
|
-
update_ui
|
33
|
+
@actions = actions
|
43
34
|
end
|
44
35
|
|
45
36
|
def attach(window)
|
46
|
-
window
|
37
|
+
@window = window
|
47
38
|
end
|
48
39
|
|
49
40
|
def detach(window)
|
50
|
-
window
|
41
|
+
@window = nil
|
51
42
|
end
|
52
43
|
|
53
44
|
def update_menu(canvas)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
@
|
61
|
-
|
45
|
+
@popover_menu = Gtk::PopoverMenu.new
|
46
|
+
@menu_model = Gio::Menu.new
|
47
|
+
@popover_menu.insert_action_group("rabbit", @actions.group)
|
48
|
+
add_jump_to_actions(canvas)
|
49
|
+
add_theme_actions(canvas)
|
50
|
+
add_items(canvas)
|
51
|
+
if @popover_menu.respond_to?(:menu_model=) # GTK 4
|
52
|
+
@popover_menu.menu_model = @menu_model
|
53
|
+
else
|
54
|
+
@popover_menu.bind_model(@menu_model)
|
55
|
+
end
|
56
|
+
if @window
|
57
|
+
if @popover_menu.respond_to?(:relative_to=) # GTK 3
|
58
|
+
@popover_menu.relative_to = @window.child
|
59
|
+
else
|
60
|
+
@popover_menu.parent = @window.child
|
61
|
+
end
|
62
|
+
end
|
63
|
+
@popover_menu.autohide = true if @popover_menu.respond_to?(:autohide=)
|
64
|
+
|
65
|
+
@actions.update_status
|
66
|
+
end
|
67
|
+
|
68
|
+
def toggle(x=nil, y=nil)
|
69
|
+
if @popover_menu.visible?
|
70
|
+
popdown
|
71
|
+
else
|
72
|
+
popup(x, y)
|
73
|
+
end
|
62
74
|
end
|
63
75
|
|
64
|
-
def popup(
|
65
|
-
@
|
76
|
+
def popup(x=nil, y=nil)
|
77
|
+
@popover_menu.pointing_to = Gdk::Rectangle.new(x || 0, y || 0, 0, 0)
|
78
|
+
@popover_menu.popup
|
66
79
|
end
|
67
80
|
|
68
|
-
|
69
|
-
|
70
|
-
# @merge.accel_group
|
71
|
-
@accel_group = @merge.accel_group # <- workaround for Ruby/GLib <= 0.18.1
|
81
|
+
def popdown
|
82
|
+
@popover_menu.popdown
|
72
83
|
end
|
73
84
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
tooltip = _("Jump to the %dth slide") % i
|
78
|
-
action = Gtk::Action.new(name, :label => label, :tooltip => tooltip)
|
85
|
+
private
|
86
|
+
def build_action(name)
|
87
|
+
action = Gio::SimpleAction.new(name)
|
79
88
|
action.signal_connect("activate") do
|
80
|
-
|
89
|
+
yield
|
81
90
|
end
|
82
91
|
action
|
83
92
|
end
|
@@ -86,216 +95,187 @@ module Rabbit
|
|
86
95
|
label.gsub(/_/, '__')
|
87
96
|
end
|
88
97
|
|
89
|
-
def
|
90
|
-
@
|
91
|
-
@merge.remove_action_group(@jump_to_actions) if @jump_to_actions
|
92
|
-
|
93
|
-
@jump_to_merge_id = @merge.new_merge_id
|
94
|
-
@jump_to_actions = Gtk::ActionGroup.new("JumpToActions")
|
95
|
-
@merge.insert_action_group(@jump_to_actions, 0)
|
96
|
-
jump_to_path = "/popup/JumpTo"
|
97
|
-
jump_to_action = canvas.action("JumpTo")
|
98
|
-
return unless jump_to_action
|
98
|
+
def add_jump_to_actions(canvas)
|
99
|
+
@jump_to_actions = Gio::SimpleActionGroup.new
|
99
100
|
canvas.slides.each_with_index do |slide, i|
|
100
|
-
action =
|
101
|
+
action = build_action("JumpTo#{i}") do
|
102
|
+
canvas.move_to_if_can(i)
|
103
|
+
end
|
101
104
|
@jump_to_actions.add_action(action)
|
102
|
-
@merge.add_ui(@jump_to_merge_id, jump_to_path, action.name,
|
103
|
-
action.name, :auto, false)
|
104
105
|
end
|
106
|
+
@popover_menu.insert_action_group("jump", @jump_to_actions)
|
105
107
|
end
|
106
108
|
|
107
|
-
def
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
@menu.prepend(tearoff)
|
109
|
+
def jump_to_items(canvas)
|
110
|
+
canvas.slides.collect.with_index do |slide, i|
|
111
|
+
label = "#{i}: #{escape_label(Utils.unescape_title(slide.title))}"
|
112
|
+
[:item, "jump.JumpTo#{i}", label]
|
113
|
+
end
|
113
114
|
end
|
114
115
|
|
115
|
-
def
|
116
|
-
@
|
117
|
-
@merge.remove_action_group(@theme_actions) if @theme_actions
|
118
|
-
|
119
|
-
@theme_merge_id = @merge.new_merge_id
|
120
|
-
@theme_actions = Gtk::ActionGroup.new("ThemeActions")
|
121
|
-
@merge.insert_action_group(@theme_actions, 0)
|
122
|
-
|
116
|
+
def add_theme_actions(canvas)
|
117
|
+
@theme_actions = Gio::SimpleActionGroup.new
|
123
118
|
themes = Theme::Searcher.collect_theme
|
124
|
-
|
125
|
-
categories = themes.collect do |entry|
|
126
|
-
entry.category
|
127
|
-
end.uniq.sort_by {|cat| _(cat)}
|
128
|
-
|
129
|
-
change = "/popup/ChangeTheme"
|
130
|
-
merge = "/popup/MergeTheme"
|
131
|
-
|
132
|
-
categories.each do |category|
|
133
|
-
theme_menu_add_category("Change", change, category)
|
134
|
-
theme_menu_add_category("Merge", merge, category)
|
135
|
-
end
|
136
|
-
|
137
119
|
themes.each do |entry|
|
138
|
-
|
139
|
-
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def theme_menu_add_category(prefix, path, category)
|
144
|
-
name = "#{prefix}ThemeCategory#{category}"
|
145
|
-
label = _(category)
|
146
|
-
action = Gtk::Action.new(name, :label => label)
|
147
|
-
@theme_actions.add_action(action)
|
148
|
-
@merge.add_ui(@theme_merge_id, path, category, name, :menu, false)
|
149
|
-
end
|
150
|
-
|
151
|
-
def theme_menu_add_theme(prefix, path, entry, canvas)
|
152
|
-
path = "#{path}/#{entry.category}"
|
153
|
-
name = "#{prefix}ThemeEntry#{entry.name}"
|
154
|
-
label = _(entry.title)
|
155
|
-
action = Gtk::Action.new(name, :label => label)
|
156
|
-
action.signal_connect("activate") do
|
157
|
-
canvas.activate("#{prefix}Theme") do
|
158
|
-
[entry, Utils.process_pending_events_proc]
|
120
|
+
action = build_action("ChangeThemeEntry#{entry.name}") do
|
121
|
+
canvas.apply_theme(entry.name, &Utils.process_pending_events_proc)
|
159
122
|
end
|
160
|
-
|
161
|
-
|
162
|
-
@merge.add_ui(@theme_merge_id, path, entry.name, name, :auto, false)
|
163
|
-
end
|
164
|
-
|
165
|
-
def show_tearoff(sub_menus=@menu.children)
|
166
|
-
sub_menus.each do |child|
|
167
|
-
if child.respond_to?(:submenu) and child.submenu
|
168
|
-
tearoff, *child_sub_menus = child.submenu.children
|
169
|
-
tearoff.show
|
170
|
-
show_tearoff(child_sub_menus)
|
123
|
+
action = build_action("MergeThemeEntry#{entry.name}") do
|
124
|
+
canvas.merge_theme(entry.name, &Utils.process_pending_events_proc)
|
171
125
|
end
|
172
126
|
end
|
173
127
|
end
|
174
128
|
|
175
|
-
def
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
def _format_xml(axml, output, indent)
|
188
|
-
case axml
|
189
|
-
when Array
|
190
|
-
tag, *others = axml
|
191
|
-
output.print("#{@indent * indent}<#{tag}")
|
192
|
-
if others.first.is_a?(Hash)
|
193
|
-
attrs, *others = others
|
194
|
-
attrs.each do |key, value|
|
195
|
-
output.print(" #{h(key)}=\"#{h(value)}\"") if value
|
196
|
-
end
|
197
|
-
end
|
198
|
-
if others.empty?
|
199
|
-
output.print("/>\n")
|
200
|
-
else
|
201
|
-
output.print(">\n")
|
202
|
-
others.each do |other|
|
203
|
-
_format_xml(other, output, indent + 1)
|
204
|
-
end
|
205
|
-
output.print("#{@indent * indent}</#{tag}>\n")
|
129
|
+
def theme_items(canvas, prefix)
|
130
|
+
themes = Theme::Searcher.collect_theme
|
131
|
+
themes_by_category = themes.group_by do |entry|
|
132
|
+
entry.category
|
133
|
+
end
|
134
|
+
sorted_categories = themes_by_category.keys.sort_by do |category|
|
135
|
+
_(category)
|
136
|
+
end
|
137
|
+
sorted_categories.collect do |category|
|
138
|
+
items = themes_by_category[category].collect do |entry|
|
139
|
+
[:item, "theme.#{prefix}ThemeEntry#{entry.name}", entry.name]
|
206
140
|
end
|
207
|
-
|
208
|
-
output.print(h(axml))
|
209
|
-
else
|
210
|
-
raise "!?!?!?: #{axml.inspect}"
|
141
|
+
[:menu, "#{prefix[0]}: #{_(category)}", *items]
|
211
142
|
end
|
212
143
|
end
|
213
144
|
|
214
|
-
def
|
215
|
-
|
216
|
-
[:popup,
|
217
|
-
*items_to_axml(items)
|
218
|
-
]
|
219
|
-
]
|
145
|
+
def change_theme_items(canvas)
|
146
|
+
theme_items(canvas, "Change")
|
220
147
|
end
|
221
148
|
|
222
|
-
def
|
223
|
-
|
224
|
-
params = {:name => name, :action => name}
|
225
|
-
case key
|
226
|
-
when :separator
|
227
|
-
[:separator]
|
228
|
-
when :item
|
229
|
-
[:menuitem, params]
|
230
|
-
when :menu
|
231
|
-
[:menu, params, *items_to_axml(others)]
|
232
|
-
end
|
233
|
-
end
|
149
|
+
def merge_theme_items(canvas)
|
150
|
+
theme_items(canvas, "Merge")
|
234
151
|
end
|
235
152
|
|
236
|
-
def items
|
153
|
+
def items(canvas)
|
237
154
|
[
|
238
|
-
[:
|
239
|
-
|
240
|
-
|
241
|
-
[:
|
155
|
+
[:section,
|
156
|
+
[:item, "ToggleIndexMode"],
|
157
|
+
],
|
158
|
+
[:section,
|
159
|
+
[:item, "ToggleGraffitiMode"],
|
160
|
+
[:menu, _("Graffiti"),
|
242
161
|
[:item, "ClearGraffiti"],
|
243
162
|
[:item, "UndoGraffiti"],
|
244
163
|
[:item, "ChangeGraffitiColor"],
|
164
|
+
],
|
165
|
+
],
|
166
|
+
[:section,
|
167
|
+
[:item, "ToggleFullscreen"],
|
168
|
+
],
|
169
|
+
[:section,
|
170
|
+
[:item, "ToggleInfoWindow"],
|
171
|
+
],
|
172
|
+
[:section,
|
173
|
+
[:item, "ChangeBlank('whiteout')", _("Whiteout")],
|
174
|
+
[:item, "ChangeBlank('blackout')", _("Blackout")],
|
175
|
+
[:item, "ChangeBlank('show')", _("Show")],
|
176
|
+
],
|
177
|
+
# [:section,
|
178
|
+
# [:item, "ToggleCommentFrame"],
|
179
|
+
# [:item, "ToggleCommentView"],
|
180
|
+
# ],
|
181
|
+
[:section,
|
182
|
+
[:item, "ToggleSpotlight"],
|
183
|
+
[:item, "ToggleMagnifier"],
|
184
|
+
],
|
185
|
+
[:section,
|
186
|
+
[:item, "ToggleTerminal"],
|
245
187
|
],
|
246
|
-
[:
|
247
|
-
|
248
|
-
|
249
|
-
[:
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
[:
|
258
|
-
|
259
|
-
|
260
|
-
[:
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
[:
|
268
|
-
|
269
|
-
|
270
|
-
[:
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
[:
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
[:
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
[:
|
289
|
-
|
290
|
-
[:item, "RadioLogLevelInfo"],
|
291
|
-
[:item, "RadioLogLevelWarning"],
|
292
|
-
[:item, "RadioLogLevelError"],
|
293
|
-
[:item, "RadioLogLevelFatal"],
|
294
|
-
[:item, "RadioLogLevelUnknown"],
|
188
|
+
[:section,
|
189
|
+
[:menu, _("Jump to slide"), *jump_to_items(canvas)],
|
190
|
+
],
|
191
|
+
[:section,
|
192
|
+
[:item, "Previous"],
|
193
|
+
[:item, "Next"],
|
194
|
+
[:item, "PreviousSlide"],
|
195
|
+
[:item, "NextSlide"],
|
196
|
+
[:item, "FirstSlide"],
|
197
|
+
[:item, "LastSlide"],
|
198
|
+
],
|
199
|
+
[:section,
|
200
|
+
[:item, "Iconify"],
|
201
|
+
],
|
202
|
+
[:section,
|
203
|
+
[:item, "Redraw"],
|
204
|
+
[:item, "ClearSlide"],
|
205
|
+
[:item, "ReloadTheme"],
|
206
|
+
[:menu, _("Change theme"), *change_theme_items(canvas)],
|
207
|
+
[:menu, _("Merge theme"), *merge_theme_items(canvas)],
|
208
|
+
],
|
209
|
+
[:sction,
|
210
|
+
[:item, "CacheAllSlides"],
|
211
|
+
],
|
212
|
+
[:section,
|
213
|
+
[:item, "SaveAsImage"],
|
214
|
+
[:item, "Print"],
|
215
|
+
],
|
216
|
+
[:section,
|
217
|
+
[:item, "ResetTimer"],
|
218
|
+
[:item, "ResetAdjustment"],
|
219
|
+
],
|
220
|
+
[:section,
|
221
|
+
[:menu, _("Log level"),
|
222
|
+
[:item, "ChangeLogLevel('debug')", _("Debug")],
|
223
|
+
[:item, "ChangeLogLevel('info')", _("Info")],
|
224
|
+
[:item, "ChangeLogLevel('warning')", _("Warning")],
|
225
|
+
[:item, "ChangeLogLevel('error')", _("Error")],
|
226
|
+
[:item, "ChangeLogLevel('fatal')", _("Fatal")],
|
227
|
+
[:item, "ChangeLogLevel('unknown')", _("Unknown")],
|
228
|
+
],
|
229
|
+
],
|
230
|
+
[:section,
|
231
|
+
[:item, "Quit"],
|
295
232
|
],
|
296
|
-
[:separator],
|
297
|
-
[:item, "Quit"],
|
298
233
|
]
|
299
234
|
end
|
235
|
+
|
236
|
+
def add_item(container, item)
|
237
|
+
type = item[0]
|
238
|
+
case type
|
239
|
+
when :section
|
240
|
+
section = Gio::Menu.new
|
241
|
+
item[1..-1].each do |i|
|
242
|
+
add_item(section, i)
|
243
|
+
end
|
244
|
+
section_item = Gio::MenuItem.new
|
245
|
+
section_item.section = section
|
246
|
+
container.append_item(section_item)
|
247
|
+
when :item
|
248
|
+
action_name = item[1]
|
249
|
+
label = item[2]
|
250
|
+
icon = nil
|
251
|
+
unless action_name.include?(".")
|
252
|
+
action = @canvas.actions.find_action(action_name)
|
253
|
+
label ||= action&.label
|
254
|
+
icon = action&.icon
|
255
|
+
action_name = "rabbit.#{action_name}"
|
256
|
+
end
|
257
|
+
label ||= action_name
|
258
|
+
i = Gio::MenuItem.new(label, action_name)
|
259
|
+
i.icon = icon if icon
|
260
|
+
container.append_item(i)
|
261
|
+
when :menu
|
262
|
+
submenu = Gio::Menu.new
|
263
|
+
label = item[1]
|
264
|
+
item[2..-1].each do |i|
|
265
|
+
add_item(submenu, i)
|
266
|
+
end
|
267
|
+
submenu_item = Gio::MenuItem.new(label)
|
268
|
+
submenu_item.submenu = submenu
|
269
|
+
container.append_item(submenu_item)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def add_items(canvas)
|
274
|
+
@canvas = canvas
|
275
|
+
items(canvas).each do |item|
|
276
|
+
add_item(@menu_model, item)
|
277
|
+
end
|
278
|
+
@canvas = nil
|
279
|
+
end
|
300
280
|
end
|
301
281
|
end
|
data/lib/rabbit/parser/base.rb
CHANGED
@@ -1,4 +1,20 @@
|
|
1
|
-
|
1
|
+
# Copyright (C) 2007-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"
|
2
18
|
|
3
19
|
module Rabbit
|
4
20
|
module Parser
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# Copyright (C) 2010-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
|
+
|
1
17
|
module Rabbit
|
2
18
|
module Parser
|
3
19
|
module Ext
|
@@ -7,7 +23,7 @@ module Rabbit
|
|
7
23
|
module_function
|
8
24
|
AVAILABLE_OPTIONS = ["linewidth", "foreground", "fill", "background",
|
9
25
|
"option"]
|
10
|
-
def make_image(path, prop
|
26
|
+
def make_image(path, prop)
|
11
27
|
image_file = Tempfile.new("rabbit-image-aafigure")
|
12
28
|
command = [
|
13
29
|
"aafigure",
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# Copyright (C) 2011-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
|
+
|
1
17
|
module Rabbit
|
2
18
|
module Parser
|
3
19
|
module Ext
|
@@ -8,7 +24,7 @@ module Rabbit
|
|
8
24
|
AVAILABLE_FLAG_OPTIONS = ["antialias"]
|
9
25
|
# "font" is treated as specially.
|
10
26
|
AVAILABLE_VALUE_OPTIONS = []
|
11
|
-
def make_image(path, prop
|
27
|
+
def make_image(path, prop)
|
12
28
|
image_file = Tempfile.new(["rabbit-image-blockdiag", ".svg"])
|
13
29
|
command_line = [
|
14
30
|
"-T", "svg",
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2021 Kouhei
|
1
|
+
# Copyright (C) 2021-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -23,7 +23,7 @@ module Rabbit
|
|
23
23
|
include GetText
|
24
24
|
|
25
25
|
module_function
|
26
|
-
def make_image(path, prop
|
26
|
+
def make_image(path, prop)
|
27
27
|
require "charty"
|
28
28
|
backend = prop["backend"]
|
29
29
|
::Charty::Backends.use(backend) if backend
|
@@ -1,7 +1,23 @@
|
|
1
|
-
|
1
|
+
# Copyright (C) 2011-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.
|
2
16
|
|
3
|
-
require
|
4
|
-
|
17
|
+
require "coderay"
|
18
|
+
|
19
|
+
require_relative "../../utils"
|
20
|
+
require_relative "escape"
|
5
21
|
|
6
22
|
module Rabbit
|
7
23
|
module Parser
|
@@ -10,7 +26,7 @@ module Rabbit
|
|
10
26
|
include GetText
|
11
27
|
|
12
28
|
module_function
|
13
|
-
def highlight(lang, text
|
29
|
+
def highlight(lang, text)
|
14
30
|
tokens = ::CodeRay.scan(text.strip, lang.to_sym)
|
15
31
|
tokens.encode(RabbitEncoder.new)
|
16
32
|
end
|