rabbit 3.0.1 → 3.0.2

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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -1
  3. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  4. data/doc/_config.yml +2 -2
  5. data/doc/_layouts/skeleton.html +0 -7
  6. data/doc/en/install/homebrew.rd +8 -13
  7. data/doc/en/news.rd +67 -0
  8. data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
  9. data/doc/images/screenshots/en/blue-circle.png +0 -0
  10. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  11. data/doc/images/screenshots/en/clear-blue.png +0 -0
  12. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  13. data/doc/images/screenshots/en/cozmixng.png +0 -0
  14. data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
  15. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  16. data/doc/images/screenshots/en/day-white-raw.png +0 -0
  17. data/doc/images/screenshots/en/day-white.png +0 -0
  18. data/doc/images/screenshots/en/debian-raw.png +0 -0
  19. data/doc/images/screenshots/en/debian.png +0 -0
  20. data/doc/images/screenshots/en/green-circle-raw.png +0 -0
  21. data/doc/images/screenshots/en/green-circle.png +0 -0
  22. data/doc/images/screenshots/en/night-black-raw.png +0 -0
  23. data/doc/images/screenshots/en/night-black.png +0 -0
  24. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  25. data/doc/images/screenshots/en/rabbit.png +0 -0
  26. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  27. data/doc/images/screenshots/en/ranguba.png +0 -0
  28. data/doc/images/screenshots/en/red-frame-raw.png +0 -0
  29. data/doc/images/screenshots/en/red-frame.png +0 -0
  30. data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  31. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  32. data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  33. data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
  34. data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
  35. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  36. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  37. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  38. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  39. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  40. data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
  41. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  42. data/doc/images/screenshots/ja/day-white-raw.png +0 -0
  43. data/doc/images/screenshots/ja/day-white.png +0 -0
  44. data/doc/images/screenshots/ja/debian-raw.png +0 -0
  45. data/doc/images/screenshots/ja/debian.png +0 -0
  46. data/doc/images/screenshots/ja/green-circle-raw.png +0 -0
  47. data/doc/images/screenshots/ja/green-circle.png +0 -0
  48. data/doc/images/screenshots/ja/night-black-raw.png +0 -0
  49. data/doc/images/screenshots/ja/night-black.png +0 -0
  50. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  51. data/doc/images/screenshots/ja/rabbit.png +0 -0
  52. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  53. data/doc/images/screenshots/ja/ranguba.png +0 -0
  54. data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
  55. data/doc/images/screenshots/ja/red-frame.png +0 -0
  56. data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
  57. data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
  58. data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
  59. data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
  60. data/doc/ja/install/homebrew.rd +8 -12
  61. data/doc/ja/news.rd +67 -0
  62. data/lib/rabbit/canvas.rb +7 -5
  63. data/lib/rabbit/element/base.rb +1 -5
  64. data/lib/rabbit/element/image.rb +70 -4
  65. data/lib/rabbit/error.rb +7 -1
  66. data/lib/rabbit/formatter.rb +1 -1
  67. data/lib/rabbit/gem-pusher.rb +2 -1
  68. data/lib/rabbit/image/base.rb +67 -3
  69. data/lib/rabbit/image/dia.rb +7 -15
  70. data/lib/rabbit/image/mermaid.rb +73 -0
  71. data/lib/rabbit/image/pdf.rb +21 -5
  72. data/lib/rabbit/image.rb +3 -2
  73. data/lib/rabbit/parser/base.rb +2 -1
  74. data/lib/rabbit/parser/ext/blockdiag.rb +16 -14
  75. data/lib/rabbit/parser/ext/image.rb +36 -9
  76. data/lib/rabbit/parser/markdown/converter.rb +36 -30
  77. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +23 -33
  78. data/lib/rabbit/parser/rd/ext/image.rb +23 -4
  79. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +3 -1
  80. data/lib/rabbit/parser/rd.rb +1 -1
  81. data/lib/rabbit/parser/wiki/output.rb +9 -9
  82. data/lib/rabbit/parser.rb +2 -2
  83. data/lib/rabbit/properties.rb +14 -1
  84. data/lib/rabbit/renderer/display/drawing-area-base.rb +1 -1
  85. data/lib/rabbit/slide-configuration.rb +4 -0
  86. data/lib/rabbit/task/slide.rb +4 -31
  87. data/lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb +38 -0
  88. data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
  89. data/lib/rabbit/theme/image/image.rb +3 -0
  90. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +7 -2
  91. data/lib/rabbit/theme/image-timer/image-timer.rb +8 -3
  92. data/lib/rabbit/theme/pdf/pdf.rb +1 -1
  93. data/lib/rabbit/utils.rb +25 -2
  94. data/lib/rabbit/version.rb +2 -2
  95. data/po/en/rabbit.edit.po +50 -66
  96. data/po/en/rabbit.po +12 -24
  97. data/po/fr/rabbit.edit.po +50 -66
  98. data/po/fr/rabbit.po +12 -24
  99. data/po/ja/rabbit.edit.po +82 -94
  100. data/po/ja/rabbit.po +18 -30
  101. data/rabbit.gemspec +0 -1
  102. data/sample/rabbit-en.md +13 -0
  103. data/sample/rabbit-en.rd +10 -0
  104. data/sample/rabbit.md +21 -0
  105. data/sample/rabbit.rd +20 -0
  106. data/test/command/test-rabbit.rb +1 -0
  107. data/test/parser/test-markdown.rb +2 -2
  108. data/test/test-slide-configuration.rb +2 -1
  109. metadata +7 -26
  110. data/doc/css/jquery-ui/themes/ui-lightness.css +0 -573
  111. data/doc/javascripts/jquery-ui.js +0 -11544
  112. data/doc/javascripts/jquery.js +0 -7179
  113. data/lib/rabbit/slideshare.rb +0 -192
  114. data/test/test-slideshare.rb +0 -34
