Class: ReverseAdoc::Converters::Img
- Inherits:
-
Base
- Object
- Base
- ReverseAdoc::Converters::Img
show all
- Defined in:
- lib/reverse_adoc/converters/img.rb
Instance Method Summary
collapse
Methods inherited from Base
#constrained?, #escape_keychars, #extract_title, #node_has_ancestor?, #textnode_before_end_with?, #treat, #treat_children, #treat_children_coradoc, #treat_coradoc, #unconstrained_after?, #unconstrained_before?
Instance Method Details
#convert(node, state = {}) ⇒ Object
86
87
88
|
# File 'lib/reverse_adoc/converters/img.rb', line 86
def convert(node, state = {})
Coradoc::Generator.gen_adoc(to_coradoc(node, state))
end
|
#copy_temp_file(imgdata) ⇒ Object
47
48
49
50
51
52
53
54
55
|
# File 'lib/reverse_adoc/converters/img.rb', line 47
def copy_temp_file(imgdata)
Tempfile.open(["radoc", ".jpg"]) do |f|
f.binmode
f.write(Base64.strict_decode64(imgdata))
f.rewind
ext = Marcel::MimeType.for(f).sub(%r{^[^/]+/}, "")
[ext, f.path]
end
end
|
#datauri2file(src) ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/reverse_adoc/converters/img.rb', line 21
def datauri2file(src)
%r{^data:image/(?:[^;]+);base64,(?<imgdata>.+)$} =~ src
dest_dir = Pathname.new(ReverseAdoc.config.destination).dirname
images_dir = dest_dir.join("images")
FileUtils.mkdir_p(images_dir)
ext, image_src_path = determine_image_src_path(src, imgdata)
image_dest_path = images_dir + "#{image_number}.#{ext}"
FileUtils.cp(image_src_path, image_dest_path)
image_number_increment
image_dest_path.relative_path_from(dest_dir)
end
|
#determine_image_src_path(src, imgdata) ⇒ Object
40
41
42
43
44
45
|
# File 'lib/reverse_adoc/converters/img.rb', line 40
def determine_image_src_path(src, imgdata)
return copy_temp_file(imgdata) if imgdata
ext = File.extname(src).strip.downcase[1..-1]
[ext, Pathname.new(ReverseAdoc.config.sourcedir).join(src)]
end
|
#image_number ⇒ Object
10
11
12
13
14
15
|
# File 'lib/reverse_adoc/converters/img.rb', line 10
def image_number
sprintf(
ReverseAdoc.config.image_counter_pattern,
ReverseAdoc.config.image_counter,
)
end
|
#image_number_increment ⇒ Object
17
18
19
|
# File 'lib/reverse_adoc/converters/img.rb', line 17
def image_number_increment
ReverseAdoc.config.image_counter += 1
end
|
#to_coradoc(node, _state = {}) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/reverse_adoc/converters/img.rb', line 57
def to_coradoc(node, _state = {})
id = node["id"]
alt = node["alt"]
src = node["src"]
width = node["width"]
height = node["height"]
title = (node)
if ReverseAdoc.config.external_images
src = datauri2file(src)
end
attributes = Coradoc::Element::AttributeList.new
if alt
attributes.add_positional(alt)
elsif width || height
attributes.add_positional("\"\"")
end
attributes.add_positional(width) if width
attributes.add_positional(height) if height
Coradoc::Element::Image::BlockImage.new(title, id, src,
attributes: attributes)
end
|