rabbit 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/_layouts/skeleton.html +1 -0
- data/doc/css/rabbit.css +2 -1
- data/doc/css/syntax.scss +67 -0
- data/doc/en/development.rd +31 -0
- data/doc/en/index.rd +0 -4
- data/doc/en/news.rd +55 -0
- data/doc/en/sample/markdown/rabbit.md +250 -246
- data/doc/en/usage/rabbit.rd +16 -0
- data/doc/ja/development.rd +30 -0
- data/doc/ja/index.rd +0 -5
- data/doc/ja/news.rd +55 -0
- data/doc/ja/sample/markdown/rabbit.md +251 -247
- data/doc/ja/usage/rabbit.rd +16 -1
- data/lib/rabbit/command/rabbit.rb +5 -1
- data/lib/rabbit/element/index-slide.rb +1 -1
- data/lib/rabbit/element/text-renderer.rb +7 -7
- data/lib/rabbit/gtk.rb +17 -10
- data/lib/rabbit/image/svg.rb +25 -23
- data/lib/rabbit/info-window.rb +1 -0
- data/lib/rabbit/parser/ext/rouge.rb +126 -0
- data/lib/rabbit/parser/markdown/converter.rb +4 -4
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +13 -1
- data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +3 -3
- data/lib/rabbit/parser/wiki/output.rb +9 -3
- data/lib/rabbit/progress.rb +16 -8
- data/lib/rabbit/renderer/display/drawing-area-base.rb +8 -8
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +3 -3
- data/lib/rabbit/renderer/display/graffiti.rb +39 -39
- data/lib/rabbit/renderer/display/progress.rb +3 -2
- data/lib/rabbit/renderer/display/search.rb +1 -1
- data/lib/rabbit/renderer/kernel.rb +1 -1
- data/lib/rabbit/search-window.rb +2 -2
- data/lib/rabbit/source/memory.rb +4 -0
- data/lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb +1 -1
- data/lib/rabbit/theme/color-circle-title-slide/color-circle-title-slide.rb +1 -1
- data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +1 -1
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +13 -2
- data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +2 -2
- data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
- data/lib/rabbit/theme/syntax-highlighting/syntax-highlighting.rb +3 -0
- data/lib/rabbit/theme/table/table.rb +1 -1
- data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +1 -1
- data/lib/rabbit/utils.rb +1 -1
- data/lib/rabbit/version.rb +2 -2
- data/po/en/rabbit.edit.po +107 -107
- data/po/fr/rabbit.edit.po +107 -107
- data/po/ja/rabbit.edit.po +107 -107
- data/rabbit.gemspec +3 -2
- data/sample/rabbit-en.rd +12 -0
- data/sample/rabbit.rd +12 -0
- data/test/parser/test-markdown.rb +9 -57
- metadata +20 -4
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2007-
|
1
|
+
# Copyright (C) 2007-2017 Kouhei Sutou <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
|
@@ -27,6 +27,7 @@ require "rabbit/parser/ext/blockdiag"
|
|
27
27
|
require "rabbit/parser/ext/coderay"
|
28
28
|
require "rabbit/parser/ext/emacs"
|
29
29
|
require "rabbit/parser/ext/entity"
|
30
|
+
require "rabbit/parser/ext/rouge"
|
30
31
|
|
31
32
|
module Rabbit
|
32
33
|
module Parser
|
@@ -248,7 +249,7 @@ module Rabbit
|
|
248
249
|
@table_head << @parent if @parent.parent.nil?
|
249
250
|
header = TableHeader.new(item)
|
250
251
|
def header.default_align
|
251
|
-
Pango::
|
252
|
+
Pango::Alignment::CENTER
|
252
253
|
end
|
253
254
|
@parent << header
|
254
255
|
end
|
@@ -282,7 +283,7 @@ module Rabbit
|
|
282
283
|
result = nil
|
283
284
|
|
284
285
|
if lang
|
285
|
-
result = Ext::
|
286
|
+
result = Ext::Rouge.highlight(lang, contents, @canvas.logger)
|
286
287
|
end
|
287
288
|
|
288
289
|
if result
|
@@ -534,6 +535,11 @@ module Rabbit
|
|
534
535
|
Ext::Emacs.highlight(source, logger, mode_line)
|
535
536
|
end
|
536
537
|
|
538
|
+
def rouge(lang, source)
|
539
|
+
logger = @output.canvas.logger
|
540
|
+
Ext::Rouge.highlight(lang, source, logger)
|
541
|
+
end
|
542
|
+
|
537
543
|
def tag(name, value=nil)
|
538
544
|
if value
|
539
545
|
CustomTag.new(name, @output.text(value))
|
data/lib/rabbit/progress.rb
CHANGED
@@ -4,51 +4,59 @@ module Rabbit
|
|
4
4
|
class Progress
|
5
5
|
attr_reader :window, :foreground, :background
|
6
6
|
def initialize
|
7
|
-
@window = Gtk::Window.new(:popup)
|
8
|
-
@window.app_paintable = true
|
9
|
-
@bar = Gtk::ProgressBar.new
|
10
|
-
@bar.show_text = true
|
11
|
-
@window.add(@bar)
|
12
7
|
@foreground = nil
|
13
8
|
@background = nil
|
14
9
|
end
|
15
10
|
|
16
11
|
def foreground=(color)
|
17
12
|
@foreground = color
|
18
|
-
setup_progress_color
|
19
13
|
end
|
20
14
|
|
21
15
|
def background=(color)
|
22
16
|
@background = color
|
23
|
-
setup_progress_color
|
24
17
|
end
|
25
18
|
|
26
19
|
def clear_color
|
27
20
|
@foreground = nil
|
28
21
|
@background = nil
|
29
|
-
setup_progress_color
|
30
22
|
end
|
31
23
|
|
32
24
|
def start_progress(max, parent)
|
33
25
|
return if max.zero?
|
26
|
+
|
27
|
+
@window = Gtk::Window.new(:popup)
|
34
28
|
@window.transient_for = parent
|
29
|
+
@window.app_paintable = true
|
30
|
+
@bar = Gtk::ProgressBar.new
|
31
|
+
@bar.show_text = true
|
32
|
+
@window.add(@bar)
|
35
33
|
@window.show_all
|
36
34
|
@bar.fraction = @current = 0
|
37
35
|
@max = max.to_f
|
36
|
+
|
37
|
+
setup_progress_color
|
38
38
|
end
|
39
39
|
|
40
40
|
def update_progress(i)
|
41
41
|
return if @max.nil?
|
42
|
+
|
42
43
|
@current = i
|
43
44
|
@bar.fraction = @current / @max
|
44
45
|
end
|
45
46
|
|
46
47
|
def end_progress
|
47
48
|
return if @max.nil?
|
49
|
+
|
48
50
|
@current = @max
|
49
51
|
@bar.fraction = @current / @max
|
50
52
|
end
|
51
53
|
|
54
|
+
def hide
|
55
|
+
@window.destroy
|
56
|
+
@bar = nil
|
57
|
+
@window = nil
|
58
|
+
end
|
59
|
+
|
52
60
|
private
|
53
61
|
def setup_progress_color
|
54
62
|
if Gtk.const_defined?(:CssProvider)
|
@@ -241,6 +241,13 @@ module Rabbit
|
|
241
241
|
def post_init_gui
|
242
242
|
end
|
243
243
|
|
244
|
+
def draw_slide(slide, simulation, &block)
|
245
|
+
super do |*args|
|
246
|
+
block.call(*args)
|
247
|
+
magnify {block.call(*args)} unless simulation
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
244
251
|
private
|
245
252
|
def add_widgets_to_container(container)
|
246
253
|
@hbox = Gtk::Box.new(:horizontal)
|
@@ -288,7 +295,7 @@ module Rabbit
|
|
288
295
|
context.paint
|
289
296
|
end
|
290
297
|
|
291
|
-
def draw(widget
|
298
|
+
def draw(widget)
|
292
299
|
reload_source unless @caching
|
293
300
|
|
294
301
|
if whiteouting?
|
@@ -303,13 +310,6 @@ module Rabbit
|
|
303
310
|
end
|
304
311
|
end
|
305
312
|
|
306
|
-
def draw_slide(slide, simulation, &block)
|
307
|
-
super do |*args|
|
308
|
-
block.call(*args)
|
309
|
-
magnify {block.call(*args)} unless simulation
|
310
|
-
end
|
311
|
-
end
|
312
|
-
|
313
313
|
def draw_current_slide_pixbuf(pixbuf)
|
314
314
|
width, height = pixbuf.width, pixbuf.height
|
315
315
|
x = @adjustment_x * width
|
@@ -140,21 +140,21 @@ module Rabbit
|
|
140
140
|
if @area.class.signals.include?("draw")
|
141
141
|
@area.signal_connect("draw") do |widget, context|
|
142
142
|
init_context(context)
|
143
|
-
draw(widget
|
143
|
+
draw(widget)
|
144
144
|
finish_renderer
|
145
145
|
stop_events
|
146
146
|
end
|
147
147
|
else
|
148
148
|
@area.signal_connect("expose_event") do |widget, event|
|
149
149
|
init_renderer(@drawable)
|
150
|
-
draw(widget
|
150
|
+
draw(widget)
|
151
151
|
finish_renderer
|
152
152
|
stop_events
|
153
153
|
end
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
|
-
def draw(widget
|
157
|
+
def draw(widget)
|
158
158
|
draw_current_slide
|
159
159
|
end
|
160
160
|
|
@@ -25,6 +25,45 @@ module Rabbit
|
|
25
25
|
graffiti_mode_action.active = false
|
26
26
|
end
|
27
27
|
|
28
|
+
def graffiti_mode?
|
29
|
+
graffiti_mode_action.active?
|
30
|
+
end
|
31
|
+
|
32
|
+
def have_graffiti?
|
33
|
+
@graffiti.have_graffiti?
|
34
|
+
end
|
35
|
+
|
36
|
+
def can_undo_graffiti?
|
37
|
+
@graffiti.can_undo?
|
38
|
+
end
|
39
|
+
|
40
|
+
def toggle_graffiti_mode
|
41
|
+
if graffiti_mode?
|
42
|
+
update_cursor(:pencil)
|
43
|
+
else
|
44
|
+
restore_cursor(nil)
|
45
|
+
end
|
46
|
+
update_menu
|
47
|
+
end
|
48
|
+
|
49
|
+
def clear_graffiti
|
50
|
+
@graffiti.clear
|
51
|
+
Action.update_graffiti_action_status(@canvas)
|
52
|
+
@area.queue_draw
|
53
|
+
end
|
54
|
+
|
55
|
+
def undo_graffiti
|
56
|
+
@graffiti.undo
|
57
|
+
Action.update_graffiti_action_status(@canvas)
|
58
|
+
@area.queue_draw
|
59
|
+
end
|
60
|
+
|
61
|
+
def change_graffiti_color
|
62
|
+
@graffiti.change_color do
|
63
|
+
redraw
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
28
67
|
private
|
29
68
|
def init_graffiti
|
30
69
|
@graffiti = Rabbit::Graffiti::Processor.new
|
@@ -75,45 +114,6 @@ module Rabbit
|
|
75
114
|
def graffiti_mode_action
|
76
115
|
@canvas.action("ToggleGraffitiMode")
|
77
116
|
end
|
78
|
-
|
79
|
-
def graffiti_mode?
|
80
|
-
graffiti_mode_action.active?
|
81
|
-
end
|
82
|
-
|
83
|
-
def have_graffiti?
|
84
|
-
@graffiti.have_graffiti?
|
85
|
-
end
|
86
|
-
|
87
|
-
def can_undo_graffiti?
|
88
|
-
@graffiti.can_undo?
|
89
|
-
end
|
90
|
-
|
91
|
-
def toggle_graffiti_mode
|
92
|
-
if graffiti_mode?
|
93
|
-
update_cursor(:pencil)
|
94
|
-
else
|
95
|
-
restore_cursor(nil)
|
96
|
-
end
|
97
|
-
update_menu
|
98
|
-
end
|
99
|
-
|
100
|
-
def clear_graffiti
|
101
|
-
@graffiti.clear
|
102
|
-
Action.update_graffiti_action_status(@canvas)
|
103
|
-
@area.queue_draw
|
104
|
-
end
|
105
|
-
|
106
|
-
def undo_graffiti
|
107
|
-
@graffiti.undo
|
108
|
-
Action.update_graffiti_action_status(@canvas)
|
109
|
-
@area.queue_draw
|
110
|
-
end
|
111
|
-
|
112
|
-
def change_graffiti_color
|
113
|
-
@graffiti.change_color do
|
114
|
-
redraw
|
115
|
-
end
|
116
|
-
end
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
@@ -27,6 +27,7 @@ module Rabbit
|
|
27
27
|
|
28
28
|
def start_progress(max)
|
29
29
|
return if max.zero?
|
30
|
+
|
30
31
|
update_menu
|
31
32
|
@progress.start_progress(max, @canvas.window)
|
32
33
|
adjust_progress_window
|
@@ -40,7 +41,7 @@ module Rabbit
|
|
40
41
|
def end_progress
|
41
42
|
@progress.end_progress
|
42
43
|
GLib::Timeout.add(100) do
|
43
|
-
@progress.
|
44
|
+
@progress.hide
|
44
45
|
update_menu
|
45
46
|
false
|
46
47
|
end
|
@@ -52,7 +53,7 @@ module Rabbit
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def adjust_progress_window
|
55
|
-
if @window
|
56
|
+
if @window and @progress.window
|
56
57
|
Utils.move_to_top_left(@window, @progress.window)
|
57
58
|
end
|
58
59
|
end
|
@@ -160,7 +160,7 @@ module Rabbit
|
|
160
160
|
text_height, flag_height)
|
161
161
|
base_x = x + pole_width
|
162
162
|
layout.width = flag_width * Pango::SCALE
|
163
|
-
layout.alignment = Pango::
|
163
|
+
layout.alignment = Pango::Alignment::CENTER
|
164
164
|
base_y = y
|
165
165
|
if text_height < flag_height
|
166
166
|
base_y += (flag_height - text_height) / 2
|
data/lib/rabbit/search-window.rb
CHANGED
data/lib/rabbit/source/memory.rb
CHANGED
@@ -9,14 +9,18 @@ module Rabbit
|
|
9
9
|
N_("[FILENAME_OR_NOT]")
|
10
10
|
end
|
11
11
|
|
12
|
+
attr_accessor :extension
|
13
|
+
|
12
14
|
def initialize(encoding, logger, name=nil)
|
13
15
|
super(encoding, logger)
|
14
16
|
if name
|
15
17
|
file_source = File.new(encoding, logger, name)
|
16
18
|
@original_source = file_source.read
|
17
19
|
set_base(file_source.base)
|
20
|
+
@extension = extract_extension(name)
|
18
21
|
else
|
19
22
|
@original_source = ""
|
23
|
+
@extension = nil
|
20
24
|
end
|
21
25
|
reset
|
22
26
|
end
|
@@ -44,7 +44,7 @@ def apply_background_image_property(element, options={})
|
|
44
44
|
image.compile(canvas, _x, _y, _w, _h)
|
45
45
|
|
46
46
|
case vertical_align
|
47
|
-
when "
|
47
|
+
when "middle"
|
48
48
|
adjust_height = ((_h - image.height - image.padding_bottom) / 2.0).ceil
|
49
49
|
if _y + adjust_height > 0
|
50
50
|
_y += adjust_height
|
@@ -9,7 +9,7 @@ match(TitleSlide, "*") do |elements|
|
|
9
9
|
element.margin_left = canvas.width * 0.2
|
10
10
|
element.margin_right = canvas.width * 0.05
|
11
11
|
unless [Title, Subtitle, Author].find {|type| element.is_a?(type)}
|
12
|
-
element.align = Pango::
|
12
|
+
element.align = Pango::Alignment::RIGHT
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -112,7 +112,7 @@ create_title_layout = lambda do |close_quote, block, canvas, x, y, w, h|
|
|
112
112
|
title = Text.new(_("[cited from `%s']") % block.title)
|
113
113
|
title.font(:size => @block_quote_title_font_size,
|
114
114
|
:style => "italic")
|
115
|
-
title.align = Pango::
|
115
|
+
title.align = Pango::Alignment::RIGHT
|
116
116
|
set_font_family(title)
|
117
117
|
title_w = w + block.padding_left + block.padding_right
|
118
118
|
if @block_quote_image_frame
|
@@ -29,11 +29,20 @@ end
|
|
29
29
|
:draw_scaled_pixbuf => false,
|
30
30
|
}
|
31
31
|
|
32
|
+
target_n_slides = nil
|
33
|
+
|
32
34
|
match(Slide) do |slides|
|
33
35
|
slides.delete_post_draw_proc_by_name(proc_name)
|
34
36
|
|
35
37
|
break if @image_slide_number_uninstall
|
36
38
|
|
39
|
+
slides.each do |slide|
|
40
|
+
if slide["image-slide-number-last-slide"] == "true"
|
41
|
+
target_n_slides = slide.index + 1
|
42
|
+
break
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
37
46
|
loader = ImageLoader.new(find_file(@image_slide_number_image))
|
38
47
|
unless @image_slide_number_show_text
|
39
48
|
start_loader = ImageLoader.new(find_file(@image_slide_number_start_image))
|
@@ -104,10 +113,12 @@ match(Slide) do |slides|
|
|
104
113
|
end
|
105
114
|
end
|
106
115
|
|
107
|
-
|
116
|
+
target_n_slides ||= canvas.slide_size
|
117
|
+
if target_n_slides < 3
|
108
118
|
ratio = 1
|
109
119
|
else
|
110
|
-
ratio = (slide.index - 1.0) / (
|
120
|
+
ratio = (slide.index - 1.0) / (target_n_slides - 2.0)
|
121
|
+
ratio = 1 if ratio > 1
|
111
122
|
end
|
112
123
|
current_base_x = base_x + max_width * ratio
|
113
124
|
loader.draw(canvas, current_base_x, base_y,
|
@@ -7,7 +7,7 @@
|
|
7
7
|
@lightning_talk_contact_information_color ||= nil
|
8
8
|
@lightning_talk_contact_information_font_family ||= @font_family
|
9
9
|
@lightning_talk_as_large_as_possible ||= false
|
10
|
-
@lightning_talk_wrap_mode ||= Pango::
|
10
|
+
@lightning_talk_wrap_mode ||= Pango::WrapMode::WORD
|
11
11
|
if @lightning_talk_horizontal_centering.nil?
|
12
12
|
@lightning_talk_horizontal_centering = true
|
13
13
|
end
|
@@ -99,7 +99,7 @@ def setup_lightning_talk_slide(slide)
|
|
99
99
|
:family => contact_information_family,
|
100
100
|
}
|
101
101
|
text.font(params)
|
102
|
-
text.align = Pango::
|
102
|
+
text.align = Pango::Alignment::RIGHT
|
103
103
|
text.compile(canvas, x, y, w, h)
|
104
104
|
text.layout.set_width(width * Pango::SCALE)
|
105
105
|
text_x = margin_left
|
@@ -17,7 +17,7 @@ match(Slide) do |slides|
|
|
17
17
|
unless simulation
|
18
18
|
text = Text.new("#{slide.index}/#{canvas.slide_size - 1}")
|
19
19
|
text.font @slide_number_props
|
20
|
-
text.align = Pango::
|
20
|
+
text.align = Pango::Alignment::RIGHT
|
21
21
|
text.compile(canvas, x, y, w, h)
|
22
22
|
layout = text.layout
|
23
23
|
layout.set_width(w * Pango::SCALE)
|