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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  3. data/doc/_config.yml +2 -2
  4. data/doc/_layouts/en.html +1 -1
  5. data/doc/_layouts/ja.html +1 -1
  6. data/doc/_layouts/skeleton.html +22 -17
  7. data/doc/css/rabbit.css +62 -4
  8. data/doc/en/development.rd +2 -2
  9. data/doc/en/news.rd +65 -2
  10. data/doc/index.html.en +15 -15
  11. data/doc/index.html.ja +20 -20
  12. data/doc/ja/development.rd +2 -2
  13. data/doc/ja/index.rd +4 -4
  14. data/doc/ja/news.rd +61 -2
  15. data/lib/rabbit/command/rabbit.rb +7 -62
  16. data/lib/rabbit/cursor-manager.rb +29 -22
  17. data/lib/rabbit/element/index-slide.rb +1 -1
  18. data/lib/rabbit/error.rb +224 -0
  19. data/lib/rabbit/frame.rb +6 -10
  20. data/lib/rabbit/graffiti/config-dialog.rb +4 -4
  21. data/lib/rabbit/gtk.rb +173 -3
  22. data/lib/rabbit/image/pdf.rb +1 -3
  23. data/lib/rabbit/image/svg.rb +1 -3
  24. data/lib/rabbit/info-window.rb +37 -30
  25. data/lib/rabbit/keys.rb +70 -70
  26. data/lib/rabbit/logger/gui.rb +3 -10
  27. data/lib/rabbit/menu.rb +22 -8
  28. data/lib/rabbit/parser.rb +4 -2
  29. data/lib/rabbit/parser/base.rb +0 -6
  30. data/lib/rabbit/parser/image.rb +4 -0
  31. data/lib/rabbit/parser/markdown.rb +33 -7
  32. data/lib/rabbit/parser/markdown/converter.rb +15 -4
  33. data/lib/rabbit/parser/pdf.rb +4 -0
  34. data/lib/rabbit/parser/rd.rb +4 -0
  35. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +47 -34
  36. data/lib/rabbit/parser/wiki.rb +4 -0
  37. data/lib/rabbit/parser/wiki/output.rb +42 -15
  38. data/lib/rabbit/progress.rb +1 -1
  39. data/lib/rabbit/rabbit.rb +8 -225
  40. data/lib/rabbit/renderer/base.rb +1 -1
  41. data/lib/rabbit/renderer/display/base.rb +10 -3
  42. data/lib/rabbit/renderer/display/button-handler.rb +3 -3
  43. data/lib/rabbit/renderer/display/clutter-embed.rb +9 -9
  44. data/lib/rabbit/renderer/display/drawing-area-base.rb +19 -24
  45. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +22 -13
  46. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +1 -1
  47. data/lib/rabbit/renderer/display/drawing-area.rb +1 -1
  48. data/lib/rabbit/renderer/display/gesture.rb +1 -1
  49. data/lib/rabbit/renderer/display/key-handler.rb +19 -19
  50. data/lib/rabbit/renderer/display/magnifier.rb +1 -1
  51. data/lib/rabbit/renderer/display/mask.rb +16 -21
  52. data/lib/rabbit/renderer/display/search.rb +1 -1
  53. data/lib/rabbit/renderer/display/spotlight.rb +1 -1
  54. data/lib/rabbit/renderer/engine.rb +1 -18
  55. data/lib/rabbit/renderer/engine/cairo.rb +0 -6
  56. data/lib/rabbit/renderer/pixmap.rb +1 -25
  57. data/lib/rabbit/renderer/pixmap/cairo.rb +1 -9
  58. data/lib/rabbit/renderer/print/cairo.rb +1 -10
  59. data/lib/rabbit/search-window.rb +2 -2
  60. data/lib/rabbit/source-generator/markdown.rb +1 -1
  61. data/lib/rabbit/stock.rb +3 -3
  62. data/lib/rabbit/task/slide.rb +1 -1
  63. data/lib/rabbit/theme/applier.rb +1 -1
  64. data/lib/rabbit/theme/clear-blue/clear-blue.rb +0 -8
  65. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +7 -5
  66. data/lib/rabbit/theme/image-timer/image-timer.rb +4 -1
  67. data/lib/rabbit/utils.rb +20 -3
  68. data/lib/rabbit/version.rb +1 -1
  69. data/lib/rabbit/video-window.rb +3 -3
  70. data/po/en/rabbit.edit.po +187 -199
  71. data/po/en/rabbit.po +58 -67
  72. data/po/fr/rabbit.edit.po +187 -199
  73. data/po/fr/rabbit.po +58 -67
  74. data/po/ja/rabbit.edit.po +204 -205
  75. data/po/ja/rabbit.po +64 -73
  76. data/rabbit.gemspec +2 -0
  77. data/sample/rabbit-en.md +2 -2
  78. data/sample/rabbit.md +2 -2
  79. data/test/image/test-dia.rb +2 -2
  80. data/test/image/test-eps.rb +2 -2
  81. data/test/parser/test-markdown.rb +71 -25
  82. data/test/parser/test-wiki.rb +73 -0
  83. data/test/rabbit-test-utils.rb +3 -7
  84. data/test/rabbit-test-utils/fixture.rb +24 -0
  85. data/test/rabbit-test-utils/parser.rb +48 -0
  86. data/test/source-generator/test-markdown.rb +1 -1
  87. metadata +37 -7
  88. data/README +0 -1
  89. data/doc/images/jp.png +0 -0
  90. data/doc/images/us.png +0 -0
  91. data/lib/rabbit/renderer/engine/gdk.rb +0 -230
  92. data/lib/rabbit/renderer/pixmap/gdk.rb +0 -29
