rabbit 2.1.6 → 2.1.7

Sign up to get free protection for your applications and to get access to all the features.
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