rabbit 2.2.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +5 -5
  2. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  3. data/doc/_config.yml +2 -2
  4. data/doc/_layouts/en.html +1 -1
  5. data/doc/_layouts/ja.html +1 -1
  6. data/doc/en/news.rd +140 -0
  7. data/doc/en/sample/hiki/rabbit.hiki +2 -2
  8. data/doc/en/sample/markdown/rabbit.md +1 -1
  9. data/doc/en/sample/rd/rabbit.rd +1 -1
  10. data/doc/en/usage/rabbit-slide.rd +3 -3
  11. data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
  12. data/doc/images/screenshots/en/blue-circle.png +0 -0
  13. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  14. data/doc/images/screenshots/en/clear-blue.png +0 -0
  15. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  16. data/doc/images/screenshots/en/cozmixng.png +0 -0
  17. data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
  18. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  19. data/doc/images/screenshots/en/day-white-raw.png +0 -0
  20. data/doc/images/screenshots/en/day-white.png +0 -0
  21. data/doc/images/screenshots/en/debian-raw.png +0 -0
  22. data/doc/images/screenshots/en/debian.png +0 -0
  23. data/doc/images/screenshots/en/green-circle-raw.png +0 -0
  24. data/doc/images/screenshots/en/green-circle.png +0 -0
  25. data/doc/images/screenshots/en/night-black-raw.png +0 -0
  26. data/doc/images/screenshots/en/night-black.png +0 -0
  27. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  28. data/doc/images/screenshots/en/rabbit.png +0 -0
  29. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  30. data/doc/images/screenshots/en/ranguba.png +0 -0
  31. data/doc/images/screenshots/en/red-frame-raw.png +0 -0
  32. data/doc/images/screenshots/en/red-frame.png +0 -0
  33. data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  34. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  35. data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  36. data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
  37. data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
  38. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  39. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  40. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  41. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  42. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  43. data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
  44. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  45. data/doc/images/screenshots/ja/day-white-raw.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-raw.png +0 -0
  50. data/doc/images/screenshots/ja/green-circle.png +0 -0
  51. data/doc/images/screenshots/ja/night-black-raw.png +0 -0
  52. data/doc/images/screenshots/ja/night-black.png +0 -0
  53. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  54. data/doc/images/screenshots/ja/rabbit.png +0 -0
  55. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  56. data/doc/images/screenshots/ja/ranguba.png +0 -0
  57. data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
  58. data/doc/images/screenshots/ja/red-frame.png +0 -0
  59. data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
  60. data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
  61. data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
  62. data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
  63. data/doc/ja/how-to-make/index.rd +1 -1
  64. data/doc/ja/news.rd +143 -0
  65. data/doc/ja/sample/hiki/rabbit.hiki +2 -2
  66. data/doc/ja/sample/markdown/rabbit.md +1 -1
  67. data/doc/ja/sample/rd/rabbit.rd +1 -1
  68. data/doc/ja/slides.rd +1 -1
  69. data/doc/ja/usage/rabbit-slide.rd +3 -3
  70. data/doc/ja/users.rd +1 -1
  71. data/lib/rabbit/action.rb +23 -4
  72. data/lib/rabbit/canvas.rb +70 -14
  73. data/lib/rabbit/command/rabbit-slide.rb +252 -67
  74. data/lib/rabbit/command/rabbit-slide.ui +180 -0
  75. data/lib/rabbit/command/rabbit.rb +14 -20
  76. data/lib/rabbit/console.rb +9 -3
  77. data/lib/rabbit/dependency-canvas.rb +19 -1
  78. data/lib/rabbit/element.rb +34 -7
  79. data/lib/rabbit/element/poppler-page.rb +1 -2
  80. data/lib/rabbit/element/text-container-element.rb +2 -2
  81. data/lib/rabbit/element/text-renderer.rb +5 -4
  82. data/lib/rabbit/element/title-slide.rb +8 -0
  83. data/lib/rabbit/element/video.rb +1 -2
  84. data/lib/rabbit/filename.rb +39 -0
  85. data/lib/rabbit/formatter.rb +61 -30
  86. data/lib/rabbit/frame.rb +1 -19
  87. data/lib/rabbit/front.rb +23 -2
  88. data/lib/rabbit/gesture/handler.rb +21 -2
  89. data/lib/rabbit/graffiti/config-dialog.rb +15 -18
  90. data/lib/rabbit/gtk.rb +2 -191
  91. data/lib/rabbit/html/generator.rb +38 -30
  92. data/lib/rabbit/image-data-loader.rb +6 -1
  93. data/lib/rabbit/image.rb +22 -4
  94. data/lib/rabbit/image/base.rb +34 -2
  95. data/lib/rabbit/image/default.rb +1 -1
  96. data/lib/rabbit/image/eps.rb +1 -1
  97. data/lib/rabbit/image/gimp.rb +1 -1
  98. data/lib/rabbit/info-window.rb +27 -15
  99. data/lib/rabbit/logger/gui.rb +21 -23
  100. data/lib/rabbit/logger/stderr.rb +1 -1
  101. data/lib/rabbit/pango-markup.rb +44 -0
  102. data/lib/rabbit/parser.rb +20 -3
  103. data/lib/rabbit/parser/ext/image.rb +25 -8
  104. data/lib/rabbit/parser/ext/video.rb +21 -2
  105. data/lib/rabbit/parser/markdown.rb +1 -2
  106. data/lib/rabbit/parser/pdf.rb +23 -7
  107. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +20 -0
  108. data/lib/rabbit/progress.rb +34 -23
  109. data/lib/rabbit/renderer.rb +17 -23
  110. data/lib/rabbit/renderer/base.rb +31 -57
  111. data/lib/rabbit/renderer/color.rb +46 -53
  112. data/lib/rabbit/renderer/display/base.rb +71 -62
  113. data/lib/rabbit/renderer/display/button-handler.rb +2 -1
  114. data/lib/rabbit/renderer/display/clutter-embed.rb +60 -26
  115. data/lib/rabbit/renderer/display/drawing-area-base.rb +1 -1
  116. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +34 -21
  117. data/lib/rabbit/renderer/display/graffiti.rb +1 -3
  118. data/lib/rabbit/renderer/display/hook-handler.rb +8 -4
  119. data/lib/rabbit/renderer/display/key-handler.rb +7 -2
  120. data/lib/rabbit/renderer/display/magnifier.rb +2 -2
  121. data/lib/rabbit/renderer/display/progress.rb +10 -2
  122. data/lib/rabbit/renderer/display/spotlight.rb +2 -2
  123. data/lib/rabbit/renderer/engine/cairo.rb +0 -3
  124. data/lib/rabbit/renderer/kernel.rb +54 -0
  125. data/lib/rabbit/renderer/offscreen.rb +14 -6
  126. data/lib/rabbit/renderer/print-layout.rb +150 -0
  127. data/lib/rabbit/renderer/printer.rb +236 -0
  128. data/lib/rabbit/renderer/screen.rb +288 -0
  129. data/lib/rabbit/renderer/widget/drawing-area.rb +93 -0
  130. data/lib/rabbit/size.rb +52 -25
  131. data/lib/rabbit/slide-configuration.rb +56 -12
  132. data/lib/rabbit/source.rb +24 -8
  133. data/lib/rabbit/task/slide.rb +1 -1
  134. data/lib/rabbit/theme/applier.rb +26 -9
  135. data/lib/rabbit/theme/base/base.rb +7 -7
  136. data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
  137. data/lib/rabbit/theme/image-timer/image-timer.rb +3 -1
  138. data/lib/rabbit/theme/image-viewer/image-viewer.rb +13 -1
  139. data/lib/rabbit/theme/image/image.rb +4 -4
  140. data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +3 -1
  141. data/lib/rabbit/theme/tag/tag.rb +12 -4
  142. data/lib/rabbit/version.rb +2 -2
  143. data/lib/rabbit/video-window.rb +75 -89
  144. data/misc/emacs/rabbit-mode.el +11 -7
  145. data/po/en/rabbit.edit.po +189 -185
  146. data/po/en/rabbit.po +15 -12
  147. data/po/fr/rabbit.edit.po +189 -185
  148. data/po/fr/rabbit.po +15 -12
  149. data/po/ja/rabbit.edit.po +190 -186
  150. data/po/ja/rabbit.po +16 -13
  151. data/rabbit.gemspec +34 -16
  152. data/test/command/test-rabbit.rb +100 -0
  153. data/test/{rabbit-test-utils.rb → helper.rb} +7 -4
  154. data/test/{rabbit-test-utils → helper}/fixture.rb +2 -2
  155. data/test/{rabbit-test-utils → helper}/parser.rb +2 -2
  156. data/test/image/test-dia.rb +2 -2
  157. data/test/image/test-eps.rb +2 -2
  158. data/test/parser/test-markdown.rb +3 -5
  159. data/test/parser/test-rd.rb +1 -3
  160. data/test/parser/test-wiki.rb +3 -5
  161. data/test/run-test.rb +3 -3
  162. data/test/test-applier.rb +60 -29
  163. data/test/test-canvas.rb +70 -0
  164. data/test/test-color.rb +18 -9
  165. data/test/test-element.rb +15 -3
  166. data/test/test-size.rb +25 -22
  167. data/test/test-slide-configuration.rb +16 -6
  168. data/test/test-source.rb +15 -5
  169. data/test/test-utils.rb +15 -1
  170. metadata +55 -84
  171. data/lib/rabbit/renderer/print.rb +0 -31
  172. data/lib/rabbit/renderer/print/base.rb +0 -78
  173. data/lib/rabbit/renderer/print/cairo.rb +0 -122
  174. data/lib/rabbit/renderer/print/layout.rb +0 -123
  175. data/lib/rabbit/renderer/print/multiple.rb +0 -202
  176. data/lib/rabbit/source/hiki.rb +0 -36
  177. data/lib/rabbit/source/slide-share.rb +0 -53