@@ -1,3 +1,19 @@
1
+ # Copyright (C) 2004-2022 Sutou Kouhei <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
+
1
17
  require 'rabbit/element'
2
18
  require 'rabbit/parser/ext/image'
3
19
 
@@ -11,13 +27,16 @@ module Rabbit
11
27
  def img(label, content, visitor)
12
28
  label = label.to_s
13
29
  return nil unless /^img:\s*(.+)$/ =~ label
14
- make_image(visitor.canvas, $1)
30
+ make_image(visitor.canvas, $1, body: visitor.current_body)
15
31
  end
16
32
 
17
- def make_image_from_file(source, visitor)
33
+ def make_image_from_file(source, visitor, **options)
18
34
  src, prop = parse_source(source)
19
- super(visitor.canvas, src) do |src_file_path|
20
- [yield(src_file_path, prop), prop]
35
+ super(visitor.canvas,
36
+ src,
37
+ body: visitor.current_body,
38
+ **options) do |src_file|
39
+ [yield(src_file, prop), prop]
21
40
  end
22
41
  end
23
42
  end
@@ -56,8 +56,10 @@ module Rabbit
56
56
  def_delegators(:@canvas, :logger, :full_path, :tmp_dir_name)
57
57
 
58
58
  attr_reader :canvas
59
- def initialize(canvas)
59
+ attr_reader :progress
60
+ def initialize(canvas, progress)
60
61
  @canvas = canvas
62
+ @progress = progress
61
63
 
62
64
  @slides = []
63
65
  @slide = nil
@@ -38,7 +38,7 @@ module Rabbit
38
38
  source = @source.read.gsub(/\r\n/, "\n")
39
39
  source = "=begin\n#{source}\n=end\n"
40
40
  tree = ::RD::RDTree.new(source)
41
- visitor = RD2RabbitVisitor.new(@canvas)
41
+ visitor = RD2RabbitVisitor.new(@canvas, @progress)
42
42
  visitor.visit(tree)
