rabbit 2.1.6 → 2.1.7
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/_layouts/en.html +1 -1
- data/doc/_layouts/ja.html +1 -1
- data/doc/_layouts/skeleton.html +22 -17
- data/doc/css/rabbit.css +62 -4
- data/doc/en/development.rd +2 -2
- data/doc/en/news.rd +65 -2
- data/doc/index.html.en +15 -15
- data/doc/index.html.ja +20 -20
- data/doc/ja/development.rd +2 -2
- data/doc/ja/index.rd +4 -4
- data/doc/ja/news.rd +61 -2
- data/lib/rabbit/command/rabbit.rb +7 -62
- data/lib/rabbit/cursor-manager.rb +29 -22
- data/lib/rabbit/element/index-slide.rb +1 -1
- data/lib/rabbit/error.rb +224 -0
- data/lib/rabbit/frame.rb +6 -10
- data/lib/rabbit/graffiti/config-dialog.rb +4 -4
- data/lib/rabbit/gtk.rb +173 -3
- data/lib/rabbit/image/pdf.rb +1 -3
- data/lib/rabbit/image/svg.rb +1 -3
- data/lib/rabbit/info-window.rb +37 -30
- data/lib/rabbit/keys.rb +70 -70
- data/lib/rabbit/logger/gui.rb +3 -10
- data/lib/rabbit/menu.rb +22 -8
- data/lib/rabbit/parser.rb +4 -2
- data/lib/rabbit/parser/base.rb +0 -6
- data/lib/rabbit/parser/image.rb +4 -0
- data/lib/rabbit/parser/markdown.rb +33 -7
- data/lib/rabbit/parser/markdown/converter.rb +15 -4
- data/lib/rabbit/parser/pdf.rb +4 -0
- data/lib/rabbit/parser/rd.rb +4 -0
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +47 -34
- data/lib/rabbit/parser/wiki.rb +4 -0
- data/lib/rabbit/parser/wiki/output.rb +42 -15
- data/lib/rabbit/progress.rb +1 -1
- data/lib/rabbit/rabbit.rb +8 -225
- data/lib/rabbit/renderer/base.rb +1 -1
- data/lib/rabbit/renderer/display/base.rb +10 -3
- data/lib/rabbit/renderer/display/button-handler.rb +3 -3
- data/lib/rabbit/renderer/display/clutter-embed.rb +9 -9
- data/lib/rabbit/renderer/display/drawing-area-base.rb +19 -24
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +22 -13
- data/lib/rabbit/renderer/display/drawing-area-view-only.rb +1 -1
- data/lib/rabbit/renderer/display/drawing-area.rb +1 -1
- data/lib/rabbit/renderer/display/gesture.rb +1 -1
- data/lib/rabbit/renderer/display/key-handler.rb +19 -19
- data/lib/rabbit/renderer/display/magnifier.rb +1 -1
- data/lib/rabbit/renderer/display/mask.rb +16 -21
- data/lib/rabbit/renderer/display/search.rb +1 -1
- data/lib/rabbit/renderer/display/spotlight.rb +1 -1
- data/lib/rabbit/renderer/engine.rb +1 -18
- data/lib/rabbit/renderer/engine/cairo.rb +0 -6
- data/lib/rabbit/renderer/pixmap.rb +1 -25
- data/lib/rabbit/renderer/pixmap/cairo.rb +1 -9
- data/lib/rabbit/renderer/print/cairo.rb +1 -10
- data/lib/rabbit/search-window.rb +2 -2
- data/lib/rabbit/source-generator/markdown.rb +1 -1
- data/lib/rabbit/stock.rb +3 -3
- data/lib/rabbit/task/slide.rb +1 -1
- data/lib/rabbit/theme/applier.rb +1 -1
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +0 -8
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +7 -5
- data/lib/rabbit/theme/image-timer/image-timer.rb +4 -1
- data/lib/rabbit/utils.rb +20 -3
- data/lib/rabbit/version.rb +1 -1
- data/lib/rabbit/video-window.rb +3 -3
- data/po/en/rabbit.edit.po +187 -199
- data/po/en/rabbit.po +58 -67
- data/po/fr/rabbit.edit.po +187 -199
- data/po/fr/rabbit.po +58 -67
- data/po/ja/rabbit.edit.po +204 -205
- data/po/ja/rabbit.po +64 -73
- data/rabbit.gemspec +2 -0
- data/sample/rabbit-en.md +2 -2
- data/sample/rabbit.md +2 -2
- data/test/image/test-dia.rb +2 -2
- data/test/image/test-eps.rb +2 -2
- data/test/parser/test-markdown.rb +71 -25
- data/test/parser/test-wiki.rb +73 -0
- data/test/rabbit-test-utils.rb +3 -7
- data/test/rabbit-test-utils/fixture.rb +24 -0
- data/test/rabbit-test-utils/parser.rb +48 -0
- data/test/source-generator/test-markdown.rb +1 -1
- metadata +37 -7
- data/README +0 -1
- data/doc/images/jp.png +0 -0
- data/doc/images/us.png +0 -0
- data/lib/rabbit/renderer/engine/gdk.rb +0 -230
- data/lib/rabbit/renderer/pixmap/gdk.rb +0 -29
data/lib/rabbit/parser/wiki.rb
CHANGED
@@ -1,15 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
# Copyright (C) 2007-2015 Kouhei Sutou <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 "rabbit/gettext"
|
18
|
+
require "rabbit/element"
|
19
|
+
require "rabbit/parser/pause-support"
|
20
|
+
require "rabbit/parser/ext/escape"
|
21
|
+
require "rabbit/parser/ext/inline"
|
22
|
+
require "rabbit/parser/ext/image"
|
23
|
+
require "rabbit/parser/ext/enscript"
|
24
|
+
require "rabbit/parser/ext/tex"
|
25
|
+
require "rabbit/parser/ext/aafigure"
|
26
|
+
require "rabbit/parser/ext/blockdiag"
|
27
|
+
require "rabbit/parser/ext/coderay"
|
28
|
+
require "rabbit/parser/ext/emacs"
|
29
|
+
require "rabbit/parser/ext/entity"
|
13
30
|
|
14
31
|
module Rabbit
|
15
32
|
module Parser
|
@@ -69,7 +86,7 @@ module Rabbit
|
|
69
86
|
@parent = slide
|
70
87
|
else
|
71
88
|
@title_slide = false
|
72
|
-
slide = Slide.new(HeadLine.new(title))
|
89
|
+
slide = Element::Slide.new(HeadLine.new(title))
|
73
90
|
body = Body.new
|
74
91
|
slide << body
|
75
92
|
@parent = body
|
@@ -340,6 +357,8 @@ module Rabbit
|
|
340
357
|
|
341
358
|
def evaluate_inline_plugin(src)
|
342
359
|
InlinePlugin.new(self).instance_eval(src, "(inline plugin)")
|
360
|
+
rescue ParseError
|
361
|
+
raise
|
343
362
|
rescue
|
344
363
|
@canvas.logger.warn($!)
|
345
364
|
nil
|
@@ -347,12 +366,15 @@ module Rabbit
|
|
347
366
|
|
348
367
|
def evaluate_block_plugin(src)
|
349
368
|
BlockPlugin.new(self).instance_eval(src, "(block plugin)")
|
369
|
+
rescue ParseError
|
370
|
+
raise
|
350
371
|
rescue
|
351
372
|
@canvas.logger.warn($!)
|
352
373
|
nil
|
353
374
|
end
|
354
375
|
|
355
376
|
class InlinePlugin
|
377
|
+
include GetText
|
356
378
|
include Element
|
357
379
|
include Parser::Ext::Inline
|
358
380
|
include Parser::Ext::Entity
|
@@ -361,6 +383,11 @@ module Rabbit
|
|
361
383
|
@private = Private.new(output)
|
362
384
|
end
|
363
385
|
|
386
|
+
def image(source, props={})
|
387
|
+
raise ParseError,
|
388
|
+
_("inline {{image(...)}} isn't supported.")
|
389
|
+
end
|
390
|
+
|
364
391
|
def entity(entity, *rest)
|
365
392
|
return nil unless TABLE.include?(entity)
|
366
393
|
|
@@ -434,12 +461,12 @@ module Rabbit
|
|
434
461
|
body = @output.current_body
|
435
462
|
if body["background-image"]
|
436
463
|
raise ParseError,
|
437
|
-
_("multiple {{image
|
464
|
+
_("multiple {{image(..., :align => :right)}} " + \
|
438
465
|
"isn't supported.")
|
439
466
|
end
|
440
467
|
body["background-image"] = source
|
441
468
|
props.each do |name, value|
|
442
|
-
name = name.to_s.gsub(/_/,
|
469
|
+
name = name.to_s.gsub(/_/, "-")
|
443
470
|
value = value.to_s if name == "align"
|
444
471
|
body["background-image-#{name}"] = value
|
445
472
|
end
|
data/lib/rabbit/progress.rb
CHANGED
data/lib/rabbit/rabbit.rb
CHANGED
@@ -19,237 +19,20 @@ require "rabbit/config"
|
|
19
19
|
require "rabbit/gettext"
|
20
20
|
require "rabbit/version"
|
21
21
|
|
22
|
+
require "rabbit/error"
|
23
|
+
|
24
|
+
require "rabbit/gtk"
|
25
|
+
|
22
26
|
module Rabbit
|
23
27
|
TMP_DIR_NAME = ".tmp"
|
24
28
|
|
29
|
+
@@application = nil
|
25
30
|
@@gui_init_procs = []
|
26
31
|
@@cleanup_procs = []
|
27
32
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def gui_init
|
34
|
-
@@gui_init_procs.each do |proc|
|
35
|
-
proc.call
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def add_cleanup_proc(proc=Proc.new)
|
40
|
-
@@cleanup_procs << proc
|
41
|
-
end
|
42
|
-
|
43
|
-
def cleanup
|
44
|
-
@@cleanup_procs.each do |proc|
|
45
|
-
proc.call
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
class Error < StandardError
|
50
|
-
include GetText
|
51
|
-
end
|
52
|
-
|
53
|
-
class ImageLoadError < Error
|
54
|
-
end
|
55
|
-
|
56
|
-
class ImageFileDoesNotExistError < ImageLoadError
|
57
|
-
attr_reader :filename
|
58
|
-
def initialize(filename)
|
59
|
-
@filename = filename
|
60
|
-
super(_("no such file: %s") % filename)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class ImageLoadWithExternalCommandError < ImageLoadError
|
65
|
-
attr_reader :type, :command
|
66
|
-
def initialize(type, command, additional_info=nil)
|
67
|
-
@type = type
|
68
|
-
@command = command
|
69
|
-
format =
|
70
|
-
_("can't handle %s because the following command " \
|
71
|
-
"can't be run successfully: %s")
|
72
|
-
msg = format % [@type, @command]
|
73
|
-
msg << "\n#{additional_info}" if additional_info
|
74
|
-
super(msg)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
class EPSCanNotHandleError < ImageLoadWithExternalCommandError
|
79
|
-
def initialize(command, tried_commands)
|
80
|
-
format = _("tried gs commands: %s")
|
81
|
-
additional_info = format % tried_commands.inspect
|
82
|
-
super("EPS", command, additional_info)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
class DiaCanNotHandleError < ImageLoadWithExternalCommandError
|
87
|
-
def initialize(command, tried_commands)
|
88
|
-
format = _("tried dia commands: %s")
|
89
|
-
additional_info = format % tried_commands.inspect
|
90
|
-
super("Dia", command, additional_info)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
class GIMPCanNotHandleError < ImageLoadWithExternalCommandError
|
95
|
-
def initialize(command, tried_commands)
|
96
|
-
format = _("tried gimp commands: %s")
|
97
|
-
additional_info = format % tried_commands.inspect
|
98
|
-
super("GIMP", command, additional_info)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
class TeXCanNotHandleError < ImageLoadWithExternalCommandError
|
103
|
-
def initialize(command, additional_info=nil)
|
104
|
-
super("TeX", command, additional_info)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
class AAFigureCanNotHandleError < ImageLoadWithExternalCommandError
|
109
|
-
def initialize(command, additional_info=nil)
|
110
|
-
super("aafigure", command, additional_info)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class BlockDiagCanNotHandleError < ImageLoadWithExternalCommandError
|
115
|
-
def initialize(command, additional_info=nil)
|
116
|
-
super("blockdiag", command, additional_info)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
class UnknownPropertyError < Error
|
121
|
-
attr_reader :name
|
122
|
-
def initialize(name)
|
123
|
-
@name = name
|
124
|
-
super(_("Unknown property: %s") % name)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
class CantAllocateColorError < Error
|
129
|
-
attr_reader :color
|
130
|
-
def initialize(color)
|
131
|
-
@color = color
|
132
|
-
super(_("can't allocate color: %s"), color)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
class SourceUnreadableError < Error
|
137
|
-
end
|
138
|
-
|
139
|
-
class NotExistError < SourceUnreadableError
|
140
|
-
attr_reader :name
|
141
|
-
def initialize(name)
|
142
|
-
@name = name
|
143
|
-
super(_("not exist: %s") % @name)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
class NotFileError < SourceUnreadableError
|
148
|
-
attr_reader :name
|
149
|
-
def initialize(name)
|
150
|
-
@name = name
|
151
|
-
super(_("not a file: %s") % @name)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
class NotReadableError < SourceUnreadableError
|
156
|
-
attr_reader :name
|
157
|
-
def initialize(name)
|
158
|
-
@name = name
|
159
|
-
super(_("can not be read: %s") % @name)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
class ImmutableSourceTypeError < Error
|
164
|
-
attr_reader :source_type
|
165
|
-
def initialize(source_type)
|
166
|
-
@source_type = source_type
|
167
|
-
super(_("immutable source type: %s") % @source_type)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
class ThemeExit < Error
|
172
|
-
def initialize(message=nil)
|
173
|
-
@have_message = !message.nil?
|
174
|
-
super
|
175
|
-
end
|
176
|
-
|
177
|
-
def have_message?
|
178
|
-
@have_message
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
class NotAvailableInterfaceError < Error
|
183
|
-
attr_reader :name
|
184
|
-
def initialize(name)
|
185
|
-
@name = name
|
186
|
-
super(_("not available interface: %s") % @name)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
class CantFindHTMLTemplate < Error
|
191
|
-
attr_reader :name
|
192
|
-
def initialize(name)
|
193
|
-
@name = name
|
194
|
-
super(_("can't find HTML template: %s") % @name)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
class CantFindThemeRDTemplate < Error
|
199
|
-
attr_reader :name
|
200
|
-
def initialize(name)
|
201
|
-
@name = name
|
202
|
-
super(_("can't find theme RD template: %s") % @name)
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
class InvalidMotionError < Error
|
207
|
-
attr_reader :motion
|
208
|
-
def initialize(motion)
|
209
|
-
@motion = motion
|
210
|
-
super(_("invalid motion: %s") % @motion)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
class InvalidImageSizeError < Error
|
215
|
-
attr_reader :filename, :prop_name, :value
|
216
|
-
def initialize(filename, prop_name, value)
|
217
|
-
@filename = filename
|
218
|
-
@prop_name = prop_name
|
219
|
-
@value = value
|
220
|
-
params = {
|
221
|
-
:filename => filename,
|
222
|
-
:prop_name => prop_name,
|
223
|
-
:value => value,
|
224
|
-
}
|
225
|
-
super(_("invalid value of size property \"%{prop_name}\" " \
|
226
|
-
"of image \"%{filename}\": %{value}") % params)
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
class ParseFinish < Error
|
231
|
-
end
|
232
|
-
|
233
|
-
class ParseError < Error
|
234
|
-
end
|
235
|
-
|
236
|
-
class UnsupportedFormatError < Error
|
237
|
-
end
|
238
|
-
|
239
|
-
class ApplyFinish < Error
|
240
|
-
end
|
241
|
-
|
242
|
-
class UnknownCursorTypeError < Error
|
243
|
-
attr_reader :type
|
244
|
-
def intialize(type)
|
245
|
-
@type = type
|
246
|
-
super(_("unknown cursor type: %s") % @type)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
class NoPrintSupportError < Error
|
251
|
-
def initialize
|
252
|
-
super(_("print isn't supported"))
|
33
|
+
class << self
|
34
|
+
def application
|
35
|
+
@@application ||= Gtk::Application.new(nil, :flags_none)
|
253
36
|
end
|
254
37
|
end
|
255
38
|
end
|
data/lib/rabbit/renderer/base.rb
CHANGED
@@ -302,7 +302,7 @@ module Rabbit
|
|
302
302
|
end
|
303
303
|
|
304
304
|
def make_canvas_with_off_screen_renderer
|
305
|
-
make_canvas_with_renderer(Pixmap) do |canvas|
|
305
|
+
make_canvas_with_renderer(Pixmap::Cairo) do |canvas|
|
306
306
|
canvas.width = @canvas.width
|
307
307
|
canvas.height = @canvas.height
|
308
308
|
setup_3d(canvas)
|
@@ -35,6 +35,11 @@ module Rabbit
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def size
|
39
|
+
refresh_size
|
40
|
+
@size
|
41
|
+
end
|
42
|
+
|
38
43
|
def redraw
|
39
44
|
widget.queue_draw
|
40
45
|
end
|
@@ -140,7 +145,8 @@ module Rabbit
|
|
140
145
|
private
|
141
146
|
def set_drawable(drawable)
|
142
147
|
@drawable = drawable
|
143
|
-
w
|
148
|
+
w = @drawable.width
|
149
|
+
h = @drawable.height
|
144
150
|
@default_size_ratio = w.to_f / h.to_f
|
145
151
|
@size_ratio = @default_size_ratio
|
146
152
|
set_size(w, h)
|
@@ -162,8 +168,9 @@ module Rabbit
|
|
162
168
|
def refresh_size
|
163
169
|
return unless @size_dirty
|
164
170
|
|
165
|
-
|
166
|
-
|
171
|
+
@size = Size.new(@drawable.width,
|
172
|
+
@drawable.height,
|
173
|
+
@size.ratio)
|
167
174
|
@size_dirty = false
|
168
175
|
end
|
169
176
|
|
@@ -46,9 +46,9 @@ module Rabbit
|
|
46
46
|
end
|
47
47
|
|
48
48
|
BUTTON_PRESS_HANDLER = {
|
49
|
-
Gdk::
|
50
|
-
Gdk::
|
51
|
-
Gdk::
|
49
|
+
Gdk::EventType::BUTTON_PRESS => "handle_button_press",
|
50
|
+
Gdk::EventType::BUTTON2_PRESS => "handle_button2_press",
|
51
|
+
Gdk::EventType::BUTTON3_PRESS => "handle_button3_press",
|
52
52
|
}
|
53
53
|
|
54
54
|
def handle_button_release(event, last_button_press_event)
|
@@ -254,11 +254,11 @@ module Rabbit
|
|
254
254
|
set_expose_event
|
255
255
|
set_configure_event_after
|
256
256
|
|
257
|
-
event_mask = Gdk::
|
258
|
-
event_mask |= Gdk::
|
259
|
-
event_mask |= Gdk::
|
260
|
-
event_mask |= Gdk::
|
261
|
-
event_mask |= Gdk::
|
257
|
+
event_mask = Gdk::EventMask::BUTTON_PRESS_MASK
|
258
|
+
event_mask |= Gdk::EventMask::BUTTON_RELEASE_MASK
|
259
|
+
event_mask |= Gdk::EventMask::BUTTON1_MOTION_MASK
|
260
|
+
event_mask |= Gdk::EventMask::BUTTON2_MOTION_MASK
|
261
|
+
event_mask |= Gdk::EventMask::BUTTON3_MOTION_MASK
|
262
262
|
@embed.add_events(event_mask)
|
263
263
|
set_key_press_event(@embed)
|
264
264
|
set_button_event(@embed)
|
@@ -494,10 +494,10 @@ module Rabbit
|
|
494
494
|
def grab
|
495
495
|
Gtk.grab_add(@embed)
|
496
496
|
Gdk.pointer_grab(@embed.window, false,
|
497
|
-
Gdk::
|
498
|
-
Gdk::
|
499
|
-
Gdk::
|
500
|
-
Gdk::
|
497
|
+
Gdk::EventMask::BUTTON_PRESS_MASK |
|
498
|
+
Gdk::EventMask::BUTTON_RELEASE_MASK |
|
499
|
+
Gdk::EventMask::SCROLL_MASK |
|
500
|
+
Gdk::EventMask::POINTER_MOTION_MASK,
|
501
501
|
nil, nil,
|
502
502
|
Gdk::Event::CURRENT_TIME)
|
503
503
|
end
|