metanorma-utils 1.2.1 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e32e0167b7ef50067c61aca6c6d270c239d6095f428b2d94cae193ef0ff97643
4
- data.tar.gz: 4d374d23469c0ba74cae811f155a430fb6a7c0865558fd5e332555ed4cd646b3
3
+ metadata.gz: 52b94adefc23d35f664e35438604432f951f29d15ccb5622f64447a79eaa14d0
4
+ data.tar.gz: 5e68045ce2aaf9c6a34ec8793d8f75b1e3bb065fe4a733db84101f4bee31cf2d
5
5
  SHA512:
6
- metadata.gz: 9e560c04556fc4439ac3af71692e7f552048737c71148cbed4448e97fc12be5bcea60c467c03bb1ade45e53b2e482a6ca5781f81561a17a570e77a9f127ce959
7
- data.tar.gz: 3befc32a1486a098183b21f341741cf857161c93c56ad51261c6d2035c9d117f6d12638693ace505701e228dcc1034fcfc4a3264746e52e34dcb58c97e0dbab5
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")).each do |s|
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
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Utils
3
- VERSION = "1.2.1".freeze
3
+ VERSION = "1.2.2".freeze
4
4
  end
5
5
  end
@@ -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='Layer_1' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
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='Layer_1' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
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='Layer_1' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
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='Layer_1' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
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/>").gsub(%r{<style.*?</style>}m, "<style/>"))).to be_equivalent_to xmlpp(<<~OUTPUT)
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='Layer_1' 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/>
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='Layer_1' x='0px' y='0px' viewBox='0 0 595.28 841.89' style='enable-background:new 0 0 595.28 841.89;' xml:space='preserve'>
322
- <style/>
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.1
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-12 00:00:00.000000000 Z
11
+ date: 2021-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sterile