@@ -0,0 +1,93 @@
1
+ # Copyright (C) 2006-2018 Kouhei Sutou <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
+
17
+ require "rabbit/renderer/engine/cairo"
18
+
19
+ module Rabbit
20
+ module Renderer
21
+ module Widget
22
+ class DrawingArea
23
+ include Engine::Cairo
24
+
25
+ def initialize(canvas)
26
+ @canvas = canvas
27
+ @area = Gtk::DrawingArea.new
28
+ clear_compiled_slides
29
+ set_draw
30
+ end
31
+
32
+ def raw
33
+ @area
34
+ end
35
+
36
+ def queue_redraw
37
+ @area.queue_redraw
38
+ end
39
+
40
+ def clear_compiled_slide(slide=nil)
41
+ @compiled_slides.delete(slide || @canvas.current_slide)
42
+ end
43
+
44
+ def clear_compiled_slides
45
+ @compiled_slides = {}
46
+ end
47
+
48
+ def width
49
+ @area.allocation.width
50
+ end
51
+
52
+ def height
53
+ @area.allocation.height
54
+ end
55
+
56
+ private
57
+ def set_draw
58
+ @area.signal_connect(:draw) do |widget, context|
59
+ init_context(context)
60
+ draw(widget)
61
+ finish_renderer
62
+ Gdk::Event::PROPAGATE
63
+ end
64
+ end
65
+
66
+ def draw(widget)
67
+ draw_current_slide
68
+ end
69
+
70
+ def draw_current_slide
71
+ slide = @canvas.current_slide
72
+ if slide
73
+ begin
74
+ compile_slide(slide) unless compiled_slide?(slide)
75
+ slide.draw(@canvas, false)
76
+ rescue
77
+ @canvas.logger.warn($!)
78
+ end
79
+ end
80
+ end
81
+
82
+ def compiled_slide?(slide)
83
+ @compiled_slides.has_key?(slide)
84
+ end
85
+
86
+ def compile_slide(slide)
87
+ @compiled_slides[slide] = true
88
+ slide.draw(@canvas, true)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,7 +1,27 @@
1
+ # Copyright (C) 2015-2019 Kouhei Sutou <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
  module Rabbit
