rabbit 2.0.2 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/README +1 -1
  2. data/Rakefile +1 -1
  3. data/data/account.kou.gpg +0 -0
  4. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  5. data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
  6. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  7. data/doc/_config.yml +2 -2
  8. data/doc/_includes/en.menu.html +1 -1
  9. data/doc/_includes/ja.menu.html +1 -1
  10. data/doc/_layouts/skeleton.html +2 -2
  11. data/doc/en/development.rd +2 -2
  12. data/doc/en/install/homebrew.rd +11 -158
  13. data/doc/en/install/index.rd +1 -16
  14. data/doc/en/install/windows.rd +1 -1
  15. data/doc/en/news.rd +70 -1
  16. data/doc/en/usage/rabbit.rd +1 -1
  17. data/doc/en/users.rd +8 -8
  18. data/doc/images/screenshots/en/blue-circle.png +0 -0
  19. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  20. data/doc/images/screenshots/en/clear-blue.png +0 -0
  21. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  22. data/doc/images/screenshots/en/cozmixng.png +0 -0
  23. data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
  24. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  25. data/doc/images/screenshots/en/day-white.png +0 -0
  26. data/doc/images/screenshots/en/debian-raw.png +0 -0
  27. data/doc/images/screenshots/en/debian.png +0 -0
  28. data/doc/images/screenshots/en/green-circle.png +0 -0
  29. data/doc/images/screenshots/en/night-black.png +0 -0
  30. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  31. data/doc/images/screenshots/en/rabbit.png +0 -0
  32. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  33. data/doc/images/screenshots/en/ranguba.png +0 -0
  34. data/doc/images/screenshots/en/red-frame.png +0 -0
  35. data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  36. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  37. data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  38. data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
  39. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  40. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  41. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  42. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  43. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  44. data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
  45. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  46. data/doc/images/screenshots/ja/day-white.png +0 -0
  47. data/doc/images/screenshots/ja/debian-raw.png +0 -0
  48. data/doc/images/screenshots/ja/debian.png +0 -0
  49. data/doc/images/screenshots/ja/green-circle.png +0 -0
  50. data/doc/images/screenshots/ja/night-black.png +0 -0
  51. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  52. data/doc/images/screenshots/ja/rabbit.png +0 -0
  53. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  54. data/doc/images/screenshots/ja/ranguba.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/index.html.en +1 -1
  61. data/doc/index.html.ja +1 -1
  62. data/doc/ja/development.rd +6 -7
  63. data/doc/ja/install/homebrew.rd +10 -156
  64. data/doc/ja/install/index.rd +1 -15
  65. data/doc/ja/install/macports.rd +1 -1
  66. data/doc/ja/news.rd +69 -1
  67. data/doc/ja/usage/rabbit-slide.rd +5 -5
  68. data/doc/ja/usage/rabbit-theme.rd +2 -2
  69. data/doc/ja/usage/rabbit.rd +1 -1
  70. data/doc/ja/users.rd +10 -10
  71. data/lib/rabbit/author-configuration.rb +18 -12
  72. data/lib/rabbit/command/rabbit-slide.rb +1 -1
  73. data/lib/rabbit/command/rabbit.rb +3 -3
  74. data/lib/rabbit/element/block.rb +2 -2
  75. data/lib/rabbit/element/text-renderer.rb +3 -1
  76. data/lib/rabbit/html/template.erb +1 -1
  77. data/lib/rabbit/image/dia.rb +19 -20
  78. data/lib/rabbit/image/eps.rb +1 -1
  79. data/lib/rabbit/parser/image.rb +14 -6
  80. data/lib/rabbit/renderer/engine/cairo.rb +27 -12
  81. data/lib/rabbit/renderer/print/cairo.rb +10 -2
  82. data/lib/rabbit/slide-configuration.rb +27 -14
  83. data/lib/rabbit/soap/base.rb +1 -1
  84. data/lib/rabbit/task/slide.rb +71 -33
  85. data/lib/rabbit/task/theme.rb +61 -19
  86. data/lib/rabbit/theme/clear-blue/clear-blue.rb +17 -0
  87. data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +2 -0
  88. data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +162 -75
  89. data/lib/rabbit/theme/image/image.rb +3 -1
  90. data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +2 -0
  91. data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +25 -13
  92. data/lib/rabbit/utils.rb +16 -3
  93. data/lib/rabbit/version.rb +1 -1
  94. data/po/en/rabbit.po +182 -180
  95. data/po/fr/rabbit.po +182 -180
  96. data/po/ja/rabbit.po +184 -169
  97. data/po/rabbit.pot +176 -164
  98. data/rabbit.gemspec +63 -0
  99. data/test/image/test-dia.rb +54 -0
  100. data/test/image/test-eps.rb +41 -0
  101. data/test/rabbit-test-utils.rb +22 -20
  102. data/test/run-test.rb +20 -6
  103. data/test/test-slide-configuration.rb +2 -0
  104. metadata +8 -3
