rabbit 3.0.4 → 4.0.0

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 (243) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Rakefile +53 -7
  4. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  5. data/doc/_config.yml +2 -2
  6. data/doc/en/news.rd +69 -1
  7. data/doc/ja/news.rd +68 -0
  8. data/lib/rabbit/actions.rb +446 -0
  9. data/lib/rabbit/author-configuration.rb +7 -10
  10. data/lib/rabbit/canvas.rb +74 -42
  11. data/lib/rabbit/command/rabbit-slide.rb +11 -13
  12. data/lib/rabbit/command/rabbit-theme.rb +10 -12
  13. data/lib/rabbit/command/rabbit.rb +31 -43
  14. data/lib/rabbit/console.rb +20 -22
  15. data/lib/rabbit/dependency-canvas.rb +2 -2
  16. data/lib/rabbit/element/base.rb +93 -6
  17. data/lib/rabbit/element/block-element.rb +17 -1
  18. data/lib/rabbit/element/block.rb +17 -1
  19. data/lib/rabbit/element/container-element.rb +59 -3
  20. data/lib/rabbit/element/description-list.rb +18 -2
  21. data/lib/rabbit/element/enum-list.rb +18 -2
  22. data/lib/rabbit/element/footnote.rb +18 -2
  23. data/lib/rabbit/element/image-title-slide.rb +17 -1
  24. data/lib/rabbit/element/image.rb +32 -2
  25. data/lib/rabbit/element/index-slide.rb +29 -13
  26. data/lib/rabbit/element/item-list.rb +18 -2
  27. data/lib/rabbit/element/method-list.rb +18 -2
  28. data/lib/rabbit/element/poppler-page.rb +17 -1
  29. data/lib/rabbit/element/poppler-slide.rb +18 -2
  30. data/lib/rabbit/element/poppler-title-slide.rb +18 -2
  31. data/lib/rabbit/element/preformatted.rb +18 -2
  32. data/lib/rabbit/element/slide-element.rb +29 -2
  33. data/lib/rabbit/element/slide.rb +18 -2
  34. data/lib/rabbit/element/syntax-highlighting.rb +17 -1
  35. data/lib/rabbit/element/table.rb +19 -3
  36. data/lib/rabbit/element/tag.rb +18 -2
  37. data/lib/rabbit/element/text-block-element.rb +18 -2
  38. data/lib/rabbit/element/text-container-element.rb +41 -2
  39. data/lib/rabbit/element/text-element.rb +17 -1
  40. data/lib/rabbit/element/text-renderer.rb +17 -1
  41. data/lib/rabbit/element/text.rb +4 -4
  42. data/lib/rabbit/element/title-slide.rb +19 -3
  43. data/lib/rabbit/element/video.rb +157 -56
  44. data/lib/rabbit/element.rb +20 -20
  45. data/lib/rabbit/formatter.rb +18 -1
  46. data/lib/rabbit/frame.rb +102 -90
  47. data/lib/rabbit/front.rb +11 -4
  48. data/lib/rabbit/gem-finder.rb +4 -8
  49. data/lib/rabbit/gem-pusher.rb +4 -4
  50. data/lib/rabbit/gesture/handler.rb +26 -21
  51. data/lib/rabbit/graffiti/config-dialog.rb +18 -2
  52. data/lib/rabbit/graffiti/processor.rb +20 -4
  53. data/lib/rabbit/gtk.rb +48 -14
  54. data/lib/rabbit/html/generator.rb +18 -18
  55. data/{test/helper/fixture.rb → lib/rabbit/icon.rb} +16 -6
  56. data/lib/rabbit/image/base.rb +7 -6
  57. data/lib/rabbit/image/default.rb +17 -1
  58. data/lib/rabbit/image/dia.rb +2 -2
  59. data/lib/rabbit/image/eps.rb +16 -2
  60. data/lib/rabbit/image/gimp.rb +28 -11
  61. data/lib/rabbit/image/mermaid.rb +3 -3
  62. data/lib/rabbit/image/pdf.rb +3 -3
  63. data/lib/rabbit/image/svg.rb +2 -2
  64. data/lib/rabbit/image.rb +8 -8
  65. data/lib/rabbit/info-window.rb +55 -18
  66. data/lib/rabbit/key-handler.rb +381 -0
  67. data/lib/rabbit/keys.rb +31 -2
  68. data/lib/rabbit/logger/base.rb +17 -1
  69. data/lib/rabbit/logger/gui.rb +20 -4
  70. data/lib/rabbit/logger/stderr.rb +16 -2
  71. data/lib/rabbit/logger.rb +4 -4
  72. data/lib/rabbit/menu.rb +200 -220
  73. data/lib/rabbit/parser/base.rb +17 -1
  74. data/lib/rabbit/parser/ext/aafigure.rb +17 -1
  75. data/lib/rabbit/parser/ext/blockdiag.rb +17 -1
  76. data/lib/rabbit/parser/ext/charty.rb +2 -2
  77. data/lib/rabbit/parser/ext/coderay.rb +20 -4
  78. data/lib/rabbit/parser/ext/enscript.rb +31 -15
  79. data/lib/rabbit/parser/ext/entity.rb +17 -1
  80. data/lib/rabbit/parser/ext/image.rb +6 -6
  81. data/lib/rabbit/parser/ext/inline.rb +17 -1
  82. data/lib/rabbit/parser/ext/rouge.rb +7 -4
  83. data/lib/rabbit/parser/ext/tex.rb +18 -2
  84. data/lib/rabbit/parser/ext/video.rb +4 -4
  85. data/lib/rabbit/parser/image.rb +20 -4
  86. data/lib/rabbit/parser/markdown/converter.rb +12 -13
  87. data/lib/rabbit/parser/markdown.rb +18 -2
  88. data/lib/rabbit/parser/pause-support.rb +1 -0
  89. data/lib/rabbit/parser/pdf.rb +3 -3
  90. data/lib/rabbit/parser/rd/ext/base.rb +20 -4
  91. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +24 -28
  92. data/lib/rabbit/parser/rd/ext/character-reference.rb +18 -2
  93. data/lib/rabbit/parser/rd/ext/image.rb +3 -3
  94. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +6 -6
  95. data/lib/rabbit/parser/rd/ext/refer.rb +18 -2
  96. data/lib/rabbit/parser/rd/ext/video.rb +19 -2
  97. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +24 -8
  98. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +18 -2
  99. data/lib/rabbit/parser/rd/visitor.rb +18 -2
  100. data/lib/rabbit/parser/rd.rb +18 -2
  101. data/lib/rabbit/parser/wiki/output.rb +25 -28
  102. data/lib/rabbit/parser/wiki.rb +18 -2
  103. data/lib/rabbit/parser.rb +8 -6
  104. data/lib/rabbit/path-manipulatable.rb +4 -4
  105. data/lib/rabbit/progress.rb +17 -1
  106. data/lib/rabbit/properties.rb +3 -3
  107. data/lib/rabbit/rabbit.rb +15 -7
  108. data/lib/rabbit/readme-parser.rb +4 -6
  109. data/lib/rabbit/renderer/base.rb +44 -36
  110. data/lib/rabbit/renderer/color.rb +18 -2
  111. data/lib/rabbit/renderer/display/base.rb +10 -12
  112. data/lib/rabbit/renderer/display/button-handler.rb +141 -60
  113. data/lib/rabbit/renderer/display/cursor.rb +4 -5
  114. data/lib/rabbit/renderer/display/drawing-area-base.rb +32 -48
  115. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +10 -61
  116. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +19 -8
  117. data/lib/rabbit/renderer/display/drawing-area.rb +19 -15
  118. data/lib/rabbit/renderer/display/gesture.rb +9 -9
  119. data/lib/rabbit/renderer/display/graffiti.rb +22 -13
  120. data/lib/rabbit/renderer/display/info.rb +22 -2
  121. data/lib/rabbit/renderer/display/magnifier.rb +30 -17
  122. data/lib/rabbit/renderer/display/mask.rb +17 -1
  123. data/lib/rabbit/renderer/display/menu.rb +27 -3
  124. data/lib/rabbit/renderer/display/motion-handler.rb +45 -0
  125. data/lib/rabbit/renderer/display/progress.rb +17 -2
  126. data/lib/rabbit/renderer/display/scroll-handler.rb +60 -13
  127. data/lib/rabbit/renderer/display/search.rb +19 -2
  128. data/lib/rabbit/renderer/display/spotlight.rb +39 -25
  129. data/lib/rabbit/renderer/display.rb +16 -36
  130. data/lib/rabbit/renderer/engine/cairo.rb +4 -11
  131. data/lib/rabbit/renderer/engine.rb +17 -1
  132. data/lib/rabbit/renderer/kernel.rb +2 -20
  133. data/lib/rabbit/renderer/offscreen.rb +8 -14
  134. data/lib/rabbit/renderer/print-layout.rb +2 -2
  135. data/lib/rabbit/renderer/printer.rb +9 -16
  136. data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
  137. data/lib/rabbit/renderer/scene-node-widget.rb +63 -0
  138. data/lib/rabbit/renderer/scene.rb +508 -0
  139. data/lib/rabbit/renderer.rb +6 -6
  140. data/lib/rabbit/search-window.rb +18 -2
  141. data/lib/rabbit/searcher.rb +15 -1
  142. data/lib/rabbit/size.rb +9 -1
  143. data/lib/rabbit/slide-configuration.rb +11 -14
  144. data/lib/rabbit/soap/driver.rb +20 -4
  145. data/lib/rabbit/soap/server.rb +17 -1
  146. data/lib/rabbit/source/argf.rb +5 -5
  147. data/lib/rabbit/source/base.rb +5 -6
  148. data/lib/rabbit/source/file.rb +5 -5
  149. data/lib/rabbit/source/memory.rb +20 -4
  150. data/lib/rabbit/source/uri.rb +9 -11
  151. data/lib/rabbit/source-generator/hiki.rb +2 -7
  152. data/lib/rabbit/source-generator/markdown.rb +2 -7
  153. data/lib/rabbit/source-generator/rd.rb +2 -7
  154. data/lib/rabbit/source-generator.rb +4 -4
  155. data/lib/rabbit/source.rb +5 -5
  156. data/lib/rabbit/task/slide.rb +13 -11
  157. data/lib/rabbit/task/theme.rb +8 -11
  158. data/lib/rabbit/task.rb +3 -3
  159. data/lib/rabbit/theme/applier.rb +27 -11
  160. data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
  161. data/lib/rabbit/theme/color-circle/color-circle.rb +18 -1
  162. data/lib/rabbit/theme/cozmixng/cozmixng.rb +1 -1
  163. data/lib/rabbit/theme/default/default.rb +1 -0
  164. data/lib/rabbit/theme/default-icon/default-icon.rb +1 -1
  165. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +17 -1
  166. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +9 -1
  167. data/lib/rabbit/theme/enishi-green/enishi-green.rb +1 -1
  168. data/lib/rabbit/theme/entry.rb +10 -12
  169. data/lib/rabbit/theme/icon/icon.rb +3 -8
  170. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +5 -5
  171. data/lib/rabbit/theme/image-timer/image-timer.rb +3 -3
  172. data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +1 -0
  173. data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +1 -0
  174. data/lib/rabbit/theme/manager.rb +19 -9
  175. data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +1 -1
  176. data/lib/rabbit/theme/ranguba/ranguba.rb +1 -1
  177. data/lib/rabbit/theme/red-frame/red-frame.rb +6 -2
  178. data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +1 -0
  179. data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +1 -1
  180. data/lib/rabbit/theme/searcher.rb +23 -7
  181. data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
  182. data/lib/rabbit/theme/slide-show/slide-show.rb +1 -1
  183. data/lib/rabbit/theme/table/table.rb +2 -2
  184. data/lib/rabbit/theme/video/property.rb +3 -0
  185. data/lib/rabbit/theme/video/video.rb +5 -0
  186. data/lib/rabbit/theme-configuration.rb +9 -11
  187. data/lib/rabbit/utils.rb +12 -94
  188. data/lib/rabbit/version.rb +2 -2
  189. data/lib/rabbit/xmlrpc/client.rb +17 -1
  190. data/lib/rabbit/xmlrpc/server.rb +17 -1
  191. data/po/en/rabbit.edit.po +325 -317
  192. data/po/en/rabbit.po +61 -55
  193. data/po/fr/rabbit.edit.po +325 -317
  194. data/po/fr/rabbit.po +61 -55
  195. data/po/ja/rabbit.edit.po +346 -371
  196. data/po/ja/rabbit.po +83 -80
  197. data/rabbit.gemspec +4 -2
  198. data/sample/block-quote.rab +13 -0
  199. data/sample/description-list.rab +17 -0
  200. data/sample/mermaid.rab +16 -0
  201. data/sample/rabbit-en.hiki +0 -1
  202. data/sample/rabbit-en.md +0 -1
  203. data/sample/rabbit-en.rd +0 -1
  204. data/sample/rabbit.hiki +0 -1
  205. data/sample/rabbit.md +0 -1
  206. data/sample/rabbit.rd +0 -1
  207. data/sample/video.rab +17 -0
  208. metadata +33 -65
  209. data/lib/rabbit/action/basic.rb +0 -304
  210. data/lib/rabbit/action/radio.rb +0 -78
  211. data/lib/rabbit/action/toggle.rb +0 -82
  212. data/lib/rabbit/action.rb +0 -140
  213. data/lib/rabbit/renderer/display/gl.rb +0 -98
  214. data/lib/rabbit/renderer/display/key-handler.rb +0 -321
  215. data/lib/rabbit/renderer/gl.rb +0 -95
  216. data/lib/rabbit/renderer/screen.rb +0 -286
  217. data/lib/rabbit/renderer/widget/drawing-area.rb +0 -93
  218. data/lib/rabbit/stock.rb +0 -31
  219. data/lib/rabbit/trackball.rb +0 -228
  220. data/lib/rabbit/video-window.rb +0 -123
  221. data/test/command/test-rabbit.rb +0 -101
  222. data/test/helper/parser.rb +0 -48
  223. data/test/helper.rb +0 -24
  224. data/test/image/test-dia.rb +0 -54
  225. data/test/image/test-eps.rb +0 -41
  226. data/test/parser/test-markdown.rb +0 -360
  227. data/test/parser/test-rd.rb +0 -43
  228. data/test/parser/test-wiki.rb +0 -71
  229. data/test/run-test.rb +0 -27
  230. data/test/source-generator/test-hiki.rb +0 -68
  231. data/test/source-generator/test-markdown.rb +0 -67
  232. data/test/source-generator/test-rd.rb +0 -69
  233. data/test/test-applier.rb +0 -73
  234. data/test/test-author-configuration.rb +0 -37
  235. data/test/test-canvas.rb +0 -70
  236. data/test/test-color.rb +0 -51
  237. data/test/test-element.rb +0 -103
  238. data/test/test-readme-parser.rb +0 -160
  239. data/test/test-size.rb +0 -155
  240. data/test/test-slide-configuration.rb +0 -74
  241. data/test/test-source.rb +0 -122
  242. data/test/test-theme-configuration.rb +0 -47
  243. data/test/test-utils.rb +0 -64