2
18
  class Size
19
+ attr_reader :base_width
20
+ attr_reader :base_height
3
21
  attr_reader :real_width
4
22
  attr_reader :real_height
23
+ attr_reader :real_content_width
24
+ attr_reader :real_content_height
5
25
  attr_reader :logical_width
6
26
  attr_reader :logical_height
7
27
  attr_reader :logical_margin_left
@@ -9,7 +29,9 @@ module Rabbit
9
29
  attr_reader :logical_margin_top
10
30
  attr_reader :logical_margin_bottom
11
31
  attr_reader :ratio
12
- def initialize(width, height, ratio)
32
+ def initialize(base_width, base_height, width, height, ratio)
33
+ @base_width = base_width
34
+ @base_height = base_height
13
35
  @real_width = width
14
36
  @real_height = height
15
37
  @ratio = ratio
@@ -30,36 +52,41 @@ module Rabbit
30
52
  have_logical_margin_x? or have_logical_margin_y?
31
53
  end
32
54
 
55
+ def logical_scale
56
+ @logical_scale
57
+ end
58
+
33
59
  private
34
60
  def compute_logical_size
61
+ @logical_width = @base_width
62
+ @logical_height = @base_height
63
+
35
64
  real_ratio = @real_width.to_f / @real_height.to_f