43
43
  rescue Racc::ParseError
44
44
  message = format_parse_error_message($!.message, source)
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2007-2017 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2007-2022 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
@@ -489,9 +489,9 @@ module Rabbit
489
489
 
490
490
  def LaTeX(source, props={})
491
491
  args = [@output.canvas, source]
492
- Ext::Image.make_image_from_file(*args) do |src_file_path|
492
+ Ext::Image.make_image_from_file(*args) do |src_file|
493
493
  props = Utils.stringify_hash_key(props)
494
- args = [src_file_path, props, @output.canvas]
494
+ args = [src_file.path, props, @output.canvas]
495
495
  [Ext::TeX.make_image_by_LaTeX(*args), props]
496
496
  end
497
497
  end
@@ -499,9 +499,9 @@ module Rabbit
499
499
 
500
500
  def mimeTeX(source, props={})
501
501
  args = [@output.canvas, source]
502
- Ext::Image.make_image_from_file(*args) do |src_file_path|
502
+ Ext::Image.make_image_from_file(*args) do |src_file|
503
503
  props = Utils.stringify_hash_key(props)
504
- args = [src_file_path, props, @output.canvas]
504
+ args = [src_file.path, props, @output.canvas]
505
505
  [Ext::TeX.make_image_by_mimeTeX(*args), props]
506
506
  end
507
507
  end
@@ -509,18 +509,18 @@ module Rabbit
509
509
 
510
510
  def aafigure(source, props={})
511
511
  args = [@output.canvas, source]
512
- Ext::Image.make_image_from_file(*args) do |src_file_path|
512
+ Ext::Image.make_image_from_file(*args) do |src_file|
513
513
  props = Utils.stringify_hash_key(props)
514
- args = [src_file_path, props, @output.canvas]
514
+ args = [src_file.path, props, @output.canvas]
515
515
  [Ext::AAFigure.make_image(*args), props]
516
516
  end
517
517
  end
518
518
 
519
519
  def blockdiag(source, props={})
520
520
  args = [@output.canvas, source]
521
- Ext::Image.make_image_from_file(*args) do |src_file_path|
521
+ Ext::Image.make_image_from_file(*args) do |src_file|
522
522
  props = Utils.stringify_hash_key(props)
523
- args = [src_file_path, props, @output.canvas]
523
+ args = [src_file.path, props, @output.canvas]
524
524
  [Ext::BlockDiag.make_image(*args), props]
525
525
  end
526
526
  end
data/lib/rabbit/parser.rb CHANGED
@@ -25,7 +25,7 @@ module Rabbit
25
25
  include GetText
26
26
 
27
27
  module_function
28
- def parse(canvas, source)
28
+ def parse(canvas, source, **options)
29
29
  parser = Base.find_loader(source)
30
30
  if parser.nil?
31
31
  format = _("unsupported format. (supported: %s)")
@@ -35,7 +35,7 @@ module Rabbit
35
35
  message = format % "[#{format_names.join(', ')}]"
36
36
  raise UnsupportedFormatError.new(message)
37
37
  end
38
- parser.new(canvas, source).parse
38
+ parser.new(canvas, source, **options).parse
39
39
  end
40
40
 
41
41
  def normalize_property_name(name)
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2020 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2020-2021 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,6 +15,7 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
17
  require "rabbit/relative-size"
18
+ require "rabbit/yaml-loader"
18
19
 
19
20
  module Rabbit
20
21
  class Properties
@@ -60,6 +61,18 @@ module Rabbit
60
61
  key)
61
62
  end
62
63
 
64
+ def draws
65
+ targets = @data.select do |key, _|
66
+ /\Adraw\d+\z/.match?(key)
67
+ end
68
+ targets = targets.sort_by do |key, _|
69
+ Integer(key[/\d+/], 10)
70
+ end
71
+ targets.collect do |_, value|
72
+ YAMLLoader.load(value)
73
+ end
74
+ end
75
+
63
76
  def respond_to_missing?(name, include_private)
