rabbit 3.0.1 → 3.0.2

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