data/lib/rabbit/canvas.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004-2024 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2004-2025 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,17 +15,19 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
17
  require "forwardable"
18
- require "rabbit/gtk"
19
-
20
- require "rabbit/rabbit"
21
- require "rabbit/filename"
22
- require "rabbit/frame"
23
- require "rabbit/element"
24
- require "rabbit/parser"
25
- require "rabbit/theme/manager"
26
- require "rabbit/front"
27
- require "rabbit/action"
28
- require "rabbit/html/generator"
18
+
19
+ require_relative "gtk"
20
+
21
+ require_relative "actions"
22
+ require_relative "element"
23
+ require_relative "filename"
24
+ require_relative "frame"
25
+ require_relative "front"
26
+ require_relative "html/generator"
27
+ require_relative "key-handler"
28
+ require_relative "parser"
29
+ require_relative "rabbit"
30
+ require_relative "theme/manager"
29
31
 
30
32
  module Rabbit
31
33
  class Canvas
@@ -118,14 +120,16 @@ module Rabbit
118
120
  def_delegators(:@renderer, :graffiti_line_width, :graffiti_line_width=)
119
121
 
120
122
  def_delegators(:@renderer, :toggle_info_window)
121
- def_delegators(:@renderer, :toggle_spotlight, :toggle_magnifier)
123
+ def_delegators(:@renderer, :info_window_showing?)
124
+ def_delegators(:@renderer, :toggle_spotlight)
125
+ def_delegators(:@renderer, :spotlighting?)
126
+ def_delegators(:@renderer, :toggle_magnifier)
127
+ def_delegators(:@renderer, :magnifying?)
122
128
 
