rabbit 2.2.1 → 3.0.0

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