rabbit 3.0.0 → 3.0.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.
- checksums.yaml +4 -4
- data/Rakefile +2 -1
- data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/_layouts/skeleton.html +0 -7
- data/doc/en/faq.rd +4 -2
- data/doc/en/install/homebrew.rd +8 -13
- data/doc/en/news.rd +158 -0
- data/doc/en/sample/hiki/rabbit.hiki +0 -4
- data/doc/en/sample/rd/rabbit.rd +0 -4
- data/doc/en/usage/rabbit-slide.rd +3 -3
- data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
- data/doc/images/screenshots/en/blue-circle.png +0 -0
- data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/en/clear-blue.png +0 -0
- data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/en/cozmixng.png +0 -0
- data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/en/dark-gradation.png +0 -0
- data/doc/images/screenshots/en/day-white-raw.png +0 -0
- data/doc/images/screenshots/en/day-white.png +0 -0
- data/doc/images/screenshots/en/debian-raw.png +0 -0
- data/doc/images/screenshots/en/debian.png +0 -0
- data/doc/images/screenshots/en/green-circle-raw.png +0 -0
- data/doc/images/screenshots/en/green-circle.png +0 -0
- data/doc/images/screenshots/en/night-black-raw.png +0 -0
- data/doc/images/screenshots/en/night-black.png +0 -0
- data/doc/images/screenshots/en/rabbit-raw.png +0 -0
- data/doc/images/screenshots/en/rabbit.png +0 -0
- data/doc/images/screenshots/en/ranguba-raw.png +0 -0
- data/doc/images/screenshots/en/ranguba.png +0 -0
- data/doc/images/screenshots/en/red-frame-raw.png +0 -0
- data/doc/images/screenshots/en/red-frame.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
- data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
- data/doc/images/screenshots/ja/blue-circle.png +0 -0
- data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/ja/clear-blue.png +0 -0
- data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/ja/cozmixng.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation.png +0 -0
- data/doc/images/screenshots/ja/day-white-raw.png +0 -0
- data/doc/images/screenshots/ja/day-white.png +0 -0
- data/doc/images/screenshots/ja/debian-raw.png +0 -0
- data/doc/images/screenshots/ja/debian.png +0 -0
- data/doc/images/screenshots/ja/green-circle-raw.png +0 -0
- data/doc/images/screenshots/ja/green-circle.png +0 -0
- data/doc/images/screenshots/ja/night-black-raw.png +0 -0
- data/doc/images/screenshots/ja/night-black.png +0 -0
- data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
- data/doc/images/screenshots/ja/rabbit.png +0 -0
- data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
- data/doc/images/screenshots/ja/ranguba.png +0 -0
- data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
- data/doc/images/screenshots/ja/red-frame.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
- data/doc/index.html.en +1 -1
- data/doc/ja/faq.rd +2 -0
- data/doc/ja/install/homebrew.rd +8 -12
- data/doc/ja/news.rd +157 -0
- data/doc/ja/sample/hiki/rabbit.hiki +0 -4
- data/doc/ja/sample/rd/rabbit.rd +0 -4
- data/doc/ja/usage/rabbit-slide.rd +3 -3
- data/doc/ja/users.rd +7 -0
- data/lib/rabbit/action/toggle.rb +7 -0
- data/lib/rabbit/author-configuration.rb +3 -4
- data/lib/rabbit/canvas.rb +18 -6
- data/lib/rabbit/command/rabbit-slide.rb +59 -1
- data/lib/rabbit/command/rabbit-slide.ui +127 -49
- data/lib/rabbit/command/rabbit.rb +5 -9
- data/lib/rabbit/element/base.rb +1 -5
- data/lib/rabbit/element/image.rb +139 -89
- data/lib/rabbit/element/video.rb +3 -11
- data/lib/rabbit/error.rb +9 -3
- data/lib/rabbit/formatter.rb +1 -1
- data/lib/rabbit/frame.rb +102 -4
- data/lib/rabbit/gem-pusher.rb +29 -6
- data/lib/rabbit/image/base.rb +163 -28
- data/lib/rabbit/image/dia.rb +21 -14
- data/lib/rabbit/image/mermaid.rb +73 -0
- data/lib/rabbit/image/pdf.rb +22 -9
- data/lib/rabbit/image/svg.rb +1 -4
- data/lib/rabbit/image.rb +6 -6
- data/lib/rabbit/info-window.rb +106 -80
- data/lib/rabbit/keys.rb +6 -0
- data/lib/rabbit/menu.rb +2 -0
- data/lib/rabbit/parser/base.rb +2 -1
- data/lib/rabbit/parser/ext/blockdiag.rb +16 -14
- data/lib/rabbit/parser/ext/charty.rb +58 -0
- data/lib/rabbit/parser/ext/image.rb +38 -10
- data/lib/rabbit/parser/markdown/converter.rb +36 -30
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +33 -35
- data/lib/rabbit/parser/rd/ext/image.rb +23 -4
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +3 -1
- data/lib/rabbit/parser/rd.rb +1 -1
- data/lib/rabbit/parser/wiki/output.rb +9 -9
- data/lib/rabbit/parser.rb +2 -2
- data/lib/rabbit/progress.rb +1 -1
- data/lib/rabbit/properties.rb +154 -0
- data/lib/rabbit/rabbit.rb +3 -1
- data/lib/rabbit/relative-size.rb +28 -0
- data/lib/rabbit/renderer/base.rb +6 -0
- data/lib/rabbit/renderer/display/drawing-area-base.rb +1 -2
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +1 -0
- data/lib/rabbit/renderer/display/info.rb +6 -1
- data/lib/rabbit/renderer/display/key-handler.rb +27 -2
- data/lib/rabbit/renderer/engine/cairo.rb +24 -3
- data/lib/rabbit/renderer/screen.rb +0 -1
- data/lib/rabbit/slide-configuration.rb +16 -8
- data/lib/rabbit/task/slide.rb +6 -33
- data/lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb +38 -0
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +4 -2
- data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +12 -2
- data/lib/rabbit/theme/image/image.rb +3 -0
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +8 -3
- data/lib/rabbit/theme/image-timer/image-timer.rb +8 -3
- data/lib/rabbit/theme/pdf/pdf.rb +1 -1
- data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +2 -0
- data/lib/rabbit/theme/tag/tag.rb +9 -2
- data/lib/rabbit/theme-configuration.rb +3 -4
- data/lib/rabbit/utils.rb +25 -2
- data/lib/rabbit/version.rb +2 -2
- data/lib/rabbit/video-window.rb +14 -3
- data/{test/test-slideshare.rb → lib/rabbit/yaml-loader.rb} +20 -15
- data/po/en/rabbit.edit.po +123 -121
- data/po/en/rabbit.po +28 -26
- data/po/fr/rabbit.edit.po +122 -120
- data/po/fr/rabbit.po +27 -25
- data/po/ja/rabbit.edit.po +156 -125
- data/po/ja/rabbit.po +34 -30
- data/rabbit.gemspec +0 -1
- data/sample/can_rabbit.rd +0 -24
- data/sample/rabbit-en.hiki +0 -4
- data/sample/rabbit-en.md +13 -0
- data/sample/rabbit-en.rd +10 -4
- data/sample/rabbit.hiki +0 -4
- data/sample/rabbit.md +21 -0
- data/sample/rabbit.rd +20 -4
- data/test/command/test-rabbit.rb +1 -0
- data/test/parser/test-markdown.rb +2 -2
- data/test/test-slide-configuration.rb +4 -2
- metadata +30 -46
- data/doc/css/jquery-ui/themes/ui-lightness.css +0 -573
- data/doc/javascripts/jquery-ui.js +0 -11544
- data/doc/javascripts/jquery.js +0 -7179
- data/lib/rabbit/slideshare.rb +0 -192
data/lib/rabbit/renderer/base.rb
CHANGED
|
@@ -5,7 +5,6 @@ require "rabbit/renderer/display/mask"
|
|
|
5
5
|
require "rabbit/renderer/display/search"
|
|
6
6
|
require "rabbit/renderer/display/gesture"
|
|
7
7
|
require "rabbit/renderer/display/graffiti"
|
|
8
|
-
require "rabbit/renderer/display/menu"
|
|
9
8
|
require "rabbit/renderer/display/button-handler"
|
|
10
9
|
require "rabbit/renderer/display/key-handler"
|
|
11
10
|
require "rabbit/renderer/display/scroll-handler"
|
|
@@ -179,7 +178,7 @@ module Rabbit
|
|
|
179
178
|
end
|
|
180
179
|
|
|
181
180
|
def confirm(message)
|
|
182
|
-
confirm_dialog(message) == Gtk::
|
|
181
|
+
confirm_dialog(message) == Gtk::ResponseType::OK
|
|
183
182
|
end
|
|
184
183
|
|
|
185
184
|
def reload_theme(&callback)
|
|
@@ -19,10 +19,19 @@ module Rabbit
|
|
|
19
19
|
@user_accel_group.disconnect_key(keyval, modifier)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def pre_terminal
|
|
23
|
+
@window.remove_accel_group(@accel_group)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def post_terminal
|
|
27
|
+
@window.add_accel_group(@accel_group)
|
|
28
|
+
end
|
|
29
|
+
|
|
22
30
|
private
|
|
23
31
|
def init_key_handler
|
|
24
32
|
@user_accel_group = nil
|
|
25
33
|
init_accel_group
|
|
34
|
+
init_toggle_terminal_accel_group
|
|
26
35
|
end
|
|
27
36
|
|
|
28
37
|
def clear_user_accel_group
|
|
@@ -31,10 +40,12 @@ module Rabbit
|
|
|
31
40
|
|
|
32
41
|
def attach_key(window)
|
|
33
42
|
window.add_accel_group(@accel_group)
|
|
43
|
+
window.add_accel_group(@toggle_terminal_accel_group)
|
|
34
44
|
end
|
|
35
45
|
|
|
36
46
|
def detach_key(window)
|
|
37
47
|
window.remove_accel_group(@accel_group)
|
|
48
|
+
window.remove_accel_group(@toggle_terminal_accel_group)
|
|
38
49
|
end
|
|
39
50
|
|
|
40
51
|
def clear_keys
|
|
@@ -53,10 +64,24 @@ module Rabbit
|
|
|
53
64
|
init_alt_keys
|
|
54
65
|
end
|
|
55
66
|
|
|
56
|
-
def
|
|
67
|
+
def init_toggle_terminal_accel_group
|
|
68
|
+
@toggle_terminal_accel_group = Gtk::AccelGroup.new
|
|
69
|
+
mod = Gdk::ModifierType::SHIFT_MASK |
|
|
70
|
+
Gdk::ModifierType::CONTROL_MASK |
|
|
71
|
+
Gdk::ModifierType::MOD1_MASK
|
|
72
|
+
keys = Keys::ShiftControlAlt::TOGGLE_TERMINAL_KEYS
|
|
73
|
+
set_keys(keys,
|
|
74
|
+
mod,
|
|
75
|
+
nil,
|
|
76
|
+
@toggle_terminal_accel_group) do |group, obj, val, modifier|
|
|
77
|
+
@canvas.activate("ToggleTerminal")
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def set_keys(keys, mod, flags=nil, accel_group=@accel_group, &block)
|
|
57
82
|
flags ||= Gtk::AccelFlags::VISIBLE
|
|
58
83
|
keys.each do |val|
|
|
59
|
-
|
|
84
|
+
accel_group.connect(val, mod, flags, &block)
|
|
60
85
|
end
|
|
61
86
|
end
|
|
62
87
|
|
|
@@ -195,6 +195,7 @@ module Rabbit
|
|
|
195
195
|
def draw_pixbuf(pixbuf, x, y, params={})
|
|
196
196
|
x, y = from_screen(x, y)
|
|
197
197
|
@context.save do
|
|
198
|
+
apply_clip(x, y, pixbuf.width, pixbuf.height, params)
|
|
198
199
|
@context.translate(x, y)
|
|
199
200
|
set_source_pixbuf(pixbuf, params)
|
|
200
201
|
@context.paint(params[:alpha])
|
|
@@ -244,11 +245,14 @@ module Rabbit
|
|
|
244
245
|
def draw_rsvg_handle(handle, x, y, params={})
|
|
245
246
|
x, y = from_screen(x, y)
|
|
246
247
|
dim = handle.dimensions
|
|
247
|
-
|
|
248
|
-
|
|
248
|
+
w = dim.width
|
|
249
|
+
h = dim.height
|
|
250
|
+
width = (params[:width] || w).to_f
|
|
251
|
+
height = (params[:height] || h).to_f
|
|
249
252
|
@context.save do
|
|
253
|
+
apply_clip(x, y, w, h, params)
|
|
250
254
|
@context.translate(x, y)
|
|
251
|
-
@context.scale(width /
|
|
255
|
+
@context.scale(width / w, height / h)
|
|
252
256
|
@context.render_rsvg_handle(handle)
|
|
253
257
|
end
|
|
254
258
|
|
|
@@ -262,6 +266,7 @@ module Rabbit
|
|
|
262
266
|
width = (params[:width] || w).to_f
|
|
263
267
|
height = (params[:height] || h).to_f
|
|
264
268
|
@context.save do
|
|
269
|
+
apply_clip(x, y, w, h, params)
|
|
265
270
|
@context.translate(x, y)
|
|
266
271
|
@context.scale(width / w, height / h)
|
|
267
272
|
@context.render_poppler_page(page)
|
|
@@ -396,6 +401,22 @@ module Rabbit
|
|
|
396
401
|
end
|
|
397
402
|
end
|
|
398
403
|
|
|
404
|
+
def apply_clip(x, y, w, h, params)
|
|
405
|
+
clip_x = params[:clip_x]
|
|
406
|
+
clip_y = params[:clip_y]
|
|
407
|
+
clip_width = params[:clip_width]
|
|
408
|
+
clip_height = params[:clip_height]
|
|
409
|
+
if clip_x or clip_y or clip_width or clip_height
|
|
410
|
+
@context.rectangle(x,
|
|
411
|
+
y,
|
|
412
|
+
clip_width || w,
|
|
413
|
+
clip_height || h)
|
|
414
|
+
@context.clip
|
|
415
|
+
@context.translate(x - (clip_x || x),
|
|
416
|
+
y - (clip_y || y))
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
399
420
|
def make_matrix(xx, xy, x0, yx, yy, y0)
|
|
400
421
|
::Cairo::Matrix.new(xx, yx, xy, yy, x0, y0)
|
|
401
422
|
end
|
|
@@ -25,7 +25,6 @@ require "rabbit/renderer/display/mask"
|
|
|
25
25
|
require "rabbit/renderer/display/search"
|
|
26
26
|
require "rabbit/renderer/display/gesture"
|
|
27
27
|
require "rabbit/renderer/display/graffiti"
|
|
28
|
-
require "rabbit/renderer/display/menu"
|
|
29
28
|
require "rabbit/renderer/display/button-handler"
|
|
30
29
|
require "rabbit/renderer/display/key-handler"
|
|
31
30
|
require "rabbit/renderer/display/scroll-handler"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012-
|
|
1
|
+
# Copyright (C) 2012-2021 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
|
|
@@ -17,12 +17,11 @@
|
|
|
17
17
|
require "date"
|
|
18
18
|
require "time"
|
|
19
19
|
|
|
20
|
-
require "yaml"
|
|
21
|
-
|
|
22
20
|
require "rabbit/gettext"
|
|
23
21
|
require "rabbit/logger"
|
|
24
22
|
require "rabbit/author-configuration"
|
|
25
23
|
require "rabbit/path-manipulatable"
|
|
24
|
+
require "rabbit/yaml-loader"
|
|
26
25
|
|
|
27
26
|
module Rabbit
|
|
28
27
|
class SlideConfiguration
|
|
@@ -41,11 +40,13 @@ module Rabbit
|
|
|
41
40
|
attr_accessor :licenses
|
|
42
41
|
attr_accessor :slideshare_id
|
|
43
42
|
attr_accessor :speaker_deck_id
|
|
44
|
-
attr_accessor :ustream_id
|
|
45
43
|
attr_accessor :vimeo_id
|
|
46
44
|
attr_accessor :youtube_id
|
|
47
45
|
attr_writer :version
|
|
48
46
|
attr_accessor :author
|
|
47
|
+
attr_accessor :width
|
|
48
|
+
attr_accessor :height
|
|
49
|
+
attr_accessor :source_code_uri
|
|
49
50
|
def initialize(logger=nil)
|
|
50
51
|
@logger = logger || Logger.default
|
|
51
52
|
clear
|
|
@@ -65,7 +66,7 @@ module Rabbit
|
|
|
65
66
|
|
|
66
67
|
def load
|
|
67
68
|
return unless File.exist?(path)
|
|
68
|
-
conf =
|
|
69
|
+
conf = YAMLLoader.load(File.read(path))
|
|
69
70
|
clear
|
|
70
71
|
merge!(conf)
|
|
71
72
|
rescue
|
|
@@ -94,10 +95,12 @@ module Rabbit
|
|
|
94
95
|
@licenses = []
|
|
95
96
|
@slideshare_id = nil
|
|
96
97
|
@speaker_deck_id = nil
|
|
97
|
-
@ustream_id = nil
|
|
98
98
|
@vimeo_id = nil
|
|
99
99
|
@youtube_id = nil
|
|
100
100
|
@author = nil
|
|
101
|
+
@width = 800
|
|
102
|
+
@height = 600
|
|
103
|
+
@source_code_uri = nil
|
|
101
104
|
end
|
|
102
105
|
|
|
103
106
|
|
|
@@ -113,7 +116,6 @@ module Rabbit
|
|
|
113
116
|
@version = conf["version"] || @version
|
|
114
117
|
@slideshare_id = conf["slideshare_id"] || @slideshare_id
|
|
115
118
|
@speaker_deck_id = conf["speaker_deck_id"] || @speaker_deck_id
|
|
116
|
-
@ustream_id = conf["ustream_id"] || @ustream_id
|
|
117
119
|
@vimeo_id = conf["vimeo_id"] || @vimeo_id
|
|
118
120
|
@youtube_id = conf["youtube_id"] || @youtube_id
|
|
119
121
|
|
|
@@ -122,6 +124,10 @@ module Rabbit
|
|
|
122
124
|
|
|
123
125
|
@author ||= AuthorConfiguration.new(@logger)
|
|
124
126
|
@author.merge!(conf["author"] || {})
|
|
127
|
+
|
|
128
|
+
@width = conf["width"] || @width
|
|
129
|
+
@height = conf["height"] || @height
|
|
130
|
+
@source_code_uri = conf["source_code_uri"] || @source_code_uri
|
|
125
131
|
end
|
|
126
132
|
|
|
127
133
|
def to_hash
|
|
@@ -136,9 +142,11 @@ module Rabbit
|
|
|
136
142
|
"licenses" => @licenses,
|
|
137
143
|
"slideshare_id" => @slideshare_id,
|
|
138
144
|
"speaker_deck_id" => @speaker_deck_id,
|
|
139
|
-
"ustream_id" => @ustream_id,
|
|
140
145
|
"vimeo_id" => @vimeo_id,
|
|
141
146
|
"youtube_id" => @youtube_id,
|
|
147
|
+
"width" => @width,
|
|
148
|
+
"height" => @height,
|
|
149
|
+
"source_code_uri" => @source_code_uri,
|
|
142
150
|
}
|
|
143
151
|
config["author"] = @author.to_hash if @author
|
|
144
152
|
config
|
data/lib/rabbit/task/slide.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012-
|
|
1
|
+
# Copyright (C) 2012-2022 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
|
|
@@ -65,6 +65,9 @@ module Rabbit
|
|
|
65
65
|
spec.summary = readme_parser.title || "TODO"
|
|
66
66
|
spec.description = readme_parser.description || "TODO"
|
|
67
67
|
spec.licenses = @slide.licenses
|
|
68
|
+
if @slide.source_code_uri
|
|
69
|
+
spec.metadata["source_code_uri"] = @slide.source_code_uri
|
|
70
|
+
end
|
|
68
71
|
|
|
69
72
|
slide_conf_path = @slide.path
|
|
70
73
|
spec.files = [".rabbit", slide_conf_path, "Rakefile"]
|
|
@@ -155,11 +158,6 @@ module Rabbit
|
|
|
155
158
|
|
|
156
159
|
publish_tasks = []
|
|
157
160
|
namespace :publish do
|
|
158
|
-
if @slide.author.slideshare_user
|
|
159
|
-
define_publish_slideshare_task
|
|
160
|
-
publish_tasks << :slideshare
|
|
161
|
-
end
|
|
162
|
-
|
|
163
161
|
if @slide.author.speaker_deck_user
|
|
164
162
|
define_publish_speaker_deck_task
|
|
165
163
|
publish_tasks << :speaker_deck
|
|
@@ -174,40 +172,15 @@ module Rabbit
|
|
|
174
172
|
end
|
|
175
173
|
|
|
176
174
|
def define_publish_rubygems_task
|
|
177
|
-
desc(_("Publish the slide to %s" % "RubyGems.org")
|
|
175
|
+
desc(_("Publish the slide to %s") % "RubyGems.org")
|
|
178
176
|
task :rubygems => :gem do
|
|
179
177
|
pusher = GemPusher.new(gem_path, @slide.author.rubygems_user)
|
|
180
178
|
pusher.push
|
|
181
179
|
end
|
|
182
180
|
end
|
|
183
181
|
|
|
184
|
-
def define_publish_slideshare_task
|
|
185
|
-
slideshare_user = @slide.author.slideshare_user
|
|
186
|
-
desc(_("Publish the slide to %s" % "SlideShare"))
|
|
187
|
-
task :slideshare => [:pdf, "gem:validate"] do
|
|
188
|
-
require "rabbit/slideshare"
|
|
189
|
-
slideshare = SlideShare.new(@logger)
|
|
190
|
-
slideshare.user = slideshare_user
|
|
191
|
-
slideshare.pdf_path = pdf_path
|
|
192
|
-
slideshare.id = @slide.id
|
|
193
|
-
slideshare.title = spec.summary
|
|
194
|
-
slideshare.description = spec.description
|
|
195
|
-
slideshare.tags = @slide.tags if @slide.tags
|
|
196
|
-
url = slideshare.upload
|
|
197
|
-
if url
|
|
198
|
-
@logger.info(_("Uploaded successfully!"))
|
|
199
|
-
@logger.info(_("See %s") % url)
|
|
200
|
-
Gtk.show_uri(url) if Gtk.respond_to?(:show_uri)
|
|
201
|
-
|
|
202
|
-
slide_id = url.split(/\//).last
|
|
203
|
-
@slide.slideshare_id = slide_id
|
|
204
|
-
@slide.save(".")
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
|
|
209
182
|
def define_publish_speaker_deck_task
|
|
210
|
-
desc(_("Publish the slide to %s" % "Speaker Deck")
|
|
183
|
+
desc(_("Publish the slide to %s") % "Speaker Deck")
|
|
211
184
|
task :speaker_deck => :pdf do
|
|
212
185
|
puts "Not implemented yet."
|
|
213
186
|
end
|
|
@@ -32,6 +32,11 @@ def apply_background_image_property(element, options={})
|
|
|
32
32
|
image.vertical_centering = true
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
layout = nil
|
|
36
|
+
caption_height = 0
|
|
37
|
+
caption_text = image.caption
|
|
38
|
+
caption_text = nil if caption_text and caption_text.empty?
|
|
39
|
+
|
|
35
40
|
element.add_pre_draw_proc(proc_name) do |canvas, x, y, w, h, simulation|
|
|
36
41
|
if simulation
|
|
37
42
|
if compute_initial_geometry
|
|
@@ -78,6 +83,39 @@ def apply_background_image_property(element, options={})
|
|
|
78
83
|
end
|
|
79
84
|
end
|
|
80
85
|
image.draw(simulation)
|
|
86
|
+
|
|
87
|
+
if caption_text
|
|
88
|
+
# TODO: Should we move this to Image#draw and unify this and
|
|
89
|
+
# similar code in lib/rabbit/theme/image/image.rb?
|
|
90
|
+
if simulation
|
|
91
|
+
caption = Text.new(caption_text)
|
|
92
|
+
caption_font_size = image.caption_font_size
|
|
93
|
+
caption_font_size = font_size(caption_font_size) if caption_font_size
|
|
94
|
+
caption.prop_set("size",
|
|
95
|
+
caption_font_size || @image_caption_font_size)
|
|
96
|
+
set_font_family(caption)
|
|
97
|
+
if image.horizontal_centering
|
|
98
|
+
caption.do_horizontal_centering(canvas, x, y, w, h)
|
|
99
|
+
end
|
|
100
|
+
caption.compile(canvas,
|
|
101
|
+
(image.x || x) + image.margin_left,
|
|
102
|
+
y + image.height + image.margin_top,
|
|
103
|
+
image.ow || w,
|
|
104
|
+
h - image.height)
|
|
105
|
+
layout = caption.layout
|
|
106
|
+
caption_height = caption.height
|
|
107
|
+
end
|
|
108
|
+
if !simulation and layout
|
|
109
|
+
base_x = (image.x || x) + image.margin_left
|
|
110
|
+
base_y = image.height + y + image.margin_top
|
|
111
|
+
caption_color = image["caption-color"] || @image_caption_color
|
|
112
|
+
canvas.draw_layout(layout,
|
|
113
|
+
base_x,
|
|
114
|
+
base_y + image.margin_bottom,
|
|
115
|
+
caption_color)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
81
119
|
[x, y, w - element_margin_right, h]
|
|
82
120
|
end
|
|
83
121
|
|
|
@@ -77,8 +77,10 @@ match(Slide, HeadLine) do |heads|
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
match(Slide, Body) do |bodies|
|
|
80
|
-
bodies.vertical_centering = true
|
|
81
80
|
bodies.each do |body|
|
|
81
|
+
if body.slide["enable-clear-blue-slide-body-vertical-centering"] != "false"
|
|
82
|
+
body.vertical_centering = true
|
|
83
|
+
end
|
|
82
84
|
next if body.elements.all? {|element| element.is_a?(Image)}
|
|
83
85
|
next if body.elements.any? {|element| element.is_a?(BlockQuote)}
|
|
84
86
|
next if body.elements.any? {|element| element.is_a?(PreformattedBlock)}
|
|
@@ -94,6 +96,6 @@ include_theme("slide-logo")
|
|
|
94
96
|
@icon_images = ["clear-blue-icon.png"]
|
|
95
97
|
include_theme("icon")
|
|
96
98
|
|
|
97
|
-
@slide_footer_info_left_text ||= canvas.title.gsub(/\n/,
|
|
99
|
+
@slide_footer_info_left_text ||= canvas.title.gsub(/\n/, " ")
|
|
98
100
|
@slide_footer_info_right_text ||= "Powered by Rabbit #{Rabbit::VERSION}"
|
|
99
101
|
include_theme("slide-footer-info")
|
|
@@ -13,6 +13,7 @@ match(SlideElement) do |slides|
|
|
|
13
13
|
line_color = options[:line_color] || "#666"
|
|
14
14
|
line_params = options[:line_params] || {}
|
|
15
15
|
left_text = options[:left_text]
|
|
16
|
+
center_text = options[:center_text]
|
|
16
17
|
right_text = options[:right_text]
|
|
17
18
|
text_position = options[:text_position] || :lower
|
|
18
19
|
text_over_line = options[:text_over_line]
|
|
@@ -36,15 +37,20 @@ match(SlideElement) do |slides|
|
|
|
36
37
|
"size" => text_size,
|
|
37
38
|
"color" => text_color,
|
|
38
39
|
}
|
|
39
|
-
left_layout = right_layout = nil
|
|
40
|
+
left_layout = center_layout = right_layout = nil
|
|
40
41
|
if left_text and !left_text.empty?
|
|
41
42
|
left_layout = make_formatted_layout.call(props, left_text)
|
|
42
43
|
end
|
|
44
|
+
if center_text and !center_text.empty?
|
|
45
|
+
center_layout = make_formatted_layout.call(props, center_text)
|
|
46
|
+
center_layout.alignment = :center
|
|
47
|
+
center_layout.width = (w - (x_margin * 2)) * Pango::SCALE
|
|
48
|
+
end
|
|
43
49
|
if right_text and !right_text.empty?
|
|
44
50
|
right_layout = make_formatted_layout.call(props, right_text)
|
|
45
51
|
end
|
|
46
52
|
|
|
47
|
-
layouts = [left_layout, right_layout].compact
|
|
53
|
+
layouts = [left_layout, center_layout, right_layout].compact
|
|
48
54
|
unless layouts.empty?
|
|
49
55
|
max_height = layouts.collect {|layout| layout.pixel_size[1]}.max
|
|
50
56
|
if text_position == :lower
|
|
@@ -63,6 +69,10 @@ match(SlideElement) do |slides|
|
|
|
63
69
|
canvas.draw_layout(left_layout, x_margin, text_base_y)
|
|
64
70
|
end
|
|
65
71
|
|
|
72
|
+
if center_layout
|
|
73
|
+
canvas.draw_layout(center_layout, x_margin, text_base_y)
|
|
74
|
+
end
|
|
75
|
+
|
|
66
76
|
if right_layout
|
|
67
77
|
text_width, text_height = right_layout.pixel_size
|
|
68
78
|
right_text_x = canvas.width - text_width - x_margin
|
|
@@ -51,6 +51,9 @@ match("**", Image) do |images|
|
|
|
51
51
|
caption_height = 0
|
|
52
52
|
|
|
53
53
|
image.add_post_draw_proc(proc_name) do |canvas, x, y, w, h, simulation|
|
|
54
|
+
# TODO: Should we move this to Image#draw and unify this and
|
|
55
|
+
# similar code in
|
|
56
|
+
# lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb?
|
|
54
57
|
if simulation
|
|
55
58
|
caption = Text.new(caption_text)
|
|
56
59
|
caption.prop_set("size", @image_caption_font_size)
|
|
@@ -32,7 +32,7 @@ end
|
|
|
32
32
|
target_n_slides = nil
|
|
33
33
|
|
|
34
34
|
match(Slide) do |slides|
|
|
35
|
-
slides.
|
|
35
|
+
slides.delete_pre_draw_proc_by_name(proc_name)
|
|
36
36
|
|
|
37
37
|
break if @image_slide_number_uninstall
|
|
38
38
|
|
|
@@ -63,7 +63,7 @@ match(Slide) do |slides|
|
|
|
63
63
|
"weight" => "heavy",
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
draw = lambda do |slide, canvas, x, y, w, h, simulation|
|
|
67
67
|
if simulation
|
|
68
68
|
image_height = canvas.height * @image_slide_number_space_ratio
|
|
69
69
|
loader.resize(nil, image_height)
|
|
@@ -88,7 +88,7 @@ match(Slide) do |slides|
|
|
|
88
88
|
margin_bottom = @image_slide_number_margin_bottom || slide.margin_bottom
|
|
89
89
|
base_x = margin_left
|
|
90
90
|
base_y = canvas.height - loader.height - margin_bottom
|
|
91
|
-
max_width = canvas.width -
|
|
91
|
+
max_width = canvas.width - margin_right - base_x - loader.width
|
|
92
92
|
start_base_x = base_x
|
|
93
93
|
goal_base_x = canvas.width - margin_right - goal_flag_width
|
|
94
94
|
|
|
@@ -126,4 +126,9 @@ match(Slide) do |slides|
|
|
|
126
126
|
end
|
|
127
127
|
[x, y, w, h]
|
|
128
128
|
end
|
|
129
|
+
if slides[0].is_a?(PopplerSlide)
|
|
130
|
+
slides.add_post_draw_proc(proc_name, &draw)
|
|
131
|
+
else
|
|
132
|
+
slides.add_pre_draw_proc(proc_name, &draw)
|
|
133
|
+
end
|
|
129
134
|
end
|
|
@@ -38,7 +38,7 @@ end
|
|
|
38
38
|
@image_timer_target_paths ||= [Slide]
|
|
39
39
|
|
|
40
40
|
match(*@image_timer_target_paths) do |slides|
|
|
41
|
-
slides.
|
|
41
|
+
slides.delete_pre_draw_proc_by_name(proc_name)
|
|
42
42
|
stop_auto_redraw_timer
|
|
43
43
|
|
|
44
44
|
break if @image_timer_uninstall
|
|
@@ -51,7 +51,7 @@ match(*@image_timer_target_paths) do |slides|
|
|
|
51
51
|
@image_timer_auto_updating = true
|
|
52
52
|
start_auto_redraw_timer(@image_timer_interval)
|
|
53
53
|
end
|
|
54
|
-
slide.
|
|
54
|
+
slide.delete_pre_draw_proc_by_name(init_proc_name)
|
|
55
55
|
end
|
|
56
56
|
[x, y, w, h]
|
|
57
57
|
end
|
|
@@ -61,7 +61,7 @@ match(*@image_timer_target_paths) do |slides|
|
|
|
61
61
|
max_width = nil
|
|
62
62
|
base_y = nil
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
draw = lambda do |slide, canvas, x, y, w, h, simulation|
|
|
65
65
|
margin_left = @image_timer_margin_left || slide.margin_left
|
|
66
66
|
margin_right = @image_timer_margin_right || slide.margin_right
|
|
67
67
|
margin_bottom = @image_timer_margin_bottom || slide.margin_bottom
|
|
@@ -111,4 +111,9 @@ match(*@image_timer_target_paths) do |slides|
|
|
|
111
111
|
end
|
|
112
112
|
[x, y, w, h]
|
|
113
113
|
end
|
|
114
|
+
if slides[0].is_a?(PopplerSlide)
|
|
115
|
+
slides.add_post_draw_proc(proc_name, &draw)
|
|
116
|
+
else
|
|
117
|
+
slides.add_pre_draw_proc(proc_name, &draw)
|
|
118
|
+
end
|
|
114
119
|
end
|
data/lib/rabbit/theme/pdf/pdf.rb
CHANGED
|
@@ -25,6 +25,7 @@ end
|
|
|
25
25
|
@slide_footer_info_base_y ||= canvas.height - @margin_bottom
|
|
26
26
|
|
|
27
27
|
@slide_footer_info_left_text ||= nil
|
|
28
|
+
@slide_footer_info_center_text ||= nil
|
|
28
29
|
@slide_footer_info_right_text ||= nil
|
|
29
30
|
|
|
30
31
|
include_theme("edge-info-toolkit")
|
|
@@ -39,6 +40,7 @@ match(SlideElement) do
|
|
|
39
40
|
:line_color => @slide_footer_info_line_color,
|
|
40
41
|
:line_params => @slide_footer_info_line_params,
|
|
41
42
|
:left_text => @slide_footer_info_left_text,
|
|
43
|
+
:center_text => @slide_footer_info_center_text,
|
|
42
44
|
:right_text => @slide_footer_info_right_text,
|
|
43
45
|
:text_position => :lower,
|
|
44
46
|
:text_over_line => @slide_footer_info_text_over_line,
|
data/lib/rabbit/theme/tag/tag.rb
CHANGED
|
@@ -61,12 +61,19 @@ match("**", CustomTag) do |tags|
|
|
|
61
61
|
find_target.call(tag).prop_set("size", @xx_large_font_size)
|
|
62
62
|
when /\A(normal|oblique|italic)\z/
|
|
63
63
|
find_target.call(tag).prop_set("style", $1)
|
|
64
|
-
when /\Amargin-(top|bottom|left|right)(?:\s*\*\s*(
|
|
64
|
+
when /\Amargin-(top|bottom|left|right)(?:\s*\*\s*([-\d.]+))?\z/
|
|
65
65
|
target = "margin_#{$1}"
|
|
66
|
-
scale =
|
|
66
|
+
scale = Float($2 || 1)
|
|
67
67
|
outer_block = find_outer_block.call(tag)
|
|
68
68
|
current_value = outer_block.send(target)
|
|
69
69
|
outer_block.send("#{target}=", current_value + (@space * scale))
|
|
70
|
+
when /\Awrap-(.+)\z/
|
|
71
|
+
wrap = $1
|
|
72
|
+
find_target.call(tag).wrap_mode = wrap
|
|
73
|
+
when /\Ajustify?\z/
|
|
74
|
+
find_target.call(tag).justify = true
|
|
75
|
+
when /\Ano-justify?\z/
|
|
76
|
+
find_target.call(tag).justify = false
|
|
70
77
|
else
|
|
71
78
|
handler = find_handler.call(tag)
|
|
72
79
|
if handler
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012 Kouhei
|
|
1
|
+
# Copyright (C) 2012-2021 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,11 +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
|
-
require "yaml"
|
|
18
|
-
|
|
19
17
|
require "rabbit/gettext"
|
|
20
18
|
require "rabbit/author-configuration"
|
|
21
19
|
require "rabbit/path-manipulatable"
|
|
20
|
+
require "rabbit/yaml-loader"
|
|
22
21
|
|
|
23
22
|
module Rabbit
|
|
24
23
|
class ThemeConfiguration
|
|
@@ -42,7 +41,7 @@ module Rabbit
|
|
|
42
41
|
|
|
43
42
|
def load
|
|
44
43
|
return unless File.exist?(path)
|
|
45
|
-
conf =
|
|
44
|
+
conf = YAMLLoader.load(File.read(path))
|
|
46
45
|
merge!(conf)
|
|
47
46
|
rescue
|
|
48
47
|
format = _("Failed to read slide configuration: %s: %s")
|
data/lib/rabbit/utils.rb
CHANGED
|
@@ -352,9 +352,32 @@ module Rabbit
|
|
|
352
352
|
|
|
353
353
|
module SystemRunner
|
|
354
354
|
module_function
|
|
355
|
-
def run(cmd, *args)
|
|
355
|
+
def run(cmd, *args, progress: nil)
|
|
356
356
|
begin
|
|
357
|
-
|
|
357
|
+
IO.pipe do |input, output|
|
|
358
|
+
pid = spawn(cmd, *args, out: output)
|
|
359
|
+
output.close
|
|
360
|
+
begin
|
|
361
|
+
loop do
|
|
362
|
+
readables, = IO.select([input], nil, nil, 0.1)
|
|
363
|
+
if readables
|
|
364
|
+
readable = readables[0]
|
|
365
|
+
begin
|
|
366
|
+
$stdout.print(readable.read_nonblock(4096))
|
|
367
|
+
rescue EOFError
|
|
368
|
+
break
|
|
369
|
+
else
|
|
370
|
+
break if readable.eof?
|
|
371
|
+
end
|
|
372
|
+
else
|
|
373
|
+
progress.call if progress
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
true
|
|
377
|
+
ensure
|
|
378
|
+
Process.waitpid(pid)
|
|
379
|
+
end
|
|
380
|
+
end
|
|
358
381
|
rescue SystemCallError
|
|
359
382
|
yield($!) if block_given?
|
|
360
383
|
false
|
data/lib/rabbit/version.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012-
|
|
1
|
+
# Copyright (C) 2012-2021 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,5 +15,5 @@
|
|
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
16
|
|
|
17
17
|
module Rabbit
|
|
18
|
-
VERSION = "3.0.
|
|
18
|
+
VERSION = "3.0.2"
|
|
19
19
|
end
|