123
129
  def_delegators(:@renderer, :add_gesture_action)
124
130
 
125
131
  def_delegators(:@renderer, :post_init_gui)
126
132
 
127
- def_delegators(:@renderer, :connect_key, :disconnect_key)
128
-
129
133
  def_delegators(:@renderer, :expand_hole, :narrow_hole)
130
134
 
131
135
  def_delegators(:@renderer, :search_slide, :stop_slide_search, :searching?)
@@ -134,7 +138,7 @@ module Rabbit
134
138
 
135
139
  def_delegators(:@source, :source=, :reset, :base)
136
140
 
137
- attr_reader :logger, :renderer, :last_modified
141
+ attr_reader :renderer, :last_modified
138
142
  attr_reader :comments, :actions
139
143
 
140
144
  attr_writer :saved_image_base_name
@@ -147,8 +151,7 @@ module Rabbit
147
151
  attr_accessor :font_resolution_ratio
148
152
  attr_accessor :max_n_comments, :comment_theme
149
153
 
150
- def initialize(logger, renderer)
151
- @logger = logger
154
+ def initialize(renderer_class)
152
155
  @frame = NullFrame.new
153
156
  @theme_name = nil
154
157
  @saved_image_base_name = nil
@@ -169,9 +172,17 @@ module Rabbit
169
172
  @max_n_comments = 100