@@ -19,7 +19,7 @@ RubyGems.orgやSlideShareへの公開をコマンド一発で実行できます
19
19
  Rabbitでよいスライドを作成し、よい発表をし、そして、共有しましょう!
20
20
 
21
21
  TODO: RubyGems.orgに公開したスライドは
22
- ((<URL:http://slide.rabbit-shockers.org/>))で閲覧できるようになる予定で
22
+ ((<URL:http://slide.rabbit-shocker.org/>))で閲覧できるようになる予定で
23
23
  す。
24
24
 
25
25
  == 雛形作成
@@ -92,21 +92,21 @@ TODO: すべてのパラメーターの説明を書く。
92
92
  あなたの情報
93
93
  --name=NAME 新しいスライドの作者の名前
94
94
  (例: --name="Kouhei Sutou")
95
- (デフォルト: Rabbit)
95
+ (デフォルト: nil)
96
96
  (省略可能)
97
97
  --email=EMAIL 新しいスライドの作者のEメールアドレス
98
98
  (例: --email=kou@cozmixng.org)
99
- (デフォルト: lavie@rabbit-shockers.org)
99
+ (デフォルト: nil)
100
100
  (省略可能)
101
101
  --rubygems-user=USER RubyGems.orgのアカウント
102
102
  RubyGems.orgにスライドを公開するときに使います
103
103
  (例: --rubygems-user=kou)
104
- (デフォルト: rabbit)
104
+ (デフォルト: nil)
105
105
  (省略可能)
106
106
  --slideshare-user=USER SlideShareのアカウント
107
107
  SlideShareにスライドを公開するときに使います
108
108
  (例: --slideshare-user=kou)
109
- (デフォルト: kou)
109
+ (デフォルト: nil)
110
110
  (省略可能)
111
111
  --speaker-deck-user=USER Speaker Deckのアカウント
112
112
  Speaker Deckにスライドを公開するときに使います
@@ -19,7 +19,7 @@ rabbit-themeはテーマの雛形を生成するコマンドです。
19
19
  Rabbitでよいテーマを作成し、よい発表をし、そして、共有しましょう!
20
20
 
21
21
  TODO: RubyGems.orgに公開したスライドは
22
- ((<URL:http://theme.rabbit-shockers.org/>))で閲覧できるようになる予定で
22
+ ((<URL:http://theme.rabbit-shocker.org/>))で閲覧できるようになる予定で
23
23
  す。
24
24
 
25
25
  == 雛形作成
@@ -63,7 +63,7 @@ RubyGems.orgで公開する場合は((%--name%))、((%--email%))、
63
63
  (省略可能)
64
64
  --email=EMAIL 新しいスライドの作者のEメールアドレス
65
65
  (例: --email=kou@cozmixng.org)
66
- (デフォルト: lavie@rabbit-shockers.org)
66
+ (デフォルト: lavie@rabbit-shocker.org)
67
67
  (省略可能)
68
68
  --rubygems-user=USER RubyGems.orgのアカウント
69
69
  RubyGems.orgにスライドを公開するときに使います
@@ -103,7 +103,7 @@ WindowsユーザならRDファイルをbin/rabbit.batにドラッグアンド
103
103
  いてもソースを再読み込みしません.
104
104
 
105
105
  例:
106
- % rabbit --type uri https://raw.github.com/shockers/rabbit/master/sample/rabbit-implementation.rd
106
+ % rabbit --type uri https://raw.github.com/rabbit-shocker/rabbit/master/sample/rabbit-implementation.rd
107
107
  とか
108
108
  % rabbit --type uri ftp://.../XXX.rd
109
109
  とか
data/doc/ja/users.rd CHANGED
@@ -1,29 +1,29 @@
1
1
  ---
2
2
  layout: ja
3
- title: ショッカー - ユーザのみなさん
3
+ title: Rabbitショッカー - ユーザーのみなさん
4
4
  ---
5
- == ショッカーとは?
5
+ == Rabbitショッカーとは?
6
6
 
7
- Rabbitユーザのコミュニティとして「ショッカー」があります。
7
+ Rabbitユーザのコミュニティとして「Rabbitショッカー」があります。
8
8
 
9
9
  == 活動の場
10
10
 
11
- ショッカーの活動場所はプレゼンテーションの場以外にもいくつか
11
+ Rabbitショッカーの活動場所はプレゼンテーションの場以外にもいくつか
12
12
  あります。
13
13
 
14
14
  === メーリングリスト
15
15
 
16
- ショッカーのためにrabbit-shockersというメーリングリストがあ
17
- ります。
18
- (((<アーカイブ|URL:http://www.cozmixng.org/~w3ml/index.rb/rabbit-shockers/>)))
16
+ Rabbitショッカーのためにrabbit-shockerというメーリングリストがあります。
17
+ (((<アーカイブ
18
+ |URL:http://www.cozmixng.org/~w3ml/index.rb/rabbit-shocker/>)))
19
19
 
20
20
  以下のようなメールを送るとメーリングリストへ参加できます。
21
21
 
22
- To: rabbit-shockers@ml.cozmixng.org
22
+ To: rabbit-shocker@ml.cozmixng.org
23
23
  Cc: kou@cozmixng.org
24
24
  Subject: イー
25
25
 
26
- ショッカーに入りたいです!
26
+ Rabbitショッカーに入りたいです!
27
27
 
28
28
  また、Rabbitを使っていると強制的に加入させられることもありま
29
29
  す。
@@ -62,7 +62,7 @@ Rabbitユーザのコミュニティとして「ショッカー」がありま
62
62
 
63
63
  # LLDN後
64
64
 
65
- * ((<かくたに|URL:http://kakutani.com/>))さん(((*ショッカー代表*))/もっともRabbitを使いこないしているユーザの一人/もっともRabbitを宣伝してくれるユーザの一人)
65
+ * ((<かくたに|URL:http://kakutani.com/>))さん(((*Rabbitショッカー代表*))/もっともRabbitを使いこないしているユーザの一人/もっともRabbitを宣伝してくれるユーザの一人)
66
66
  * 中長期的な目標としてパッチを投げられるようになりたいです。
67
67
  * ((<『ビルドツールを知ろう』|URL:http://kakutani.com/articles/esm-tokyo-study/buildtool/>))
68
68
  * ((<『self.wake_up :from => "The Matrix"』|URL:http://kakutani.com/articles/xpmatsuri2005/>))
@@ -17,6 +17,7 @@
17
17
  require "yaml"
18
18
 
19
19
  require "rabbit/gettext"
20
+ require "rabbit/logger"
20
21
  require "rabbit/path-manipulatable"
21
22
 
22
23
  module Rabbit
@@ -29,17 +30,13 @@ module Rabbit
29
30
  attr_accessor :rubygems_user, :slideshare_user, :speaker_deck_user
30
31
  def initialize(logger=nil)
31
32
  @logger = logger || Logger.default
32
- @markup_language = nil
33
- @name = nil
34
- @email = nil
35
- @rubygems_user = nil
36
- @slideshare_user = nil
37
- @speaker_deck_user = nil
33
+ clear
38
34
  end
39
35
 
40
36
  def load
41
37
  return unless File.exist?(path)
42
38
  conf = YAML.load(File.read(path))
39
+ clear
43
40
  merge!(conf)
44
41
  rescue
45
42
  format = _("Failed to read author configuration: %s: %s")
@@ -56,13 +53,22 @@ module Rabbit
56
53
  @logger.error(format % [path, $!.message])
57
54
  end
58
55
 
56
+ def clear
57
+ @markup_language = nil
58
+ @name = nil
59
+ @email = nil
60
+ @rubygems_user = nil
61
+ @slideshare_user = nil
62
+ @speaker_deck_user = nil
63
+ end
64
+
59
65
  def merge!(conf)
60
- @markup_language = conf["markup_language"]
61
- @name = conf["name"]
62
- @email = conf["email"]
63
- @rubygems_user = conf["rubygems_user"]
64
- @slideshare_user = conf["slideshare_user"]
65
- @speaker_deck_user = conf["speaker_deck_user"]
66
+ @markup_language ||= conf["markup_language"]
67
+ @name ||= conf["name"]
68
+ @email ||= conf["email"]
69
+ @rubygems_user ||= conf["rubygems_user"]
70
+ @slideshare_user ||= conf["slideshare_user"]
71
+ @speaker_deck_user ||= conf["speaker_deck_user"]
66
72
  end
67
73
 
68
74
  def to_hash
@@ -441,7 +441,7 @@ EOR
441
441
  end
442
442
 
443
443
  def slide_source_image(source, generator)
444
- lavie = "https://raw.github.com/shockers/rabbit/master/sample/lavie.png"
444
+ lavie = "https://raw.github.com/rabbit-shocker/rabbit/master/sample/lavie.png"
445
445
  options = {
446
446
  :relative_height => 100,
447
447
  }
@@ -106,7 +106,7 @@ module Rabbit
106
106
  options.print = false
107
107
  options.print_out_filename = nil
108
108
  options.slides_per_page = 1
109
- options.draw_scaled_image = true
109
+ options.draw_scaled_image = nil
110
110
  options.margin_left = nil
111
111
  options.margin_right = nil
112
112
  options.margin_top = nil
@@ -328,7 +328,7 @@ module Rabbit
328
328
  parser.on("--[no-]draw-scaled-image",
329
329
  _("Draw scaled image."),
330
330
  _("Better look for displaying but lesser look for printing."),
331
- "(#{options.draw_scaled_image})") do |boolean|
331
+ "(auto)") do |boolean|
332
332
  options.draw_scaled_image = boolean
333
333
  end
334
334
 
@@ -807,7 +807,7 @@ module Rabbit
807
807
  parse(canvas, source)
808
808
  canvas.print
809
809
  canvas.quit
810
- rescue Rabbit::NoPrintSupportError
810
+ rescue ::Rabbit::NoPrintSupportError
811
811
  @logger.error($!.message)
812
812
  end
813
813
 
@@ -12,11 +12,11 @@ module Rabbit
12
12
  include BlockElement
13
13
  include BlockHorizontalCentering
14
14
 
15
- attr_reader :cite, :title
15
+ attr_reader :cite, :title, :avatar
16
16
 
17
17
  def initialize(elems=[], prop={})
18
18
  super(elems)
19
- %w(cite title).each do |name|
19
+ %w(cite title avatar).each do |name|
20
20
  instance_variable_set("@#{name}", prop[name])
21
21
  end
22
22
  end
@@ -208,7 +208,9 @@ module Rabbit
208
208
  layout.set_width(-1)
209
209
  end
210
210
  layout.set_alignment(@align)
211
- layout.set_indent(@indent)
211
+ indent = @indent
212
+ indent = indent.value if indent.respond_to?(:value)
213
+ layout.set_indent(indent)
212
214
  layout.set_spacing(@spacing * Pango::SCALE)
213
215
  layout.justify = @justify
214
216
  layout.context_changed
@@ -101,7 +101,7 @@ function handle_key(e)
101
101
  <div class="footer">
102
102
  <p>
103
103
  Generated by
104
- <a href="http://rabbit-shockers.org/">Rabbit</a>
104
+ <a href="http://rabbit-shocker.org/">Rabbit</a>
105
105
  version <%= Rabbit::VERSION %>
106
106
  </p>
107
107
  </div>
@@ -16,39 +16,38 @@ module Rabbit
16
16
 
17
17
  class << self
18
18
  def match?(filename)
19
+ return true if File.extname(filename).downcase.end_with?(".dia")
19
20
  File.open(filename) do |f|
20
- if /^<\?xml/ =~ f.gets and
21
- /http:\/\/www\.lysator\.liu\.se\/~alla\/dia\// =~ f.gets
22
- true
23
- else
24
- false
25
- end
21
+ first_line = f.gets
22
+ second_line = f.gets
23
+ return false unless second_line
24
+ return false unless first_line.start_with?("<?xml")
25
+ return false unless second_line.start_with?("<dia:diagram")
26
+ true
26
27
  end
27
- rescue ArgumentError
28
- false
29
28
  end
30
29
  end
31
30
 
32
- def_delegators(:@eps_loader, :keep_ratio, :keep_ratio=)
33
- def_delegators(:@eps_loader, :pixbuf, :internal_pixbuf)
34
- def_delegators(:@eps_loader, :width, :height)
35
- def_delegators(:@eps_loader, :original_width, :original_height)
36
- def_delegators(:@eps_loader, :resize, :ensure_resize)
37
- def_delegators(:@eps_loader, :update_size)
31
+ def_delegators(:@svg_loader, :keep_ratio, :keep_ratio=)
32
+ def_delegators(:@svg_loader, :pixbuf, :internal_pixbuf)
33
+ def_delegators(:@svg_loader, :width, :height)
34
+ def_delegators(:@svg_loader, :original_width, :original_height)
35
+ def_delegators(:@svg_loader, :resize, :ensure_resize)
36
+ def_delegators(:@svg_loader, :update_size)
38
37
 
39
38
  def initialize(filename, keep_ratio)
40
- init_eps_loader(filename, keep_ratio)
39
+ init_svg_loader(filename, keep_ratio)
41
40
  super
42
41
  end
43
42
 
44
43
  private
45
- def init_eps_loader(filename, keep_ratio)
46
- @eps_file = Tempfile.new("rabbit-loader-dia")
47
- args = ["--export=#{@eps_file.path}"]
48
- args << "--filter=eps"
44
+ def init_svg_loader(filename, keep_ratio)
45
+ @svg_file = Tempfile.new(["rabbit-loader-dia", ".svg"])
46
+ args = ["--export=#{@svg_file.path}"]
47
+ args << "--filter=svg"
49
48
  args << filename
50
49
  if DIA_COMMANDS.any? {|dia| run(dia, *args)}
51
- @eps_loader = EPS.new(@eps_file.path, keep_ratio)
50
+ @svg_loader = SVG.new(@svg_file.path, keep_ratio)
52
51
  else
53
52
  raise DiaCanNotHandleError.new("dia #{args.join(' ')}",
54
53
  DIA_COMMANDS)
@@ -15,7 +15,7 @@ module Rabbit
15
15
  class << self
16
16
  def match?(filename)
17
17
  File.open(filename) do |f|
18
- f.each do |line|
18
+ f.each_line do |line|
19
19
  case line
20
20
  when /^%!PS-Adobe-\d+.\d+ EPS/i
21
21
  return true
@@ -11,20 +11,28 @@ module Rabbit
11
11
 
12
12
  class << self
13
13
  def match?(source)
14
- begin
15
- Rabbit::TemporaryFile.make(source.read, "image") do |input|
14
+ options = {
15
+ :prefix => "image-parser-match",
16
+ :source => source,
17
+ }
18
+ Rabbit::TemporaryFile.create(options) do |input|
19
+ begin
16
20
  Rabbit::ImageLoader.new(input.path)
21
+ true
22
+ rescue Rabbit::ImageLoadError
23
+ false
17
24
  end
18
- true
19
- rescue Rabbit::ImageLoadError
20
- false
21
25
  end
22
26
  end
23
27
  end
24
28
 
25
29
  include Element
26
30
  def parse
27
- TemporaryFile.make(@source.read, "image") do |image|
31
+ options = {
32
+ :prefix => "image-parser-parse",
33
+ :source => @source,
34
+ }
35
+ TemporaryFile.create(options) do |image|
28
36
  @image = image
29
37
  @canvas << ImageTitleSlide.new(@image.path)
30
38
  end
@@ -251,20 +251,9 @@ module Rabbit
251
251
 
252
252
  def draw_pixbuf(pixbuf, x, y, params={})
253
253
  x, y = from_screen(x, y)
254
-
255
- draw_scaled_pixbuf = params[:draw_scaled_pixbuf]
256
- draw_scaled_pixbuf = @draw_scaled_image if draw_scaled_pixbuf.nil?
257
- width = (params[:width] || pixbuf.width).to_f
258
- height = (params[:height] || pixbuf.height).to_f
259
- if draw_scaled_pixbuf and
260
- [width, height] != [pixbuf.width, pixbuf.height]
261
- pixbuf = pixbuf.scale(width, height)
262
- end
263
254
  @context.save do
264
255
  @context.translate(x, y)
265
- unless draw_scaled_pixbuf
266
- @context.scale(width / pixbuf.width, height / pixbuf.height)
267
- end
256
+ pixbuf = scale_pixbuf(pixbuf, params)
268
257
  @context.set_source_pixbuf(pixbuf, 0, 0)
269
258
  @context.paint(params[:alpha])
270
259
  end
@@ -272,6 +261,32 @@ module Rabbit
272
261
  _draw_reflected_pixbuf(pixbuf, x, y, params[:reflect])
273
262
  end
274
263
 
264
+ def scale_pixbuf(pixbuf, params)
265
+ draw_scaled_pixbuf = params[:draw_scaled_pixbuf]
266
+ draw_scaled_pixbuf = @draw_scaled_image if draw_scaled_pixbuf.nil?
267
+ width = (params[:width] || pixbuf.width).to_f
268
+ height = (params[:height] || pixbuf.height).to_f
269
+
270
+ return pixbuf if [width, height] == [pixbuf.width, pixbuf.height]
271
+ case draw_scaled_image
272
+ when true
273
+ return pixbuf.scale(width, height)
274
+ when false
275
+ @context.scale(width / pixbuf.width, height / pixbuf.height)
276
+ return pixbuf
277
+ else
278
+ scales = [4, 3, 2]
279
+ scales.each do |scale|
280
+ if width * scale < pixbuf.width and height * scale < pixbuf.height
281
+ @context.scale(1.0 / scale, 1.0 / scale)
282
+ return pixbuf.scale(width * scale, height * scale)
283
+ end
284
+ end
285
+ @context.scale(width / pixbuf.width, height / pixbuf.height)
286
+ return pixbuf
287
+ end
288
+ end
289
+
275
290
  def rsvg_available?
276
291
  if @@rsvg_available.nil?
277
292
  @@rsvg_available = RSVG.cairo_available?
@@ -85,8 +85,10 @@ module Rabbit
85
85
 
86
86
  private
87
87
  def init_paper
88
- @page_width = @paper_width || A4_HEIGHT
89
- @page_height = @paper_height || A4_WIDTH
88
+ default_width_mm = 360
89
+ default_height_mm = 270
90
+ @page_width = @paper_width || default_width_mm
91
+ @page_height = @paper_height || default_height_mm
90
92
  end
91
93
 
92
94
  def init_color
@@ -95,6 +97,12 @@ module Rabbit
95
97
  @background = make_color(@background_color)
96
98
  end
97
99
 
100
+ def init_dpi
101
+ super
102
+ @x_dpi = 300
103
+ @y_dpi = 300
104
+ end
105
+
98
106
  def create_context(output=nil)
99
107
  surface = find_surface(filename, output)
100
108
  surface.set_fallback_resolution(@x_dpi, @y_dpi)
@@ -19,6 +19,7 @@ require "time"
19
19
  require "yaml"
20
20
 
21
21
  require "rabbit/gettext"
22
+ require "rabbit/logger"
22
23
  require "rabbit/author-configuration"
23
24
  require "rabbit/path-manipulatable"
24
25
 
@@ -31,23 +32,18 @@ module Rabbit
31
32
 
32
33
  attr_accessor :logger
33
34
  attr_accessor :id, :base_name, :tags, :presentation_date
34
- attr_accessor :licenses
35
+ attr_accessor :licenses, :slideshare_id, :speaker_deck_id
35
36
  attr_writer :version
36
37
  attr_accessor :author
37
38
  def initialize(logger=nil)
38
39
  @logger = logger || Logger.default
39
- @id = nil
40
- @base_name = nil
41
- @tags = []
42
- @presentation_date = nil
43
- @version = nil
44
- @licenses = []
45
- @author = nil
40
+ clear
46
41
  end
47
42
 
48
43
  def load
49
44
  return unless File.exist?(path)
50
45
  conf = YAML.load(File.read(path))
46
+ clear
51
47
  merge!(conf)
52
48
  rescue
53
49
  format = _("Failed to read slide configuration: %s: %s")
@@ -64,13 +60,28 @@ module Rabbit
64
60
  @logger.error(format % [config_path, $!.message])
65
61
  end
66
62
 
63
+ def clear
64
+ @id = nil
65
+ @base_name = nil
66
+ @tags = []
67
+ @presentation_date = nil
68
+ @version = nil
69
+ @licenses = []
70
+ @slideshare_id = nil
71
+ @speaker_deck_id = nil
72
+ @author = nil
73
+ end
74
+
67
75
  def merge!(conf)
68
- @id = conf["id"]
69
- @base_name = conf["base_name"]
70
- @tags = conf["tags"]
71
- @presentation_date = conf["presentation_date"]
72
- @version = conf["version"]
73
- @licenses = conf["licenses"]
76
+ @id ||= conf["id"]
77
+ @base_name ||= conf["base_name"]
78
+ @presentation_date ||= conf["presentation_date"]
79
+ @version ||= conf["version"]
80
+ @slideshare_id ||= conf["slideshare_id"]
81
+ @speaker_deck_id ||= conf["speaker_deck_id"]
82
+
83
+ @tags |= (conf["tags"] || [])
84
+ @licenses |= (conf["licenses"] || [])
74
85
 
75
86
  @author = AuthorConfiguration.new(@logger)
76
87
  @author.merge!(conf["author"] || {})
@@ -84,6 +95,8 @@ module Rabbit
84
95
  "presentation_date" => @presentation_date,
85
96
  "version" => version,
86
97
  "licenses" => @licenses,
98
+ "slideshare_id" => @slideshare_id,
99
+ "speaker_deck_id" => @speaker_deck_id,
87
100
  }
88
101
  config["author"] = @author.to_hash if @author
89
102
  config