36
65
  if real_ratio == @ratio
37
- @logical_width = @real_width
38
- @logical_height = @real_height
39
- @logical_margin_left = 0
40
- @logical_margin_right = 0
41
- @logical_margin_top = 0
42
- @logical_margin_bottom = 0
43
- return
44
- end
45
-
46
- if real_ratio > @ratio
47
- @logical_width = @real_width * (@ratio / real_ratio)
48
- @logical_height = @real_height
49
- width_margin = @real_width - @logical_width
50
- @logical_margin_left = width_margin / 2
51
- @logical_margin_right = width_margin / 2
52
- @logical_margin_top = 0
53
- @logical_margin_bottom = 0
66
+ @real_content_width = @real_width
67
+ @real_content_height = @real_height
68
+ elsif real_ratio > @ratio
69
+ @real_content_width = @real_width * (@ratio / real_ratio)
70
+ @real_content_height = @real_height
54
71
  else
55
- @logical_width = @real_width
56
- @logical_height = @real_height * (real_ratio / @ratio)
57
- height_margin = @real_height - @logical_height
58
- @logical_margin_left = 0
59
- @logical_margin_right = 0
60
- @logical_margin_top = height_margin / 2
61
- @logical_margin_bottom = height_margin / 2
72
+ @real_content_width = @real_width
73
+ @real_content_height = @real_height * (real_ratio / @ratio)
62
74
  end
75
+
76
+ logical_scale_x = @real_content_width.to_f / @logical_width.to_f
77
+ logical_scale_y = @real_content_height.to_f / @logical_height.to_f
78
+
79
+ real_margin_width = @real_width - @real_content_width
80
+ logical_margin_width = real_margin_width / logical_scale_x
81
+ @logical_margin_left = logical_margin_width / 2
82
+ @logical_margin_right = logical_margin_width / 2
83
+
84
+ real_margin_height = @real_height - @real_content_height
85
+ logical_margin_height = real_margin_height / logical_scale_y
86
+ @logical_margin_top = logical_margin_height / 2
87
+ @logical_margin_bottom = logical_margin_height / 2
88
+
89
+ @logical_scale = [logical_scale_x, logical_scale_y]
63
90
  end
64
91
  end
65
92
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2014 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2012-2017 Kouhei Sutou <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
@@ -14,6 +14,7 @@
14
14
  # with this program; if not, write to the Free Software Foundation, Inc.,
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
+ require "date"
17
18
  require "time"
18
19
 
19
20
  require "yaml"
@@ -31,7 +32,12 @@ module Rabbit
31
32
  GEM_NAME_PREFIX = "rabbit-slide"
32
33
 
33
34
  attr_accessor :logger