170
173
  @allotted_time = nil
171
174
  @comment_theme = nil
175
+ @index_mode = false
176
+ @key_handler = nil
172
177
  clear
173
- @renderer = renderer.new(self)
174
- @actions = Action.action_group(self)
178
+ @renderer = renderer_class.new(self)
179
+ @actions = Actions.new(self)
180
+ end
181
+
182
+ def logger
183
+ message = "Rabbit::Canvas#logger is deprecated. Use Rabbit.logger instead."
184
+ Rabbit.logger.warn(message)
185
+ Rabbit.logger
175
186
  end
176
187
 
177
188
  def quitted?
@@ -201,11 +212,15 @@ module Rabbit
201
212
 
202
213
  def attach_to(frame, window, container=nil, &block)
203
214
  @frame = frame if frame
204
- @renderer.attach_to(window, container, &block) if window
215
+ if window
216
+ @key_handler = KeyHandler.new(self, window)
217
+ @renderer.attach_to(window, container, &block)
218
+ end
205
219
  end
206
220
 
207
221
  def detach
208
222
  @frame = NullFrame.new
223
+ @key_handler&.detach
209
224
  @renderer.detach
210
225
  end
211
226
 
@@ -263,10 +278,17 @@ module Rabbit
263
278
  indexes
264
279
  end
