rabbit 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/Rakefile +1 -1
- data/data/account.kou.gpg +0 -0
- data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/_includes/en.menu.html +1 -1
- data/doc/_includes/ja.menu.html +1 -1
- data/doc/_layouts/skeleton.html +2 -2
- data/doc/en/development.rd +2 -2
- data/doc/en/install/homebrew.rd +11 -158
- data/doc/en/install/index.rd +1 -16
- data/doc/en/install/windows.rd +1 -1
- data/doc/en/news.rd +70 -1
- data/doc/en/usage/rabbit.rd +1 -1
- data/doc/en/users.rd +8 -8
- data/doc/images/screenshots/en/blue-circle.png +0 -0
- data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/en/clear-blue.png +0 -0
- data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/en/cozmixng.png +0 -0
- data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/en/dark-gradation.png +0 -0
- data/doc/images/screenshots/en/day-white.png +0 -0
- data/doc/images/screenshots/en/debian-raw.png +0 -0
- data/doc/images/screenshots/en/debian.png +0 -0
- data/doc/images/screenshots/en/green-circle.png +0 -0
- data/doc/images/screenshots/en/night-black.png +0 -0
- data/doc/images/screenshots/en/rabbit-raw.png +0 -0
- data/doc/images/screenshots/en/rabbit.png +0 -0
- data/doc/images/screenshots/en/ranguba-raw.png +0 -0
- data/doc/images/screenshots/en/ranguba.png +0 -0
- data/doc/images/screenshots/en/red-frame.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
- data/doc/images/screenshots/ja/blue-circle.png +0 -0
- data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/ja/clear-blue.png +0 -0
- data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/ja/cozmixng.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation.png +0 -0
- data/doc/images/screenshots/ja/day-white.png +0 -0
- data/doc/images/screenshots/ja/debian-raw.png +0 -0
- data/doc/images/screenshots/ja/debian.png +0 -0
- data/doc/images/screenshots/ja/green-circle.png +0 -0
- data/doc/images/screenshots/ja/night-black.png +0 -0
- data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
- data/doc/images/screenshots/ja/rabbit.png +0 -0
- data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
- data/doc/images/screenshots/ja/ranguba.png +0 -0
- data/doc/images/screenshots/ja/red-frame.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
- data/doc/index.html.en +1 -1
- data/doc/index.html.ja +1 -1
- data/doc/ja/development.rd +6 -7
- data/doc/ja/install/homebrew.rd +10 -156
- data/doc/ja/install/index.rd +1 -15
- data/doc/ja/install/macports.rd +1 -1
- data/doc/ja/news.rd +69 -1
- data/doc/ja/usage/rabbit-slide.rd +5 -5
- data/doc/ja/usage/rabbit-theme.rd +2 -2
- data/doc/ja/usage/rabbit.rd +1 -1
- data/doc/ja/users.rd +10 -10
- data/lib/rabbit/author-configuration.rb +18 -12
- data/lib/rabbit/command/rabbit-slide.rb +1 -1
- data/lib/rabbit/command/rabbit.rb +3 -3
- data/lib/rabbit/element/block.rb +2 -2
- data/lib/rabbit/element/text-renderer.rb +3 -1
- data/lib/rabbit/html/template.erb +1 -1
- data/lib/rabbit/image/dia.rb +19 -20
- data/lib/rabbit/image/eps.rb +1 -1
- data/lib/rabbit/parser/image.rb +14 -6
- data/lib/rabbit/renderer/engine/cairo.rb +27 -12
- data/lib/rabbit/renderer/print/cairo.rb +10 -2
- data/lib/rabbit/slide-configuration.rb +27 -14
- data/lib/rabbit/soap/base.rb +1 -1
- data/lib/rabbit/task/slide.rb +71 -33
- data/lib/rabbit/task/theme.rb +61 -19
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +17 -0
- data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +2 -0
- data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +162 -75
- data/lib/rabbit/theme/image/image.rb +3 -1
- data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +2 -0
- data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +25 -13
- data/lib/rabbit/utils.rb +16 -3
- data/lib/rabbit/version.rb +1 -1
- data/po/en/rabbit.po +182 -180
- data/po/fr/rabbit.po +182 -180
- data/po/ja/rabbit.po +184 -169
- data/po/rabbit.pot +176 -164
- data/rabbit.gemspec +63 -0
- data/test/image/test-dia.rb +54 -0
- data/test/image/test-eps.rb +41 -0
- data/test/rabbit-test-utils.rb +22 -20
- data/test/run-test.rb +20 -6
- data/test/test-slide-configuration.rb +2 -0
- 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-
|
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
|
-
(デフォルト:
|
95
|
+
(デフォルト: nil)
|
96
96
|
(省略可能)
|
97
97
|
--email=EMAIL 新しいスライドの作者のEメールアドレス
|
98
98
|
(例: --email=kou@cozmixng.org)
|
99
|
-
(デフォルト:
|
99
|
+
(デフォルト: nil)
|
100
100
|
(省略可能)
|
101
101
|
--rubygems-user=USER RubyGems.orgのアカウント
|
102
102
|
RubyGems.orgにスライドを公開するときに使います
|
103
103
|
(例: --rubygems-user=kou)
|
104
|
-
(デフォルト:
|
104
|
+
(デフォルト: nil)
|
105
105
|
(省略可能)
|
106
106
|
--slideshare-user=USER SlideShareのアカウント
|
107
107
|
SlideShareにスライドを公開するときに使います
|
108
108
|
(例: --slideshare-user=kou)
|
109
|
-
(デフォルト:
|
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-
|
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-
|
66
|
+
(デフォルト: lavie@rabbit-shocker.org)
|
67
67
|
(省略可能)
|
68
68
|
--rubygems-user=USER RubyGems.orgのアカウント
|
69
69
|
RubyGems.orgにスライドを公開するときに使います
|
data/doc/ja/usage/rabbit.rd
CHANGED
@@ -103,7 +103,7 @@ WindowsユーザならRDファイルをbin/rabbit.batにドラッグアンド
|
|
103
103
|
いてもソースを再読み込みしません.
|
104
104
|
|
105
105
|
例:
|
106
|
-
% rabbit --type uri https://raw.github.com/
|
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-
|
17
|
-
|
18
|
-
|
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-
|
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/>))さん(((
|
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
|
-
|
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
|
61
|
-
@name
|
62
|
-
@email
|
63
|
-
@rubygems_user
|
64
|
-
@slideshare_user
|
65
|
-
@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/
|
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 =
|
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
|
-
"(
|
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
|
|
data/lib/rabbit/element/block.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/rabbit/image/dia.rb
CHANGED
@@ -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
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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(:@
|
33
|
-
def_delegators(:@
|
34
|
-
def_delegators(:@
|
35
|
-
def_delegators(:@
|
36
|
-
def_delegators(:@
|
37
|
-
def_delegators(:@
|
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
|
-
|
39
|
+
init_svg_loader(filename, keep_ratio)
|
41
40
|
super
|
42
41
|
end
|
43
42
|
|
44
43
|
private
|
45
|
-
def
|
46
|
-
@
|
47
|
-
args = ["--export=#{@
|
48
|
-
args << "--filter=
|
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
|
-
@
|
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)
|
data/lib/rabbit/image/eps.rb
CHANGED
data/lib/rabbit/parser/image.rb
CHANGED
@@ -11,20 +11,28 @@ module Rabbit
|
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def match?(source)
|
14
|
-
|
15
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
89
|
-
|
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
|
-
|
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
|
69
|
-
@base_name
|
70
|
-
@
|
71
|
-
@
|
72
|
-
@
|
73
|
-
@
|
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
|