34
- attr_accessor :id, :base_name, :tags, :presentation_date
35
+ attr_accessor :id
36
+ attr_accessor :base_name
37
+ attr_accessor :tags
38
+ attr_reader :presentation_date
39
+ attr_reader :presentation_start_time
40
+ attr_reader :presentation_end_time
35
41
  attr_accessor :licenses
36
42
  attr_accessor :slideshare_id
37
43
  attr_accessor :speaker_deck_id
@@ -45,6 +51,18 @@ module Rabbit
45
51
  clear
46
52
  end
47
53
 
54
+ def presentation_date=(value)
55
+ @presentation_date = ensure_date(value)
56
+ end
57
+
58
+ def presentation_start_time=(value)
59
+ @presentation_start_time = ensure_time(value)
60
+ end
61
+
62
+ def presentation_end_time=(value)
63
+ @presentation_end_time = ensure_time(value)
64
+ end
65
+
48
66
  def load
49
67
  return unless File.exist?(path)
50
68
  conf = YAML.load(File.read(path))
@@ -70,6 +88,8 @@ module Rabbit
70
88
  @base_name = nil
71
89
  @tags = []
72
90
  @presentation_date = nil
91
+ @presentation_start_time = nil
92
+ @presentation_end_time = nil
73
93
  @version = nil
74
94
  @licenses = []
75
95
  @slideshare_id = nil
@@ -80,10 +100,16 @@ module Rabbit
80
100
  @author = nil
81
101
  end
82
102
 
103
+
83
104
  def merge!(conf)
84
105
  @id = conf["id"] || @id
85
106
  @base_name = conf["base_name"] || @base_name
86
- @presentation_date = conf["presentation_date"] || @presentation_date
107
+ self.presentation_date =
108
+ conf["presentation_date"] || @presentation_date
109
+ self.presentation_start_time =
110
+ conf["presentation_start_time"] || @presentation_start_time
111
+ self.presentation_end_time =
112
+ conf["presentation_end_time"] || @presentation_end_time
87
113
  @version = conf["version"] || @version
88
114
  @slideshare_id = conf["slideshare_id"] || @slideshare_id
89
115
  @speaker_deck_id = conf["speaker_deck_id"] || @speaker_deck_id
@@ -104,6 +130,8 @@ module Rabbit
104
130
  "base_name" => @base_name,
105
131
  "tags" => @tags,
106
132
  "presentation_date" => @presentation_date,
133
+ "presentation_start_time" => @presentation_start_time,
134
+ "presentation_end_time" => @presentation_end_time,
107
135
  "version" => version,
108
136
  "licenses" => @licenses,
109
137
  "slideshare_id" => @slideshare_id,
@@ -117,7 +145,16 @@ module Rabbit
117
145
  end
118
146
 
119
147
  def to_yaml
120
- to_hash.to_yaml
148
+ hash = to_hash
149
+ hash.each do |key, value|
150
+ case value
151
+ when Date
152
+ hash[key] = value.strftime("%Y-%m-%d")
153
+ when Time
154
+ hash[key] = value.iso8601
155
+ end
156
+ end
157
+ hash.to_yaml
121
158
  end
122
159
 
123
160
  def version
@@ -133,19 +170,26 @@ module Rabbit
133
170
  end
134
171
 
135
172
  private
136
- def parsed_presentation_date
137
- return nil if @presentation_date.nil?
138
- begin
139
- Time.parse(@presentation_date)
140
- rescue ArgumentError
141
- nil
173
+ def ensure_date(value)
174
+ if value.is_a?(String)
175
+ Date.parse(value)
176
+ else
177
+ value
178
+ end
179
+ end
180
+
181
+ def ensure_time(value)
182
+ if value.is_a?(String)
183
+ Time.parse(value)
184
+ else
185
+ value
142
186
  end
143
187
  end
144
188
 
145
189
  def default_version
146
- date = parsed_presentation_date
190
+ date = presentation_date
147
191
  if date
148
- date.strftime("%Y.%m.%d")
192
+ "#{date.year}.#{date.month}.#{date.day}.0"
149
193
  else