64
77
  @data.key?(normalize_key(name.to_s.gsub(/\?\z/, "")))
65
78
  end
@@ -178,7 +178,7 @@ module Rabbit
178
178
  end
179
179
 
180
180
  def confirm(message)
181
- confirm_dialog(message) == Gtk::MessageDialog::RESPONSE_OK
181
+ confirm_dialog(message) == Gtk::ResponseType::OK
182
182
  end
183
183
 
184
184
  def reload_theme(&callback)
@@ -46,6 +46,7 @@ module Rabbit
46
46
  attr_accessor :author
47
47
  attr_accessor :width
48
48
  attr_accessor :height
49
+ attr_accessor :source_code_uri
49
50
  def initialize(logger=nil)
50
51
  @logger = logger || Logger.default
51
52
  clear
@@ -99,6 +100,7 @@ module Rabbit
99
100
  @author = nil
100
101
  @width = 800
101
102
  @height = 600
103
+ @source_code_uri = nil
102
104
  end
103
105
 
104
106
 
@@ -125,6 +127,7 @@ module Rabbit
125
127
 
126
128
  @width = conf["width"] || @width
127
129
  @height = conf["height"] || @height
130
+ @source_code_uri = conf["source_code_uri"] || @source_code_uri
128
131
  end
129
132
 
130
133
  def to_hash
@@ -143,6 +146,7 @@ module Rabbit
143
146
  "youtube_id" => @youtube_id,
144
147
  "width" => @width,
145
148
  "height" => @height,
149
+ "source_code_uri" => @source_code_uri,
146
150
  }
147
151
  config["author"] = @author.to_hash if @author
148
152
  config
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2016 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2012-2022 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
@@ -65,6 +65,9 @@ module Rabbit
65
65
  spec.summary = readme_parser.title || "TODO"
66
66
  spec.description = readme_parser.description || "TODO"
67
67
  spec.licenses = @slide.licenses
68
+ if @slide.source_code_uri
69
+ spec.metadata["source_code_uri"] = @slide.source_code_uri
70
+ end
68
71
 
69
72
  slide_conf_path = @slide.path
70
73
  spec.files = [".rabbit", slide_conf_path, "Rakefile"]
@@ -155,11 +158,6 @@ module Rabbit
155
158
 
156
159
  publish_tasks = []
157
160
  namespace :publish do
158
- if @slide.author.slideshare_user
159
- define_publish_slideshare_task
160
- publish_tasks << :slideshare
161
- end
162
-
163
161
  if @slide.author.speaker_deck_user
164
162
  define_publish_speaker_deck_task
165
163
  publish_tasks << :speaker_deck
@@ -181,31 +179,6 @@ module Rabbit
181
179
  end
182
180
  end
183
181
 