@@ -16,6 +16,10 @@ module Rabbit
16
16
  class Wiki
17
17
  unshift_loader(self)
18
18
  class << self
19
+ def format_name
20
+ "Wiki"
21
+ end
22
+
19
23
  def match?(source)
20
24
  extension = source.extension
21
25
  if extension.nil?
@@ -1,15 +1,32 @@
1
- require 'rabbit/element'
2
- require 'rabbit/parser/pause-support'
3
- require 'rabbit/parser/ext/escape'
4
- require 'rabbit/parser/ext/inline'
5
- require 'rabbit/parser/ext/image'
6
- require 'rabbit/parser/ext/enscript'
7
- require 'rabbit/parser/ext/tex'
8
- require 'rabbit/parser/ext/aafigure'
9
- require 'rabbit/parser/ext/blockdiag'
10
- require 'rabbit/parser/ext/coderay'
11
- require 'rabbit/parser/ext/emacs'
12
- require 'rabbit/parser/ext/entity'
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, 'XXX.png', :align => :right}} " + \
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
@@ -4,7 +4,7 @@ module Rabbit
4
4
  class Progress
5
5
  attr_reader :window, :foreground, :background
6
6
  def initialize
7
- @window = Gtk::Window.new(Gtk::Window::POPUP)
7
+ @window = Gtk::Window.new(:popup)
8
8
  @window.app_paintable = true
9
9
  @bar = Gtk::ProgressBar.new
10
10
  @bar.show_text = true
@@ -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
- module_function
29
- def add_gui_init_proc(proc=Proc.new)
30
- @@gui_init_procs << proc
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
@@ -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, h = @drawable.size
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
- w, h = @drawable.size
166
- @size = Size.new(w, h, @size.ratio)
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::Event::Type::BUTTON_PRESS => "handle_button_press",
50
- Gdk::Event::Type::BUTTON2_PRESS => "handle_button2_press",
51
- Gdk::Event::Type::BUTTON3_PRESS => "handle_button3_press",
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::Event::BUTTON_PRESS_MASK
258
- event_mask |= Gdk::Event::BUTTON_RELEASE_MASK
259
- event_mask |= Gdk::Event::BUTTON1_MOTION_MASK
260
- event_mask |= Gdk::Event::BUTTON2_MOTION_MASK
261
- event_mask |= Gdk::Event::BUTTON3_MOTION_MASK
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::Event::BUTTON_PRESS_MASK |
498
- Gdk::Event::BUTTON_RELEASE_MASK |
499
- Gdk::Event::SCROLL_MASK |
500
- Gdk::Event::POINTER_MOTION_MASK,
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