265
280
 
266
- def slide_size
281
+ def n_slides
267
282
  slides.size
268
283
  end
269
284
 
285
+ def slide_size
286
+ warn("#{self.class.name}\##{__method__} is deprecated. " +
287
+ "Use \#n_slides instead.",
288
+ category: :deprecated)
289
+ n_slides
290
+ end
291
+
270
292
  def current_slide
271
293
  slide = slides[current_index]
272
294
  if slide
@@ -294,7 +316,7 @@ module Rabbit
294
316
  index = @current_index
295
317
  @current_index = new_index
296
318
  end
297
- if 0 <= current_index and current_index < slide_size
319
+ if 0 <= current_index and current_index < n_slides
298
320
  yield
299
321
  end
300
322
  ensure
@@ -368,7 +390,7 @@ module Rabbit
368
390
  if block_given?
369
391
  yield($!)
370
392
  else
371
- logger.warn($!.message)
393
+ Rabbit.logger.warn($!.message)
372
394
  end
373
395
  ensure
374
396
  @parse_request_queue.delete_if {|x| x == id}
@@ -431,11 +453,21 @@ module Rabbit
431
453
  @renderer.post_iconify
432
454
  end
433
455
 
456
+ def connect_key(keyval, modifier, flags, &block)
457
+ @key_handler.connect_key(keyval, modifier, flags, &block) if @key_handler
458
+ end
459
+
460
+ def disconnect_key(keyval, modifier)
461
+ @key_handler.disconnect_key(keyval, modifier) if @key_handler
462
+ end
463
+
434
464
  def pre_terminal
435
465
  @renderer.pre_terminal
466
+ @key_handler.pre_terminal if @key_handler
436
467
  end
437
468
 
438
469
  def post_terminal
470
+ @key_handler.post_terminal if @key_handler
439
471
  @renderer.post_terminal
440
472
  end
441
473
 
@@ -450,7 +482,7 @@ module Rabbit
450
482
  end
451
483
 
452
484
  def move_to_if_can(index)
453
- if index and 0 <= index and index < slide_size
485
+ if index and 0 <= index and index < n_slides
454
486
  move_to(index)
455
487
  end
456
488
  current_index
@@ -461,7 +493,7 @@ module Rabbit
461
493
  if slide and !slide.last?
462
494
  old_index = slide.drawing_index
463
495
  slide.move_to_next
464
- Action.update_status(self)
496
+ @actions.update_status
465
497
  @renderer.post_move_in_slide(old_index, slide.drawing_index)
466
498
  else
467
499
  move_to_next_slide_if_can
@@ -477,7 +509,7 @@ module Rabbit
477
509
  if slide and !slide.first?
478
510
  old_index = slide.drawing_index
479
511
  slide.move_to_previous
480
- Action.update_status(self)
512
+ @actions.update_status
481
513
  @renderer.post_move_in_slide(old_index, slide.drawing_index)
482
514
  else
483
515
  move_to_previous_slide_if_can
@@ -493,7 +525,7 @@ module Rabbit
493
525
  end
494
526
 
495
527
  def move_to_last
496
- move_to(slide_size - 1)
528
+ move_to(n_slides - 1)
497
529
  end
498
530
 
499
531
  def index_mode?
@@ -538,7 +570,7 @@ module Rabbit
538
570
  end
539
571
 
540
572
  def last_slide?
541
- slide_size.zero? or current_index == (slide_size - 1)
573
+ n_slides.zero? or current_index == (n_slides - 1)
542
574
  end
543
575
 
544
576
  def have_previous_slide?
@@ -552,7 +584,7 @@ module Rabbit
552
584
  end
553
585
 
554
586
  def have_next_slide?
555
- slide_size - 1 > current_index
587
+ n_slides - 1 > current_index
556
588
  end
557
589
 
558
590
  def have_next?
@@ -609,7 +641,7 @@ module Rabbit
609
641
  begin
610
642
  callback.call(comment)
611
643
  rescue
612
- logger.error($!)
644
+ Rabbit.logger.error($!)
613
645
  end
614
646
  end
615
647
  true
@@ -619,10 +651,10 @@ module Rabbit
619
651
  @slides.find{|x| x.is_a?(Element::TitleSlide)}
620
652
  end
621
653
 
622
- def activate(name, &block)
654
+ def activate(name, argument=nil)
623
655
  act = action(name)
624
- if act and act.sensitive?
625
- act.activate(&block)
656
+ if act and act.enabled?
657
+ act.activate(argument)
626
658
  true
627
659
  else
628
660
  false
@@ -630,11 +662,11 @@ module Rabbit
630
662
  end
631
663
 
632
664
  def action(name)
633
- act = @actions.get_action(name)
665
+ act = @actions[name]
634
666
  if act