184
- def define_publish_slideshare_task
185
- slideshare_user = @slide.author.slideshare_user
186
- desc(_("Publish the slide to %s") % "SlideShare")
187
- task :slideshare => [:pdf, "gem:validate"] do
188
- require "rabbit/slideshare"
189
- slideshare = SlideShare.new(@logger)
190
- slideshare.user = slideshare_user
191
- slideshare.pdf_path = pdf_path
192
- slideshare.id = @slide.id
193
- slideshare.title = spec.summary
194
- slideshare.description = spec.description
195
- slideshare.tags = @slide.tags if @slide.tags
196
- url = slideshare.upload
197
- if url
198
- @logger.info(_("Uploaded successfully!"))
199
- @logger.info(_("See %s") % url)
200
- Gtk.show_uri(url) if Gtk.respond_to?(:show_uri)
201
-
202
- slide_id = url.split(/\//).last
203
- @slide.slideshare_id = slide_id
204
- @slide.save(".")
205
- end
206
- end
207
- end
208
-
209
182
  def define_publish_speaker_deck_task
210
183
  desc(_("Publish the slide to %s") % "Speaker Deck")
211
184
  task :speaker_deck => :pdf do
@@ -32,6 +32,11 @@ def apply_background_image_property(element, options={})
32
32
  image.vertical_centering = true
33
33
  end
34
34
 
35
+ layout = nil
36
+ caption_height = 0
37
+ caption_text = image.caption
38
+ caption_text = nil if caption_text and caption_text.empty?
39
+
35
40
  element.add_pre_draw_proc(proc_name) do |canvas, x, y, w, h, simulation|
36
41
  if simulation
37
42
  if compute_initial_geometry
@@ -78,6 +83,39 @@ def apply_background_image_property(element, options={})
78
83
  end
79
84
  end
80
85
  image.draw(simulation)
86
+
87
+ if caption_text
88
+ # TODO: Should we move this to Image#draw and unify this and
89
+ # similar code in lib/rabbit/theme/image/image.rb?
90
+ if simulation
91
+ caption = Text.new(caption_text)
92
+ caption_font_size = image.caption_font_size
93
+ caption_font_size = font_size(caption_font_size) if caption_font_size
94
+ caption.prop_set("size",
95
+ caption_font_size || @image_caption_font_size)
96
+ set_font_family(caption)
97
+ if image.horizontal_centering
98
+ caption.do_horizontal_centering(canvas, x, y, w, h)
99
+ end
100
+ caption.compile(canvas,
101
+ (image.x || x) + image.margin_left,
102
+ y + image.height + image.margin_top,
103
+ image.ow || w,
104
+ h - image.height)
105
+ layout = caption.layout
106
+ caption_height = caption.height
107
+ end
108
+ if !simulation and layout
109
+ base_x = (image.x || x) + image.margin_left
110
+ base_y = image.height + y + image.margin_top
111
+ caption_color = image["caption-color"] || @image_caption_color
112
+ canvas.draw_layout(layout,
113
+ base_x,
114
+ base_y + image.margin_bottom,
115
+ caption_color)
116
+ end
117
+ end
118
+
81
119
  [x, y, w - element_margin_right, h]
82
120
  end
83
121
 
@@ -96,6 +96,6 @@ include_theme("slide-logo")
96
96
  @icon_images = ["clear-blue-icon.png"]
97
97
  include_theme("icon")
98
98
 
99
- @slide_footer_info_left_text ||= canvas.title.gsub(/\n/, '')
99
+ @slide_footer_info_left_text ||= canvas.title.gsub(/\n/, " ")
100
100
  @slide_footer_info_right_text ||= "Powered by Rabbit #{Rabbit::VERSION}"
101
101
  include_theme("slide-footer-info")
@@ -51,6 +51,9 @@ match("**", Image) do |images|
51
51
  caption_height = 0
52
52
 
53
53
  image.add_post_draw_proc(proc_name) do |canvas, x, y, w, h, simulation|
54
+ # TODO: Should we move this to Image#draw and unify this and
55
+ # similar code in
56
+ # lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb?
54
57
  if simulation
55
58
  caption = Text.new(caption_text)
56
59
  caption.prop_set("size", @image_caption_font_size)
@@ -32,7 +32,7 @@ end
32
32
  target_n_slides = nil
33
33
 
34
34
  match(Slide) do |slides|
35
- slides.delete_post_draw_proc_by_name(proc_name)
35
+ slides.delete_pre_draw_proc_by_name(proc_name)
36
36
 
37
37
  break if @image_slide_number_uninstall
38
38
 
@@ -63,7 +63,7 @@ match(Slide) do |slides|
63
63
  "weight" => "heavy",
64
64
  }
65
65
 
66
- slides.add_post_draw_proc(proc_name) do |slide, canvas, x, y, w, h, simulation|
66
+ draw = lambda do |slide, canvas, x, y, w, h, simulation|
67
67
  if simulation
