rabbit 2.0.2 → 2.0.3

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 (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