635
667
  act
636
668
  else
637
- logger.warn(_("Unknown action: %s") % name)
669
+ Rabbit.logger.warn(_("Unknown action: %s") % name)
638
670
  false
639
671
  end
640
672
  end
@@ -707,7 +739,7 @@ module Rabbit
707
739
  success = false
708
740
  index_mode = @index_mode
709
741
  begin
710
- Action.update_status(self)
742
+ @actions.update_status
711
743
  clear_theme
712
744
  clear_index_slides
713
745
  manager = Theme::Manager.new(self) do
@@ -722,7 +754,7 @@ module Rabbit
722
754
  rescue ApplyFinish
723
755
  ensure
724
756
  @apply_theme_request_queue.delete_if {|x| x == id}
725
- Action.update_status(self)
757
+ @actions.update_status
726
758
  end
727
759
  activate("ToggleIndexMode") if success and index_mode
728
760
  end
@@ -730,16 +762,16 @@ module Rabbit
730
762
 
731
763
  def process
732
764
  if @processing
733
- @logger.info(_("Processing..."))
765
+ Rabbit.logger.info(_("Processing..."))
734
766
  return
735
767
  end
736
768
  begin
737
769
  @processing = true
738
- Action.update_status(self)
770
+ @actions.update_status
739
771
  yield
740
772
  ensure
741
773
  @processing = false
742
- Action.update_status(self)
774
+ @actions.update_status
743
775
  end
744
776
  end
745
777
 
@@ -806,7 +838,7 @@ module Rabbit
806
838
  def move_to(index)
807
839
  old_index = current_index
808
840
  set_current_index(index)
809
- Action.update_status(self)
841
+ @actions.update_status
810
842
  @renderer.post_move(old_index, current_index)
811
843
  end
812
844
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2021 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2012-2025 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
@@ -16,11 +16,11 @@
16
16
 
17
17
  require "yaml"
18
18
 
19
- require "rabbit/author-configuration"
20
- require "rabbit/console"
21
- require "rabbit/path-manipulatable"
22
- require "rabbit/slide-configuration"
23
- require "rabbit/source-generator"
19
+ require_relative "../author-configuration"
20
+ require_relative "../console"
21
+ require_relative "../path-manipulatable"
22
+ require_relative "../slide-configuration"
23
+ require_relative "../source-generator"
24
24
 
25
25
  module Rabbit
26
26
  module Command
@@ -63,7 +63,6 @@ module Rabbit
63
63
  def initialize
64
64
  @use_gui = true
65
65
  @data = Data.new
66
- @logger = nil
67
66
  end
68
67
 
69
68
  def run(arguments)
@@ -76,7 +75,7 @@ module Rabbit
76
75
  validate
77
76
  unless @validation_errors.empty?
78
77
  messages = (@validation_errors + [_("See --help for example")])
79
- @logger.error(messages.join("\n"))
78
+ Rabbit.logger.error(messages.join("\n"))
80
79
  return false
81
80
  end
82
81
 
@@ -95,10 +94,9 @@ module Rabbit
95
94
 
96
95
  def setup_options(parser, options)
97
96
  @options = options
98
- @logger = @options.default_logger
99
- @data.author_conf = AuthorConfiguration.new(@logger)
97
+ @data.author_conf = AuthorConfiguration.new
100
98
  @data.author_conf.load
101
- @data.slide_conf = SlideConfiguration.new(@logger)
99
+ @data.slide_conf = SlideConfiguration.new
102
100
  @data.slide_conf.author = @data.author_conf
103
101
 
