metanorma-utils 1.0.9 → 1.2.3
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/.github/workflows/rake.yml +1 -22
- data/.gitignore +1 -0
- data/.hound.yml +5 -0
- data/.rubocop.yml +9 -5
- data/Gemfile +2 -2
- data/bin/rspec +1 -2
- data/lib/metanorma-utils.rb +1 -0
- data/lib/utils/image.rb +177 -0
- data/lib/utils/log.rb +28 -25
- data/lib/utils/main.rb +56 -151
- data/lib/utils/version.rb +1 -1
- data/metanorma-utils.gemspec +8 -8
- data/spec/fixtures/action_schemaexpg1.svg +3 -1
- data/spec/spec_helper.rb +6 -6
- data/spec/utils_spec.rb +312 -266
- metadata +45 -42
data/lib/utils/version.rb
CHANGED
data/metanorma-utils.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
lib = File.expand_path("
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require "utils/version"
|
6
6
|
|
@@ -24,24 +24,24 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
25
25
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
26
26
|
|
27
|
-
spec.add_dependency "sterile", "~> 1.0.14"
|
28
|
-
spec.add_dependency "concurrent-ruby"
|
29
|
-
spec.add_dependency "nokogiri", "~> 1.10.4"
|
30
27
|
spec.add_dependency "asciidoctor", "~> 2.0.0"
|
31
|
-
spec.add_dependency "
|
32
|
-
spec.add_dependency "
|
28
|
+
spec.add_dependency "concurrent-ruby"
|
29
|
+
spec.add_dependency "marcel", "~> 1.0.0"
|
33
30
|
spec.add_dependency "mime-types"
|
31
|
+
spec.add_dependency "nokogiri", "~> 1.11"
|
32
|
+
spec.add_dependency "sterile", "~> 1.0.14"
|
33
|
+
spec.add_dependency "uuidtools"
|
34
34
|
|
35
35
|
spec.add_development_dependency "byebug"
|
36
36
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
37
37
|
spec.add_development_dependency "guard", "~> 2.14"
|
38
38
|
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
39
|
+
spec.add_development_dependency "metanorma-standoc", "~> 1.8"
|
39
40
|
spec.add_development_dependency "rake", "~> 13.0"
|
40
41
|
spec.add_development_dependency "rspec", "~> 3.6"
|
41
|
-
spec.add_development_dependency "rubocop", "
|
42
|
+
spec.add_development_dependency "rubocop", "~> 1.5.2"
|
42
43
|
spec.add_development_dependency "simplecov", "~> 0.15"
|
43
44
|
spec.add_development_dependency "timecop", "~> 0.9"
|
44
45
|
spec.add_development_dependency "vcr", "~> 5.0.0"
|
45
46
|
spec.add_development_dependency "webmock"
|
46
|
-
spec.add_development_dependency "metanorma-standoc", "~> 1.8"
|
47
47
|
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/spec_helper.rb
CHANGED
@@ -20,23 +20,23 @@ RSpec.configure do |config|
|
|
20
20
|
end
|
21
21
|
|
22
22
|
class Dummy
|
23
|
-
attr_accessor :id
|
24
|
-
|
23
|
+
attr_accessor :id, :docfile
|
24
|
+
|
25
25
|
def initialize(id = nil)
|
26
26
|
@id = id
|
27
27
|
end
|
28
28
|
|
29
|
-
def attr(
|
30
|
-
case
|
29
|
+
def attr(elem)
|
30
|
+
case elem
|
31
31
|
when "docfile" then @docfile
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def xmlpp(
|
36
|
+
def xmlpp(xml)
|
37
37
|
s = ""
|
38
38
|
f = REXML::Formatters::Pretty.new(2)
|
39
39
|
f.compact = true
|
40
|
-
f.write(REXML::Document.new(
|
40
|
+
f.write(REXML::Document.new(xml), s)
|
41
41
|
s
|
42
42
|
end
|
data/spec/utils_spec.rb
CHANGED
@@ -11,16 +11,21 @@ RSpec.describe Metanorma::Utils do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "sets metanorma IDs if not provided" do
|
14
|
-
expect(Metanorma::Utils.anchor_or_uuid
|
15
|
-
|
16
|
-
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new(
|
14
|
+
expect(Metanorma::Utils.anchor_or_uuid)
|
15
|
+
.to match (/^_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/)
|
16
|
+
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new(nil)))
|
17
|
+
.to match (/^_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/)
|
18
|
+
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new("")))
|
19
|
+
.to match (/^_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/)
|
17
20
|
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new("A"))).to eq "A"
|
18
21
|
end
|
19
22
|
|
20
23
|
it "applies Asciidoctor substitutions" do
|
21
24
|
require "metanorma-standoc"
|
22
|
-
expect(Metanorma::Utils.asciidoc_sub("A -- B"))
|
23
|
-
|
25
|
+
expect(Metanorma::Utils.asciidoc_sub("A -- B"))
|
26
|
+
.to eq "A — B"
|
27
|
+
expect(Metanorma::Utils.asciidoc_sub("*A* stem:[x]"))
|
28
|
+
.to eq "<strong>A</strong> <stem type=\"AsciiMath\">x</stem>"
|
24
29
|
end
|
25
30
|
|
26
31
|
it "finds file path of docfile" do
|
@@ -31,20 +36,21 @@ RSpec.describe Metanorma::Utils do
|
|
31
36
|
end
|
32
37
|
|
33
38
|
it "applies smart formatting" do
|
34
|
-
|
39
|
+
expect(Metanorma::Utils.smartformat("A - B A -- B A--B '80s '80' <A>"))
|
40
|
+
.to eq "A — B A — B A—B ’80s ‘80’ <A>"
|
35
41
|
end
|
36
42
|
|
37
43
|
it "applies en-dash normalisation" do
|
38
44
|
a = Nokogiri::XML(<<~INPUT)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
<container>
|
46
|
+
<a>A -- B A - B</a>
|
47
|
+
<b>A--B</b>
|
48
|
+
</container>
|
43
49
|
INPUT
|
44
50
|
Metanorma::Utils.endash_date(a)
|
45
51
|
expect(a.to_xml).to be_equivalent_to <<~OUTPUT
|
46
|
-
|
47
|
-
<container><a>A–B A–B</a><b>A–B</b></container>
|
52
|
+
<?xml version=\"1.0\"?>
|
53
|
+
<container><a>A–B A–B</a><b>A–B</b></container>
|
48
54
|
OUTPUT
|
49
55
|
end
|
50
56
|
|
@@ -53,14 +59,14 @@ RSpec.describe Metanorma::Utils do
|
|
53
59
|
a = Metanorma::Utils.set_nested_value(a, ["X"], "x")
|
54
60
|
a = Metanorma::Utils.set_nested_value(a, ["X1"], 9)
|
55
61
|
a = Metanorma::Utils.set_nested_value(a, ["X2"], [3])
|
56
|
-
a = Metanorma::Utils.set_nested_value(a, ["X3"], {"a" =>"b"})
|
62
|
+
a = Metanorma::Utils.set_nested_value(a, ["X3"], { "a" => "b" })
|
57
63
|
expect(a.to_s).to be_equivalent_to <<~OUTPUT
|
58
|
-
|
64
|
+
{"X"=>"x", "X1"=>9, "X2"=>[3], "X3"=>{"a"=>"b"}}
|
59
65
|
OUTPUT
|
60
66
|
a = Metanorma::Utils.set_nested_value(a, ["X2"], 4)
|
61
67
|
a = Metanorma::Utils.set_nested_value(a, ["X1"], 4)
|
62
68
|
expect(a.to_s).to be_equivalent_to <<~OUTPUT
|
63
|
-
|
69
|
+
{"X"=>"x", "X1"=>[9, 4], "X2"=>[3, 4], "X3"=>{"a"=>"b"}}
|
64
70
|
OUTPUT
|
65
71
|
a = Metanorma::Utils.set_nested_value(a, ["X2", "A"], 5)
|
66
72
|
a = Metanorma::Utils.set_nested_value(a, ["X2a"], [])
|
@@ -70,252 +76,292 @@ RSpec.describe Metanorma::Utils do
|
|
70
76
|
a = Metanorma::Utils.set_nested_value(a, ["X3", "a"], 8)
|
71
77
|
a = Metanorma::Utils.set_nested_value(a, ["X1", "a"], 11)
|
72
78
|
expect(a.to_s).to be_equivalent_to <<~OUTPUT
|
73
|
-
|
79
|
+
{"X"=>"x", "X1"=>[9, 4, {"a"=>11}], "X2"=>[3, 4, {"A"=>5}], "X3"=>{"a"=>["b", 8], "A"=>7}, "X2a"=>[{"A"=>6}], "X4"=>{"A"=>10}}
|
74
80
|
OUTPUT
|
75
81
|
end
|
76
82
|
|
77
83
|
it "rewrites SVGs" do
|
78
|
-
FileUtils.cp
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
<
|
84
|
-
<
|
85
|
-
<
|
86
|
-
<
|
87
|
-
<
|
88
|
-
<
|
89
|
-
<
|
90
|
-
<
|
91
|
-
|
92
|
-
<
|
93
|
-
|
94
|
-
|
95
|
-
<
|
96
|
-
|
97
|
-
|
98
|
-
</
|
99
|
-
|
100
|
-
|
101
|
-
<
|
102
|
-
<
|
103
|
-
<
|
104
|
-
|
105
|
-
<
|
106
|
-
|
107
|
-
<
|
108
|
-
<
|
109
|
-
<
|
110
|
-
<
|
111
|
-
<
|
112
|
-
|
113
|
-
|
114
|
-
<
|
115
|
-
|
116
|
-
|
117
|
-
<
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
</
|
122
|
-
<target href="mn://action_schema"><xref target="ref1">Computer</xref></target><target href="http://www.example.com"><link target="http://www.example.com">Phone</link></target>
|
123
|
-
</svgmap>
|
124
|
-
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
125
|
-
<figure>
|
126
|
-
|
127
|
-
<image src='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1OTUuMjggODQxLjg5IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OTUuMjggODQxLjg5OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxpbWFnZSBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTsiIHdpZHRoPSIzNjgiIGhlaWdodD0iMzE1IiB4bGluazpocmVmPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhjQUU3QWZmL0FBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm1BQUJtTXdCbQpaZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFEL013RC9aZ0QvCm1RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tWmpObW1UTm0KekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC9tVFAvekRQLwovMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabXpHWm0vMmFaCkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvLzVrQUFKa0EKTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVpBSm1aTTVtWgpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QU04d0Fac3dBCm1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaWnN5Wm1jeVoKek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEFtZjhBelA4QQovLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWnpQK1ovLy9NCkFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vLy9qNCtQTHk4dXZyNitYbDVkL2YzOWpZMk5MUzBzek0Kek1YRnhiKy92N2k0dUxLeXNxeXNyS1dscForZm41bVptWktTa295TWpJV0ZoWDkvZjNsNWVYSnljbXhzYkdabVpsOWZYMWxaV1ZKUwpVa3hNVEVaR1JqOC9Qems1T1RNek15d3NMQ1ltSmg4Zkh4a1pHUk1URXd3TURBWUdCZ0FBQUN3QUFBQUFjQUU3QVFBSS9nQ3ZDUnhJCnNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEaWh4SnNxVEpreWhUcWx6SnNxWExsekJqeXB4SnM2Yk4KbXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0ZXJJZS8reWF0M0t0YXZYcjJERGloM3I5WjdWczJncAovcXU2TnEzYnR3cmJUcFVMdDI1ZHVsSHgydDE3VnU5VHYzd0Q1MlVydURCVndBcXRJU2tUVWpIampZZ05TejRhdWFDenh5S3R5Zm1ICk9XUGx5YUNEZmhhb3VYUGp4UnhIaDE2OVV5Nm5yQkFFT3N1YVFOYm1meENlbFVoMFRmRy9BTHgxSTBLQ08rRW8yck91emY2WFlKWmkKTXB1YlgzdEc0cDhPNVFtTzY5QXU4SFh4Z2FwWi9vdTMyZlpaaTFuUFRLQlg3N2c5RXVDbHIzRVNJSXU0Z0ZuT2dCKzBwaVE1cS9YTwpMYVlZY0xvbFlzMGNCaVl4bkhYVTZaQWVldWM5Q041NEZBSkYxMnozalhMZFFJNU50MXVCSGlZQ0lvZ0h2YmFoaGdSMTZCaDFXcFh4CjRJdnF5ZmJQZlJOV2FHTnJwQ0VCQVgrempCSWJoNmdWbUY5d0grNFdZa0tLWmZoampveXRHS05BTUFLbzJJNzkxWGpqbGVRSjVHTnYKL1kzb1JZY0ZUb2tkZWthU1dKQTFnZ2pVaVlobGZvbGFlM0pjZDFtVUQyN0pvNVZZNWhsVGVkVWh0eHlOcnowUUhYclYzYWZaakxZeApsOXlaeEgzMzV5eXZBZmZhZlN6dXVCbDBuQjJYVzUrS0NoU2VucUNHOUdsUm80WnFLbVNFbmFycVNhVkN4T0pXL3ZxbDFPcXF0RVkwCnEyaTE1Z3JTclJicTZtdHFaQVVyN0xERWl2WHJzUmp4K3BPeXlQN0tiRS9QTnB0cnREaEthKzFEMU9xVTdiV21ib3VUdDl6cUNXNlcKNFpaNzBMZzFvV3R1aGVyTzFPNjY0cjI3Sjd6MHlndVR2ZlJPaHE5TCsrWmJXTDhzQWV3dlh3S3JWUERBZDZXSzhMVUhvOVR3d21rOQpiSkxFRUZ0Rk1Va1hWenlYd2hvZm03RklIM2Y4RjhjaTY4cFBzU2luckxKWC9KVHM4a1QxdkN5enRqUFhUSzdOT04rYjg4Nzg4dXl6ClNqSC9MUFRRUkJkdDlORklsNXRQMGt3L0ZEUkJJVGR0clY1UlM5MHMxUWVaT1ZHSGlhRm0wb3BHV2gyeFFYb055QnRJbDZIOVdOb0cKbWMwUTIySW5oYlZCV25NVW4wZngzVTEzL3RoSXltRmEzRVU5amVlaHZ3VlgzWW5JS1llY2JvRDgwMFdSaDFSWEJ1RzVHZW1iZnNJUgp0NlJCM2xtYWxhQ3dNZTQ0NUllYlBTQWl0OFhHNG9hQUkwVVhKN0VOZVdDQ0JsYjUzNFBQYVg0NmNjMk5ZcWlBN3hub3QzejAyWWRmCnJBV1pKK1did09ObU5uWE5VZWRpbWJ1cGlLQTFTWnpkdWxGeVlVK2tpSnd5WnFLV3JCOVpJSWp1TVhZKzlXeCtueENHQVRZWkpQc2sKY3VJZysyQ0d2ejFsQTBrZm9vUXBRb0tTQ0RLaUl2SEdlMkRhelpEK3g3Nzk2SWhIS3ByZjkrcDN2KytCNlVuNzR4OXA1QkM5NnNWSgpPWk5MMHpYVzVLVUNnbzh4em1oT0FnMmtvekdaOENCMjZrOEUxVWUvTXJFSE5iSjcwd2ZobHNHZENNNVQvZ1NzemdGSVFLbnF4TVkzCmpzb0tmVGF6Uk9hc29rODBrczgvUUJlOVFqbUhpWW1TVHZJNDFaelh4Q1pRV0l4T29tYTBLTzhNOFQ1ZW5JNFJlK2lUdVlXa2JteVUKbGh0QkFzYzRJbXVPZURQZVJWNmxGZVRaOFY5aysyUFNmbmlOcWdtU1ZvWThwS3I4VXNlSGNBMUpYaXNKMkxSWGtrWXE4aU5sQzE1SQplTWdSdG5FeVIzNUV5Q2UzcHNtMy9lMlN0c29hM3pxaU43c05yNVVFWE9WK2hwY1JTM0tJbHFoc0NDSHBRampNSFU1TGlWdE9CeHYzCk9EWkZqak9VUXg5eE1GZUNCVzJ1SUowakhPaHdJN3BpNnVhWU9qRGRlMUFIR3pWYXh6aUpXNTM1ZnFrNDVvenhtYmxFeUJ4aHB4ejQKWEM5N2Q3cmREY21ndTIzeXJrZS8vcHRjOE9Jem4vcVFjWUYwaTlBTjVhZFA1d1VQZW9TYW5nWGY5RTVLY3NoMnptbG9tQ1E2MEVlbQpNeTZCSkUzMi9xZS84VjBEUmYycjRRR0JSOFAyTWRCOW9pVGpETTFud081VU1FVDVheEZDUE1wSGhkWVVwRXk2S0VQYzZML3pZVEJICkF3enBCQzBIVHdrdWNIMG9aUlNWNHRjYkNaN1VwU2E4NEtLNlJpa00rblNxV3dMU0tYVUt0WXoyaG9Oa0VwNmNRcWdta3o3REN5YjAKWHdxWkdxWVdydldGQm9raFUxZjRWTnpoRUQ0NkhPdCtSTGdtell3MVREdFU2SFRjdEZXdUNtU1hRZnpIR1FsVkhDVCs2RStKYW1JQwpucWpFTWs1eFVDd3lWQmc3dFVXdGRMRTRZRVNVR0c4VFJUTVNFVkxGcVJSQ0hBc2xJeDZxaUVray9xTVUwV25ZaExUTGxyWHQxa2h3Cm0xdFFxY3MzVWF3SUg3TVNTcE1NdDNDOU5WaHlhNGJZNWNvTWo4N3RHSFJyS2N1SVdOU0JoYVd1UTZQTEtxODZaSlFCTE81R3dNdksKVW5KWFZ0NWxDQ3hWdVYyTnJKZU8xVDB2U1pvckk2MWNaM1dVVysxdGZQbk5qd1p6Y1NVZ0p1bVFtVHBsSWpkejMrSGNQMEhiemN6aApsYi9saysrdU9MUlJPelgwdWdSaHArd3VERkc3MHRPZ0FWaFE3L0pwdXVIMTAzZ0FQUk10U3dFaEFDRVZwZzJWTU1nNGhLQ1BxaTU4CkdOYm9CRHZhWDV5eTFLVHBxMnRMRy9sVzdjSHZ4ZWZUbjR3bjNEOHJUZ2VET1ZaalNRRUlwS0JDU2FTOUtXcEpqenJrK0g2MURDeHUKNmxLUi9LR2ZMaG1USElyQy9sUy9PdFlvYTZhRFlnVWhtc3BhUXZxUkFJVXFsS0NZM3RyQWxENUdybTFGSVh3Q2UyYU0wSmR3V1ZIZgpHbWVMRUJZdFZyV3NMV2NUSlV0WjJVcVJpb3pWckdnNTJ6WTZMSXFQQ0hBQ0dVMExXOW9XT3BVRjZSNHIra2VEbVBEMjFCcnNLdmtHCk1vcnNudVRWc0NhVlZ4RWQ0YzdDcXIwWEFlNmFKM0pjOGVZYXZhaytkcjdvcTJ5RUpiTFpicUdXUlhHOU4yQkQyeW1qSWkrampMMFEKdDEzN01CQjViNk85ekJCcWY5c256RjVPVnU1YnV0U3g5NnZFYmUrazhNUGcxRFp6bjVvVTU3bVh0ZXNLSC9IQ2tRd3ZielFzM3J1eApXSGt2NnJLQllyeHZhTzI2eGx1cWFaVER0RkVpUjgvSVpDUXorR1RhY0o3TU1iUEpvZkxFL2o5MDV5UE5Fc3pKbVJLUE5FN2xqbnQ4CjEycE9VV0JITGp3NHY0OHpXanBpbDZwMzF6aHIyK1V4T2ZSdEV1M05INlZSeFlweTlHbFg2K25XYWlYVW84N0tveGNOOUY2Ulp0VlEKYW5YVmRTVVhuTlo2NjF5L3BYMFZVbXhnbHgzczBVYTdyNWl0OWxWTnQrMmhldnRRekExM2o4aGRsTFptaWJmcnZwSzd0dzJYTmFFNwozemVTN3EydzJ6cjUzWnN6dTlQTkZHcUhPOTdzTmVQdk01c3ZOdmplRHpaY2Z3ZVBNUXJ6eHNLMHk3R3doNFJ3RS9qVFFTUndFSHNZCnJ1TEhIRnlnWVkwcTZ6a3ZLaHAvL3NZdG9ybkpqNndlT2luWklFVWV5SkVWWGxQYWo0UXVJSC95VkhYZjFqSDMvdmtBNnJiZndxenkKblp1MXpNTTJQcE43L2hQelc3WTU0TEg4SHFDaGp6dEMrem5uWEFwcmgyUm5mdTBiZXRkRHg3bHFHWTEwU25NSzZwZ3FnNmFLbnBpbQplek1yVUlkR1VuZGE4K2QreWJKcldEY2RXbWVBb09GR1hwZDNEQWdYYnNSclpNY3A4YVlSWnhlQjg1SnNHbWdqYk5lQlYvSnNJRmd0ClRkVVpnb2RkSnppQzZRSkozR1laYTNOS2UvYytFS2lDQVVOMjVDWnpUUUo0NFNkOU0waURJMEZmNkxOZndCWk50ekZObFNOZ3hsUTYKK0JaaTdxWnZQdWd3R2VVMkJOZGVwVGRYemJNakIwVUNWU1JZZ2RZYnMvZUVuY2VCTUZWeDVBWS9LNVZXWVdNL1VSVWt2d2VHWVNocgpIRlZTRHJSVVo0aGw4dkZTWGRoeWJsZ1NQT1ZCTmhkWE9tZUZjb2hrQTlWT0xKU0QvbnExaC9NVmhaZ2xSRXZuYTRxU1JxRWxXV05VCldnTW9nTGhuYW9yNGhwc1lHaUxZaVMveEdSa0lpbEx4aWFSWUVoOTRpbWtuaHFvb2dic1djQ25JS0lKMWF6ZElpbklYZ3dyaFNUQm8KWGpLWUViaUlkM3Q0ZDYrV056b29WRHlJZ2JYNFpYc0loSllqaERNRkc5SlVZQUUyT2ttSWVFdklUYWxGVGpBVVRyODBJdVFrVE9kMAppbTBoaGJFalhsVTRRNzZCaFFTaWhRbTFoazN5aGFRQlViUGpQUk5GTzNhbFR6MElnbkpCY1VrRmZDckZQSVBZVW5mb2p2K0hjeVhTClh6V1ZaQzNpWTFIbWh2dEljbkxZTmc4a1F3RDVZeFJFa0hyb1FGVTFWVmRGYTV2VGtHRDRrRFVYVmpBVWlIVTRWTUZSaURtRWlDQzAKVjJYbFZ5QUUvbGgvMVNZZ3FZSE5kU2hWcEZpUG1GaklJWW1YdFdtMVFWcVdwWk9ZeUg4TzFFMUY5MXFNOVZpVlJYOVA2SGV0dURHcwpHSlZqTTVWWlk0SElwUktqU0pVUUFaVmMrUlNwK0pXcktKWjJZVWlUUkphMXh4SzY2RUF0S0J2NWlKWkF0QkxFdUZXNEpXNXdlVmhlCmhXQkcxM2paWVIyUTU0UUs1anhGS0kxSWVFMUsrR0RZaUh1U0o1WnpNM29FSWxDbjF5QzRBNC9UQVh2b1dFL3J1SVVFT1k4YmRaZUYKbEpkOXhuc3UxbnR0YUJuL1NGQVdtWVo0eUhPS3huRjMyWWNMNVh5akdYMlFSSWNWaVlabm80YjRFeVJtOXBxZ0tYNkJTQ2ZzMFg0RQpJVmNuV1ZjcWlWY3MrWE90ZUpPYk5WbjNKMnI1dDM4RkNJbWZaWG1nUTRsQy9zbDRSSWxhbWVpWnRnV2VZeW1lRnVNUlcwbWVMV0dLCjZBa3o2YldlU3VHVjdva3JWaWtUWjBtTDFzYUE4UGtSYXltUmJkbVNHUEdMQjhHY0xwZWZyUFJLeFhobDk2bU0ycVZlQjJvUldMRXkKRUJxaEVqcWhZbUVXVE1HTWl5ZEZ4ZUY0Zm9tUTJoaVludk9UMURTTjFsUUMyS1JOVE5oZ0gxb1F4OUVwNHVTTi9RV083b1lxVndOdQpUZlZQajdrZWtabDZrMGs3V1dPWkFKbU96OE9PMHJPWmxCbFBFV1dQMVVOUjhWT1RFcUdlM0dPalB5WWpHK2w3cnVtUCtWU0NxWm1iCnEzbUlCYmxWTkJVK0NwbG9EQWwrQjFpalV2bGoxVGViVWRJMXRvbWF1QWxWdTZrK3ZTbVJHeWxVVkpaVk9aVWFjaVNsSmpSK3N3bVQKbzJTYy9yZUpaZmRvaUNwQ25CekNWejZuVUlMS2hZVFZFVkNxYXhmS2lFQlphZitBZjV1aGY5bVlZTmJwblpmMm5KVTRsSXVWUnRVWgpRRWhaS1VvNWY0L2lsSjZCb09GbXByNjRHTEZJU20rNUVKUGFFQVE2TlUzVm4rUDFnbXlab1A0WmJKdktwMHl4cTMxcWNpUXhsK09XCm9IWnBYYkphRWJtNlUrMkpFZWRwWEZqcHErbDVaZGpFblQvU29qWW5UTm5ucmRFWU9pUTZZTmwwalUyNG9zWDVYNHJ5SElNU2VkangKZVAzVk9YRDRudGZ3b0YxaG9mN0NKNXBwbWJaVEh3UlNpQUcxUEFRbHBGbW9tWFBxaFQ3YU5oMVdVUWUxcEFteUlLaW5laTFHWmRPNgpFREZERGw5QkRzNEdxM2RJcGNsQlU3dmhZemVYcFhUMVlnTzVzTVYzL3BBblVqNHpsSkRrOXlUd2d5ZE1vYTlhd2EvOUNyTDJzNlpBCkZWWjZ1bG9US1loYktxY0xSYWZqeWloV3BxVk93cEV6R3lCTFpiTkx3YkZjNGJFZmF6N3FZWnlNaW1SZVVKTHBkNXlFeUZRcnlXYkQKbWlKYlM1TkJHbGpDMlNPQktMVkxnYk02dTdQd0psdDhWQnVONGpuTjBhcDB3MFdnT29sWk5LcmNXYXFkYW1xUjlpaVJrZ2p6cHFxWApzcW1hVXJlTGtyRU9RYlZaWWJWWGUwZE5JVGdQR3JkeWE3bkhTaEJVUzdud3NnM3hVQS95MEEzYmNxMlZsSzNDYW5kTmdSZFk0Uy9iCm9BL2xFQTdrOExwb3VoUjR3YkgrRWcvbE1CRGdBTGxXaDd0YnNRN1hvQThDc1E3RFN4RElxeFhFT3hETG14WE5lN3pKNjd6VEs3M00KL3F1ODFYc056L3NQMGF1OTJidTkzUXUrMkh1OTFFdSsxZ3U5eXNzUDJ3QTFGTnErN3Z1K0tOTVUzYnN3OVJBT0E4RU53TXR2SFJjTwo5ckMrMlVBUCtkdEdRQ2NPKy9BUC9GQU9BZXh3YUpmQUw3ZkF5Ym9VOHlzeURFeUMrUHBjRDF6QkJMRTBGVFBCTk5PNTg1a3ZISndUCklmeVpIMXd2RjV3VUVTeVNtK3N4TmdxZ0VpR2dEd0hEcm5QQ0l3T3lGdkdzMXRXZzJFYkRPOHl0NUdTdjViUnVmOWRObDJOdDRCcHkKN1lhVWFjckNhWXBRUldxWi9pYTBPU2crd1pVaThnaHd0MG9VSTN3VEk1ekN4aGl5aW1Nb0VFZTRUdFZJWVpwNzBkckRuSXU3ditsUwpQcHQ4MkdXSXltcW50S21sSk9Nckl3eWJ5bWVjM1FkSjhoTTcvbHAwSm96NnFFNkt3VXpNeG1KSU9EUlN0Mk5FZEFlSmUxV01xdDh4CmYwZTN4TTdTdXRXS0pBbjREQXVJU0R4c0ZGNzhFQTlvTXZCYnlxWjh5bG5STXBZc2ZmYUZ1azczYS9GNWZMRzh5clBzd2JXTUZLRnMKeHpic0VCSDBEdzZReHJkOHB2ZTZiYXRidHJOVHE4R01xNW04eTMxamdzbVl6QmVoeDcya2VmZDFiNEpwcnNjMG90VHNJWTJUeGREYwptSm8waFp5NUlKU25uTS9EYys0MHNab0R6UldSeS96SVVTMkNrY1FucHMvTXpnNGhrajJGZmNhWWg4Um5WZlZzejlTS29HK21mbXJMCnNncjNxTWdNMEhHSms0dzFkZGNzV2FnRk9rT1VGWmlTazU0VHlRcjlwQmtkRkxtODBRbzh6Qjdkd1NBZDB0K3l6Q1JORThoNi90SXEKNGM3VlpVc0pyZEwzREVvTzVjSzlXc3d3SGMxZnZJTUo4ZEkzcmN5d2FxK0c2YUhmeE5NOUhaNElXb1ZPZkdlY2FWSkZyUkVzZlRiRAp4NlVKK2M5TjdkTncySHdycDVwVVJ0UkZEWnVBWmtOWE5KTTJYZFVZeFlHdmhhbEIyWlJKeVVSSlM5YllZdEp1blJJZEhkY3JTTmRjCmJOZDNqZGQxcmRjc01kZDhEWVdzS0tBeS9OZnFCSDk1aDhPZ2dyT292TmlNamNxYVc5Sm12YTZJZHlsSW9BTXpPaTBRbzU0VHlGQ2gKcHlCcFVzaDVzc1dVeWhPNUhGTkVwMHplUEI2aXJjV2pMVlVFcEFMWEFkcFlzdHBEQWJ6ZGsxY3hTUVB6Q014eGw5bWp6V2lLdXlsRgpHWFo1SXR1Nit0dVZheEtEalJPSGt0cm40aE4rdmNMTC9xckRRR0hjQWQzQUl3M0N0RVliQXN0Q0JHS2lrdU1oeC9RWVJjek5XMEZiCm91TWk1SFRFTjVwNTU5ek40aXF2Q01IZTRncXZMdnBMSExvZDlhckVKUHh5aXAyelY0dWtCU1JpK09SUEkzWkZWT3hQUnlTcjZjaXcKQ0NTUEprWXAxTE40OTdqVSsvR3dUUnF4QzZmT0RNS2p2UWQ3Ym52WGtsdTFsVXV5S0ZtQ3FCMm56TWRqR3hLbkwrWmpMYXRnTHh0QQpCQ1d6c3lteUlVNHUvLzNZNjhKTEFrU1NMMGFQUkpVSVhBWmswVG9pWnBZa3gzUGlMNzQ1R1VuSFFSdXpWdlcwUGh1WHBDMFFJejY1CkN6T09nOXh6YXJXRlk3Sm5OcWQ3aE56bGdDeTIzKzArWi9Xb0xqbENaaFdwY1BKWFR5dFhPWjRUY092Yk4vb2RwRlpwL29zTVJaOW0KUlVycHFodEV0MnNVYVhCc1dnR2dBckxWcXFjS0pFaHB1SVdUdUs2MXVKbENUWHhyNVQ4eDRxQXIzVFpJU1Z4ZGxrT1J1UnY4RUZyego2UWtqRko4THU2TmJ1cW9oYkRsaWFhU3V1aXpoeWpQV0UvTnJ1L1FTdTdOYnU3UXRGSnBkRUxxYkw3enJ1NzB1bnp4UkQ4bHJ2TjVyCnZzdU92dVhyN09mTHZlTUw3YzB1N2M5dTdkRWV2dCs3N2N3dXZ0ZXU3ZDJ1dnV6YjJPUmU3dTk3WnZWN3Y4VWV2QkxHdi80THdIaSsKWkFSc3dBZ2M3N0MyN3ZxYmEvZ3V3TWUyN3g5OTcvWithdjZPM1FDLzVjbzI4QlFzOEFGZmFBZ3YwZ1dmM0FwdjhQMis4R2ZXOENKOAo4QlMvWkJZUDJmcWU4VEsyOFhtZGF5ZGo3aVJmRnZJcG84cUVuZklxdi9JczMvSXUvL0l3SC9PaEVSQUFPdz09IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDExNCAyNjMuODg5OCkiPgo8L2ltYWdlPgo8YSB4bGluazpocmVmPSJtbjovL2FjdGlvbl9zY2hlbWEiID4KCTxyZWN0IHg9IjEyMy4yOCIgeT0iMjczLjkzIiBjbGFzcz0ic3QwIiB3aWR0aD0iODguMDUiIGhlaWdodD0iNDEuODQiLz4KPC9hPgo8YSB4bGluazpocmVmPSJtbjovL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEiID4KCTxyZWN0IHg9IjMyNC42OSIgeT0iNDUwLjUyIiBjbGFzcz0ic3QwIiB3aWR0aD0iMTMyLjYyIiBoZWlnaHQ9IjQwLjc1Ii8+CjwvYT4KPGEgeGxpbms6aHJlZj0ibW46Ly9zdXBwb3J0X3Jlc291cmNlX3NjaGVtYSIgPgoJPHJlY3QgeD0iMzI0LjY5IiB5PSI1MjguMzYiIGNsYXNzPSJzdDAiIHdpZHRoPSIxNDguMTYiIGhlaWdodD0iNDAuNzUiLz4KPC9hPgo8L3N2Zz4K' id='__ISO_17301-1_2016' mimetype='image/svg+xml' height='auto' width='auto' alt='Workmap1'/>
|
128
|
-
</figure>
|
129
|
-
<target href="href1.htm"><xref target="ref1">Computer</xref></target><target href="mn://basic_attribute_schema"><link target="http://www.example.com">Phone</link></target><target href="mn://support_resource_schema"><eref type="express" bibitemid="express_action_schema" citeas=""><localityStack><locality type="anchor"><referenceFrom>action_schema.basic</referenceFrom></locality></localityStack>Coffee</eref></target></svgmap>
|
130
|
-
</sections>
|
131
|
-
</standard-document>
|
132
|
-
INPUT
|
133
|
-
Metanorma::Utils.svgmap_rewrite(xmldoc)
|
134
|
-
xmldoc1 = xmldoc.dup
|
135
|
-
xmldoc&.at("//image[@alt = 'Workmap1']")&.remove
|
136
|
-
expect(xmlpp(xmldoc.to_xml)).to be_equivalent_to xmlpp(<<~OUTPUT)
|
137
|
-
<standard-document type="semantic" version="1.8.2">
|
138
|
-
<bibdata type="standard">
|
139
|
-
<title language="en" format="text/plain">Document title</title>
|
140
|
-
<docidentifier/>
|
141
|
-
<docnumber/>
|
142
|
-
<version/>
|
143
|
-
<language>en</language>
|
144
|
-
<script>Latn</script>
|
145
|
-
<status>
|
146
|
-
<stage>published</stage>
|
147
|
-
</status>
|
148
|
-
<copyright>
|
149
|
-
<from>2021</from>
|
150
|
-
</copyright>
|
151
|
-
<ext>
|
152
|
-
<doctype>article</doctype>
|
153
|
-
</ext>
|
154
|
-
</bibdata>
|
155
|
-
<sections><svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
156
|
-
<figure>
|
157
|
-
<image src='action_schemaexpg1.svg'/>
|
158
|
-
</figure>
|
159
|
-
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
160
|
-
<figure>
|
161
|
-
<image src='action_schemaexpg2.svg' alt='Workmap'/>
|
162
|
-
</figure>
|
163
|
-
<target href="mn://support_resource_schema"><eref type="express" bibitemid="express_action_schema" citeas=""><localityStack><locality type="anchor"><referenceFrom>action_schema.basic</referenceFrom></locality></localityStack>Coffee</eref></target></svgmap>
|
164
|
-
<figure>
|
165
|
-
<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'>
|
166
|
-
<a href='#ref1'>
|
167
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
168
|
-
</a>
|
169
|
-
<a href='mn://basic_attribute_schema'>
|
170
|
-
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
171
|
-
</a>
|
172
|
-
<a xlink:href='mn://support_resource_schema'>
|
173
|
-
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
174
|
-
</a>
|
84
|
+
FileUtils.cp("spec/fixtures/action_schemaexpg1.svg",
|
85
|
+
"action_schemaexpg1.svg")
|
86
|
+
FileUtils.cp("spec/fixtures/action_schemaexpg1.svg",
|
87
|
+
"action_schemaexpg2.svg")
|
88
|
+
xmldoc = Nokogiri::XML(<<~INPUT)
|
89
|
+
<standard-document type="semantic" version="1.8.2">
|
90
|
+
<bibdata type="standard">
|
91
|
+
<title language="en" format="text/plain">Document title</title>
|
92
|
+
<docidentifier/>
|
93
|
+
<docnumber/>
|
94
|
+
<version/>
|
95
|
+
<language>en</language>
|
96
|
+
<script>Latn</script>
|
97
|
+
<status>
|
98
|
+
<stage>published</stage>
|
99
|
+
</status>
|
100
|
+
<copyright>
|
101
|
+
<from>2021</from>
|
102
|
+
</copyright>
|
103
|
+
<ext>
|
104
|
+
<doctype>article</doctype>
|
105
|
+
</ext>
|
106
|
+
</bibdata>
|
107
|
+
<sections>
|
108
|
+
<svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
109
|
+
<svgmap id="_4072bdcb-5895-4821-b636-5795b96787cb">
|
110
|
+
<figure><image src="action_schemaexpg1.svg"/></figure>
|
111
|
+
<target href="mn://action_schema"><xref target="ref1">Computer</xref></target><target href="http://www.example.com"><link target="http://www.example.com">Phone</link></target>
|
112
|
+
</svgmap>
|
113
|
+
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
114
|
+
<figure><image src="action_schemaexpg2.svg" alt="Workmap"/></figure>
|
115
|
+
<target href="href1.htm"><xref target="ref1">Computer</xref></target><target href="mn://basic_attribute_schema"><link target="http://www.example.com">Phone</link></target><target href="mn://support_resource_schema"><eref type="express" bibitemid="express_action_schema" citeas=""><localityStack><locality type="anchor"><referenceFrom>action_schema.basic</referenceFrom></locality></localityStack>Coffee</eref></target></svgmap>
|
116
|
+
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
117
|
+
<figure>
|
118
|
+
<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'>
|
119
|
+
<a href="mn://action_schema" >
|
120
|
+
<rect x="123.28" y="273.93" class="st0" width="88.05" height="41.84"/>
|
121
|
+
</a>
|
122
|
+
<a href="mn://basic_attribute_schema" >
|
123
|
+
<rect x="324.69" y="450.52" class="st0" width="132.62" height="40.75"/>
|
124
|
+
</a>
|
125
|
+
<a xlink:href="mn://support_resource_schema" >
|
126
|
+
<rect x="324.69" y="528.36" class="st0" width="148.16" height="40.75"/>
|
127
|
+
</a>
|
175
128
|
</svg>
|
176
|
-
|
177
|
-
<
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
<localityStack>
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
129
|
+
</figure>
|
130
|
+
<target href="mn://action_schema"><xref target="ref1">Computer</xref></target><target href="http://www.example.com"><link target="http://www.example.com">Phone</link></target>
|
131
|
+
</svgmap>
|
132
|
+
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
133
|
+
<figure>
|
134
|
+
|
135
|
+
<image src='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1OTUuMjggODQxLjg5IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OTUuMjggODQxLjg5OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxpbWFnZSBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTsiIHdpZHRoPSIzNjgiIGhlaWdodD0iMzE1IiB4bGluazpocmVmPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhjQUU3QWZmL0FBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm1BQUJtTXdCbQpaZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFEL013RC9aZ0QvCm1RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tWmpObW1UTm0KekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC9tVFAvekRQLwovMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabXpHWm0vMmFaCkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvLzVrQUFKa0EKTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVpBSm1aTTVtWgpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QU04d0Fac3dBCm1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaWnN5Wm1jeVoKek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEFtZjhBelA4QQovLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWnpQK1ovLy9NCkFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vLy9qNCtQTHk4dXZyNitYbDVkL2YzOWpZMk5MUzBzek0Kek1YRnhiKy92N2k0dUxLeXNxeXNyS1dscForZm41bVptWktTa295TWpJV0ZoWDkvZjNsNWVYSnljbXhzYkdabVpsOWZYMWxaV1ZKUwpVa3hNVEVaR1JqOC9Qems1T1RNek15d3NMQ1ltSmg4Zkh4a1pHUk1URXd3TURBWUdCZ0FBQUN3QUFBQUFjQUU3QVFBSS9nQ3ZDUnhJCnNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEaWh4SnNxVEpreWhUcWx6SnNxWExsekJqeXB4SnM2Yk4KbXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0ZXJJZS8reWF0M0t0YXZYcjJERGloM3I5WjdWczJncAovcXU2TnEzYnR3cmJUcFVMdDI1ZHVsSHgydDE3VnU5VHYzd0Q1MlVydURCVndBcXRJU2tUVWpIampZZ05TejRhdWFDenh5S3R5Zm1ICk9XUGx5YUNEZmhhb3VYUGp4UnhIaDE2OVV5Nm5yQkFFT3N1YVFOYm1meENlbFVoMFRmRy9BTHgxSTBLQ08rRW8yck91emY2WFlKWmkKTXB1YlgzdEc0cDhPNVFtTzY5QXU4SFh4Z2FwWi9vdTMyZlpaaTFuUFRLQlg3N2c5RXVDbHIzRVNJSXU0Z0ZuT2dCKzBwaVE1cS9YTwpMYVlZY0xvbFlzMGNCaVl4bkhYVTZaQWVldWM5Q041NEZBSkYxMnozalhMZFFJNU50MXVCSGlZQ0lvZ0h2YmFoaGdSMTZCaDFXcFh4CjRJdnF5ZmJQZlJOV2FHTnJwQ0VCQVgrempCSWJoNmdWbUY5d0grNFdZa0tLWmZoampveXRHS05BTUFLbzJJNzkxWGpqbGVRSjVHTnYKL1kzb1JZY0ZUb2tkZWthU1dKQTFnZ2pVaVlobGZvbGFlM0pjZDFtVUQyN0pvNVZZNWhsVGVkVWh0eHlOcnowUUhYclYzYWZaakxZeApsOXlaeEgzMzV5eXZBZmZhZlN6dXVCbDBuQjJYVzUrS0NoU2VucUNHOUdsUm80WnFLbVNFbmFycVNhVkN4T0pXL3ZxbDFPcXF0RVkwCnEyaTE1Z3JTclJicTZtdHFaQVVyN0xERWl2WHJzUmp4K3BPeXlQN0tiRS9QTnB0cnREaEthKzFEMU9xVTdiV21ib3VUdDl6cUNXNlcKNFpaNzBMZzFvV3R1aGVyTzFPNjY0cjI3Sjd6MHlndVR2ZlJPaHE5TCsrWmJXTDhzQWV3dlh3S3JWUERBZDZXSzhMVUhvOVR3d21rOQpiSkxFRUZ0Rk1Va1hWenlYd2hvZm03RklIM2Y4RjhjaTY4cFBzU2luckxKWC9KVHM4a1QxdkN5enRqUFhUSzdOT04rYjg4Nzg4dXl6ClNqSC9MUFRRUkJkdDlORklsNXRQMGt3L0ZEUkJJVGR0clY1UlM5MHMxUWVaT1ZHSGlhRm0wb3BHV2gyeFFYb055QnRJbDZIOVdOb0cKbWMwUTIySW5oYlZCV25NVW4wZngzVTEzL3RoSXltRmEzRVU5amVlaHZ3VlgzWW5JS1llY2JvRDgwMFdSaDFSWEJ1RzVHZW1iZnNJUgp0NlJCM2xtYWxhQ3dNZTQ0NUllYlBTQWl0OFhHNG9hQUkwVVhKN0VOZVdDQ0JsYjUzNFBQYVg0NmNjMk5ZcWlBN3hub3QzejAyWWRmCnJBV1pKK1did09ObU5uWE5VZWRpbWJ1cGlLQTFTWnpkdWxGeVlVK2tpSnd5WnFLV3JCOVpJSWp1TVhZKzlXeCtueENHQVRZWkpQc2sKY3VJZysyQ0d2ejFsQTBrZm9vUXBRb0tTQ0RLaUl2SEdlMkRhelpEK3g3Nzk2SWhIS3ByZjkrcDN2KytCNlVuNzR4OXA1QkM5NnNWSgpPWk5MMHpYVzVLVUNnbzh4em1oT0FnMmtvekdaOENCMjZrOEUxVWUvTXJFSE5iSjcwd2ZobHNHZENNNVQvZ1NzemdGSVFLbnF4TVkzCmpzb0tmVGF6Uk9hc29rODBrczgvUUJlOVFqbUhpWW1TVHZJNDFaelh4Q1pRV0l4T29tYTBLTzhNOFQ1ZW5JNFJlK2lUdVlXa2JteVUKbGh0QkFzYzRJbXVPZURQZVJWNmxGZVRaOFY5aysyUFNmbmlOcWdtU1ZvWThwS3I4VXNlSGNBMUpYaXNKMkxSWGtrWXE4aU5sQzE1SQplTWdSdG5FeVIzNUV5Q2UzcHNtMy9lMlN0c29hM3pxaU43c05yNVVFWE9WK2hwY1JTM0tJbHFoc0NDSHBRampNSFU1TGlWdE9CeHYzCk9EWkZqak9VUXg5eE1GZUNCVzJ1SUowakhPaHdJN3BpNnVhWU9qRGRlMUFIR3pWYXh6aUpXNTM1ZnFrNDVvenhtYmxFeUJ4aHB4ejQKWEM5N2Q3cmREY21ndTIzeXJrZS8vcHRjOE9Jem4vcVFjWUYwaTlBTjVhZFA1d1VQZW9TYW5nWGY5RTVLY3NoMnptbG9tQ1E2MEVlbQpNeTZCSkUzMi9xZS84VjBEUmYycjRRR0JSOFAyTWRCOW9pVGpETTFud081VU1FVDVheEZDUE1wSGhkWVVwRXk2S0VQYzZML3pZVEJICkF3enBCQzBIVHdrdWNIMG9aUlNWNHRjYkNaN1VwU2E4NEtLNlJpa00rblNxV3dMU0tYVUt0WXoyaG9Oa0VwNmNRcWdta3o3REN5YjAKWHdxWkdxWVdydldGQm9raFUxZjRWTnpoRUQ0NkhPdCtSTGdtell3MVREdFU2SFRjdEZXdUNtU1hRZnpIR1FsVkhDVCs2RStKYW1JQwpucWpFTWs1eFVDd3lWQmc3dFVXdGRMRTRZRVNVR0c4VFJUTVNFVkxGcVJSQ0hBc2xJeDZxaUVray9xTVUwV25ZaExUTGxyWHQxa2h3Cm0xdFFxY3MzVWF3SUg3TVNTcE1NdDNDOU5WaHlhNGJZNWNvTWo4N3RHSFJyS2N1SVdOU0JoYVd1UTZQTEtxODZaSlFCTE81R3dNdksKVW5KWFZ0NWxDQ3hWdVYyTnJKZU8xVDB2U1pvckk2MWNaM1dVVysxdGZQbk5qd1p6Y1NVZ0p1bVFtVHBsSWpkejMrSGNQMEhiemN6aApsYi9saysrdU9MUlJPelgwdWdSaHArd3VERkc3MHRPZ0FWaFE3L0pwdXVIMTAzZ0FQUk10U3dFaEFDRVZwZzJWTU1nNGhLQ1BxaTU4CkdOYm9CRHZhWDV5eTFLVHBxMnRMRy9sVzdjSHZ4ZWZUbjR3bjNEOHJUZ2VET1ZaalNRRUlwS0JDU2FTOUtXcEpqenJrK0g2MURDeHUKNmxLUi9LR2ZMaG1USElyQy9sUy9PdFlvYTZhRFlnVWhtc3BhUXZxUkFJVXFsS0NZM3RyQWxENUdybTFGSVh3Q2UyYU0wSmR3V1ZIZgpHbWVMRUJZdFZyV3NMV2NUSlV0WjJVcVJpb3pWckdnNTJ6WTZMSXFQQ0hBQ0dVMExXOW9XT3BVRjZSNHIra2VEbVBEMjFCcnNLdmtHCk1vcnNudVRWc0NhVlZ4RWQ0YzdDcXIwWEFlNmFKM0pjOGVZYXZhaytkcjdvcTJ5RUpiTFpicUdXUlhHOU4yQkQyeW1qSWkrampMMFEKdDEzN01CQjViNk85ekJCcWY5c256RjVPVnU1YnV0U3g5NnZFYmUrazhNUGcxRFp6bjVvVTU3bVh0ZXNLSC9IQ2tRd3ZielFzM3J1eApXSGt2NnJLQllyeHZhTzI2eGx1cWFaVER0RkVpUjgvSVpDUXorR1RhY0o3TU1iUEpvZkxFL2o5MDV5UE5Fc3pKbVJLUE5FN2xqbnQ4CjEycE9VV0JITGp3NHY0OHpXanBpbDZwMzF6aHIyK1V4T2ZSdEV1M05INlZSeFlweTlHbFg2K25XYWlYVW84N0tveGNOOUY2Ulp0VlEKYW5YVmRTVVhuTlo2NjF5L3BYMFZVbXhnbHgzczBVYTdyNWl0OWxWTnQrMmhldnRRekExM2o4aGRsTFptaWJmcnZwSzd0dzJYTmFFNwozemVTN3EydzJ6cjUzWnN6dTlQTkZHcUhPOTdzTmVQdk01c3ZOdmplRHpaY2Z3ZVBNUXJ6eHNLMHk3R3doNFJ3RS9qVFFTUndFSHNZCnJ1TEhIRnlnWVkwcTZ6a3ZLaHAvL3NZdG9ybkpqNndlT2luWklFVWV5SkVWWGxQYWo0UXVJSC95VkhYZjFqSDMvdmtBNnJiZndxenkKblp1MXpNTTJQcE43L2hQelc3WTU0TEg4SHFDaGp6dEMrem5uWEFwcmgyUm5mdTBiZXRkRHg3bHFHWTEwU25NSzZwZ3FnNmFLbnBpbQplek1yVUlkR1VuZGE4K2QreWJKcldEY2RXbWVBb09GR1hwZDNEQWdYYnNSclpNY3A4YVlSWnhlQjg1SnNHbWdqYk5lQlYvSnNJRmd0ClRkVVpnb2RkSnppQzZRSkozR1laYTNOS2UvYytFS2lDQVVOMjVDWnpUUUo0NFNkOU0waURJMEZmNkxOZndCWk50ekZObFNOZ3hsUTYKK0JaaTdxWnZQdWd3R2VVMkJOZGVwVGRYemJNakIwVUNWU1JZZ2RZYnMvZUVuY2VCTUZWeDVBWS9LNVZXWVdNL1VSVWt2d2VHWVNocgpIRlZTRHJSVVo0aGw4dkZTWGRoeWJsZ1NQT1ZCTmhkWE9tZUZjb2hrQTlWT0xKU0QvbnExaC9NVmhaZ2xSRXZuYTRxU1JxRWxXV05VCldnTW9nTGhuYW9yNGhwc1lHaUxZaVMveEdSa0lpbEx4aWFSWUVoOTRpbWtuaHFvb2dic1djQ25JS0lKMWF6ZElpbklYZ3dyaFNUQm8KWGpLWUViaUlkM3Q0ZDYrV056b29WRHlJZ2JYNFpYc0loSllqaERNRkc5SlVZQUUyT2ttSWVFdklUYWxGVGpBVVRyODBJdVFrVE9kMAppbTBoaGJFalhsVTRRNzZCaFFTaWhRbTFoazN5aGFRQlViUGpQUk5GTzNhbFR6MElnbkpCY1VrRmZDckZQSVBZVW5mb2p2K0hjeVhTClh6V1ZaQzNpWTFIbWh2dEljbkxZTmc4a1F3RDVZeFJFa0hyb1FGVTFWVmRGYTV2VGtHRDRrRFVYVmpBVWlIVTRWTUZSaURtRWlDQzAKVjJYbFZ5QUUvbGgvMVNZZ3FZSE5kU2hWcEZpUG1GaklJWW1YdFdtMVFWcVdwWk9ZeUg4TzFFMUY5MXFNOVZpVlJYOVA2SGV0dURHcwpHSlZqTTVWWlk0SElwUktqU0pVUUFaVmMrUlNwK0pXcktKWjJZVWlUUkphMXh4SzY2RUF0S0J2NWlKWkF0QkxFdUZXNEpXNXdlVmhlCmhXQkcxM2paWVIyUTU0UUs1anhGS0kxSWVFMUsrR0RZaUh1U0o1WnpNM29FSWxDbjF5QzRBNC9UQVh2b1dFL3J1SVVFT1k4YmRaZUYKbEpkOXhuc3UxbnR0YUJuL1NGQVdtWVo0eUhPS3huRjMyWWNMNVh5akdYMlFSSWNWaVlabm80YjRFeVJtOXBxZ0tYNkJTQ2ZzMFg0RQpJVmNuV1ZjcWlWY3MrWE90ZUpPYk5WbjNKMnI1dDM4RkNJbWZaWG1nUTRsQy9zbDRSSWxhbWVpWnRnV2VZeW1lRnVNUlcwbWVMV0dLCjZBa3o2YldlU3VHVjdva3JWaWtUWjBtTDFzYUE4UGtSYXltUmJkbVNHUEdMQjhHY0xwZWZyUFJLeFhobDk2bU0ycVZlQjJvUldMRXkKRUJxaEVqcWhZbUVXVE1HTWl5ZEZ4ZUY0Zm9tUTJoaVludk9UMURTTjFsUUMyS1JOVE5oZ0gxb1F4OUVwNHVTTi9RV083b1lxVndOdQpUZlZQajdrZWtabDZrMGs3V1dPWkFKbU96OE9PMHJPWmxCbFBFV1dQMVVOUjhWT1RFcUdlM0dPalB5WWpHK2w3cnVtUCtWU0NxWm1iCnEzbUlCYmxWTkJVK0NwbG9EQWwrQjFpalV2bGoxVGViVWRJMXRvbWF1QWxWdTZrK3ZTbVJHeWxVVkpaVk9aVWFjaVNsSmpSK3N3bVQKbzJTYy9yZUpaZmRvaUNwQ25CekNWejZuVUlMS2hZVFZFVkNxYXhmS2lFQlphZitBZjV1aGY5bVlZTmJwblpmMm5KVTRsSXVWUnRVWgpRRWhaS1VvNWY0L2lsSjZCb09GbXByNjRHTEZJU20rNUVKUGFFQVE2TlUzVm4rUDFnbXlab1A0WmJKdktwMHl4cTMxcWNpUXhsK09XCm9IWnBYYkphRWJtNlUrMkpFZWRwWEZqcHErbDVaZGpFblQvU29qWW5UTm5ucmRFWU9pUTZZTmwwalUyNG9zWDVYNHJ5SElNU2VkangKZVAzVk9YRDRudGZ3b0YxaG9mN0NKNXBwbWJaVEh3UlNpQUcxUEFRbHBGbW9tWFBxaFQ3YU5oMVdVUWUxcEFteUlLaW5laTFHWmRPNgpFREZERGw5QkRzNEdxM2RJcGNsQlU3dmhZemVYcFhUMVlnTzVzTVYzL3BBblVqNHpsSkRrOXlUd2d5ZE1vYTlhd2EvOUNyTDJzNlpBCkZWWjZ1bG9US1loYktxY0xSYWZqeWloV3BxVk93cEV6R3lCTFpiTkx3YkZjNGJFZmF6N3FZWnlNaW1SZVVKTHBkNXlFeUZRcnlXYkQKbWlKYlM1TkJHbGpDMlNPQktMVkxnYk02dTdQd0psdDhWQnVONGpuTjBhcDB3MFdnT29sWk5LcmNXYXFkYW1xUjlpaVJrZ2p6cHFxWApzcW1hVXJlTGtyRU9RYlZaWWJWWGUwZE5JVGdQR3JkeWE3bkhTaEJVUzdud3NnM3hVQS95MEEzYmNxMlZsSzNDYW5kTmdSZFk0Uy9iCm9BL2xFQTdrOExwb3VoUjR3YkgrRWcvbE1CRGdBTGxXaDd0YnNRN1hvQThDc1E3RFN4RElxeFhFT3hETG14WE5lN3pKNjd6VEs3M00KL3F1ODFYc056L3NQMGF1OTJidTkzUXUrMkh1OTFFdSsxZ3U5eXNzUDJ3QTFGTnErN3Z1K0tOTVUzYnN3OVJBT0E4RU53TXR2SFJjTwo5ckMrMlVBUCtkdEdRQ2NPKy9BUC9GQU9BZXh3YUpmQUw3ZkF5Ym9VOHlzeURFeUMrUHBjRDF6QkJMRTBGVFBCTk5PNTg1a3ZISndUCklmeVpIMXd2RjV3VUVTeVNtK3N4TmdxZ0VpR2dEd0hEcm5QQ0l3T3lGdkdzMXRXZzJFYkRPOHl0NUdTdjViUnVmOWRObDJOdDRCcHkKN1lhVWFjckNhWXBRUldxWi9pYTBPU2crd1pVaThnaHd0MG9VSTN3VEk1ekN4aGl5aW1Nb0VFZTRUdFZJWVpwNzBkckRuSXU3ditsUwpQcHQ4MkdXSXltcW50S21sSk9Nckl3eWJ5bWVjM1FkSjhoTTcvbHAwSm96NnFFNkt3VXpNeG1KSU9EUlN0Mk5FZEFlSmUxV01xdDh4CmYwZTN4TTdTdXRXS0pBbjREQXVJU0R4c0ZGNzhFQTlvTXZCYnlxWjh5bG5STXBZc2ZmYUZ1azczYS9GNWZMRzh5clBzd2JXTUZLRnMKeHpic0VCSDBEdzZReHJkOHB2ZTZiYXRidHJOVHE4R01xNW04eTMxamdzbVl6QmVoeDcya2VmZDFiNEpwcnNjMG90VHNJWTJUeGREYwptSm8waFp5NUlKU25uTS9EYys0MHNab0R6UldSeS96SVVTMkNrY1FucHMvTXpnNGhrajJGZmNhWWg4Um5WZlZzejlTS29HK21mbXJMCnNncjNxTWdNMEhHSms0dzFkZGNzV2FnRk9rT1VGWmlTazU0VHlRcjlwQmtkRkxtODBRbzh6Qjdkd1NBZDB0K3l6Q1JORThoNi90SXEKNGM3VlpVc0pyZEwzREVvTzVjSzlXc3d3SGMxZnZJTUo4ZEkzcmN5d2FxK0c2YUhmeE5NOUhaNElXb1ZPZkdlY2FWSkZyUkVzZlRiRAp4NlVKK2M5TjdkTncySHdycDVwVVJ0UkZEWnVBWmtOWE5KTTJYZFVZeFlHdmhhbEIyWlJKeVVSSlM5YllZdEp1blJJZEhkY3JTTmRjCmJOZDNqZGQxcmRjc01kZDhEWVdzS0tBeS9OZnFCSDk1aDhPZ2dyT292TmlNamNxYVc5Sm12YTZJZHlsSW9BTXpPaTBRbzU0VHlGQ2gKcHlCcFVzaDVzc1dVeWhPNUhGTkVwMHplUEI2aXJjV2pMVlVFcEFMWEFkcFlzdHBEQWJ6ZGsxY3hTUVB6Q014eGw5bWp6V2lLdXlsRgpHWFo1SXR1Nit0dVZheEtEalJPSGt0cm40aE4rdmNMTC9xckRRR0hjQWQzQUl3M0N0RVliQXN0Q0JHS2lrdU1oeC9RWVJjek5XMEZiCm91TWk1SFRFTjVwNTU5ek40aXF2Q01IZTRncXZMdnBMSExvZDlhckVKUHh5aXAyelY0dWtCU1JpK09SUEkzWkZWT3hQUnlTcjZjaXcKQ0NTUEprWXAxTE40OTdqVSsvR3dUUnF4QzZmT0RNS2p2UWQ3Ym52WGtsdTFsVXV5S0ZtQ3FCMm56TWRqR3hLbkwrWmpMYXRnTHh0QQpCQ1d6c3lteUlVNHUvLzNZNjhKTEFrU1NMMGFQUkpVSVhBWmswVG9pWnBZa3gzUGlMNzQ1R1VuSFFSdXpWdlcwUGh1WHBDMFFJejY1CkN6T09nOXh6YXJXRlk3Sm5OcWQ3aE56bGdDeTIzKzArWi9Xb0xqbENaaFdwY1BKWFR5dFhPWjRUY092Yk4vb2RwRlpwL29zTVJaOW0KUlVycHFodEV0MnNVYVhCc1dnR2dBckxWcXFjS0pFaHB1SVdUdUs2MXVKbENUWHhyNVQ4eDRxQXIzVFpJU1Z4ZGxrT1J1UnY4RUZyego2UWtqRko4THU2TmJ1cW9oYkRsaWFhU3V1aXpoeWpQV0UvTnJ1L1FTdTdOYnU3UXRGSnBkRUxxYkw3enJ1NzB1bnp4UkQ4bHJ2TjVyCnZzdU92dVhyN09mTHZlTUw3YzB1N2M5dTdkRWV2dCs3N2N3dXZ0ZXU3ZDJ1dnV6YjJPUmU3dTk3WnZWN3Y4VWV2QkxHdi80THdIaSsKWkFSc3dBZ2M3N0MyN3ZxYmEvZ3V3TWUyN3g5OTcvWithdjZPM1FDLzVjbzI4QlFzOEFGZmFBZ3YwZ1dmM0FwdjhQMis4R2ZXOENKOAo4QlMvWkJZUDJmcWU4VEsyOFhtZGF5ZGo3aVJmRnZJcG84cUVuZklxdi9JczMvSXUvL0l3SC9PaEVSQUFPdz09IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDExNCAyNjMuODg5OCkiPgo8L2ltYWdlPgo8YSB4bGluazpocmVmPSJtbjovL2FjdGlvbl9zY2hlbWEiID4KCTxyZWN0IHg9IjEyMy4yOCIgeT0iMjczLjkzIiBjbGFzcz0ic3QwIiB3aWR0aD0iODguMDUiIGhlaWdodD0iNDEuODQiLz4KPC9hPgo8YSB4bGluazpocmVmPSJtbjovL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEiID4KCTxyZWN0IHg9IjMyNC42OSIgeT0iNDUwLjUyIiBjbGFzcz0ic3QwIiB3aWR0aD0iMTMyLjYyIiBoZWlnaHQ9IjQwLjc1Ii8+CjwvYT4KPGEgeGxpbms6aHJlZj0ibW46Ly9zdXBwb3J0X3Jlc291cmNlX3NjaGVtYSIgPgoJPHJlY3QgeD0iMzI0LjY5IiB5PSI1MjguMzYiIGNsYXNzPSJzdDAiIHdpZHRoPSIxNDguMTYiIGhlaWdodD0iNDAuNzUiLz4KPC9hPgo8L3N2Zz4K' id='__ISO_17301-1_2016' mimetype='image/svg+xml' height='auto' width='auto' alt='Workmap1'/>
|
136
|
+
</figure>
|
137
|
+
<target href="href1.htm"><xref target="ref1">Computer</xref></target><target href="mn://basic_attribute_schema"><link target="http://www.example.com">Phone</link></target><target href="mn://support_resource_schema"><eref type="express" bibitemid="express_action_schema" citeas=""><localityStack><locality type="anchor"><referenceFrom>action_schema.basic</referenceFrom></locality></localityStack>Coffee</eref></target></svgmap>
|
138
|
+
</sections>
|
139
|
+
</standard-document>
|
140
|
+
INPUT
|
141
|
+
Metanorma::Utils.svgmap_rewrite(xmldoc)
|
142
|
+
expect(xmlpp(xmldoc.to_xml.gsub(%r{<image.*?</image>}m, "<image/>")
|
143
|
+
.gsub(%r{<style.*?</style>}m, "<style/>")))
|
144
|
+
.to be_equivalent_to xmlpp(<<~OUTPUT)
|
145
|
+
<?xml version='1.0'?>
|
146
|
+
<standard-document type='semantic' version='1.8.2'>
|
147
|
+
<bibdata type='standard'>
|
148
|
+
<title language='en' format='text/plain'>Document title</title>
|
149
|
+
<docidentifier/>
|
150
|
+
<docnumber/>
|
151
|
+
<version/>
|
152
|
+
<language>en</language>
|
153
|
+
<script>Latn</script>
|
154
|
+
<status>
|
155
|
+
<stage>published</stage>
|
156
|
+
</status>
|
157
|
+
<copyright>
|
158
|
+
<from>2021</from>
|
159
|
+
</copyright>
|
160
|
+
<ext>
|
161
|
+
<doctype>article</doctype>
|
162
|
+
</ext>
|
163
|
+
</bibdata>
|
164
|
+
<sections>
|
165
|
+
<svgmap id='_d5b5049a-dd53-4ea0-bc6f-e8773bd59052'>
|
166
|
+
<target href='mn://action_schema'>
|
167
|
+
<xref target='ref1'>Computer</xref>
|
168
|
+
</target>
|
169
|
+
</svgmap>
|
170
|
+
<figure>
|
171
|
+
<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'>
|
172
|
+
<style/>
|
173
|
+
<image/>
|
174
|
+
<a xlink:href='#ref1' xlink:dummy='Layer_1_000000001'>
|
175
|
+
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
176
|
+
</a>
|
177
|
+
<a xlink:href='mn://basic_attribute_schema'>
|
178
|
+
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
179
|
+
</a>
|
180
|
+
<a xlink:href='mn://support_resource_schema'>
|
181
|
+
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
182
|
+
</a>
|
183
|
+
</svg>
|
184
|
+
</figure>
|
185
|
+
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
186
|
+
<figure>
|
187
|
+
<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'>
|
188
|
+
<style/>
|
189
|
+
<image/>
|
190
|
+
<a xlink:href='mn://action_schema' xlink:dummy='Layer_1_000000002'>
|
191
|
+
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
192
|
+
</a>
|
193
|
+
<a xlink:href='http://www.example.com'>
|
194
|
+
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
195
|
+
</a>
|
196
|
+
<a xlink:href='mn://support_resource_schema'>
|
197
|
+
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
198
|
+
</a>
|
199
|
+
</svg>
|
200
|
+
</figure>
|
201
|
+
<target href='mn://support_resource_schema'>
|
202
|
+
<eref type='express' bibitemid='express_action_schema' citeas=''>
|
203
|
+
<localityStack>
|
204
|
+
<locality type='anchor'>
|
205
|
+
<referenceFrom>action_schema.basic</referenceFrom>
|
206
|
+
</locality>
|
207
|
+
</localityStack>
|
208
|
+
Coffee
|
209
|
+
</eref>
|
210
|
+
</target>
|
211
|
+
</svgmap>
|
212
|
+
<figure>
|
213
|
+
<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'>
|
214
|
+
<a href='#ref1'>
|
215
|
+
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
216
|
+
</a>
|
217
|
+
<a href='mn://basic_attribute_schema'>
|
218
|
+
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
219
|
+
</a>
|
220
|
+
<a xlink:href='mn://support_resource_schema'>
|
221
|
+
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
222
|
+
</a>
|
223
|
+
</svg>
|
224
|
+
</figure>
|
225
|
+
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
226
|
+
<figure>
|
227
|
+
<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'>
|
228
|
+
<style/>
|
229
|
+
<image/>
|
230
|
+
<a xlink:href='mn://action_schema'>
|
231
|
+
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
232
|
+
</a>
|
233
|
+
<a xlink:href='http://www.example.com'>
|
234
|
+
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
235
|
+
</a>
|
236
|
+
<a xlink:href='mn://support_resource_schema'>
|
237
|
+
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
238
|
+
</a>
|
239
|
+
</svg>
|
240
|
+
</figure>
|
241
|
+
<target href='mn://support_resource_schema'>
|
242
|
+
<eref type='express' bibitemid='express_action_schema' citeas=''>
|
243
|
+
<localityStack>
|
244
|
+
<locality type='anchor'>
|
245
|
+
<referenceFrom>action_schema.basic</referenceFrom>
|
246
|
+
</locality>
|
247
|
+
</localityStack>
|
248
|
+
Coffee
|
249
|
+
</eref>
|
250
|
+
</target>
|
251
|
+
</svgmap>
|
252
|
+
</sections>
|
253
|
+
</standard-document>
|
254
|
+
OUTPUT
|
243
255
|
end
|
244
256
|
|
245
257
|
it "rewrites SVGs with namespaces" do
|
246
|
-
FileUtils.cp "spec/fixtures/action_schemaexpg1.svg",
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
<
|
252
|
-
<
|
253
|
-
<
|
254
|
-
<
|
255
|
-
<
|
256
|
-
<
|
257
|
-
<
|
258
|
-
<
|
259
|
-
|
260
|
-
<
|
261
|
-
|
262
|
-
|
263
|
-
<
|
264
|
-
|
265
|
-
|
266
|
-
</
|
267
|
-
|
268
|
-
|
269
|
-
<
|
270
|
-
<
|
271
|
-
<
|
272
|
-
|
273
|
-
<
|
274
|
-
|
275
|
-
<
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
</
|
302
|
-
<svgmap id=
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
258
|
+
FileUtils.cp "spec/fixtures/action_schemaexpg1.svg",
|
259
|
+
"action_schemaexpg1.svg"
|
260
|
+
FileUtils.cp "spec/fixtures/action_schemaexpg1.svg",
|
261
|
+
"action_schemaexpg2.svg"
|
262
|
+
xmldoc = Nokogiri::XML(<<~INPUT)
|
263
|
+
<standard-document type="semantic" version="1.8.2" xmlns="http://www.example.com">
|
264
|
+
<bibdata type="standard">
|
265
|
+
<title language="en" format="text/plain">Document title</title>
|
266
|
+
<docidentifier/>
|
267
|
+
<docnumber/>
|
268
|
+
<version/>
|
269
|
+
<language>en</language>
|
270
|
+
<script>Latn</script>
|
271
|
+
<status>
|
272
|
+
<stage>published</stage>
|
273
|
+
</status>
|
274
|
+
<copyright>
|
275
|
+
<from>2021</from>
|
276
|
+
</copyright>
|
277
|
+
<ext>
|
278
|
+
<doctype>article</doctype>
|
279
|
+
</ext>
|
280
|
+
</bibdata>
|
281
|
+
<sections>
|
282
|
+
<svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
283
|
+
<svgmap id="_4072bdcb-5895-4821-b636-5795b96787cb">
|
284
|
+
<figure><image src="action_schemaexpg1.svg"/></figure>
|
285
|
+
<target href="mn://action_schema"><xref target="ref1">Computer</xref></target><target href="http://www.example.com"><link target="http://www.example.com">Phone</link></target>
|
286
|
+
</svgmap>
|
287
|
+
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
288
|
+
<figure><image src="action_schemaexpg2.svg" alt="Workmap"/></figure>
|
289
|
+
<target href="href1.htm"><xref target="ref1">Computer</xref></target><target href="mn://basic_attribute_schema"><link target="http://www.example.com">Phone</link></target><target href="mn://support_resource_schema"><eref type="express" bibitemid="express_action_schema" citeas=""><localityStack><locality type="anchor"><referenceFrom>action_schema.basic</referenceFrom></locality></localityStack>Coffee</eref></target></svgmap></sections>
|
290
|
+
</standard-document>
|
291
|
+
INPUT
|
292
|
+
Metanorma::Utils.svgmap_rewrite(xmldoc)
|
293
|
+
expect(xmlpp(xmldoc.to_xml.gsub(%r{<image.*?</image>}m, "<image/>")))
|
294
|
+
.to be_equivalent_to xmlpp(<<~OUTPUT)
|
295
|
+
<?xml version='1.0'?>
|
296
|
+
<standard-document type="semantic" version="1.8.2" xmlns="http://www.example.com">
|
297
|
+
<bibdata type="standard">
|
298
|
+
<title language="en" format="text/plain">Document title</title>
|
299
|
+
<docidentifier/>
|
300
|
+
<docnumber/>
|
301
|
+
<version/>
|
302
|
+
<language>en</language>
|
303
|
+
<script>Latn</script>
|
304
|
+
<status>
|
305
|
+
<stage>published</stage>
|
306
|
+
</status>
|
307
|
+
<copyright>
|
308
|
+
<from>2021</from>
|
309
|
+
</copyright>
|
310
|
+
<ext>
|
311
|
+
<doctype>article</doctype>
|
312
|
+
</ext>
|
313
|
+
</bibdata>
|
314
|
+
<sections><svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
315
|
+
<figure>
|
316
|
+
<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'>
|
317
|
+
<style type='text/css'>
|
318
|
+
#Layer_1_000000001 { fill:none } svg[id='Layer_1_000000001'] {
|
319
|
+
fill:none } .st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
320
|
+
</style>
|
321
|
+
<image/>
|
322
|
+
<a xlink:href='#ref1' xlink:dummy='Layer_1_000000001'>
|
323
|
+
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
324
|
+
</a>
|
325
|
+
<a xlink:href='mn://basic_attribute_schema'>
|
326
|
+
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
327
|
+
</a>
|
328
|
+
<a xlink:href='mn://support_resource_schema'>
|
329
|
+
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
330
|
+
</a>
|
331
|
+
</svg>
|
332
|
+
</figure>
|
333
|
+
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
334
|
+
<figure>
|
335
|
+
<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'>
|
336
|
+
<style type='text/css'>
|
337
|
+
#Layer_1_000000002 { fill:none } svg[id='Layer_1_000000002'] {
|
338
|
+
fill:none } .st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
339
|
+
</style>
|
340
|
+
<image/>
|
341
|
+
<a xlink:href='mn://action_schema' xlink:dummy='Layer_1_000000002'>
|
342
|
+
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
343
|
+
</a>
|
344
|
+
<a xlink:href='http://www.example.com'>
|
345
|
+
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
346
|
+
</a>
|
347
|
+
<a xlink:href='mn://support_resource_schema'>
|
348
|
+
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
349
|
+
</a>
|
350
|
+
</svg>
|
351
|
+
</figure>
|
352
|
+
<target href="mn://support_resource_schema"><eref type="express" bibitemid="express_action_schema" citeas=""><localityStack><locality type="anchor"><referenceFrom>action_schema.basic</referenceFrom></locality></localityStack>Coffee</eref></target></svgmap></sections>
|
353
|
+
</standard-document>
|
354
|
+
OUTPUT
|
309
355
|
end
|
310
356
|
|
311
357
|
# not testing Asciidoctor log extraction here
|
312
358
|
it "generates log" do
|
313
359
|
xml = Nokogiri::XML(<<~INPUT)
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
360
|
+
<xml>
|
361
|
+
<a>
|
362
|
+
<b>
|
363
|
+
c
|
364
|
+
</b></a></xml>
|
319
365
|
INPUT
|
320
366
|
FileUtils.rm_f("log.txt")
|
321
367
|
log = Metanorma::Utils::Log.new
|
@@ -326,34 +372,34 @@ OUTPUT
|
|
326
372
|
expect(File.exist?("log.txt")).to be true
|
327
373
|
file = File.read("log.txt", encoding: "utf-8")
|
328
374
|
expect(file).to eq <<~OUTPUT
|
329
|
-
log.txt errors
|
375
|
+
log.txt errors
|
330
376
|
|
331
377
|
|
332
|
-
== Category 1
|
378
|
+
== Category 1
|
333
379
|
|
334
|
-
(): Message 1
|
335
|
-
(node): Message 2
|
380
|
+
(): Message 1
|
381
|
+
(node): Message 2
|
336
382
|
|
337
383
|
|
338
|
-
== Category 2
|
384
|
+
== Category 2
|
339
385
|
|
340
|
-
(XML Line 000003): Message 3
|
341
|
-
|
342
|
-
|
343
|
-
|
386
|
+
(XML Line 000003): Message 3
|
387
|
+
<b>
|
388
|
+
c
|
389
|
+
</b>
|
344
390
|
OUTPUT
|
345
391
|
end
|
346
392
|
|
347
|
-
|
348
|
-
|
349
|
-
path = File.join(localdir, uri)
|
350
|
-
types = MIME::Types.type_for(path)
|
351
|
-
type = types ? types.first.to_s : 'text/plain; charset="utf-8"'
|
352
|
-
bin = File.open(path, 'rb', &:read)
|
353
|
-
data = Base64.strict_encode64(bin)
|
354
|
-
"data:#{type};base64,#{data}"
|
355
|
-
end
|
393
|
+
def datauri(uri, localdir = "")
|
394
|
+
return uri if /^data:/.match?(uri)
|
356
395
|
|
396
|
+
path = File.join(localdir, uri)
|
397
|
+
types = MIME::Types.type_for(path)
|
398
|
+
type = types ? types.first.to_s : 'text/plain; charset="utf-8"'
|
399
|
+
bin = File.open(path, "rb", &:read)
|
400
|
+
data = Base64.strict_encode64(bin)
|
401
|
+
"data:#{type};base64,#{data}"
|
402
|
+
end
|
357
403
|
|
358
404
|
it "generates data uris" do
|
359
405
|
expect(Metanorma::Utils.datauri("data:xyz")).to eq "data:xyz"
|