150
194
  "1.0.0"
151
195
  end
@@ -1,14 +1,30 @@
1
- require "rabbit/utils"
1
+ # Copyright (C) 2017 Kouhei Sutou <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
+
17
+ require "rabbit/source/argf"
18
+ require "rabbit/source/file"
19
+ require "rabbit/source/memory"
20
+ require "rabbit/source/uri"
2
21
 
3
22
  module Rabbit
4
23
  module Source
5
- extend Utils
6
-
7
- dir = ::File.join("rabbit", "source")
8
- require_files_under_directory_in_load_path(dir)
9
-
10
- def self.types
11
- collect_classes_under_module(self)
24
+ class << self
25
+ def types
26
+ Utils.collect_classes_under_module(self)
27
+ end
12
28
  end
13
29
  end
14
30
  end
@@ -231,7 +231,7 @@ module Rabbit
231
231
 
232
232
  def homepage
233
233
  rubygems_user = @slide.author.rubygems_user
234
- "http://slide.rabbit-shocker.org/authors/#{rubygems_user}/#{@slide.id}/"
234
+ "https://slide.rabbit-shocker.org/authors/#{rubygems_user}/#{@slide.id}/"
235
235
  end
236
236
 
237
237
  def rabbit(*arguments)
@@ -241,8 +241,8 @@ module Rabbit
241
241
  def_delegators(:canvas, :make_layout)
242
242
 
243
243
  # Those constants are meaningless. :p
244
- NORMALIZED_WIDTH = 91.0 * 96
245
- NORMALIZED_HEIGHT = 67.5 * 96
244
+ NORMALIZED_WIDTH = 130.0 * 96
245
+ NORMALIZED_HEIGHT = 97.5 * 96
246
246
 
247
247
  def initialize(theme, &callback)
248
248
  super()
@@ -289,7 +289,11 @@ module Rabbit
289
289
  end
290
290
 
291
291
  def normalized_size(s)
292
- ((s / canvas.width.to_f) * normalized_width).ceil
292
+ if wide_aspect_ratio?
293
+ normalized_y(s)
294
+ else
295
+ normalized_x(s)
296
+ end
293
297
  end
294
298
 
295
299
  def normalized_x(sx)
@@ -300,8 +304,21 @@ module Rabbit
300
304
  ((sy / canvas.height.to_f) * normalized_height).ceil
301
305
  end
302
306
 
307
+ def font_size(size)
308
+ # TODO: Convert to point from pixel
309
+ if wide_aspect_ratio?
310
+ ((canvas.height * size) / normalized_height)
311
+ else
312
+ ((canvas.width * size) / normalized_width)
313
+ end
314
+ end
315
+
303
316
  def screen_size(n)
304
- ((canvas.width * n) / normalized_width).ceil
317
+ if wide_aspect_ratio?
318
+ screen_y(n)
319
+ else
320
+ screen_x(n)
321
+ end
305
322
  end
306
323
 
307
324
  def screen_x(nx)
@@ -317,6 +334,10 @@ module Rabbit
317
334
  end
318
335
 
319
336
  private
337
+ def wide_aspect_ratio?
338
+ (canvas.width / 4) > (canvas.height / 3)
339
+ end
340
+
320
341
  def normalize_source(src)
321
342
  src.gsub(/(?=^|\W)@(very_)?huge_(script_)?font_size(?=$|\W)/) do |x|
322
343
  x = "x"
@@ -333,10 +354,6 @@ module Rabbit
333
354
  end
334
355
  end
335
356
 
336
- def to_attrs(hash)
337
- canvas.to_attrs(hash)
338
- end
339
-
340
357
  def name
341
358
  @theme.name
342
359
  end
@@ -619,7 +636,7 @@ module Rabbit
619
636
  end
620
637
 
621
638
  def tag(name, attributes, content)
622
- "<#{name} #{to_attrs(attributes)}>#{content}</#{name}>"
639
+ PangoMarkup.new(name, attributes, content).to_s
623
640
  end
624
641
 
625
642
  def span(attributes, content)