104
102
  format = _("Usage: %s COMMAND [OPTIONS]\n" \
@@ -439,7 +437,7 @@ module Rabbit
439
437
  end
440
438
 
441
439
  def show_gui
442
- require "rabbit/gtk"
440
+ require_relative "../gtk"
443
441
 
444
442
  mappers = build_gui_mappers
445
443
 
@@ -506,7 +504,7 @@ module Rabbit
506
504
  end
507
505
 
508
506
  def merge_config_yaml
509
- existing_slide_conf = SlideConfiguration.new(@logger)
507
+ existing_slide_conf = SlideConfiguration.new
510
508
  existing_slide_conf.load
511
509
  existing_slide_conf.merge!(@data.slide_conf.to_hash)
512
510
  @data.slide_conf = existing_slide_conf
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2012-2025 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
@@ -16,11 +16,11 @@
16
16
 
17
17
  require "yaml"
18
18
 
19
- require "rabbit/console"
20
- require "rabbit/author-configuration"
21
- require "rabbit/theme-configuration"
22
- require "rabbit/path-manipulatable"
23
- require "rabbit/source-generator"
19
+ require_relative "../console"
20
+ require_relative "../author-configuration"
21
+ require_relative "../theme-configuration"
22
+ require_relative "../path-manipulatable"
23
+ require_relative "../source-generator"
24
24
 
25
25
  module Rabbit
26
26
  module Command
@@ -37,16 +37,15 @@ module Rabbit
37
37
  def initialize
38
38
  @theme_conf = nil
39
39
  @author_conf = nil
40
- @logger = nil
41
40
  end
42
41
 
43
42
  def run(arguments)
44
- @options, @logger = parse_command_line_arguments(arguments)
43
+ @options = parse_command_line_arguments(arguments)
45
44
 
46
45
  validate
47
46
  unless @validation_errors.empty?
48
47
  messages = (@validation_errors + [_("See --help for example")])
49
- @logger.error(messages.join("\n"))
48
+ Rabbit.logger.error(messages.join("\n"))
50
49
  return false
51
50
  end
52
51
 
@@ -58,10 +57,9 @@ module Rabbit
58
57
  private
59
58
  def parse_command_line_arguments(arguments)
60
59
  Rabbit::Console.parse!(ARGV) do |parser, options|
61
- @logger = options.default_logger
62
- @author_conf = AuthorConfiguration.new(@logger)
60
+ @author_conf = AuthorConfiguration.new
63
61
  @author_conf.load
64
- @theme_conf = ThemeConfiguration.new(@logger)
62
+ @theme_conf = ThemeConfiguration.new
65
63
  @theme_conf.author = @author_conf
66
64
 
67
65
  format = _("Usage: %s new [options]\n" \
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004-2024 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2004-2025 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
@@ -16,8 +16,8 @@
16
16
 
17
17
  require "English"
18
18
 
19
- require "rabbit/gettext"
20
- require "rabbit/slide-configuration"
19
+ require_relative "../rabbit"
20
+ require_relative "../slide-configuration"
21
21
 
22
22
  module Rabbit
23
23
  module Command
@@ -30,27 +30,24 @@ module Rabbit
30
30
  end
31
31
  end
32
32
 
33
- def initialize
34
- @logger = nil
35
- end
36
-
37
33
  def run(arguments)
38
34
  GC.disable
39
35
  require "rbconfig"
40
36
 
41
- require "rabbit/console"
42
- require "rabbit/source"
43
- require "rabbit/renderer"
44
- require "rabbit/front"
37
+ require_relative "../console"
38
+ require_relative "../front"
39
+ require_relative "../renderer"
40
+ require_relative "../source"
45
41
 
46
- @options, @logger = parse_command_line_arguments(arguments)
42
+ @options = parse_command_line_arguments(arguments)
47
43
 
48
- require "rabbit/canvas"
44
+ require_relative "../canvas"
49
45
  GC.enable
50
46
 
51
47
  application = ::Rabbit.application
52
48
  succeeded = false
53
49
  application.signal_connect("command-line") do |_, command_line|
50
+ GLib.application_name = "Rabbit"
54
51
  application.activate
55
52
  succeeded ? 0 : 1
56
53
  end
@@ -61,7 +58,7 @@ module Rabbit
61
58
  __send__("do_#{@options.action}")
62
59
  end
63
60
  rescue
64
- @logger.error($!)
61
+ ::Rabbit.logger.error($!)
65
62
  end
66
63
  end
67
64
  exit_code = application.run
@@ -74,8 +71,6 @@ module Rabbit
74
71
  private
75
72
  def parse_command_line_arguments(arguments)
76
73
  Console.parse!(arguments) do |parser, options|
77
- @logger = options.logger
78
-
79
74
  rest_arguments_from_options_file = []
80
75
  options.before_hooks << lambda do |_, _, _|
81
76
  rest_arguments_from_options_file = options.rest.dup
@@ -608,8 +603,8 @@ module Rabbit
608
603
  source = options.rest[0]
609
604
  if /\.gem\z/i =~ source
610
605
  gem_name = $PREMATCH
611
- require "rabbit/gem-finder"
612
- finder = GemFinder.new(@logger)
606
+ require_relative "../gem-finder"
607
+ finder = GemFinder.new
613
608
  spec = finder.find(gem_name, "#{SlideConfiguration::GEM_NAME_PREFIX}-")
614
609
  source = spec.gem_dir if spec
615
610
  end
@@ -622,7 +617,7 @@ module Rabbit
622
617
  end
623
618
 
624
619
  def make_canvas(renderer)
625
- canvas = Canvas.new(@logger, renderer)
620
+ canvas = Canvas.new(renderer)
626
621
  canvas.comment_theme = @options.comment_theme
627
622
  canvas.allotted_time = @options.allotted_time
628
623
  canvas
@@ -673,8 +668,7 @@ module Rabbit
673
668
  if @options.source_type == Source::ARGF
674
669
  rest_arguments = [ARGF]
675
670
  end
676
- source = @options.source_type.new(@options.encoding, @logger,
677
- *rest_arguments)
671
+ source = @options.source_type.new(@options.encoding, *rest_arguments)
678
672
  source.base = @options.base if @options.base
679
673
  source
680
674
  end
@@ -746,16 +740,16 @@ module Rabbit
746
740
  require "drb/drb"
747
741
  begin
748
742
  DRb.start_service(@options.druby_uri, front)
749
- @logger.info(DRb.uri) if @options.output_druby_uri
743
+ ::Rabbit.logger.info(DRb.uri) if @options.output_druby_uri
750
744
  rescue SocketError
751
- @logger.error($!)
745
+ ::Rabbit.logger.error($!)
752
746
  rescue Errno::EADDRINUSE
753
- @logger.error(_("dRuby URI <%s> is in use.") % @options.druby_uri)
747
+ ::Rabbit.logger.error(_("dRuby URI <%s> is in use.") % @options.druby_uri)
754
748
  end
755
749
  end
756
750
 
757
751
  def setup_soap(front)
758
- require "rabbit/soap/server"
752
+ require_relative "../soap/server"
759
753
  thread = nil
760
754
 
761
755
  begin
@@ -763,20 +757,20 @@ module Rabbit
763
757
  :BindAddress => @options.soap_host,
764
758
  :Port => @options.soap_port,
765
759
  :AddressFamily => Socket::AF_INET,
766
- :Logger => @logger,
760
+ :Logger => ::Rabbit.logger,
767
761
  }
768
762
  server = Rabbit::SOAP::Server.new(front, config)
769
763
  prev = trap(:INT) {server.shutdown; trap(:INT, prev)}
770
764
  thread = Thread.new {server.start}
771
765
  rescue Errno::EADDRINUSE
772
- @logger.error(_("port <%s> for SOAP is in use.") % @options.soap_port)
766
+ ::Rabbit.logger.error(_("port <%s> for SOAP is in use.") % @options.soap_port)
773
767
  end
774
768
 
775
769
  thread
776
770
  end
777
771
 
778
772
  def setup_xmlrpc(front)
779
- require "rabbit/xmlrpc/server"
773
+ require_relative "../xmlrpc/server"
780
774
  thread = nil
781
775
 
782
776
  begin
@@ -784,13 +778,13 @@ module Rabbit
784
778
  :BindAddress => @options.xmlrpc_host,
785
779
  :Port => @options.xmlrpc_port,
786
780
  :AddressFamily => Socket::AF_INET,
787
- :Logger => @logger,
781
+ :Logger => ::Rabbit.logger,
788
782
  }
