rabbit 3.0.0 → 3.0.2
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 +4 -4
- data/Rakefile +2 -1
- data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/_layouts/skeleton.html +0 -7
- data/doc/en/faq.rd +4 -2
- data/doc/en/install/homebrew.rd +8 -13
- data/doc/en/news.rd +158 -0
- data/doc/en/sample/hiki/rabbit.hiki +0 -4
- data/doc/en/sample/rd/rabbit.rd +0 -4
- 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/index.html.en +1 -1
- data/doc/ja/faq.rd +2 -0
- data/doc/ja/install/homebrew.rd +8 -12
- data/doc/ja/news.rd +157 -0
- data/doc/ja/sample/hiki/rabbit.hiki +0 -4
- data/doc/ja/sample/rd/rabbit.rd +0 -4
- data/doc/ja/usage/rabbit-slide.rd +3 -3
- data/doc/ja/users.rd +7 -0
- data/lib/rabbit/action/toggle.rb +7 -0
- data/lib/rabbit/author-configuration.rb +3 -4
- data/lib/rabbit/canvas.rb +18 -6
- data/lib/rabbit/command/rabbit-slide.rb +59 -1
- data/lib/rabbit/command/rabbit-slide.ui +127 -49
- data/lib/rabbit/command/rabbit.rb +5 -9
- data/lib/rabbit/element/base.rb +1 -5
- data/lib/rabbit/element/image.rb +139 -89
- data/lib/rabbit/element/video.rb +3 -11
- data/lib/rabbit/error.rb +9 -3
- data/lib/rabbit/formatter.rb +1 -1
- data/lib/rabbit/frame.rb +102 -4
- data/lib/rabbit/gem-pusher.rb +29 -6
- data/lib/rabbit/image/base.rb +163 -28
- data/lib/rabbit/image/dia.rb +21 -14
- data/lib/rabbit/image/mermaid.rb +73 -0
- data/lib/rabbit/image/pdf.rb +22 -9
- data/lib/rabbit/image/svg.rb +1 -4
- data/lib/rabbit/image.rb +6 -6
- data/lib/rabbit/info-window.rb +106 -80
- data/lib/rabbit/keys.rb +6 -0
- data/lib/rabbit/menu.rb +2 -0
- data/lib/rabbit/parser/base.rb +2 -1
- data/lib/rabbit/parser/ext/blockdiag.rb +16 -14
- data/lib/rabbit/parser/ext/charty.rb +58 -0
- data/lib/rabbit/parser/ext/image.rb +38 -10
- data/lib/rabbit/parser/markdown/converter.rb +36 -30
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +33 -35
- data/lib/rabbit/parser/rd/ext/image.rb +23 -4
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +3 -1
- data/lib/rabbit/parser/rd.rb +1 -1
- data/lib/rabbit/parser/wiki/output.rb +9 -9
- data/lib/rabbit/parser.rb +2 -2
- data/lib/rabbit/progress.rb +1 -1
- data/lib/rabbit/properties.rb +154 -0
- data/lib/rabbit/rabbit.rb +3 -1
- data/lib/rabbit/relative-size.rb +28 -0
- data/lib/rabbit/renderer/base.rb +6 -0
- data/lib/rabbit/renderer/display/drawing-area-base.rb +1 -2
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +1 -0
- data/lib/rabbit/renderer/display/info.rb +6 -1
- data/lib/rabbit/renderer/display/key-handler.rb +27 -2
- data/lib/rabbit/renderer/engine/cairo.rb +24 -3
- data/lib/rabbit/renderer/screen.rb +0 -1
- data/lib/rabbit/slide-configuration.rb +16 -8
- data/lib/rabbit/task/slide.rb +6 -33
- data/lib/rabbit/theme/background-image-toolkit/background-image-toolkit.rb +38 -0
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +4 -2
- data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +12 -2
- data/lib/rabbit/theme/image/image.rb +3 -0
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +8 -3
- data/lib/rabbit/theme/image-timer/image-timer.rb +8 -3
- data/lib/rabbit/theme/pdf/pdf.rb +1 -1
- data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +2 -0
- data/lib/rabbit/theme/tag/tag.rb +9 -2
- data/lib/rabbit/theme-configuration.rb +3 -4
- data/lib/rabbit/utils.rb +25 -2
- data/lib/rabbit/version.rb +2 -2
- data/lib/rabbit/video-window.rb +14 -3
- data/{test/test-slideshare.rb → lib/rabbit/yaml-loader.rb} +20 -15
- data/po/en/rabbit.edit.po +123 -121
- data/po/en/rabbit.po +28 -26
- data/po/fr/rabbit.edit.po +122 -120
- data/po/fr/rabbit.po +27 -25
- data/po/ja/rabbit.edit.po +156 -125
- data/po/ja/rabbit.po +34 -30
- data/rabbit.gemspec +0 -1
- data/sample/can_rabbit.rd +0 -24
- data/sample/rabbit-en.hiki +0 -4
- data/sample/rabbit-en.md +13 -0
- data/sample/rabbit-en.rd +10 -4
- data/sample/rabbit.hiki +0 -4
- data/sample/rabbit.md +21 -0
- data/sample/rabbit.rd +20 -4
- data/test/command/test-rabbit.rb +1 -0
- data/test/parser/test-markdown.rb +2 -2
- data/test/test-slide-configuration.rb +4 -2
- metadata +30 -46
- data/doc/css/jquery-ui/themes/ui-lightness.css +0 -573
- data/doc/javascripts/jquery-ui.js +0 -11544
- data/doc/javascripts/jquery.js +0 -7179
- data/lib/rabbit/slideshare.rb +0 -192
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2007-
|
|
1
|
+
# Copyright (C) 2007-2022 Sutou Kouhei <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
|
|
@@ -27,31 +27,58 @@ module Rabbit
|
|
|
27
27
|
module Ext
|
|
28
28
|
module Image
|
|
29
29
|
module_function
|
|
30
|
-
def make_image(canvas, uri_str, prop={})
|
|
30
|
+
def make_image(canvas, uri_str, prop={}, body: nil)
|
|
31
31
|
path = Private.uri_string_to_image_filename(canvas, uri_str)
|
|
32
32
|
begin
|
|
33
|
-
Element::Image.new(path, prop)
|
|
33
|
+
image = Element::Image.new(path, prop, canvas: canvas)
|
|
34
34
|
rescue Error
|
|
35
35
|
canvas.logger.warn($!.message)
|
|
36
36
|
nil
|
|
37
|
+
else
|
|
38
|
+
if prop["align"] == "right" and body
|
|
39
|
+
if body["background-image"]
|
|
40
|
+
raise ParseError,
|
|
41
|
+
_("multiple right aligns aren't supported.")
|
|
42
|
+
end
|
|
43
|
+
prop.each do |name, value|
|
|
44
|
+
name = name.gsub(/_/, "-")
|
|
45
|
+
next if name == "src"
|
|
46
|
+
property_name = "background-image-#{name}"
|
|
47
|
+
body[property_name] = value
|
|
48
|
+
end
|
|
49
|
+
body["background-image"] = uri_str
|
|
50
|
+
:no_element
|
|
51
|
+
else
|
|
52
|
+
image
|
|
53
|
+
end
|
|
37
54
|
end
|
|
38
55
|
end
|
|
39
56
|
|
|
40
|
-
def make_image_from_file(canvas, source)
|
|
41
|
-
|
|
57
|
+
def make_image_from_file(canvas, source, extension: nil, **options)
|
|
58
|
+
src_basename = "rabbit-image-source"
|
|
59
|
+
src_basename = [src_basename, extension] if extension
|
|
60
|
+
src_file = Tempfile.new(src_basename)
|
|
42
61
|
src_file.open
|
|
43
62
|
src_file.print(source)
|
|
44
63
|
src_file.close
|
|
45
64
|
image_file = prop = nil
|
|
46
65
|
begin
|
|
47
|
-
image_file, prop = yield(src_file
|
|
66
|
+
image_file, prop = yield(src_file)
|
|
48
67
|
rescue ImageLoadError
|
|
49
68
|
canvas.logger.warn($!.message)
|
|
50
69
|
end
|
|
51
70
|
return nil if image_file.nil?
|
|
52
|
-
image = make_image(canvas,
|
|
53
|
-
|
|
54
|
-
|
|
71
|
+
image = make_image(canvas,
|
|
72
|
+
"file://#{image_file.path}",
|
|
73
|
+
prop,
|
|
74
|
+
**options)
|
|
75
|
+
# Protect image from GC
|
|
76
|
+
case image
|
|
77
|
+
when Element::Image
|
|
78
|
+
image["_src"] = image_file
|
|
79
|
+
when :no_element
|
|
80
|
+
options[:body]["_background-image-src"] = image_file
|
|
81
|
+
end
|
|
55
82
|
image
|
|
56
83
|
end
|
|
57
84
|
|
|
@@ -108,8 +135,9 @@ module Rabbit
|
|
|
108
135
|
end
|
|
109
136
|
|
|
110
137
|
def setup_image_file(canvas, uri, filename)
|
|
138
|
+
return if File.exist?(filename)
|
|
111
139
|
begin
|
|
112
|
-
open(uri, "rb") do |in_file|
|
|
140
|
+
URI.open(uri, "rb") do |in_file|
|
|
113
141
|
File.open(filename, "wb") do |out|
|
|
114
142
|
out.print(in_file.read)
|
|
115
143
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012-
|
|
1
|
+
# Copyright (C) 2012-2022 Sutou Kouhei <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
|
|
@@ -20,8 +20,8 @@ require "rabbit/gettext"
|
|
|
20
20
|
require "rabbit/parser/pause-support"
|
|
21
21
|
require "rabbit/parser/ext/blockdiag"
|
|
22
22
|
require "rabbit/parser/ext/escape"
|
|
23
|
-
require "rabbit/parser/ext/inline"
|
|
24
23
|
require "rabbit/parser/ext/image"
|
|
24
|
+
require "rabbit/parser/ext/inline"
|
|
25
25
|
require "rabbit/parser/ext/rouge"
|
|
26
26
|
require "rabbit/parser/ext/tex"
|
|
27
27
|
|
|
@@ -165,9 +165,15 @@ module Rabbit
|
|
|
165
165
|
if child_types == [:img]
|
|
166
166
|
convert_container(element)[0]
|
|
167
167
|
else
|
|
168
|
-
if child_types.
|
|
168
|
+
if child_types.count(:img) > 1
|
|
169
169
|
raise ParseError,
|
|
170
|
-
|
|
170
|
+
_("multiple ![alt]{image}s in a paragraph isn't supported.")
|
|
171
|
+
end
|
|
172
|
+
if child_types.include?(:img)
|
|
173
|
+
message =
|
|
174
|
+
_("![alt]{image} and other contents in a paragraph " \
|
|
175
|
+
"isn't supported: %{types}")
|
|
176
|
+
raise ParseError, message % {types: child_types}
|
|
171
177
|
end
|
|
172
178
|
if element.options[:transparent] and child_types == [:text]
|
|
173
179
|
element.children.first.value.chomp!
|
|
@@ -325,12 +331,14 @@ module Rabbit
|
|
|
325
331
|
def convert_codeblock_language(element, language, content)
|
|
326
332
|
case language
|
|
327
333
|
when "blockdiag"
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
+
make_image_from_file(element, content) do |src_file, prop|
|
|
335
|
+
Ext::BlockDiag.make_image(src_file.path, prop, @canvas)
|
|
336
|
+
end
|
|
337
|
+
when "mermaid"
|
|
338
|
+
make_image_from_file(element,
|
|
339
|
+
content,
|
|
340
|
+
extension: ".mmd") do |src_file, prop|
|
|
341
|
+
src_file
|
|
334
342
|
end
|
|
335
343
|
else
|
|
336
344
|
logger = @canvas.logger
|
|
@@ -349,23 +357,11 @@ module Rabbit
|
|
|
349
357
|
alt = options.delete("alt")
|
|
350
358
|
caption = title || alt
|
|
351
359
|
options["caption"] ||= caption if caption
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
"isn't supported.")
|
|
358
|
-
end
|
|
359
|
-
body["background-image"] = uri
|
|
360
|
-
options.each do |name, value|
|
|
361
|
-
name = name.to_s.gsub(/_/, "-")
|
|
362
|
-
body["background-image-#{name}"] = value
|
|
363
|
-
end
|
|
364
|
-
:no_element
|
|
365
|
-
else
|
|
366
|
-
image = Ext::Image.make_image(@canvas, uri, options)
|
|
367
|
-
image || text(alt || src)
|
|
368
|
-
end
|
|
360
|
+
image = Ext::Image.make_image(@canvas,
|
|
361
|
+
uri,
|
|
362
|
+
options,
|
|
363
|
+
body: @slides.last.body)
|
|
364
|
+
image || text(alt || src)
|
|
369
365
|
end
|
|
370
366
|
|
|
371
367
|
def convert_em(element)
|
|
@@ -376,10 +372,20 @@ module Rabbit
|
|
|
376
372
|
Emphasis.new(Emphasis.new(convert_container(element)))
|
|
377
373
|
end
|
|
378
374
|
|
|
375
|
+
def make_image_from_file(element, source, **options)
|
|
376
|
+
Ext::Image.make_image_from_file(@canvas,
|
|
377
|
+
source,
|
|
378
|
+
body: @slides.last.body,
|
|
379
|
+
**options) do |src_file|
|
|
380
|
+
prop = element.attr
|
|
381
|
+
image = yield(src_file, prop)
|
|
382
|
+
[image, prop]
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
|
|
379
386
|
def convert_math(element)
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
[Ext::TeX.make_image_by_LaTeX(src_file_path, {}, @canvas), {}]
|
|
387
|
+
make_image_from_file(element, element.value) do |src_file, prop|
|
|
388
|
+
Ext::TeX.make_image_by_LaTeX(src_file.path, prop, @canvas)
|
|
383
389
|
end
|
|
384
390
|
end
|
|
385
391
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2004-
|
|
1
|
+
# Copyright (C) 2004-2022 Sutou Kouhei <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
|
|
@@ -22,13 +22,14 @@ require "rabbit/parser/rd/rt/rt2rabbit-lib"
|
|
|
22
22
|
require "rabbit/parser/rd/ext/base"
|
|
23
23
|
require "rabbit/parser/rd/ext/image"
|
|
24
24
|
require "rabbit/parser/rd/ext/video"
|
|
25
|
-
require "rabbit/parser/ext/enscript"
|
|
26
|
-
require "rabbit/parser/ext/tex"
|
|
27
25
|
require "rabbit/parser/ext/aafigure"
|
|
28
26
|
require "rabbit/parser/ext/blockdiag"
|
|
27
|
+
require "rabbit/parser/ext/charty"
|
|
29
28
|
require "rabbit/parser/ext/coderay"
|
|
30
29
|
require "rabbit/parser/ext/emacs"
|
|
30
|
+
require "rabbit/parser/ext/enscript"
|
|
31
31
|
require "rabbit/parser/ext/rouge"
|
|
32
|
+
require "rabbit/parser/ext/tex"
|
|
32
33
|
|
|
33
34
|
module Rabbit
|
|
34
35
|
module Parser
|
|
@@ -54,26 +55,7 @@ module Rabbit
|
|
|
54
55
|
return nil unless /\A(?:image|img)\z/i =~ label
|
|
55
56
|
src, prop = parse_source(source)
|
|
56
57
|
return nil if prop["src"].nil?
|
|
57
|
-
|
|
58
|
-
if prop["align"] == "right"
|
|
59
|
-
body = visitor.current_body
|
|
60
|
-
if body["background-image"]
|
|
61
|
-
raise ParseError,
|
|
62
|
-
_("multiple 'align = right' isn't supported.")
|
|
63
|
-
end
|
|
64
|
-
prop.each do |name, value|
|
|
65
|
-
name = name.gsub(/_/, "-")
|
|
66
|
-
if name == "src"
|
|
67
|
-
property_name = "background-image"
|
|
68
|
-
else
|
|
69
|
-
property_name = "background-image-#{name}"
|
|
70
|
-
end
|
|
71
|
-
body[property_name] = value
|
|
72
|
-
end
|
|
73
|
-
:no_element
|
|
74
|
-
else
|
|
75
|
-
make_image(visitor, prop["src"], prop)
|
|
76
|
-
end
|
|
58
|
+
make_image(visitor, prop["src"], prop, body: visitor.current_body)
|
|
77
59
|
end
|
|
78
60
|
|
|
79
61
|
def ext_block_verb_video(label, source, content, visitor)
|
|
@@ -86,7 +68,7 @@ module Rabbit
|
|
|
86
68
|
|
|
87
69
|
def ext_block_verb_enscript(label, source, content, visitor)
|
|
88
70
|
return nil unless /\Aenscript (\w+)\z/i =~ label
|
|
89
|
-
lang = $1.downcase
|
|
71
|
+
lang = $1.downcase
|
|
90
72
|
|
|
91
73
|
src, prop = parse_source(source)
|
|
92
74
|
logger = visitor.logger
|
|
@@ -100,36 +82,36 @@ module Rabbit
|
|
|
100
82
|
|
|
101
83
|
def ext_block_verb_LaTeX(label, source, content, visitor)
|
|
102
84
|
return nil unless /\ALaTeX\z/i =~ label
|
|
103
|
-
make_image_from_file(source, visitor) do |
|
|
104
|
-
Parser::Ext::TeX.make_image_by_LaTeX(
|
|
85
|
+
make_image_from_file(source, visitor) do |src_file, prop|
|
|
86
|
+
Parser::Ext::TeX.make_image_by_LaTeX(src_file.path, prop, visitor)
|
|
105
87
|
end
|
|
106
88
|
end
|
|
107
89
|
|
|
108
90
|
def ext_block_verb_mimeTeX(label, source, content, visitor)
|
|
109
91
|
return nil unless /\AmimeTeX\z/i =~ label
|
|
110
|
-
make_image_from_file(source, visitor) do |
|
|
111
|
-
Parser::Ext::TeX.make_image_by_mimeTeX(
|
|
92
|
+
make_image_from_file(source, visitor) do |src_file, prop|
|
|
93
|
+
Parser::Ext::TeX.make_image_by_mimeTeX(src_file.path, prop,
|
|
112
94
|
visitor)
|
|
113
95
|
end
|
|
114
96
|
end
|
|
115
97
|
|
|
116
98
|
def ext_block_verb_aafigure(label, source, content, visitor)
|
|
117
99
|
return nil unless /\Aaafigure\z/i =~ label
|
|
118
|
-
make_image_from_file(source, visitor) do |
|
|
119
|
-
Parser::Ext::AAFigure.make_image(
|
|
100
|
+
make_image_from_file(source, visitor) do |src_file, prop|
|
|
101
|
+
Parser::Ext::AAFigure.make_image(src_file.path, prop, visitor)
|
|
120
102
|
end
|
|
121
103
|
end
|
|
122
104
|
|
|
123
105
|
def ext_block_verb_blockdiag(label, source, content, visitor)
|
|
124
106
|
return nil unless /\Ablockdiag\z/i =~ label
|
|
125
|
-
make_image_from_file(source, visitor) do |
|
|
126
|
-
Parser::Ext::BlockDiag.make_image(
|
|
107
|
+
make_image_from_file(source, visitor) do |src_file, prop|
|
|
108
|
+
Parser::Ext::BlockDiag.make_image(src_file.path, prop, visitor)
|
|
127
109
|
end
|
|
128
110
|
end
|
|
129
111
|
|
|
130
112
|
def ext_block_verb_coderay(label, source, content, visitor)
|
|
131
113
|
return nil unless /\Acoderay (\w+)\z/i =~ label
|
|
132
|
-
lang = $1.downcase
|
|
114
|
+
lang = $1.downcase
|
|
133
115
|
|
|
134
116
|
src, prop = parse_source(source)
|
|
135
117
|
logger = visitor.logger
|
|
@@ -140,7 +122,7 @@ module Rabbit
|
|
|
140
122
|
|
|
141
123
|
def ext_block_verb_emacs(label, source, content, visitor)
|
|
142
124
|
return nil unless /\Aemacs(?:\s+(.+))?\z/i =~ label
|
|
143
|
-
mode_line = $1
|
|
125
|
+
mode_line = $1
|
|
144
126
|
|
|
145
127
|
src, prop = parse_source(source)
|
|
146
128
|
logger = visitor.logger
|
|
@@ -193,7 +175,7 @@ module Rabbit
|
|
|
193
175
|
|
|
194
176
|
def ext_block_verb_rouge(label, source, content, visitor)
|
|
195
177
|
return nil unless /\Arouge (\w+)\z/i =~ label
|
|
196
|
-
lang = $1.downcase
|
|
178
|
+
lang = $1.downcase
|
|
197
179
|
|
|
198
180
|
src, prop = parse_source(source)
|
|
199
181
|
logger = visitor.logger
|
|
@@ -201,6 +183,22 @@ module Rabbit
|
|
|
201
183
|
result = Parser::Ext::Rouge.highlight(lang, src, logger)
|
|
202
184
|
result || default_ext_block_verbatim(label, src, src, visitor)
|
|
203
185
|
end
|
|
186
|
+
|
|
187
|
+
def ext_block_verb_charty(label, source, content, visitor)
|
|
188
|
+
return nil unless /\Acharty\z/i =~ label
|
|
189
|
+
make_image_from_file(source, visitor) do |src_file, prop|
|
|
190
|
+
Parser::Ext::Charty.make_image(src_file.path, prop, visitor)
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def ext_block_verb_mermaid(label, source, content, visitor)
|
|
195
|
+
return nil unless /\Amermaid\z/i =~ label
|
|
196
|
+
make_image_from_file(source,
|
|
197
|
+
visitor,
|
|
198
|
+
extension: ".mmd") do |src_file, prop|
|
|
199
|
+
src_file
|
|
200
|
+
end
|
|
201
|
+
end
|
|
204
202
|
end
|
|
205
203
|
end
|
|
206
204
|
end
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# Copyright (C) 2004-2022 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 'rabbit/element'
|
|
2
18
|
require 'rabbit/parser/ext/image'
|
|
3
19
|
|
|
@@ -11,13 +27,16 @@ module Rabbit
|
|
|
11
27
|
def img(label, content, visitor)
|
|
12
28
|
label = label.to_s
|
|
13
29
|
return nil unless /^img:\s*(.+)$/ =~ label
|
|
14
|
-
make_image(visitor.canvas, $1)
|
|
30
|
+
make_image(visitor.canvas, $1, body: visitor.current_body)
|
|
15
31
|
end
|
|
16
32
|
|
|
17
|
-
def make_image_from_file(source, visitor)
|
|
33
|
+
def make_image_from_file(source, visitor, **options)
|
|
18
34
|
src, prop = parse_source(source)
|
|
19
|
-
super(visitor.canvas,
|
|
20
|
-
|
|
35
|
+
super(visitor.canvas,
|
|
36
|
+
src,
|
|
37
|
+
body: visitor.current_body,
|
|
38
|
+
**options) do |src_file|
|
|
39
|
+
[yield(src_file, prop), prop]
|
|
21
40
|
end
|
|
22
41
|
end
|
|
23
42
|
end
|
|
@@ -56,8 +56,10 @@ module Rabbit
|
|
|
56
56
|
def_delegators(:@canvas, :logger, :full_path, :tmp_dir_name)
|
|
57
57
|
|
|
58
58
|
attr_reader :canvas
|
|
59
|
-
|
|
59
|
+
attr_reader :progress
|
|
60
|
+
def initialize(canvas, progress)
|
|
60
61
|
@canvas = canvas
|
|
62
|
+
@progress = progress
|
|
61
63
|
|
|
62
64
|
@slides = []
|
|
63
65
|
@slide = nil
|
data/lib/rabbit/parser/rd.rb
CHANGED
|
@@ -38,7 +38,7 @@ module Rabbit
|
|
|
38
38
|
source = @source.read.gsub(/\r\n/, "\n")
|
|
39
39
|
source = "=begin\n#{source}\n=end\n"
|
|
40
40
|
tree = ::RD::RDTree.new(source)
|
|
41
|
-
visitor = RD2RabbitVisitor.new(@canvas)
|
|
41
|
+
visitor = RD2RabbitVisitor.new(@canvas, @progress)
|
|
42
42
|
visitor.visit(tree)
|
|
43
43
|
rescue Racc::ParseError
|
|
44
44
|
message = format_parse_error_message($!.message, source)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2007-
|
|
1
|
+
# Copyright (C) 2007-2022 Sutou Kouhei <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
|
|
@@ -489,9 +489,9 @@ module Rabbit
|
|
|
489
489
|
|
|
490
490
|
def LaTeX(source, props={})
|
|
491
491
|
args = [@output.canvas, source]
|
|
492
|
-
Ext::Image.make_image_from_file(*args) do |
|
|
492
|
+
Ext::Image.make_image_from_file(*args) do |src_file|
|
|
493
493
|
props = Utils.stringify_hash_key(props)
|
|
494
|
-
args = [
|
|
494
|
+
args = [src_file.path, props, @output.canvas]
|
|
495
495
|
[Ext::TeX.make_image_by_LaTeX(*args), props]
|
|
496
496
|
end
|
|
497
497
|
end
|
|
@@ -499,9 +499,9 @@ module Rabbit
|
|
|
499
499
|
|
|
500
500
|
def mimeTeX(source, props={})
|
|
501
501
|
args = [@output.canvas, source]
|
|
502
|
-
Ext::Image.make_image_from_file(*args) do |
|
|
502
|
+
Ext::Image.make_image_from_file(*args) do |src_file|
|
|
503
503
|
props = Utils.stringify_hash_key(props)
|
|
504
|
-
args = [
|
|
504
|
+
args = [src_file.path, props, @output.canvas]
|
|
505
505
|
[Ext::TeX.make_image_by_mimeTeX(*args), props]
|
|
506
506
|
end
|
|
507
507
|
end
|
|
@@ -509,18 +509,18 @@ module Rabbit
|
|
|
509
509
|
|
|
510
510
|
def aafigure(source, props={})
|
|
511
511
|
args = [@output.canvas, source]
|
|
512
|
-
Ext::Image.make_image_from_file(*args) do |
|
|
512
|
+
Ext::Image.make_image_from_file(*args) do |src_file|
|
|
513
513
|
props = Utils.stringify_hash_key(props)
|
|
514
|
-
args = [
|
|
514
|
+
args = [src_file.path, props, @output.canvas]
|
|
515
515
|
[Ext::AAFigure.make_image(*args), props]
|
|
516
516
|
end
|
|
517
517
|
end
|
|
518
518
|
|
|
519
519
|
def blockdiag(source, props={})
|
|
520
520
|
args = [@output.canvas, source]
|
|
521
|
-
Ext::Image.make_image_from_file(*args) do |
|
|
521
|
+
Ext::Image.make_image_from_file(*args) do |src_file|
|
|
522
522
|
props = Utils.stringify_hash_key(props)
|
|
523
|
-
args = [
|
|
523
|
+
args = [src_file.path, props, @output.canvas]
|
|
524
524
|
[Ext::BlockDiag.make_image(*args), props]
|
|
525
525
|
end
|
|
526
526
|
end
|
data/lib/rabbit/parser.rb
CHANGED
|
@@ -25,7 +25,7 @@ module Rabbit
|
|
|
25
25
|
include GetText
|
|
26
26
|
|
|
27
27
|
module_function
|
|
28
|
-
def parse(canvas, source)
|
|
28
|
+
def parse(canvas, source, **options)
|
|
29
29
|
parser = Base.find_loader(source)
|
|
30
30
|
if parser.nil?
|
|
31
31
|
format = _("unsupported format. (supported: %s)")
|
|
@@ -35,7 +35,7 @@ module Rabbit
|
|
|
35
35
|
message = format % "[#{format_names.join(', ')}]"
|
|
36
36
|
raise UnsupportedFormatError.new(message)
|
|
37
37
|
end
|
|
38
|
-
parser.new(canvas, source).parse
|
|
38
|
+
parser.new(canvas, source, **options).parse
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def normalize_property_name(name)
|
data/lib/rabbit/progress.rb
CHANGED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Copyright (C) 2020-2021 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
|
+
|
|
17
|
+
require "rabbit/relative-size"
|
|
18
|
+
require "rabbit/yaml-loader"
|
|
19
|
+
|
|
20
|
+
module Rabbit
|
|
21
|
+
class Properties
|
|
22
|
+
include Enumerable
|
|
23
|
+
|
|
24
|
+
def initialize(data)
|
|
25
|
+
@data = normalize(data)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def [](key)
|
|
29
|
+
@data[normalize_key(key)]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def []=(key, value)
|
|
33
|
+
@data[normalize_key(key)] = value
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def each(&block)
|
|
37
|
+
@data.each(&block)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def get_boolean(key, default=nil)
|
|
41
|
+
value = self[key]
|
|
42
|
+
return default if value.nil?
|
|
43
|
+
true_value?(value)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def get_integer(key, default=nil)
|
|
47
|
+
integer_value(self[key] || default)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def get_float(key, default=nil)
|
|
51
|
+
float_value(self[key] || default)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def get_size(key, filename, default=nil)
|
|
55
|
+
size_value(self[key] || default, filename, key)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def get_relative_size(key, filename, default=nil)
|
|
59
|
+
relative_size_value(self[key] || default,
|
|
60
|
+
filename,
|
|
61
|
+
key)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def draws
|
|
65
|
+
targets = @data.select do |key, _|
|
|
66
|
+
/\Adraw\d+\z/.match?(key)
|
|
67
|
+
end
|
|
68
|
+
targets = targets.sort_by do |key, _|
|
|
69
|
+
Integer(key[/\d+/], 10)
|
|
70
|
+
end
|
|
71
|
+
targets.collect do |_, value|
|
|
72
|
+
YAMLLoader.load(value)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def respond_to_missing?(name, include_private)
|
|
77
|
+
@data.key?(normalize_key(name.to_s.gsub(/\?\z/, "")))
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def method_missing(name, *args, &block)
|
|
81
|
+
case args.size
|
|
82
|
+
when 0
|
|
83
|
+
key = name.to_s
|
|
84
|
+
if key.end_with?("?")
|
|
85
|
+
key = key[0..-2]
|
|
86
|
+
is_predict = true
|
|
87
|
+
else
|
|
88
|
+
is_predict = false
|
|
89
|
+
end
|
|
90
|
+
key = normalize_key(key)
|
|
91
|
+
return super unless @data.key?(key)
|
|
92
|
+
value = @data[key]
|
|
93
|
+
if is_predict
|
|
94
|
+
true_value?(value)
|
|
95
|
+
else
|
|
96
|
+
value
|
|
97
|
+
end
|
|
98
|
+
when 1
|
|
99
|
+
key = name.to_s
|
|
100
|
+
return super unless key.end_with?("=")
|
|
101
|
+
key = key[0..-2]
|
|
102
|
+
@data[normalize_key(key)] = args[0]
|
|
103
|
+
else
|
|
104
|
+
super
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
private
|
|
109
|
+
def normalize(data)
|
|
110
|
+
normalized_data = {}
|
|
111
|
+
(data || {}).each do |key, value|
|
|
112
|
+
normalized_data[normalize_key(key)] = value
|
|
113
|
+
end
|
|
114
|
+
normalized_data
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def normalize_key(key)
|
|
118
|
+
key.to_s.gsub(/-/, "_")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def true_value?(value)
|
|
122
|
+
value == true or value == "true"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def integer_value(value)
|
|
126
|
+
return nil if value.nil?
|
|
127
|
+
Integer(value, 10)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def float_value(value)
|
|
131
|
+
return nil if value.nil?
|
|
132
|
+
Float(value)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def size_value(value, filename, name)
|
|
136
|
+
return nil if value.nil?
|
|
137
|
+
begin
|
|
138
|
+
Integer(value, 10)
|
|
139
|
+
rescue ArgumentError
|
|
140
|
+
raise InvalidSizeError.new(filename, name, value)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def relative_size_value(value, filename, name)
|
|
145
|
+
return nil if value.nil?
|
|
146
|
+
begin
|
|
147
|
+
value = Float(value)
|
|
148
|
+
rescue ArgumentError
|
|
149
|
+
raise InvalidSizeError.new(filename, name, value)
|
|
150
|
+
end
|
|
151
|
+
RelativeSize.new(value)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
data/lib/rabbit/rabbit.rb
CHANGED
|
@@ -32,7 +32,9 @@ module Rabbit
|
|
|
32
32
|
|
|
33
33
|
class << self
|
|
34
34
|
def application
|
|
35
|
-
@@application ||=
|
|
35
|
+
@@application ||=
|
|
36
|
+
Gtk::Application.new("org.rabbit-shocker.Rabbit",
|
|
37
|
+
[:non_unique, :handles_command_line])
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
40
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Copyright (C) 2020 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
|
+
|
|
17
|
+
module Rabbit
|
|
18
|
+
class RelativeSize
|
|
19
|
+
def initialize(size)
|
|
20
|
+
@size = size
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def resolve(base_size)
|
|
24
|
+
return nil if base_size.nil?
|
|
25
|
+
((@size / 100.0) * base_size).ceil
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|