68
68
  image_height = canvas.height * @image_slide_number_space_ratio
69
69
  loader.resize(nil, image_height)
@@ -126,4 +126,9 @@ match(Slide) do |slides|
126
126
  end
127
127
  [x, y, w, h]
128
128
  end
129
+ if slides[0].is_a?(PopplerSlide)
130
+ slides.add_post_draw_proc(proc_name, &draw)
131
+ else
132
+ slides.add_pre_draw_proc(proc_name, &draw)
133
+ end
129
134
  end
@@ -38,7 +38,7 @@ end
38
38
  @image_timer_target_paths ||= [Slide]
39
39
 
40
40
  match(*@image_timer_target_paths) do |slides|
41
- slides.delete_post_draw_proc_by_name(proc_name)
41
+ slides.delete_pre_draw_proc_by_name(proc_name)
42
42
  stop_auto_redraw_timer
43
43
 
44
44
  break if @image_timer_uninstall
@@ -51,7 +51,7 @@ match(*@image_timer_target_paths) do |slides|
51
51
  @image_timer_auto_updating = true
52
52
  start_auto_redraw_timer(@image_timer_interval)
53
53
  end
54
- slide.delete_post_draw_proc_by_name(init_proc_name)
54
+ slide.delete_pre_draw_proc_by_name(init_proc_name)
55
55
  end
56
56
  [x, y, w, h]
57
57
  end
@@ -61,7 +61,7 @@ match(*@image_timer_target_paths) do |slides|
61
61
  max_width = nil
62
62
  base_y = nil
63
63
 
64
- slides.add_post_draw_proc(proc_name) do |slide, canvas, x, y, w, h, simulation|
64
+ draw = lambda do |slide, canvas, x, y, w, h, simulation|
65
65
  margin_left = @image_timer_margin_left || slide.margin_left
66
66
  margin_right = @image_timer_margin_right || slide.margin_right
67
67
  margin_bottom = @image_timer_margin_bottom || slide.margin_bottom
@@ -111,4 +111,9 @@ match(*@image_timer_target_paths) do |slides|
111
111
  end
112
112
  [x, y, w, h]
113
113
  end
114
+ if slides[0].is_a?(PopplerSlide)
115
+ slides.add_post_draw_proc(proc_name, &draw)
116
+ else
117
+ slides.add_pre_draw_proc(proc_name, &draw)
118
+ end
114
119
  end
@@ -1,7 +1,7 @@
1
1
  set_background("black")
2
2
 
3
3
  begin
4
- include_theme(canvas.title)
4
+ include_theme(".")
5
5
  rescue LoadError
6
6
  end
7
7
 
data/lib/rabbit/utils.rb CHANGED
@@ -352,9 +352,32 @@ module Rabbit
352
352
 
353
353
  module SystemRunner
354
354
  module_function
355
- def run(cmd, *args)
355
+ def run(cmd, *args, progress: nil)
356
356
  begin
357
- system(cmd, *args)
357
+ IO.pipe do |input, output|
358
+ pid = spawn(cmd, *args, out: output)
359
+ output.close
360
+ begin
361
+ loop do
362
+ readables, = IO.select([input], nil, nil, 0.1)
363
+ if readables
364
+ readable = readables[0]
365
+ begin
366
+ $stdout.print(readable.read_nonblock(4096))
367
+ rescue EOFError
368
+ break
369
+ else
370
+ break if readable.eof?
371
+ end
372
+ else
373
+ progress.call if progress
374
+ end
375
+ end
376
+ true
377
+ ensure
378
+ Process.waitpid(pid)
379
+ end
380
+ end
358
381
  rescue SystemCallError
359
382
  yield($!) if block_given?
360
383
  false
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2019 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2012-2021 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,5 +15,5 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
17
  module Rabbit
18
- VERSION = "3.0.1"
18
+ VERSION = "3.0.2"
19
19
  end