789
783
  server = Rabbit::XMLRPC::Server.new(front, config)
790
784
  prev = trap(:INT) {server.shutdown; trap(:INT, prev)}
791
785
  thread = Thread.new {server.start}
792
786
  rescue Errno::EADDRINUSE
793
- @logger.error(_("port <%s> for XML-RPC is in use.") % @options.xmlrpc_port)
787
+ ::Rabbit.logger.error(_("port <%s> for XML-RPC is in use.") % @options.xmlrpc_port)
794
788
  end
795
789
 
796
790
  thread
@@ -809,7 +803,7 @@ module Rabbit
809
803
  canvas.quit
810
804
  true
811
805
  rescue ::Rabbit::NoPrintSupportError
812
- @logger.error($!.message)
806
+ ::Rabbit.logger.error($!.message)
813
807
  false
814
808
  end
815
809
 
@@ -831,19 +825,13 @@ module Rabbit
831
825
  end
832
826
 
833
827
  def do_display
834
- display_init_options = {}
835
- if @options.use_gl
836
- display_init_options[:preferred_class_name] = "ClutterEmbed"
837
- end
838
- Renderer::Display.init(display_init_options)
839
-
840
828
  source = make_source
841
- if ENV["RABBIT_RENDERER"] == "screen"
842
- canvas = make_canvas(Renderer::Screen)
829
+ if Gtk::Version::MAJOR >= 4
830
+ canvas = make_canvas(Renderer::Scene)
843
831
  else
844
- canvas = make_canvas(Renderer::Display)
832
+ canvas = make_canvas(Renderer::Display::DrawingArea)
845
833
  end
846
- frame = Frame.new(@logger, canvas)
834
+ frame = Frame.new(canvas)
847
835
  frame.geometry = @options.geometry
848
836
  setup_base_size(canvas)
849
837
  setup_paper_size(canvas)
@@ -856,7 +844,7 @@ module Rabbit
856
844
  if @options.show_native_window_id
857
845
  native_surface = frame.window.surface
858
846
  if native_surface.respond_to?(:xid)
859
- @logger.info(_("Window ID: %d") % native_surface.xid)
847
+ ::Rabbit.logger.info(_("Window ID: %d") % native_surface.xid)
860
848
  end
861
849
  end
862
850
  apply_theme_if_need(frame)
@@ -885,7 +873,7 @@ module Rabbit
885
873
  end
886
874
 
887
875
  if exception
888
- @logger.info(exception.message)
876
+ ::Rabbit.logger.info(exception.message)
889
877
  false
890
878
  else
891
879
  true