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.
- checksums.yaml +5 -5
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/_layouts/en.html +1 -1
- data/doc/_layouts/ja.html +1 -1
- data/doc/en/news.rd +140 -0
- data/doc/en/sample/hiki/rabbit.hiki +2 -2
- data/doc/en/sample/markdown/rabbit.md +1 -1
- data/doc/en/sample/rd/rabbit.rd +1 -1
- data/doc/en/usage/rabbit-slide.rd +3 -3
- data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
- 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-raw.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-raw.png +0 -0
- data/doc/images/screenshots/en/green-circle.png +0 -0
- data/doc/images/screenshots/en/night-black-raw.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-raw.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-raw.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-raw.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-raw.png +0 -0
- data/doc/images/screenshots/ja/green-circle.png +0 -0
- data/doc/images/screenshots/ja/night-black-raw.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-raw.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/ja/how-to-make/index.rd +1 -1
- data/doc/ja/news.rd +143 -0
- data/doc/ja/sample/hiki/rabbit.hiki +2 -2
- data/doc/ja/sample/markdown/rabbit.md +1 -1
- data/doc/ja/sample/rd/rabbit.rd +1 -1
- data/doc/ja/slides.rd +1 -1
- data/doc/ja/usage/rabbit-slide.rd +3 -3
- data/doc/ja/users.rd +1 -1
- data/lib/rabbit/action.rb +23 -4
- data/lib/rabbit/canvas.rb +70 -14
- data/lib/rabbit/command/rabbit-slide.rb +252 -67
- data/lib/rabbit/command/rabbit-slide.ui +180 -0
- data/lib/rabbit/command/rabbit.rb +14 -20
- data/lib/rabbit/console.rb +9 -3
- data/lib/rabbit/dependency-canvas.rb +19 -1
- data/lib/rabbit/element.rb +34 -7
- data/lib/rabbit/element/poppler-page.rb +1 -2
- data/lib/rabbit/element/text-container-element.rb +2 -2
- data/lib/rabbit/element/text-renderer.rb +5 -4
- data/lib/rabbit/element/title-slide.rb +8 -0
- data/lib/rabbit/element/video.rb +1 -2
- data/lib/rabbit/filename.rb +39 -0
- data/lib/rabbit/formatter.rb +61 -30
- data/lib/rabbit/frame.rb +1 -19
- data/lib/rabbit/front.rb +23 -2
- data/lib/rabbit/gesture/handler.rb +21 -2
- data/lib/rabbit/graffiti/config-dialog.rb +15 -18
- data/lib/rabbit/gtk.rb +2 -191
- data/lib/rabbit/html/generator.rb +38 -30
- data/lib/rabbit/image-data-loader.rb +6 -1
- data/lib/rabbit/image.rb +22 -4
- data/lib/rabbit/image/base.rb +34 -2
- data/lib/rabbit/image/default.rb +1 -1
- data/lib/rabbit/image/eps.rb +1 -1
- data/lib/rabbit/image/gimp.rb +1 -1
- data/lib/rabbit/info-window.rb +27 -15
- data/lib/rabbit/logger/gui.rb +21 -23
- data/lib/rabbit/logger/stderr.rb +1 -1
- data/lib/rabbit/pango-markup.rb +44 -0
- data/lib/rabbit/parser.rb +20 -3
- data/lib/rabbit/parser/ext/image.rb +25 -8
- data/lib/rabbit/parser/ext/video.rb +21 -2
- data/lib/rabbit/parser/markdown.rb +1 -2
- data/lib/rabbit/parser/pdf.rb +23 -7
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +20 -0
- data/lib/rabbit/progress.rb +34 -23
- data/lib/rabbit/renderer.rb +17 -23
- data/lib/rabbit/renderer/base.rb +31 -57
- data/lib/rabbit/renderer/color.rb +46 -53
- data/lib/rabbit/renderer/display/base.rb +71 -62
- data/lib/rabbit/renderer/display/button-handler.rb +2 -1
- data/lib/rabbit/renderer/display/clutter-embed.rb +60 -26
- data/lib/rabbit/renderer/display/drawing-area-base.rb +1 -1
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +34 -21
- data/lib/rabbit/renderer/display/graffiti.rb +1 -3
- data/lib/rabbit/renderer/display/hook-handler.rb +8 -4
- data/lib/rabbit/renderer/display/key-handler.rb +7 -2
- data/lib/rabbit/renderer/display/magnifier.rb +2 -2
- data/lib/rabbit/renderer/display/progress.rb +10 -2
- data/lib/rabbit/renderer/display/spotlight.rb +2 -2
- data/lib/rabbit/renderer/engine/cairo.rb +0 -3
- data/lib/rabbit/renderer/kernel.rb +54 -0
- data/lib/rabbit/renderer/offscreen.rb +14 -6
- data/lib/rabbit/renderer/print-layout.rb +150 -0
- data/lib/rabbit/renderer/printer.rb +236 -0
- data/lib/rabbit/renderer/screen.rb +288 -0
- data/lib/rabbit/renderer/widget/drawing-area.rb +93 -0
- data/lib/rabbit/size.rb +52 -25
- data/lib/rabbit/slide-configuration.rb +56 -12
- data/lib/rabbit/source.rb +24 -8
- data/lib/rabbit/task/slide.rb +1 -1
- data/lib/rabbit/theme/applier.rb +26 -9
- data/lib/rabbit/theme/base/base.rb +7 -7
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
- data/lib/rabbit/theme/image-timer/image-timer.rb +3 -1
- data/lib/rabbit/theme/image-viewer/image-viewer.rb +13 -1
- data/lib/rabbit/theme/image/image.rb +4 -4
- data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +3 -1
- data/lib/rabbit/theme/tag/tag.rb +12 -4
- data/lib/rabbit/version.rb +2 -2
- data/lib/rabbit/video-window.rb +75 -89
- data/misc/emacs/rabbit-mode.el +11 -7
- data/po/en/rabbit.edit.po +189 -185
- data/po/en/rabbit.po +15 -12
- data/po/fr/rabbit.edit.po +189 -185
- data/po/fr/rabbit.po +15 -12
- data/po/ja/rabbit.edit.po +190 -186
- data/po/ja/rabbit.po +16 -13
- data/rabbit.gemspec +34 -16
- data/test/command/test-rabbit.rb +100 -0
- data/test/{rabbit-test-utils.rb → helper.rb} +7 -4
- data/test/{rabbit-test-utils → helper}/fixture.rb +2 -2
- data/test/{rabbit-test-utils → helper}/parser.rb +2 -2
- data/test/image/test-dia.rb +2 -2
- data/test/image/test-eps.rb +2 -2
- data/test/parser/test-markdown.rb +3 -5
- data/test/parser/test-rd.rb +1 -3
- data/test/parser/test-wiki.rb +3 -5
- data/test/run-test.rb +3 -3
- data/test/test-applier.rb +60 -29
- data/test/test-canvas.rb +70 -0
- data/test/test-color.rb +18 -9
- data/test/test-element.rb +15 -3
- data/test/test-size.rb +25 -22
- data/test/test-slide-configuration.rb +16 -6
- data/test/test-source.rb +15 -5
- data/test/test-utils.rb +15 -1
- metadata +55 -84
- data/lib/rabbit/renderer/print.rb +0 -31
- data/lib/rabbit/renderer/print/base.rb +0 -78
- data/lib/rabbit/renderer/print/cairo.rb +0 -122
- data/lib/rabbit/renderer/print/layout.rb +0 -123
- data/lib/rabbit/renderer/print/multiple.rb +0 -202
- data/lib/rabbit/source/hiki.rb +0 -36
- data/lib/rabbit/source/slide-share.rb +0 -53
|
@@ -187,10 +187,10 @@ title: "サンプルスライド: Rabbit"
|
|
|
187
187
|
|
|
188
188
|
URL先の画像をダウンロード
|
|
189
189
|
|
|
190
|
-
{{image("
|
|
190
|
+
{{image("https://raw.githubusercontent.com/rabbit-shocker/rabbit/master/data/rabbit/image/cozmixng-images/cozmixchu.png",
|
|
191
191
|
:caption => "こずみっくちゅー")}}
|
|
192
192
|
|
|
193
|
-
// [[こずみっくちゅー|
|
|
193
|
+
// [[こずみっくちゅー|https://raw.githubusercontent.com/rabbit-shocker/rabbit/master/data/rabbit/image/cozmixng-images/cozmixchu.png]]
|
|
194
194
|
// ↑の書式はまだ使えない
|
|
195
195
|
|
|
196
196
|
! 数式
|
|
@@ -163,7 +163,7 @@ background-image-relative-margin-right
|
|
|
163
163
|
|
|
164
164
|
URL先の画像をダウンロード
|
|
165
165
|
|
|
166
|
-

|
|
167
167
|
|
|
168
168
|
# 数式
|
|
169
169
|
|
data/doc/ja/sample/rd/rabbit.rd
CHANGED
|
@@ -194,7 +194,7 @@ title: "サンプルスライド: Rabbit"
|
|
|
194
194
|
URL先の画像をダウンロード
|
|
195
195
|
|
|
196
196
|
# image
|
|
197
|
-
# src =
|
|
197
|
+
# src = https://raw.githubusercontent.com/rabbit-shocker/rabbit/master/data/rabbit/image/cozmixng-images/cozmixchu.png
|
|
198
198
|
# caption = こずみっくちゅー
|
|
199
199
|
|
|
200
200
|
= 数式
|
data/doc/ja/slides.rd
CHANGED
|
@@ -7,7 +7,7 @@ title: スライド
|
|
|
7
7
|
Rabbitで作ったスライドがたくさん公開されています。Rabbitで作っ
|
|
8
8
|
たスライドを公開したら自由に追加してください。
|
|
9
9
|
|
|
10
|
-
* ((<kou|URL:
|
|
10
|
+
* ((<kou|URL:https://slide.rabbit-shocker.org/authors/kou/>))
|
|
11
11
|
* ((<zunda|URL:http://zunda.freeshell.org/d/?year=2004;month=3Q;category=rabbit>))さん
|
|
12
12
|
* ((<oxy|URL:http://mono.kmc.gr.jp/~oxy/d/?date=20041019#p02>))さん
|
|
13
13
|
* かずひこさん
|
|
@@ -19,7 +19,7 @@ RubyGems.orgやSlideShareへの公開をコマンド一発で実行できます
|
|
|
19
19
|
Rabbitでよいスライドを作成し、よい発表をし、そして、共有しましょう!
|
|
20
20
|
|
|
21
21
|
RubyGems.orgに公開したスライドは((<Rabbit Slide
|
|
22
|
-
Show|URL:
|
|
22
|
+
Show|URL:https://slide.rabbit-shocker.org/>))で閲覧できます。
|
|
23
23
|
|
|
24
24
|
== 雛形作成
|
|
25
25
|
|
|
@@ -203,8 +203,8 @@ RubyGems.orgのユーザー名が((%rabbit%))でスライドIDが
|
|
|
203
203
|
% rabbit rabbit-theme-benchmark-ja.gem
|
|
204
204
|
|
|
205
205
|
RubyGems.orgに公開したスライドは((<Rabbit Slide
|
|
206
|
-
Show|URL:
|
|
207
|
-
((%
|
|
206
|
+
Show|URL:https://slide.rabbit-shocker.org/>))で閲覧できます。URLは
|
|
207
|
+
((%https://slide.rabbit-shocker.org/authors/#{RubyGems.orgのユーザー
|
|
208
208
|
名}/#{スライドID}/%))です。
|
|
209
209
|
|
|
210
210
|
Rabbit Slide ShowはRubyGems.orgに公開されているスライドを自動で収集して
|
data/doc/ja/users.rd
CHANGED
|
@@ -15,7 +15,7 @@ Rabbitショッカーの主な活動場所はプレゼンテーションの場
|
|
|
15
15
|
|
|
16
16
|
RabbitショッカーのみなさんはRabbitを使ってプレゼンテーションした後は使っ
|
|
17
17
|
たスライドを
|
|
18
|
-
((<slide.rabbit-shocker.org|URL:
|
|
18
|
+
((<slide.rabbit-shocker.org|URL:https://slide.rabbit-shocker.org/>))へアッ
|
|
19
19
|
プロードしています。slide.rabbit-shocker.orgへ行けばRabbitでどんなスラ
|
|
20
20
|
イドを作れるかを確認することができます。
|
|
21
21
|
|
data/lib/rabbit/action.rb
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (C) 2005-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/gtk"
|
|
18
|
+
|
|
19
|
+
Gtk.init if Gtk.respond_to?(:init)
|
|
2
20
|
|
|
3
21
|
module Gtk
|
|
4
22
|
class Action
|
|
@@ -129,9 +147,6 @@ module Rabbit
|
|
|
129
147
|
end
|
|
130
148
|
end
|
|
131
149
|
|
|
132
|
-
dir = ::File.join("rabbit", "action")
|
|
133
|
-
require_files_under_directory_in_load_path(dir)
|
|
134
|
-
|
|
135
150
|
module_function
|
|
136
151
|
def update_processing_action_status(canvas)
|
|
137
152
|
canvas.action("ToggleIndexMode").sensitive = !canvas.processing?
|
|
@@ -141,3 +156,7 @@ module Rabbit
|
|
|
141
156
|
end
|
|
142
157
|
end
|
|
143
158
|
end
|
|
159
|
+
|
|
160
|
+
require "rabbit/action/basic"
|
|
161
|
+
require "rabbit/action/radio"
|
|
162
|
+
require "rabbit/action/toggle"
|
data/lib/rabbit/canvas.rb
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
|
+
# Copyright (C) 2004-2019 Sutou Kouhei <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
|
require "forwardable"
|
|
2
18
|
require "rabbit/gtk"
|
|
3
19
|
|
|
4
20
|
require "rabbit/rabbit"
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
21
|
+
require "rabbit/filename"
|
|
22
|
+
require "rabbit/frame"
|
|
23
|
+
require "rabbit/element"
|
|
8
24
|
require "rabbit/parser"
|
|
9
25
|
require "rabbit/theme/manager"
|
|
10
26
|
require "rabbit/front"
|
|
@@ -18,7 +34,7 @@ module Rabbit
|
|
|
18
34
|
|
|
19
35
|
include GetText
|
|
20
36
|
|
|
21
|
-
INTERNAL_DPI =
|
|
37
|
+
INTERNAL_DPI = 96.0
|
|
22
38
|
|
|
23
39
|
def_delegators(:@frame, :icon, :icon=, :set_icon)
|
|
24
40
|
def_delegators(:@frame, :icon_list, :icon_list=, :set_icon_list)
|
|
@@ -29,7 +45,12 @@ module Rabbit
|
|
|
29
45
|
def_delegators(:@frame, :iconify_available?)
|
|
30
46
|
|
|
31
47
|
def_delegators(:@renderer, :width, :height)
|
|
32
|
-
|
|
48
|
+
# Deprecated. Use #base_width= instead.
|
|
49
|
+
def_delegator(:@renderer, :base_width=, :width=)
|
|
50
|
+
# Deprecated. Use #base_height= instead.
|
|
51
|
+
def_delegator(:@renderer, :base_height=, :height=)
|
|
52
|
+
def_delegators(:@renderer, :base_width, :base_height)
|
|
53
|
+
def_delegators(:@renderer, :base_width=, :base_height=)
|
|
33
54
|
def_delegators(:@renderer, :paper_width, :paper_height)
|
|
34
55
|
def_delegators(:@renderer, :paper_width=, :paper_height=)
|
|
35
56
|
def_delegators(:@renderer, :margin_left, :margin_left=)
|
|
@@ -78,7 +99,7 @@ module Rabbit
|
|
|
78
99
|
|
|
79
100
|
def_delegators(:@renderer, :z_far, :z_view)
|
|
80
101
|
|
|
81
|
-
def_delegators(:@renderer, :
|
|
102
|
+
def_delegators(:@renderer, :flag_size)
|
|
82
103
|
|
|
83
104
|
def_delegators(:@renderer, :create_pango_context, :pango_context=)
|
|
84
105
|
|
|
@@ -328,10 +349,14 @@ module Rabbit
|
|
|
328
349
|
@source = source || @source
|
|
329
350
|
begin
|
|
330
351
|
index = current_index
|
|
352
|
+
current_allotted_time = allotted_time
|
|
331
353
|
keep_index do
|
|
332
354
|
@renderer.pre_parse
|
|
333
355
|
clear
|
|
334
356
|
Parser.parse(self, @source)
|
|
357
|
+
new_allotted_time = allotted_time
|
|
358
|
+
reset_timer if new_allotted_time != current_allotted_time
|
|
359
|
+
apply_timer
|
|
335
360
|
set_current_index(index)
|
|
336
361
|
reload_theme do
|
|
337
362
|
if @parse_request_queue.last != id
|
|
@@ -413,9 +438,9 @@ module Rabbit
|
|
|
413
438
|
|
|
414
439
|
def saved_image_base_name
|
|
415
440
|
if @saved_image_base_name
|
|
416
|
-
base_name =
|
|
441
|
+
base_name = @saved_image_base_name.encode("UTF-8")
|
|
417
442
|
else
|
|
418
|
-
base_name = title
|
|
443
|
+
base_name = Filename.sanitize(title)
|
|
419
444
|
end
|
|
420
445
|
base_name << "-index" if index_mode?
|
|
421
446
|
base_name
|
|
@@ -518,7 +543,9 @@ module Rabbit
|
|
|
518
543
|
end
|
|
519
544
|
|
|
520
545
|
def have_previous?
|
|
521
|
-
|
|
546
|
+
return true if have_previous_slide?
|
|
547
|
+
return !current_slide.first? if current_slide
|
|
548
|
+
false
|
|
522
549
|
end
|
|
523
550
|
|
|
524
551
|
def have_next_slide?
|
|
@@ -526,7 +553,9 @@ module Rabbit
|
|
|
526
553
|
end
|
|
527
554
|
|
|
528
555
|
def have_next?
|
|
529
|
-
|
|
556
|
+
return true if have_next_slide?
|
|
557
|
+
return !current_slide.last? if current_slide
|
|
558
|
+
false
|
|
530
559
|
end
|
|
531
560
|
|
|
532
561
|
def cache_all_slides
|
|
@@ -543,10 +572,11 @@ module Rabbit
|
|
|
543
572
|
stop_auto_redraw_timer
|
|
544
573
|
timer = GLib::Timeout.add(interval * 1000) do
|
|
545
574
|
if quitted?
|
|
546
|
-
|
|
575
|
+
@auto_redraw_timer = nil
|
|
576
|
+
GLib::Source::REMOVE
|
|
547
577
|
else
|
|
548
578
|
activate("Redraw")
|
|
549
|
-
|
|
579
|
+
GLib::Source::CONTINUE
|
|
550
580
|
end
|
|
551
581
|
end
|
|
552
582
|
@auto_redraw_timer = timer
|
|
@@ -617,7 +647,18 @@ module Rabbit
|
|
|
617
647
|
|
|
618
648
|
def allotted_time
|
|
619
649
|
time = @allotted_time
|
|
620
|
-
time
|
|
650
|
+
if time.nil? and title_slide
|
|
651
|
+
time = title_slide.allotted_time
|
|
652
|
+
if time.nil?
|
|
653
|
+
start_time = title_slide.start_time
|
|
654
|
+
end_time = title_slide.end_time
|
|
655
|
+
if start_time and end_time
|
|
656
|
+
start_time = Time.parse(start_time)
|
|
657
|
+
end_time = Time.parse(end_time)
|
|
658
|
+
time = end_time - start_time
|
|
659
|
+
end
|
|
660
|
+
end
|
|
661
|
+
end
|
|
621
662
|
Utils.ensure_time(time)
|
|
622
663
|
end
|
|
623
664
|
|
|
@@ -633,6 +674,22 @@ module Rabbit
|
|
|
633
674
|
@limit_time = nil
|
|
634
675
|
end
|
|
635
676
|
|
|
677
|
+
def apply_timer
|
|
678
|
+
return unless title_slide
|
|
679
|
+
|
|
680
|
+
start_time = title_slide.start_time
|
|
681
|
+
end_time = title_slide.end_time
|
|
682
|
+
return if start_time.nil?
|
|
683
|
+
return if end_time.nil?
|
|
684
|
+
|
|
685
|
+
start_time = Time.parse(start_time)
|
|
686
|
+
end_time = Time.parse(end_time)
|
|
687
|
+
return unless (start_time..end_time).cover?(Time.now)
|
|
688
|
+
|
|
689
|
+
@allotted_time = end_time - start_time
|
|
690
|
+
@limit_time = end_time
|
|
691
|
+
end
|
|
692
|
+
|
|
636
693
|
def font_resolution
|
|
637
694
|
INTERNAL_DPI * @font_resolution_ratio
|
|
638
695
|
end
|
|
@@ -688,7 +745,6 @@ module Rabbit
|
|
|
688
745
|
|
|
689
746
|
def clear
|
|
690
747
|
clear_comments
|
|
691
|
-
reset_timer
|
|
692
748
|
stop_auto_redraw_timer
|
|
693
749
|
clear_slides
|
|
694
750
|
clear_index_slides
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012-
|
|
1
|
+
# Copyright (C) 2012-2019 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
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
require "yaml"
|
|
18
18
|
|
|
19
|
-
require "rabbit/console"
|
|
20
19
|
require "rabbit/author-configuration"
|
|
21
|
-
require "rabbit/
|
|
20
|
+
require "rabbit/console"
|
|
22
21
|
require "rabbit/path-manipulatable"
|
|
22
|
+
require "rabbit/slide-configuration"
|
|
23
23
|
require "rabbit/source-generator"
|
|
24
24
|
|
|
25
25
|
module Rabbit
|
|
@@ -34,17 +34,45 @@ module Rabbit
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
class Data < Struct.new(:title,
|
|
38
|
+
:allotted_time,
|
|
39
|
+
:slide_conf,
|
|
40
|
+
:author_conf)
|
|
41
|
+
def available_markup_languages
|
|
42
|
+
{
|
|
43
|
+
:markdown => "Markdown",
|
|
44
|
+
:rd => "RD",
|
|
45
|
+
:hiki => "Hiki",
|
|
46
|
+
:pdf => "PDF",
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def default_markup_language
|
|
51
|
+
:rd
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def markup_language
|
|
55
|
+
author_conf.markup_language || default_markup_language
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def save
|
|
59
|
+
author_conf.save
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
37
63
|
def initialize
|
|
38
|
-
@
|
|
39
|
-
@
|
|
40
|
-
@slide_conf = nil
|
|
41
|
-
@author_conf = nil
|
|
64
|
+
@use_gui = true
|
|
65
|
+
@data = Data.new
|
|
42
66
|
@logger = nil
|
|
43
67
|
end
|
|
44
68
|
|
|
45
69
|
def run(arguments)
|
|
46
70
|
parse_command_line_arguments(arguments)
|
|
47
71
|
|
|
72
|
+
if @use_gui
|
|
73
|
+
return false unless show_gui
|
|
74
|
+
end
|
|
75
|
+
|
|
48
76
|
validate
|
|
49
77
|
unless @validation_errors.empty?
|
|
50
78
|
messages = (@validation_errors + [_("See --help for example")])
|
|
@@ -53,7 +81,7 @@ module Rabbit
|
|
|
53
81
|
end
|
|
54
82
|
|
|
55
83
|
run_command
|
|
56
|
-
@
|
|
84
|
+
@data.save
|
|
57
85
|
true
|
|
58
86
|
end
|
|
59
87
|
|
|
@@ -68,10 +96,10 @@ module Rabbit
|
|
|
68
96
|
def setup_options(parser, options)
|
|
69
97
|
@options = options
|
|
70
98
|
@logger = @options.default_logger
|
|
71
|
-
@author_conf = AuthorConfiguration.new(@logger)
|
|
72
|
-
@author_conf.load
|
|
73
|
-
@slide_conf = SlideConfiguration.new(@logger)
|
|
74
|
-
@slide_conf.author = @author_conf
|
|
99
|
+
@data.author_conf = AuthorConfiguration.new(@logger)
|
|
100
|
+
@data.author_conf.load
|
|
101
|
+
@data.slide_conf = SlideConfiguration.new(@logger)
|
|
102
|
+
@data.slide_conf.author = @data.author_conf
|
|
75
103
|
|
|
76
104
|
format = _("Usage: %s COMMAND [OPTIONS]\n" \
|
|
77
105
|
" e.g.: %s new \\\n" \
|
|
@@ -92,6 +120,13 @@ module Rabbit
|
|
|
92
120
|
parser.separator(_(" new: create a new slide"))
|
|
93
121
|
parser.separator(_(" change: change an existing slide"))
|
|
94
122
|
|
|
123
|
+
parser.separator("")
|
|
124
|
+
parser.separator(_("User interface"))
|
|
125
|
+
parser.on("--no-use-gui",
|
|
126
|
+
_("Don't use GUI")) do |boolean|
|
|
127
|
+
@use_gui = boolean
|
|
128
|
+
end
|
|
129
|
+
|
|
95
130
|
parser.separator("")
|
|
96
131
|
parser.separator(_("Slide information"))
|
|
97
132
|
|
|
@@ -99,7 +134,7 @@ module Rabbit
|
|
|
99
134
|
_("Slide ID"),
|
|
100
135
|
_("(e.g.: %s)") % "--id=rubykaigi2012",
|
|
101
136
|
_("(must)")) do |id|
|
|
102
|
-
@slide_conf.id = id
|
|
137
|
+
@data.slide_conf.id = id
|
|
103
138
|
end
|
|
104
139
|
|
|
105
140
|
messages = [
|
|
@@ -109,30 +144,38 @@ module Rabbit
|
|
|
109
144
|
]
|
|
110
145
|
parser.on("--base-name=NAME",
|
|
111
146
|
*messages) do |base_name|
|
|
112
|
-
@slide_conf.base_name = base_name
|
|
147
|
+
@data.slide_conf.base_name = base_name
|
|
113
148
|
end
|
|
114
149
|
|
|
115
|
-
available_markup_languages =
|
|
116
|
-
label = "[" + available_markup_languages.join(", ") + "]"
|
|
150
|
+
available_markup_languages = @data.available_markup_languages
|
|
151
|
+
label = "[" + available_markup_languages.keys.join(", ") + "]"
|
|
117
152
|
messages = [
|
|
118
153
|
_("Markup language for the new slide"),
|
|
119
154
|
_("(e.g.: %s)") % "--markup-language=rd",
|
|
120
155
|
_("(available markup languages: %s)") % label,
|
|
121
156
|
]
|
|
122
|
-
if @author_conf.markup_language
|
|
123
|
-
messages << _("(default: %s)") % @author_conf.markup_language
|
|
157
|
+
if @data.author_conf.markup_language
|
|
158
|
+
messages << _("(default: %s)") % @data.author_conf.markup_language
|
|
124
159
|
end
|
|
125
160
|
messages << _("(optional)")
|
|
126
|
-
parser.on("--markup-language=LANGUAGE", available_markup_languages,
|
|
161
|
+
parser.on("--markup-language=LANGUAGE", available_markup_languages.keys,
|
|
127
162
|
*messages) do |language|
|
|
128
|
-
@author_conf.markup_language = language
|
|
163
|
+
@data.author_conf.markup_language = language
|
|
129
164
|
end
|
|
130
165
|
|
|
131
166
|
parser.on("--title=TITLE",
|
|
132
167
|
_("Title of the new slide"),
|
|
133
168
|
_("(e.g.: %s)") % _("--title=\"Rabbit Introduction\""),
|
|
134
169
|
_("(optional)")) do |title|
|
|
135
|
-
@title = title
|
|
170
|
+
@data.title = title
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
parser.on("--licenses=LICENSE,LICENSE,...",
|
|
174
|
+
Array,
|
|
175
|
+
_("License of the new slide"),
|
|
176
|
+
_("(e.g.: %s)") % "--licenses=CC-BY-SA-4.0,GFDL-1.3-or-later",
|
|
177
|
+
_("(optional)")) do |licenses|
|
|
178
|
+
@data.slide_conf.licenses.concat(licenses)
|
|
136
179
|
end
|
|
137
180
|
|
|
138
181
|
parser.on("--tags=TAG,TAG,...",
|
|
@@ -140,21 +183,39 @@ module Rabbit
|
|
|
140
183
|
_("Tags of the new slide"),
|
|
141
184
|
_("(e.g.: %s)") % "--tags=rabbit,presentation,ruby",
|
|
142
185
|
_("(optional)")) do |tags|
|
|
143
|
-
@slide_conf.tags.concat(tags)
|
|
186
|
+
@data.slide_conf.tags.concat(tags)
|
|
144
187
|
end
|
|
145
188
|
|
|
146
189
|
parser.on("--allotted-time=TIME",
|
|
147
190
|
_("Allotted time in presentaion"),
|
|
148
191
|
_("(e.g.: %s)") % "--allotted-time=5m",
|
|
149
192
|
_("(optional)")) do |allotted_time|
|
|
150
|
-
@allotted_time = allotted_time
|
|
193
|
+
@data.allotted_time = allotted_time
|
|
151
194
|
end
|
|
152
195
|
|
|
153
|
-
parser.on("--presentation-date=DATE",
|
|
196
|
+
parser.on("--presentation-date=DATE", Date,
|
|
154
197
|
_("Presentation date with the new slide"),
|
|
155
|
-
_("(e.g.: %s)") % "--presentation-date=2012
|
|
198
|
+
_("(e.g.: %s)") % "--presentation-date=2012-06-29",
|
|
156
199
|
_("(optional)")) do |date|
|
|
157
|
-
@slide_conf.presentation_date = date
|
|
200
|
+
@data.slide_conf.presentation_date = date
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
presentation_start_time_example =
|
|
204
|
+
"--presentation-start-time=2012-06-29T10:30:00+0900"
|
|
205
|
+
parser.on("--presentation-start-time=TIME", Time,
|
|
206
|
+
_("Presentation start time"),
|
|
207
|
+
_("(e.g.: %s)") % presentation_start_time_example,
|
|
208
|
+
_("(optional)")) do |time|
|
|
209
|
+
@data.slide_conf.presentation_start_time = time
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
presentation_end_time_example =
|
|
213
|
+
"--presentation-end-time=2012-06-29T11:00:00+0900"
|
|
214
|
+
parser.on("--presentation-end-time=TIME", Time,
|
|
215
|
+
_("Presentation end time"),
|
|
216
|
+
_("(e.g.: %s)") % presentation_end_time_example,
|
|
217
|
+
_("(optional)")) do |time|
|
|
218
|
+
@data.slide_conf.presentation_end_time = time
|
|
158
219
|
end
|
|
159
220
|
|
|
160
221
|
parser.separator(_("Your information"))
|
|
@@ -163,26 +224,26 @@ module Rabbit
|
|
|
163
224
|
_("Author name of the new slide"),
|
|
164
225
|
_("(e.g.: %s)") % "--name=\"Kouhei Sutou\"",
|
|
165
226
|
]
|
|
166
|
-
if @author_conf.name
|
|
167
|
-
messages << _("(default: %s)") % @author_conf.name
|
|
227
|
+
if @data.author_conf.name
|
|
228
|
+
messages << _("(default: %s)") % @data.author_conf.name
|
|
168
229
|
end
|
|
169
230
|
messages << _("(optional)")
|
|
170
231
|
parser.on("--name=NAME",
|
|
171
232
|
*messages) do |name|
|
|
172
|
-
@author_conf.name = name
|
|
233
|
+
@data.author_conf.name = name
|
|
173
234
|
end
|
|
174
235
|
|
|
175
236
|
messages = [
|
|
176
237
|
_("Author e-mail of the new slide"),
|
|
177
238
|
_("(e.g.: %s)") % "--email=kou@cozmixng.org",
|
|
178
239
|
]
|
|
179
|
-
if @author_conf.email
|
|
180
|
-
messages << _("(default: %s)") % @author_conf.email
|
|
240
|
+
if @data.author_conf.email
|
|
241
|
+
messages << _("(default: %s)") % @data.author_conf.email
|
|
181
242
|
end
|
|
182
243
|
messages << _("(optional)")
|
|
183
244
|
parser.on("--email=EMAIL",
|
|
184
245
|
*messages) do |email|
|
|
185
|
-
@author_conf.email = email
|
|
246
|
+
@data.author_conf.email = email
|
|
186
247
|
end
|
|
187
248
|
|
|
188
249
|
messages = [
|
|
@@ -190,13 +251,13 @@ module Rabbit
|
|
|
190
251
|
_("It is used to publish your slide to %s") % "RubyGems.org",
|
|
191
252
|
_("(e.g.: %s)") % "--rubygems-user=kou",
|
|
192
253
|
]
|
|
193
|
-
if @author_conf.rubygems_user
|
|
194
|
-
messages << _("(default: %s)") % @author_conf.rubygems_user
|
|
254
|
+
if @data.author_conf.rubygems_user
|
|
255
|
+
messages << _("(default: %s)") % @data.author_conf.rubygems_user
|
|
195
256
|
end
|
|
196
257
|
messages << _("(optional)")
|
|
197
258
|
parser.on("--rubygems-user=USER",
|
|
198
259
|
*messages) do |user|
|
|
199
|
-
@author_conf.rubygems_user = user
|
|
260
|
+
@data.author_conf.rubygems_user = user
|
|
200
261
|
end
|
|
201
262
|
|
|
202
263
|
messages = [
|
|
@@ -204,13 +265,13 @@ module Rabbit
|
|
|
204
265
|
_("It is used to publish your slide to %s") % "SlideShare",
|
|
205
266
|
_("(e.g.: %s)") % "--slideshare-user=kou",
|
|
206
267
|
]
|
|
207
|
-
if @author_conf.slideshare_user
|
|
208
|
-
messages << _("(default: %s)") % @author_conf.slideshare_user
|
|
268
|
+
if @data.author_conf.slideshare_user
|
|
269
|
+
messages << _("(default: %s)") % @data.author_conf.slideshare_user
|
|
209
270
|
end
|
|
210
271
|
messages << _("(optional)")
|
|
211
272
|
parser.on("--slideshare-user=USER",
|
|
212
273
|
*messages) do |user|
|
|
213
|
-
@author_conf.slideshare_user = user
|
|
274
|
+
@data.author_conf.slideshare_user = user
|
|
214
275
|
end
|
|
215
276
|
|
|
216
277
|
messages = [
|
|
@@ -218,13 +279,13 @@ module Rabbit
|
|
|
218
279
|
_("It is used to publish your slide to %s") % "Speaker Deck",
|
|
219
280
|
_("(e.g.: %s)") % "--speaker-deck-user=kou",
|
|
220
281
|
]
|
|
221
|
-
if @author_conf.speaker_deck_user
|
|
222
|
-
messages << _("(default: %s)") % @author_conf.speaker_deck_user
|
|
282
|
+
if @data.author_conf.speaker_deck_user
|
|
283
|
+
messages << _("(default: %s)") % @data.author_conf.speaker_deck_user
|
|
223
284
|
end
|
|
224
285
|
messages << _("(optional)")
|
|
225
286
|
parser.on("--speaker-deck-user=USER",
|
|
226
287
|
*messages) do |user|
|
|
227
|
-
@author_conf.speaker_deck_user = user
|
|
288
|
+
@data.author_conf.speaker_deck_user = user
|
|
228
289
|
end
|
|
229
290
|
end
|
|
230
291
|
|
|
@@ -240,6 +301,109 @@ module Rabbit
|
|
|
240
301
|
["new", "change"]
|
|
241
302
|
end
|
|
242
303
|
|
|
304
|
+
class TextMapper
|
|
305
|
+
def initialize(data)
|
|
306
|
+
@data = data
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def attach(entry)
|
|
310
|
+
entry.signal_connect(:notify) do |_widget, param_spec|
|
|
311
|
+
if param_spec.name == "text"
|
|
312
|
+
if valid?(_widget.text)
|
|
313
|
+
_widget.style_context.remove_class(Gtk::STYLE_CLASS_ERROR)
|
|
314
|
+
else
|
|
315
|
+
_widget.style_context.add_class(Gtk::STYLE_CLASS_ERROR)
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
entry.text = value if value
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def apply(entry)
|
|
323
|
+
apply_value(entry.text)
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
class SlideIDMapper < TextMapper
|
|
328
|
+
private
|
|
329
|
+
def valid?(value)
|
|
330
|
+
not value.empty?
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def value
|
|
334
|
+
@data.slide_conf.id
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def apply_value(value)
|
|
338
|
+
@data.slide_conf.id = value
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
class SlideBaseNameMapper < TextMapper
|
|
343
|
+
private
|
|
344
|
+
def valid?(value)
|
|
345
|
+
not value.empty?
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
def value
|
|
349
|
+
@data.slide_conf.base_name
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def apply_value(value)
|
|
353
|
+
@data.slide_conf.base_name = value
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
class SlideMarkupLanguageMapper
|
|
358
|
+
def initialize(data)
|
|
359
|
+
@data = data
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def attach(combo_box)
|
|
363
|
+
combo_box = combo_box
|
|
364
|
+
@data.available_markup_languages.each do |key, value|
|
|
365
|
+
combo_box.append(key.to_s, value)
|
|
366
|
+
end
|
|
367
|
+
combo_box.active_id = @data.author_conf.markup_language
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def apply(combo_box)
|
|
371
|
+
id = combo_box.active_id
|
|
372
|
+
id = id.to_sym if id
|
|
373
|
+
@data.author_conf.markup_language = id
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
def build_gui_mappers
|
|
378
|
+
{
|
|
379
|
+
"slide-id" => SlideIDMapper.new(@data),
|
|
380
|
+
"slide-base-name" => SlideBaseNameMapper.new(@data),
|
|
381
|
+
"slide-markup-language" => SlideMarkupLanguageMapper.new(@data),
|
|
382
|
+
}
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def show_gui
|
|
386
|
+
require "rabbit/gtk"
|
|
387
|
+
|
|
388
|
+
mappers = build_gui_mappers
|
|
389
|
+
|
|
390
|
+
builder = Gtk::Builder.new(path: File.join(__dir__, "rabbit-slide.ui"))
|
|
391
|
+
mappers.each do |id, mapper|
|
|
392
|
+
mapper.attach(builder[id])
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
dialog = builder["dialog"]
|
|
396
|
+
case dialog.run
|
|
397
|
+
when Gtk::ResponseType::CANCEL, Gtk::ResponseType::DELETE_EVENT
|
|
398
|
+
false
|
|
399
|
+
else
|
|
400
|
+
mappers.each do |id, mapper|
|
|
401
|
+
mapper.apply(builder[id])
|
|
402
|
+
end
|
|
403
|
+
true
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
|
243
407
|
def validate
|
|
244
408
|
@validation_errors = []
|
|
245
409
|
validate_command
|
|
@@ -260,13 +424,13 @@ module Rabbit
|
|
|
260
424
|
end
|
|
261
425
|
|
|
262
426
|
def validate_id
|
|
263
|
-
if @slide_conf.id.nil?
|
|
427
|
+
if @data.slide_conf.id.nil?
|
|
264
428
|
@validation_errors << (_("%s is missing") % "--id")
|
|
265
429
|
end
|
|
266
430
|
end
|
|
267
431
|
|
|
268
432
|
def validate_base_name
|
|
269
|
-
if @slide_conf.base_name.nil?
|
|
433
|
+
if @data.slide_conf.base_name.nil?
|
|
270
434
|
@validation_errors << (_("%s is missing") % "--base-name")
|
|
271
435
|
end
|
|
272
436
|
end
|
|
@@ -288,9 +452,9 @@ module Rabbit
|
|
|
288
452
|
def merge_config_yaml
|
|
289
453
|
existing_slide_conf = SlideConfiguration.new(@logger)
|
|
290
454
|
existing_slide_conf.load
|
|
291
|
-
existing_slide_conf.merge!(@slide_conf.to_hash)
|
|
292
|
-
@slide_conf = existing_slide_conf
|
|
293
|
-
@author_conf = @slide_conf.author
|
|
455
|
+
existing_slide_conf.merge!(@data.slide_conf.to_hash)
|
|
456
|
+
@data.slide_conf = existing_slide_conf
|
|
457
|
+
@data.author_conf = @data.slide_conf.author
|
|
294
458
|
end
|
|
295
459
|
|
|
296
460
|
def generate_directory
|
|
@@ -320,8 +484,8 @@ EOD
|
|
|
320
484
|
def generate_dot_rabbit
|
|
321
485
|
create_file(".rabbit") do |dot_rabbit|
|
|
322
486
|
options = []
|
|
323
|
-
if @author_conf.markup_language.nil? and @allotted_time
|
|
324
|
-
options << "--allotted-time #{@allotted_time}"
|
|
487
|
+
if @data.author_conf.markup_language.nil? and @data.allotted_time
|
|
488
|
+
options << "--allotted-time #{@data.allotted_time}"
|
|
325
489
|
end
|
|
326
490
|
options << slide_path
|
|
327
491
|
dot_rabbit.puts(options.join("\n"))
|
|
@@ -329,7 +493,7 @@ EOD
|
|
|
329
493
|
end
|
|
330
494
|
|
|
331
495
|
def generate_slide_configuration
|
|
332
|
-
@slide_conf.save(base_directory)
|
|
496
|
+
@data.slide_conf.save(base_directory)
|
|
333
497
|
end
|
|
334
498
|
|
|
335
499
|
def generate_readme
|
|
@@ -339,11 +503,11 @@ EOD
|
|
|
339
503
|
end
|
|
340
504
|
|
|
341
505
|
def readme_content
|
|
342
|
-
markup_language = @
|
|
506
|
+
markup_language = @data.markup_language
|
|
343
507
|
generator = Rabbit::SourceGenerator.find(markup_language)
|
|
344
508
|
|
|
345
509
|
content = ""
|
|
346
|
-
title = @title || _("TODO: SLIDE TITLE")
|
|
510
|
+
title = @data.title || _("TODO: SLIDE TITLE")
|
|
347
511
|
content << generator.heading(1, title)
|
|
348
512
|
content << "\n\n"
|
|
349
513
|
content << _("TODO: SLIDE DESCRIPTION")
|
|
@@ -364,12 +528,12 @@ EOD
|
|
|
364
528
|
content << "\n\n"
|
|
365
529
|
content << generator.heading(3, _("Install"))
|
|
366
530
|
content << "\n\n"
|
|
367
|
-
install_command = "gem install #{@slide_conf.gem_name}"
|
|
531
|
+
install_command = "gem install #{@data.slide_conf.gem_name}"
|
|
368
532
|
content << generator.preformatted_line(install_command)
|
|
369
533
|
content << "\n\n"
|
|
370
534
|
content << generator.heading(3, _("Show"))
|
|
371
535
|
content << "\n\n"
|
|
372
|
-
show_command = "rabbit #{@slide_conf.gem_name}.gem"
|
|
536
|
+
show_command = "rabbit #{@data.slide_conf.gem_name}.gem"
|
|
373
537
|
content << generator.preformatted_line(show_command)
|
|
374
538
|
content << "\n\n"
|
|
375
539
|
end
|
|
@@ -386,7 +550,7 @@ Rabbit::Task::Slide.new do |task|
|
|
|
386
550
|
spec = task.spec
|
|
387
551
|
# spec.files += Dir.glob("doc/**/*.*")
|
|
388
552
|
# spec.files -= Dir.glob("private/**/*.*")
|
|
389
|
-
# spec.add_runtime_dependency("YOUR
|
|
553
|
+
# spec.add_runtime_dependency("rabbit-theme-YOUR-THEME")
|
|
390
554
|
end
|
|
391
555
|
|
|
392
556
|
desc "Tag #{spec.version}"
|
|
@@ -407,11 +571,11 @@ end
|
|
|
407
571
|
end
|
|
408
572
|
|
|
409
573
|
def slide_path
|
|
410
|
-
"#{@slide_conf.base_name}.#{slide_source_extension}"
|
|
574
|
+
"#{@data.slide_conf.base_name}.#{slide_source_extension}"
|
|
411
575
|
end
|
|
412
576
|
|
|
413
577
|
def slide_source_extension
|
|
414
|
-
case @author_conf.markup_language
|
|
578
|
+
case @data.author_conf.markup_language
|
|
415
579
|
when :rd
|
|
416
580
|
"rab"
|
|
417
581
|
when :hiki
|
|
@@ -424,7 +588,7 @@ end
|
|
|
424
588
|
end
|
|
425
589
|
|
|
426
590
|
def readme_extension
|
|
427
|
-
case @author_conf.markup_language
|
|
591
|
+
case @data.author_conf.markup_language
|
|
428
592
|
when :rd
|
|
429
593
|
"rd"
|
|
430
594
|
when :hiki
|
|
@@ -437,7 +601,7 @@ end
|
|
|
437
601
|
end
|
|
438
602
|
|
|
439
603
|
def slide_source
|
|
440
|
-
generator = Rabbit::SourceGenerator.find(@
|
|
604
|
+
generator = Rabbit::SourceGenerator.find(@data.markup_language)
|
|
441
605
|
return nil if generator.nil?
|
|
442
606
|
|
|
443
607
|
source = ""
|
|
@@ -455,15 +619,36 @@ end
|
|
|
455
619
|
end
|
|
456
620
|
|
|
457
621
|
def slide_source_metadata(source, generator)
|
|
458
|
-
presentation_date = @slide_conf.presentation_date
|
|
622
|
+
presentation_date = @data.slide_conf.presentation_date
|
|
623
|
+
presentation_date_default = Time.now
|
|
624
|
+
allotted_time_default = "5m"
|
|
625
|
+
allotted_time =
|
|
626
|
+
Utils.ensure_time(@data.allotted_time || allotted_time_default)
|
|
627
|
+
start_time = @data.slide_conf.presentation_start_time
|
|
628
|
+
end_time = @data.slide_conf.presentation_end_time
|
|
629
|
+
if presentation_date
|
|
630
|
+
start_time ||= presentation_date
|
|
631
|
+
end_time ||= presentation_date + allotted_time
|
|
632
|
+
presentation_date = presentation_date.strftime("%Y-%m-%d")
|
|
633
|
+
end
|
|
634
|
+
start_time = start_time.iso8601 if start_time
|
|
635
|
+
end_time = end_time.iso8601 if end_time
|
|
636
|
+
start_time_default = presentation_date_default
|
|
637
|
+
end_time_default = start_time_default + allotted_time
|
|
459
638
|
slide_metadata = [
|
|
460
|
-
["subtitle", nil,
|
|
461
|
-
["author", @author_conf.name, _("AUTHOR")],
|
|
462
|
-
["institution", nil,
|
|
463
|
-
["content-source", nil,
|
|
464
|
-
[
|
|
465
|
-
|
|
466
|
-
|
|
639
|
+
["subtitle", nil, _("SUBTITLE")],
|
|
640
|
+
["author", @data.author_conf.name, _("AUTHOR")],
|
|
641
|
+
["institution", nil, _("INSTITUTION")],
|
|
642
|
+
["content-source", nil, _("EVENT NAME")],
|
|
643
|
+
[
|
|
644
|
+
"date",
|
|
645
|
+
presentation_date,
|
|
646
|
+
presentation_date_default.strftime("%Y-%m-%d"),
|
|
647
|
+
],
|
|
648
|
+
["allotted-time", @data.allotted_time, "5m"],
|
|
649
|
+
["start-time", start_time, start_time_default.iso8601],
|
|
650
|
+
["end-time", end_time, end_time_default.iso8601],
|
|
651
|
+
["theme", nil, "default"],
|
|
467
652
|
]
|
|
468
653
|
slide_metadata.each do |key, value, default_value|
|
|
469
654
|
item = generator.definition_list_item(key, value || default_value)
|
|
@@ -501,7 +686,7 @@ end
|
|
|
501
686
|
when "change"
|
|
502
687
|
"."
|
|
503
688
|
else
|
|
504
|
-
@slide_conf.id
|
|
689
|
+
@data.slide_conf.id
|
|
505
690
|
end
|
|
506
691
|
end
|
|
507
692
|
|