metanorma-utils 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/utils/image.rb +41 -8
- data/lib/utils/version.rb +1 -1
- data/spec/fixtures/action_schemaexpg1.svg +3 -1
- data/spec/utils_spec.rb +19 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52b94adefc23d35f664e35438604432f951f29d15ccb5622f64447a79eaa14d0
|
4
|
+
data.tar.gz: 5e68045ce2aaf9c6a34ec8793d8f75b1e3bb065fe4a733db84101f4bee31cf2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5e47154cf50378f9960ddd1f782d3ec35c4c92395d3e74a0f734ad7f77c510c401ad26e46fa4aae96b30784e0263e407e93b6d58daf97070b9f2628a72b57ff
|
7
|
+
data.tar.gz: adec26a807cb648a9b6ad5d6cc3e6251f0b79eba52e1901f99cf102ef61db425bb6ea3e1676e51af1a5d9ab9a0b5aeda1e0c6f071ff48238e2fa103fae0b7d48
|
data/lib/utils/image.rb
CHANGED
@@ -37,23 +37,23 @@ module Metanorma
|
|
37
37
|
|
38
38
|
def svgmap_rewrite(xmldoc, localdirectory = "")
|
39
39
|
n = Namespace.new(xmldoc)
|
40
|
-
xmldoc.xpath(n.ns("//svgmap")).
|
41
|
-
next unless svgmap_rewrite0(s, n, localdirectory)
|
40
|
+
xmldoc.xpath(n.ns("//svgmap")).each_with_index do |s, i|
|
41
|
+
next unless svgmap_rewrite0(s, n, localdirectory, i)
|
42
42
|
next if s.at(n.ns("./target/eref"))
|
43
43
|
|
44
44
|
s.replace(s.at(n.ns("./figure")))
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
def svgmap_rewrite0(svgmap, namespace, localdirectory)
|
48
|
+
def svgmap_rewrite0(svgmap, namespace, localdirectory, idx)
|
49
49
|
if (i = svgmap.at(namespace.ns(".//image"))) && (src = i["src"])
|
50
50
|
path = svgmap_rewrite0_path(src, localdirectory)
|
51
51
|
File.file?(path) or return false
|
52
52
|
svg = Nokogiri::XML(File.read(path, encoding: "utf-8"))
|
53
|
-
i.replace(svgmap_rewrite1(svgmap, svg.root, namespace))
|
53
|
+
i.replace(svgmap_rewrite1(svgmap, svg.root, namespace, idx))
|
54
54
|
/^data:/.match(src) and i["src"] = datauri(path)
|
55
55
|
elsif i = svgmap.at(".//m:svg", "m" => SVG_NS)
|
56
|
-
i.replace(svgmap_rewrite1(svgmap, i, namespace))
|
56
|
+
i.replace(svgmap_rewrite1(svgmap, i, namespace, idx))
|
57
57
|
else
|
58
58
|
return false
|
59
59
|
end
|
@@ -68,15 +68,20 @@ module Metanorma
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
def svgmap_rewrite1(svgmap, svg, namespace)
|
71
|
+
def svgmap_rewrite1(svgmap, svg, namespace, idx)
|
72
|
+
svg_update_href(svgmap, svg, namespace)
|
73
|
+
svg_update_ids(svg, idx)
|
74
|
+
svg.xpath("processing-instruction()|.//processing-instruction()").remove
|
75
|
+
svg.to_xml
|
76
|
+
end
|
77
|
+
|
78
|
+
def svg_update_href(svgmap, svg, namespace)
|
72
79
|
targ = svgmap_rewrite1_targets(svgmap, namespace)
|
73
80
|
svg.xpath(".//m:a", "m" => SVG_NS).each do |a|
|
74
81
|
["xlink:href", "href"].each do |p|
|
75
82
|
a[p] and x = targ[File.expand_path(a[p])] and a[p] = x
|
76
83
|
end
|
77
84
|
end
|
78
|
-
svg.xpath("processing-instruction()|.//processing-instruction()").remove
|
79
|
-
svg.to_xml
|
80
85
|
end
|
81
86
|
|
82
87
|
def svgmap_rewrite1_targets(svgmap, namespace)
|
@@ -90,6 +95,34 @@ module Metanorma
|
|
90
95
|
end
|
91
96
|
end
|
92
97
|
|
98
|
+
def svg_update_ids(svg, idx)
|
99
|
+
ids = svg.xpath("./@id | .//@id")
|
100
|
+
.each_with_object([]) { |i, m| m << i.value }
|
101
|
+
return if ids.empty?
|
102
|
+
|
103
|
+
svg_update_ids_attrs(svg, ids, idx)
|
104
|
+
svg_update_ids_css(svg, ids, idx)
|
105
|
+
end
|
106
|
+
|
107
|
+
def svg_update_ids_attrs(svg, ids, idx)
|
108
|
+
svg.xpath(". | .//*[@*]").each do |a|
|
109
|
+
a.attribute_nodes.each do |x|
|
110
|
+
ids.include?(x.value) and x.value += sprintf("_%09d", idx)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def svg_update_ids_css(svg, ids, idx)
|
116
|
+
svg.xpath("//m:style", "m" => SVG_NS).each do |s|
|
117
|
+
c = s.children.to_xml
|
118
|
+
ids.each do |i|
|
119
|
+
c = c.gsub(%r[##{i}\b], sprintf("#%s_%09d", i, idx))
|
120
|
+
.gsub(%r(\[id\s*=\s*['"]?#{i}['"]?\]), sprintf("[id='%s_%09d']", i, idx))
|
121
|
+
end
|
122
|
+
s.children = c
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
93
126
|
# sources/plantuml/plantuml20200524-90467-1iqek5i.png
|
94
127
|
# already includes localdir
|
95
128
|
def datauri(uri, localdirectory = ".")
|
data/lib/utils/version.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
4
|
viewBox="0 0 595.28 841.89" style="enable-background:new 0 0 595.28 841.89;" xml:space="preserve">
|
5
5
|
<style type="text/css">
|
6
|
+
#Layer_1 { fill:none }
|
7
|
+
svg[id = 'Layer_1'] { fill:none }
|
6
8
|
.st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
7
9
|
</style>
|
8
10
|
<image style="overflow:visible;" width="368" height="315" xlink:href="data:image/gif;base64,R0lGODlhcAE7Aff/AAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBmAABmMwBm
|
@@ -110,7 +112,7 @@ vsuOvuXr7OfLveML7c0u7c9u7dEevt+77cwuvteu7d2uvuzb2ORe7u97ZvV7v8UevBLGv/4LwHi+
|
|
110
112
|
ZARswAgc77C27vqba/guwMe27x997/Z+av6O3QC/5co28BQs8AFfaAgv0gWf3Apv8P2+8GfW8CJ8
|
111
113
|
8BS/ZBYP2fqe8TK28Xmdaydj7iRfFvIpo8qEnfIqv/Is3/Iu//IwH/OhERAAOw==" transform="matrix(1 0 0 1 114 263.8898)">
|
112
114
|
</image>
|
113
|
-
<a xlink:href="mn://action_schema" >
|
115
|
+
<a xlink:href="mn://action_schema" xlink:dummy="Layer_1">
|
114
116
|
<rect x="123.28" y="273.93" class="st0" width="88.05" height="41.84"/>
|
115
117
|
</a>
|
116
118
|
<a xlink:href="mn://basic_attribute_schema" >
|
data/spec/utils_spec.rb
CHANGED
@@ -158,10 +158,10 @@ RSpec.describe Metanorma::Utils do
|
|
158
158
|
</target>
|
159
159
|
</svgmap>
|
160
160
|
<figure>
|
161
|
-
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='
|
161
|
+
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1_000000001' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
|
162
162
|
<style/>
|
163
163
|
<image/>
|
164
|
-
<a xlink:href='#ref1'>
|
164
|
+
<a xlink:href='#ref1' xlink:dummy='Layer_1_000000001'>
|
165
165
|
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
166
166
|
</a>
|
167
167
|
<a xlink:href='mn://basic_attribute_schema'>
|
@@ -174,10 +174,10 @@ RSpec.describe Metanorma::Utils do
|
|
174
174
|
</figure>
|
175
175
|
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
176
176
|
<figure>
|
177
|
-
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='
|
177
|
+
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1_000000002' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
|
178
178
|
<style/>
|
179
179
|
<image/>
|
180
|
-
<a xlink:href='mn://action_schema'>
|
180
|
+
<a xlink:href='mn://action_schema' xlink:dummy='Layer_1_000000002'>
|
181
181
|
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
182
182
|
</a>
|
183
183
|
<a xlink:href='http://www.example.com'>
|
@@ -200,7 +200,7 @@ RSpec.describe Metanorma::Utils do
|
|
200
200
|
</target>
|
201
201
|
</svgmap>
|
202
202
|
<figure>
|
203
|
-
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='
|
203
|
+
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1_000000003' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
|
204
204
|
<a href='#ref1'>
|
205
205
|
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
206
206
|
</a>
|
@@ -214,7 +214,7 @@ RSpec.describe Metanorma::Utils do
|
|
214
214
|
</figure>
|
215
215
|
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
216
216
|
<figure>
|
217
|
-
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='
|
217
|
+
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1_000000004' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
|
218
218
|
<style/>
|
219
219
|
<image/>
|
220
220
|
<a xlink:href='mn://action_schema'>
|
@@ -280,7 +280,7 @@ RSpec.describe Metanorma::Utils do
|
|
280
280
|
</standard-document>
|
281
281
|
INPUT
|
282
282
|
Metanorma::Utils.svgmap_rewrite(xmldoc)
|
283
|
-
expect(xmlpp(xmldoc.to_xml.gsub(%r{<image.*?</image>}m, "<image/>")
|
283
|
+
expect(xmlpp(xmldoc.to_xml.gsub(%r{<image.*?</image>}m, "<image/>"))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
284
284
|
<?xml version='1.0'?>
|
285
285
|
<standard-document type="semantic" version="1.8.2" xmlns="http://www.example.com">
|
286
286
|
<bibdata type="standard">
|
@@ -302,10 +302,13 @@ RSpec.describe Metanorma::Utils do
|
|
302
302
|
</bibdata>
|
303
303
|
<sections><svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
304
304
|
<figure>
|
305
|
-
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='
|
306
|
-
|
305
|
+
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1_000000001' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
|
306
|
+
<style type='text/css'>
|
307
|
+
#Layer_1_000000001 { fill:none } svg[id='Layer_1_000000001'] {
|
308
|
+
fill:none } .st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
309
|
+
</style>
|
307
310
|
<image/>
|
308
|
-
<a xlink:href='#ref1'>
|
311
|
+
<a xlink:href='#ref1' xlink:dummy='Layer_1_000000001'>
|
309
312
|
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
310
313
|
</a>
|
311
314
|
<a xlink:href='mn://basic_attribute_schema'>
|
@@ -318,10 +321,13 @@ RSpec.describe Metanorma::Utils do
|
|
318
321
|
</figure>
|
319
322
|
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
320
323
|
<figure>
|
321
|
-
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='
|
322
|
-
|
324
|
+
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1_000000002' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
|
325
|
+
<style type='text/css'>
|
326
|
+
#Layer_1_000000002 { fill:none } svg[id='Layer_1_000000002'] {
|
327
|
+
fill:none } .st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
328
|
+
</style>
|
323
329
|
<image/>
|
324
|
-
<a xlink:href='mn://action_schema'>
|
330
|
+
<a xlink:href='mn://action_schema' xlink:dummy='Layer_1_000000002'>
|
325
331
|
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
326
332
|
</a>
|
327
333
|
<a xlink:href='http://www.example.com'>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sterile
|