metanorma-utils 1.4.5 → 1.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/utils/version.rb +1 -1
- data/lib/utils/xml.rb +3 -1
- data/metanorma-utils.gemspec +5 -2
- metadata +4 -15
- data/.github/workflows/rake.yml +0 -15
- data/.github/workflows/release.yml +0 -27
- data/Rakefile +0 -6
- data/bin/rspec +0 -17
- data/spec/fixtures/action_schemaexpg1.svg +0 -124
- data/spec/fixtures/rice_image1.png +0 -0
- data/spec/hash_transform_keys_spec.rb +0 -64
- data/spec/img_spec.rb +0 -349
- data/spec/spec_helper.rb +0 -42
- data/spec/utils_spec.rb +0 -231
- data/spec/xml_spec.rb +0 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cb00a5f8e7ff86f9d16128e0c8cb1587c24897b17377ef72238ef53b26a6679
|
4
|
+
data.tar.gz: 52620169a6fc3515cd8be7ecc7f6926759382d05f57faa5dd40acf29d8f8c649
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94acee04cfb8fde0caa49de7d0c88e18e6796af8871f0ba3b374b07c1172f86290abf641590fa5c7c3f13c52b3d492c907444142c439b322df8c914cc8a81527
|
7
|
+
data.tar.gz: 4c613bf6368276e0472e96f1fd44c55f87e42e1935aaa24482c39ae68cca6861456929ad18afbebc0f3ddedd271d83ed6511cd96df0d3608866cf0e9d8827383
|
data/lib/utils/version.rb
CHANGED
data/lib/utils/xml.rb
CHANGED
@@ -58,7 +58,9 @@ module Metanorma
|
|
58
58
|
doc = ::Nokogiri::XML.parse(NOKOHEAD)
|
59
59
|
fragment = doc.fragment("")
|
60
60
|
::Nokogiri::XML::Builder.with fragment, &block
|
61
|
-
fragment.to_xml(encoding: "US-ASCII"
|
61
|
+
fragment.to_xml(encoding: "US-ASCII", indent: 0,
|
62
|
+
save_with: Nokogiri::XML::Node::SaveOptions::AS_XML)
|
63
|
+
.lines.map do |l|
|
62
64
|
l.gsub(/\s*\n/, "")
|
63
65
|
end
|
64
66
|
end
|
data/metanorma-utils.gemspec
CHANGED
@@ -20,9 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.bindir = "bin"
|
22
22
|
spec.require_paths = ["lib"]
|
23
|
-
spec.files = `git ls-files`.split("\
|
23
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
24
|
+
f.match(%r{^(test|spec|features|bin|.github)/}) \
|
25
|
+
|| f.match(%r{Rakefile|bin/rspec})
|
26
|
+
end
|
24
27
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
25
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
28
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
26
29
|
|
27
30
|
spec.add_dependency "asciidoctor", ">= 2"
|
28
31
|
spec.add_dependency "concurrent-ruby"
|
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.4.
|
4
|
+
version: 1.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -299,16 +299,12 @@ executables: []
|
|
299
299
|
extensions: []
|
300
300
|
extra_rdoc_files: []
|
301
301
|
files:
|
302
|
-
- ".github/workflows/rake.yml"
|
303
|
-
- ".github/workflows/release.yml"
|
304
302
|
- ".gitignore"
|
305
303
|
- ".hound.yml"
|
306
304
|
- ".rubocop.yml"
|
307
305
|
- Gemfile
|
308
306
|
- LICENSE
|
309
307
|
- README.adoc
|
310
|
-
- Rakefile
|
311
|
-
- bin/rspec
|
312
308
|
- lib/metanorma-utils.rb
|
313
309
|
- lib/utils/hash_transform_keys.rb
|
314
310
|
- lib/utils/image.rb
|
@@ -317,13 +313,6 @@ files:
|
|
317
313
|
- lib/utils/version.rb
|
318
314
|
- lib/utils/xml.rb
|
319
315
|
- metanorma-utils.gemspec
|
320
|
-
- spec/fixtures/action_schemaexpg1.svg
|
321
|
-
- spec/fixtures/rice_image1.png
|
322
|
-
- spec/hash_transform_keys_spec.rb
|
323
|
-
- spec/img_spec.rb
|
324
|
-
- spec/spec_helper.rb
|
325
|
-
- spec/utils_spec.rb
|
326
|
-
- spec/xml_spec.rb
|
327
316
|
homepage: https://github.com/metanorma/metanorma-utils
|
328
317
|
licenses:
|
329
318
|
- BSD-2-Clause
|
@@ -336,14 +325,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
336
325
|
requirements:
|
337
326
|
- - ">="
|
338
327
|
- !ruby/object:Gem::Version
|
339
|
-
version: 2.
|
328
|
+
version: 2.7.0
|
340
329
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
330
|
requirements:
|
342
331
|
- - ">="
|
343
332
|
- !ruby/object:Gem::Version
|
344
333
|
version: '0'
|
345
334
|
requirements: []
|
346
|
-
rubygems_version: 3.
|
335
|
+
rubygems_version: 3.3.26
|
347
336
|
signing_key:
|
348
337
|
specification_version: 4
|
349
338
|
summary: metanorma-utils
|
data/.github/workflows/rake.yml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
-
# See https://github.com/metanorma/cimas
|
3
|
-
name: rake
|
4
|
-
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
branches: [ master, main ]
|
8
|
-
tags: [ v* ]
|
9
|
-
pull_request:
|
10
|
-
|
11
|
-
jobs:
|
12
|
-
rake:
|
13
|
-
uses: metanorma/ci/.github/workflows/generic-rake.yml@main
|
14
|
-
secrets:
|
15
|
-
pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
-
# See https://github.com/metanorma/cimas
|
3
|
-
name: release
|
4
|
-
|
5
|
-
on:
|
6
|
-
workflow_dispatch:
|
7
|
-
inputs:
|
8
|
-
next_version:
|
9
|
-
description: |
|
10
|
-
Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
|
11
|
-
required: true
|
12
|
-
default: 'skip'
|
13
|
-
push:
|
14
|
-
tags: [ v* ]
|
15
|
-
|
16
|
-
jobs:
|
17
|
-
release:
|
18
|
-
uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
|
19
|
-
with:
|
20
|
-
next_version: ${{ github.event.inputs.next_version }}
|
21
|
-
release_command: rake release
|
22
|
-
bundler_cache: false
|
23
|
-
post_install: gem install bundler rake rspec
|
24
|
-
secrets:
|
25
|
-
rubygems-api-key: ${{ secrets.METANORMA_CI_RUBYGEMS_API_KEY }}
|
26
|
-
pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
|
27
|
-
|
data/Rakefile
DELETED
data/bin/rspec
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'rspec' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require "pathname"
|
10
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(
|
11
|
-
"../../Gemfile", Pathname.new(__FILE__).realpath
|
12
|
-
)
|
13
|
-
|
14
|
-
require "rubygems"
|
15
|
-
require "bundler/setup"
|
16
|
-
|
17
|
-
load Gem.bin_path("rspec-core", "rspec")
|
@@ -1,124 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
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
|
-
viewBox="0 0 595.28 841.89" style="enable-background:new 0 0 595.28 841.89;" xml:space="preserve">
|
5
|
-
<style type="text/css">
|
6
|
-
#Layer_1 { fill:none }
|
7
|
-
svg[id = 'Layer_1'] { fill:none }
|
8
|
-
.st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
9
|
-
</style>
|
10
|
-
<image style="overflow:visible;" width="368" height="315" xlink:href="data:image/gif;base64,R0lGODlhcAE7Aff/AAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBmAABmMwBm
|
11
|
-
ZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/MwD/ZgD/
|
12
|
-
mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNmZjNmmTNm
|
13
|
-
zDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/mTP/zDP/
|
14
|
-
/2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZmzGZm/2aZ
|
15
|
-
AGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkA
|
16
|
-
M5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZAJmZM5mZ
|
17
|
-
ZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswA
|
18
|
-
mcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZZsyZmcyZ
|
19
|
-
zMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A
|
20
|
-
//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+ZzP+Z///M
|
21
|
-
AP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP////j4+PLy8uvr6+Xl5d/f39jY2NLS0szM
|
22
|
-
zMXFxb+/v7i4uLKysqysrKWlpZ+fn5mZmZKSkoyMjIWFhX9/f3l5eXJycmxsbGZmZl9fX1lZWVJS
|
23
|
-
UkxMTEZGRj8/Pzk5OTMzMywsLCYmJh8fHxkZGRMTEwwMDAYGBgAAACwAAAAAcAE7AQAI/gCvCRxI
|
24
|
-
sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bN
|
25
|
-
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
-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
-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
-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
-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
-
4IvqyfbPfRNWaGNrpCEBAX+zjBIbh6gVmF9wH+4WYkKKZfhjjoytGKNAMAKo2I791XjjleQJ5GNv
|
31
|
-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
-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
-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
-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
-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
-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
-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
-
t6RB3lmalaCwMe445IebPSAit8XG4oaAI0UXJ7ENeWCCBlb534PPaX46cc2NYqiA7xnot3z02Ydf
|
39
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
XwqZGqYWrvWFBokhU1f4VNzhED46HOt+RLgmzYw1TDtU6HTctFWuCmSXQfzHGQlVHCT+6E+JamIC
|
50
|
-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
-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
-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
-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
-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
-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
-
GmeLEBYtVrWsLWcTJUtZ2UqRiozVrGg52zY6LIqPCHACGU0LW9oWOpUF6R4r+keDmPD21BrsKvkG
|
57
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
oHZpXbJaEbm6U+2JEedpXFjpq+l5ZdjEnT/SojYnTNnnrdEYOiQ6YNl0jU24osX5X4ryHIMSedjx
|
85
|
-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
-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
-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
-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
-
sqmaUreLkrEOQbVZYbVXe0dNITgPGrdya7nHShBUS7nwsg3xUA/y0A3bcq2VlK3CandNgRdY4S/b
|
90
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
BCWzsymyIU4u//3Y68JLAkSSL0aPRJUIXAZk0ToiZpYkx3PiL745GUnHQRuzVvW0PhuXpC0QIz65
|
108
|
-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
-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
-
6QkjFJ8Lu6NbuqohbDliaaSuuizhyjPWE/Nru/QSu7Nbu7QtFJpdELqbL7zru70unzxRD8lrvN5r
|
111
|
-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
-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
-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" transform="matrix(1 0 0 1 114 263.8898)">
|
114
|
-
</image>
|
115
|
-
<a xlink:href="mn://action_schema" xlink:dummy="Layer_1">
|
116
|
-
<rect x="123.28" y="273.93" class="st0" width="88.05" height="41.84"/>
|
117
|
-
</a>
|
118
|
-
<a xlink:href="mn://basic_attribute_schema" >
|
119
|
-
<rect x="324.69" y="450.52" class="st0" width="132.62" height="40.75"/>
|
120
|
-
</a>
|
121
|
-
<a xlink:href="mn://support_resource_schema" >
|
122
|
-
<rect x="324.69" y="528.36" class="st0" width="148.16" height="40.75"/>
|
123
|
-
</a>
|
124
|
-
</svg>
|
Binary file
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "utils/hash_transform_keys"
|
3
|
-
|
4
|
-
RSpec.describe Metanorma::Utils do
|
5
|
-
it "deep stringify hash but skip values" do
|
6
|
-
Hash.include Metanorma::Utils::Hash
|
7
|
-
Array.include Metanorma::Utils::Array
|
8
|
-
result = {
|
9
|
-
test0: :test0,
|
10
|
-
test1: false,
|
11
|
-
test2: {
|
12
|
-
test20: :test20,
|
13
|
-
},
|
14
|
-
test3: %i(test31 test32 test33),
|
15
|
-
test4: [
|
16
|
-
{
|
17
|
-
test41: :test41,
|
18
|
-
},
|
19
|
-
],
|
20
|
-
}.stringify_all_keys
|
21
|
-
|
22
|
-
expect(result).to include("test0", "test1", "test2", "test3", "test4")
|
23
|
-
expect(result["test0"]).to eq(:test0)
|
24
|
-
expect(result["test2"]).to include("test20")
|
25
|
-
expect(result["test2"]["test20"]).to eq(:test20)
|
26
|
-
expect(result["test3"]).to include(:test31, :test32, :test33)
|
27
|
-
expect(result["test4"][0]).to include("test41")
|
28
|
-
expect(result["test4"][0]["test41"]).to eq(:test41)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "deep symbolize hash but skip values" do
|
32
|
-
Hash.include Metanorma::Utils::Hash
|
33
|
-
Array.include Metanorma::Utils::Array
|
34
|
-
result = {
|
35
|
-
test0: "test0",
|
36
|
-
test1: false,
|
37
|
-
test2: {
|
38
|
-
test20: "test20",
|
39
|
-
},
|
40
|
-
test3: %w(test31 test32 test33),
|
41
|
-
test4: [
|
42
|
-
{
|
43
|
-
test41: "test41",
|
44
|
-
},
|
45
|
-
],
|
46
|
-
}.stringify_all_keys.symbolize_all_keys
|
47
|
-
|
48
|
-
expect(result).to include(:test0, :test1, :test2, :test3, :test4)
|
49
|
-
expect(result[:test0]).to eq("test0")
|
50
|
-
expect(result[:test2]).to include(:test20)
|
51
|
-
expect(result[:test2][:test20]).to eq("test20")
|
52
|
-
expect(result[:test3]).to include("test31", "test32", "test33")
|
53
|
-
expect(result[:test4][0]).to include(:test41)
|
54
|
-
expect(result[:test4][0][:test41]).to eq("test41")
|
55
|
-
end
|
56
|
-
|
57
|
-
it "deep merges hashes" do
|
58
|
-
Hash.include Metanorma::Utils::Hash
|
59
|
-
hash1 = { a: [1, 2], b: "c", c: 4, e: { f: { g: "1" } } }
|
60
|
-
hash2 = { a: [3], b: "d", d: 5, e: { f: { h: "2" } } }
|
61
|
-
expect(hash1.deep_merge(hash2)).to eq({ a: [1, 2, 3], b: "d", c: 4,
|
62
|
-
d: 5, e: { f: { g: "1", h: "2" } } })
|
63
|
-
end
|
64
|
-
end
|
data/spec/img_spec.rb
DELETED
@@ -1,349 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "fileutils"
|
3
|
-
|
4
|
-
RSpec.describe Metanorma::Utils do
|
5
|
-
context "recognises data uris" do
|
6
|
-
it "where the content is an existing file at a relative path" do
|
7
|
-
expect(Metanorma::Utils.datauri("spec/fixtures/rice_image1.png"))
|
8
|
-
.to eq Metanorma::Utils.encode_datauri("spec/fixtures/rice_image1.png")
|
9
|
-
end
|
10
|
-
|
11
|
-
it "where the content is an existing file at an absolute path" do
|
12
|
-
expect(Metanorma::Utils.datauri(File.expand_path("spec/fixtures/rice_image1.png")))
|
13
|
-
.to eq Metanorma::Utils.encode_datauri("spec/fixtures/rice_image1.png")
|
14
|
-
end
|
15
|
-
|
16
|
-
it "where the content is a relative file path pointing to a bogus file" do
|
17
|
-
expect(Metanorma::Utils.datauri("spec/fixtures/bogus.png"))
|
18
|
-
.to eq "spec/fixtures/bogus.png"
|
19
|
-
end
|
20
|
-
|
21
|
-
it "where the content is an absolute file path pointing to a bogus file" do
|
22
|
-
expect(Metanorma::Utils.datauri("D:/spec/fixtures/bogus.png"))
|
23
|
-
.to eq "D:/spec/fixtures/bogus.png"
|
24
|
-
end
|
25
|
-
|
26
|
-
it "where the content is a data/image URI" do
|
27
|
-
expect(Metanorma::Utils.datauri("data1:img/gif,base64,ABBC"))
|
28
|
-
.to eq "data1:img/gif,base64,ABBC"
|
29
|
-
end
|
30
|
-
|
31
|
-
it "where the content is an URL" do
|
32
|
-
expect(Metanorma::Utils.datauri("https://example.com/image.png"))
|
33
|
-
.to eq "https://example.com/image.png"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
it "recognises data uris" do
|
38
|
-
expect(Metanorma::Utils.datauri?("data:img/gif,base64,ABBC"))
|
39
|
-
.to eq true
|
40
|
-
expect(Metanorma::Utils.datauri?("data1:img/gif,base64,ABBC"))
|
41
|
-
.to eq false
|
42
|
-
end
|
43
|
-
|
44
|
-
it "recognises uris" do
|
45
|
-
expect(Metanorma::Utils.url?("mailto://ABC"))
|
46
|
-
.to eq true
|
47
|
-
expect(Metanorma::Utils.url?("http://ABC"))
|
48
|
-
.to eq true
|
49
|
-
expect(Metanorma::Utils.url?("D:/ABC"))
|
50
|
-
.to eq false
|
51
|
-
expect(Metanorma::Utils.url?("/ABC"))
|
52
|
-
.to eq false
|
53
|
-
end
|
54
|
-
|
55
|
-
it "recognises absolute file locations" do
|
56
|
-
expect(Metanorma::Utils.absolute_path?("D:/a.html"))
|
57
|
-
.to eq true
|
58
|
-
expect(Metanorma::Utils.absolute_path?("/a.html"))
|
59
|
-
.to eq true
|
60
|
-
expect(Metanorma::Utils.absolute_path?("a.html"))
|
61
|
-
.to eq false
|
62
|
-
end
|
63
|
-
|
64
|
-
it "rewrites SVGs" do
|
65
|
-
FileUtils.cp("spec/fixtures/action_schemaexpg1.svg",
|
66
|
-
"action_schemaexpg1.svg")
|
67
|
-
FileUtils.cp("spec/fixtures/action_schemaexpg1.svg",
|
68
|
-
"action_schemaexpg2.svg")
|
69
|
-
xmldoc = Nokogiri::XML(<<~INPUT)
|
70
|
-
<standard-document type="semantic" version="1.8.2">
|
71
|
-
<bibdata type="standard">
|
72
|
-
<title language="en" format="text/plain">Document title</title>
|
73
|
-
<docidentifier/>
|
74
|
-
<docnumber/>
|
75
|
-
<version/>
|
76
|
-
<language>en</language>
|
77
|
-
<script>Latn</script>
|
78
|
-
<status>
|
79
|
-
<stage>published</stage>
|
80
|
-
</status>
|
81
|
-
<copyright>
|
82
|
-
<from>2021</from>
|
83
|
-
</copyright>
|
84
|
-
<ext>
|
85
|
-
<doctype>article</doctype>
|
86
|
-
</ext>
|
87
|
-
</bibdata>
|
88
|
-
<sections>
|
89
|
-
<svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
90
|
-
<svgmap id="_4072bdcb-5895-4821-b636-5795b96787cb">
|
91
|
-
<figure><image src="action_schemaexpg1.svg"/></figure>
|
92
|
-
<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>
|
93
|
-
</svgmap>
|
94
|
-
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
95
|
-
<figure><image src="action_schemaexpg2.svg" alt="Workmap"/></figure>
|
96
|
-
<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>
|
97
|
-
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
98
|
-
<figure>
|
99
|
-
<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'>
|
100
|
-
<a href="mn://action_schema" >
|
101
|
-
<rect x="123.28" y="273.93" class="st0" width="88.05" height="41.84"/>
|
102
|
-
</a>
|
103
|
-
<a href="mn://basic_attribute_schema" >
|
104
|
-
<rect x="324.69" y="450.52" class="st0" width="132.62" height="40.75"/>
|
105
|
-
</a>
|
106
|
-
<a xlink:href="mn://support_resource_schema" >
|
107
|
-
<rect x="324.69" y="528.36" class="st0" width="148.16" height="40.75"/>
|
108
|
-
</a>
|
109
|
-
</svg>
|
110
|
-
</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>
|
115
|
-
|
116
|
-
<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'/>
|
117
|
-
</figure>
|
118
|
-
<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>
|
119
|
-
</sections>
|
120
|
-
</standard-document>
|
121
|
-
INPUT
|
122
|
-
Metanorma::Utils.svgmap_rewrite(xmldoc)
|
123
|
-
expect(xmlpp(xmldoc.to_xml.gsub(%r{<image.*?</image>}m, "<image/>")
|
124
|
-
.gsub(%r{<style.*?</style>}m, "<style/>")))
|
125
|
-
.to be_equivalent_to xmlpp(<<~OUTPUT)
|
126
|
-
<?xml version='1.0'?>
|
127
|
-
<standard-document type='semantic' version='1.8.2'>
|
128
|
-
<bibdata type='standard'>
|
129
|
-
<title language='en' format='text/plain'>Document title</title>
|
130
|
-
<docidentifier/>
|
131
|
-
<docnumber/>
|
132
|
-
<version/>
|
133
|
-
<language>en</language>
|
134
|
-
<script>Latn</script>
|
135
|
-
<status>
|
136
|
-
<stage>published</stage>
|
137
|
-
</status>
|
138
|
-
<copyright>
|
139
|
-
<from>2021</from>
|
140
|
-
</copyright>
|
141
|
-
<ext>
|
142
|
-
<doctype>article</doctype>
|
143
|
-
</ext>
|
144
|
-
</bibdata>
|
145
|
-
<sections>
|
146
|
-
<svgmap id='_d5b5049a-dd53-4ea0-bc6f-e8773bd59052'>
|
147
|
-
<target href='mn://action_schema'>
|
148
|
-
<xref target='ref1'>Computer</xref>
|
149
|
-
</target>
|
150
|
-
</svgmap>
|
151
|
-
<figure>
|
152
|
-
<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'>
|
153
|
-
<style/>
|
154
|
-
<image/>
|
155
|
-
<a xlink:href='#ref1' xlink:dummy='Layer_1_000000001'>
|
156
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
157
|
-
</a>
|
158
|
-
<a xlink:href='mn://basic_attribute_schema'>
|
159
|
-
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
160
|
-
</a>
|
161
|
-
<a xlink:href='mn://support_resource_schema'>
|
162
|
-
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
163
|
-
</a>
|
164
|
-
</svg>
|
165
|
-
</figure>
|
166
|
-
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
167
|
-
<figure>
|
168
|
-
<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'>
|
169
|
-
<style/>
|
170
|
-
<image/>
|
171
|
-
<a xlink:href='mn://action_schema' xlink:dummy='Layer_1_000000002'>
|
172
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
173
|
-
</a>
|
174
|
-
<a xlink:href='http://www.example.com'>
|
175
|
-
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
176
|
-
</a>
|
177
|
-
<a xlink:href='mn://support_resource_schema'>
|
178
|
-
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
179
|
-
</a>
|
180
|
-
</svg>
|
181
|
-
</figure>
|
182
|
-
<target href='mn://support_resource_schema'>
|
183
|
-
<eref type='express' bibitemid='express_action_schema' citeas=''>
|
184
|
-
<localityStack>
|
185
|
-
<locality type='anchor'>
|
186
|
-
<referenceFrom>action_schema.basic</referenceFrom>
|
187
|
-
</locality>
|
188
|
-
</localityStack>
|
189
|
-
Coffee
|
190
|
-
</eref>
|
191
|
-
</target>
|
192
|
-
</svgmap>
|
193
|
-
<figure>
|
194
|
-
<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'>
|
195
|
-
<a href='#ref1'>
|
196
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
197
|
-
</a>
|
198
|
-
<a href='mn://basic_attribute_schema'>
|
199
|
-
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
200
|
-
</a>
|
201
|
-
<a xlink:href='mn://support_resource_schema'>
|
202
|
-
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
203
|
-
</a>
|
204
|
-
</svg>
|
205
|
-
</figure>
|
206
|
-
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
207
|
-
<figure>
|
208
|
-
<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'>
|
209
|
-
<style/>
|
210
|
-
<image/>
|
211
|
-
<a xlink:href='mn://action_schema'>
|
212
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
213
|
-
</a>
|
214
|
-
<a xlink:href='http://www.example.com'>
|
215
|
-
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
216
|
-
</a>
|
217
|
-
<a xlink:href='mn://support_resource_schema'>
|
218
|
-
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
219
|
-
</a>
|
220
|
-
</svg>
|
221
|
-
</figure>
|
222
|
-
<target href='mn://support_resource_schema'>
|
223
|
-
<eref type='express' bibitemid='express_action_schema' citeas=''>
|
224
|
-
<localityStack>
|
225
|
-
<locality type='anchor'>
|
226
|
-
<referenceFrom>action_schema.basic</referenceFrom>
|
227
|
-
</locality>
|
228
|
-
</localityStack>
|
229
|
-
Coffee
|
230
|
-
</eref>
|
231
|
-
</target>
|
232
|
-
</svgmap>
|
233
|
-
</sections>
|
234
|
-
</standard-document>
|
235
|
-
OUTPUT
|
236
|
-
end
|
237
|
-
|
238
|
-
it "rewrites SVGs with namespaces" do
|
239
|
-
FileUtils.cp "spec/fixtures/action_schemaexpg1.svg",
|
240
|
-
"action_schemaexpg1.svg"
|
241
|
-
FileUtils.cp "spec/fixtures/action_schemaexpg1.svg",
|
242
|
-
"action_schemaexpg2.svg"
|
243
|
-
xmldoc = Nokogiri::XML(<<~INPUT)
|
244
|
-
<standard-document type="semantic" version="1.8.2" xmlns="http://www.example.com">
|
245
|
-
<bibdata type="standard">
|
246
|
-
<title language="en" format="text/plain">Document title</title>
|
247
|
-
<docidentifier/>
|
248
|
-
<docnumber/>
|
249
|
-
<version/>
|
250
|
-
<language>en</language>
|
251
|
-
<script>Latn</script>
|
252
|
-
<status>
|
253
|
-
<stage>published</stage>
|
254
|
-
</status>
|
255
|
-
<copyright>
|
256
|
-
<from>2021</from>
|
257
|
-
</copyright>
|
258
|
-
<ext>
|
259
|
-
<doctype>article</doctype>
|
260
|
-
</ext>
|
261
|
-
</bibdata>
|
262
|
-
<sections>
|
263
|
-
<svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
264
|
-
<svgmap id="_4072bdcb-5895-4821-b636-5795b96787cb">
|
265
|
-
<figure><image src="action_schemaexpg1.svg"/></figure>
|
266
|
-
<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>
|
267
|
-
</svgmap>
|
268
|
-
<svgmap id="_60dadf08-48d4-4164-845c-b4e293e00abd">
|
269
|
-
<figure><image src="action_schemaexpg2.svg" alt="Workmap"/></figure>
|
270
|
-
<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>
|
271
|
-
</standard-document>
|
272
|
-
INPUT
|
273
|
-
Metanorma::Utils.svgmap_rewrite(xmldoc)
|
274
|
-
expect(xmlpp(xmldoc.to_xml.gsub(%r{<image.*?</image>}m, "<image/>")))
|
275
|
-
.to be_equivalent_to xmlpp(<<~OUTPUT)
|
276
|
-
<?xml version='1.0'?>
|
277
|
-
<standard-document type="semantic" version="1.8.2" xmlns="http://www.example.com">
|
278
|
-
<bibdata type="standard">
|
279
|
-
<title language="en" format="text/plain">Document title</title>
|
280
|
-
<docidentifier/>
|
281
|
-
<docnumber/>
|
282
|
-
<version/>
|
283
|
-
<language>en</language>
|
284
|
-
<script>Latn</script>
|
285
|
-
<status>
|
286
|
-
<stage>published</stage>
|
287
|
-
</status>
|
288
|
-
<copyright>
|
289
|
-
<from>2021</from>
|
290
|
-
</copyright>
|
291
|
-
<ext>
|
292
|
-
<doctype>article</doctype>
|
293
|
-
</ext>
|
294
|
-
</bibdata>
|
295
|
-
<sections><svgmap id="_d5b5049a-dd53-4ea0-bc6f-e8773bd59052"><target href="mn://action_schema"><xref target="ref1">Computer</xref></target></svgmap>
|
296
|
-
<figure>
|
297
|
-
<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'>
|
298
|
-
<style type='text/css'>
|
299
|
-
#Layer_1_000000001 { fill:none } svg[id='Layer_1_000000001'] {
|
300
|
-
fill:none } .st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
301
|
-
</style>
|
302
|
-
<image/>
|
303
|
-
<a xlink:href='#ref1' xlink:dummy='Layer_1_000000001'>
|
304
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
305
|
-
</a>
|
306
|
-
<a xlink:href='mn://basic_attribute_schema'>
|
307
|
-
<rect x='324.69' y='450.52' class='st0' width='132.62' height='40.75'/>
|
308
|
-
</a>
|
309
|
-
<a xlink:href='mn://support_resource_schema'>
|
310
|
-
<rect x='324.69' y='528.36' class='st0' width='148.16' height='40.75'/>
|
311
|
-
</a>
|
312
|
-
</svg>
|
313
|
-
</figure>
|
314
|
-
<svgmap id='_60dadf08-48d4-4164-845c-b4e293e00abd'>
|
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_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'>
|
317
|
-
<style type='text/css'>
|
318
|
-
#Layer_1_000000002 { fill:none } svg[id='Layer_1_000000002'] {
|
319
|
-
fill:none } .st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
320
|
-
</style>
|
321
|
-
<image/>
|
322
|
-
<a xlink:href='mn://action_schema' xlink:dummy='Layer_1_000000002'>
|
323
|
-
<rect x='123.28' y='273.93' class='st0' width='88.05' height='41.84'/>
|
324
|
-
</a>
|
325
|
-
<a xlink:href='http://www.example.com'>
|
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
|
-
<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>
|
334
|
-
</standard-document>
|
335
|
-
OUTPUT
|
336
|
-
end
|
337
|
-
|
338
|
-
it "generates data uris" do
|
339
|
-
expect(Metanorma::Utils.datauri("data:xyz")).to eq "data:xyz"
|
340
|
-
expect(Metanorma::Utils.datauri("spec/fixtures/rice_image1.png")).to be_equivalent_to "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAABmJLR0QA/wD/AP+gvaeTAAAEzUlEQVR4nO3dz4tVZRzH8fedacogMCjHoiBop1RaOzF/QAv7QUIYZdCq/oQo+hdC10FRbVtVBC0r09y0iZAmoVwWRRaMBZlKnhZ3UlEwnVFnhvt6wQPnnnOeh8/m8r0P9zznKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC42HT1RPVOdbT6c6Edrd5euDa9bOkAWJF2V3PVUA2jGtbfPG6jhXMLba56ahlzArBCTFf7q2GqhhfXNxzY3HB6R8Owc9xO72j4fHPDC7Pjexq3fZmNMOFGyx0Altn+6pV1Mw0fPtDo0bWXv/nLE7Xn24bjZxot9H31BmSEFUkBYZLtrj6+c6bhq0ca3X/rlXU6drK2fN3w27iIPF19ch0zwoqlgDCpbqqOTNWGgw/X/808LnZovnZ+U0N9Vz1Ynb0OGWFFm1ruALBMdlUb9q6/+uJRtf32en62qo2Nn86CiaOAMKmerXr5rsUP8NLd5w6fWXIaWIUUECbV1qqti5h9/Gfb+b7blpwGViEFhEl177qZumUJ34A1U3XHTFX3XKNMsKooIAAsigLCpPrx+Jk6tYRnp/4+W7+fqeqna5QJVhUFhEl1uOrwicUPcGj+/OGS08AqpIAwqT6oevfnxQ/w3i/nDj9achpYhSwkZFJNV0dGtfGLzeN1HVfjwHw9Nl5IOFc9lIWETCAzECbVP9XrQ7VnruHYySvv+MPJem6uYRh/fC3FgwnlbaJMsu+r2/4629b3f23YsrbRfWsu3+HgfO06cu49WPuqN29ATgBWoOnGhWCYqmHvbMNnmxpObT//OvdT2xs+3TS+dsHeIG/kBxgA1ZNdsKFUF2wo1aUbSj2+bCkBWJGmGheHtxoXij8W2tzCuV353xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAS/wLBh+fQNux/v8AAAAASUVORK5CYII="
|
341
|
-
expect(Metanorma::Utils.datauri("rice_image1.png",
|
342
|
-
"spec/fixtures")).to be_equivalent_to "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAABmJLR0QA/wD/AP+gvaeTAAAEzUlEQVR4nO3dz4tVZRzH8fedacogMCjHoiBop1RaOzF/QAv7QUIYZdCq/oQo+hdC10FRbVtVBC0r09y0iZAmoVwWRRaMBZlKnhZ3UlEwnVFnhvt6wQPnnnOeh8/m8r0P9zznKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC42HT1RPVOdbT6c6Edrd5euDa9bOkAWJF2V3PVUA2jGtbfPG6jhXMLba56ahlzArBCTFf7q2GqhhfXNxzY3HB6R8Owc9xO72j4fHPDC7Pjexq3fZmNMOFGyx0Altn+6pV1Mw0fPtDo0bWXv/nLE7Xn24bjZxot9H31BmSEFUkBYZLtrj6+c6bhq0ca3X/rlXU6drK2fN3w27iIPF19ch0zwoqlgDCpbqqOTNWGgw/X/808LnZovnZ+U0N9Vz1Ynb0OGWFFm1ruALBMdlUb9q6/+uJRtf32en62qo2Nn86CiaOAMKmerXr5rsUP8NLd5w6fWXIaWIUUECbV1qqti5h9/Gfb+b7blpwGViEFhEl177qZumUJ34A1U3XHTFX3XKNMsKooIAAsigLCpPrx+Jk6tYRnp/4+W7+fqeqna5QJVhUFhEl1uOrwicUPcGj+/OGS08AqpIAwqT6oevfnxQ/w3i/nDj9achpYhSwkZFJNV0dGtfGLzeN1HVfjwHw9Nl5IOFc9lIWETCAzECbVP9XrQ7VnruHYySvv+MPJem6uYRh/fC3FgwnlbaJMsu+r2/4629b3f23YsrbRfWsu3+HgfO06cu49WPuqN29ATgBWoOnGhWCYqmHvbMNnmxpObT//OvdT2xs+3TS+dsHeIG/kBxgA1ZNdsKFUF2wo1aUbSj2+bCkBWJGmGheHtxoXij8W2tzCuV353xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAS/wLBh+fQNux/v8AAAAASUVORK5CYII="
|
343
|
-
expect(Metanorma::Utils.datauri2mime("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAABmJLR0QA/wD/AP+gvaeTAAAEzUlEQVR4nO3dz4tVZRzH8fedacogMCjHoiBop1RaOzF/QAv7QUIYZdCq/oQo+hdC10FRbVtVBC0r09y0iZAmoVwWRRaMBZlKnhZ3UlEwnVFnhvt6wQPnnnOeh8/m8r0P9zznKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC42HT1RPVOdbT6c6Edrd5euDa9bOkAWJF2V3PVUA2jGtbfPG6jhXMLba56ahlzArBCTFf7q2GqhhfXNxzY3HB6R8Owc9xO72j4fHPDC7Pjexq3fZmNMOFGyx0Altn+6pV1Mw0fPtDo0bWXv/nLE7Xn24bjZxot9H31BmSEFUkBYZLtrj6+c6bhq0ca3X/rlXU6drK2fN3w27iIPF19ch0zwoqlgDCpbqqOTNWGgw/X/808LnZovnZ+U0N9Vz1Ynb0OGWFFm1ruALBMdlUb9q6/+uJRtf32en62qo2Nn86CiaOAMKmerXr5rsUP8NLd5w6fWXIaWIUUECbV1qqti5h9/Gfb+b7blpwGViEFhEl177qZumUJ34A1U3XHTFX3XKNMsKooIAAsigLCpPrx+Jk6tYRnp/4+W7+fqeqna5QJVhUFhEl1uOrwicUPcGj+/OGS08AqpIAwqT6oevfnxQ/w3i/nDj9achpYhSwkZFJNV0dGtfGLzeN1HVfjwHw9Nl5IOFc9lIWETCAzECbVP9XrQ7VnruHYySvv+MPJem6uYRh/fC3FgwnlbaJMsu+r2/4629b3f23YsrbRfWsu3+HgfO06cu49WPuqN29ATgBWoOnGhWCYqmHvbMNnmxpObT//OvdT2xs+3TS+dsHeIG/kBxgA1ZNdsKFUF2wo1aUbSj2+bCkBWJGmGheHtxoXij8W2tzCuV353xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAS/wLBh+fQNux/v8AAAAASUVORK5CYII=")&.first&.to_s).to eq "image/png"
|
344
|
-
expect(Metanorma::Utils.datauri("spec/fixtures/rice_image0.png")).to be_equivalent_to "spec/fixtures/rice_image0.png"
|
345
|
-
expect do
|
346
|
-
Metanorma::Utils.datauri("spec/fixtures/rice_image0.png")
|
347
|
-
end.to output(%r{Image specified at `spec/fixtures/rice_image0\.png` does not exist\.}).to_stderr
|
348
|
-
end
|
349
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require "simplecov"
|
2
|
-
SimpleCov.start do
|
3
|
-
add_filter "/spec/"
|
4
|
-
end
|
5
|
-
require "rspec/matchers"
|
6
|
-
require "equivalent-xml"
|
7
|
-
require "metanorma-utils"
|
8
|
-
require "rexml/document"
|
9
|
-
|
10
|
-
RSpec.configure do |config|
|
11
|
-
# Enable flags like --only-failures and --next-failure
|
12
|
-
config.example_status_persistence_file_path = ".rspec_status"
|
13
|
-
|
14
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
15
|
-
config.disable_monkey_patching!
|
16
|
-
|
17
|
-
config.expect_with :rspec do |c|
|
18
|
-
c.syntax = :expect
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class Dummy
|
23
|
-
attr_accessor :id, :docfile
|
24
|
-
|
25
|
-
def initialize(id = nil)
|
26
|
-
@id = id
|
27
|
-
end
|
28
|
-
|
29
|
-
def attr(elem)
|
30
|
-
case elem
|
31
|
-
when "docfile" then @docfile
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def xmlpp(xml)
|
37
|
-
s = ""
|
38
|
-
f = REXML::Formatters::Pretty.new(2)
|
39
|
-
f.compact = true
|
40
|
-
f.write(REXML::Document.new(xml), s)
|
41
|
-
s
|
42
|
-
end
|
data/spec/utils_spec.rb
DELETED
@@ -1,231 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "fileutils"
|
3
|
-
|
4
|
-
RSpec.describe Metanorma::Utils do
|
5
|
-
it "has a version number" do
|
6
|
-
expect(Metanorma::Utils::VERSION).not_to be nil
|
7
|
-
end
|
8
|
-
|
9
|
-
it "capitalises" do
|
10
|
-
expect(Metanorma::Utils.strict_capitalize_phrase("ABC def gHI"))
|
11
|
-
.to eq "ABC Def GHI"
|
12
|
-
expect(Metanorma::Utils.strict_capitalize_first("aBC def gHI"))
|
13
|
-
.to eq "ABC def gHI"
|
14
|
-
end
|
15
|
-
|
16
|
-
it "converts OS-specific external path" do
|
17
|
-
pwd = if !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) ||
|
18
|
-
(RUBY_PLATFORM =~ /mswin|mingw/))
|
19
|
-
`echo %cd%`
|
20
|
-
else `pwd`
|
21
|
-
end
|
22
|
-
expect(Metanorma::Utils.external_path(FileUtils.pwd.strip)).to eq pwd.strip
|
23
|
-
end
|
24
|
-
|
25
|
-
it "applies Asciidoctor substitutions" do
|
26
|
-
expect(Metanorma::Utils.asciidoc_sub("A -- B", "html"))
|
27
|
-
.to eq "A — B"
|
28
|
-
expect(Metanorma::Utils.asciidoc_sub("*A* stem:[x]", "html"))
|
29
|
-
.to eq "<strong>A</strong> \\$x\\$"
|
30
|
-
end
|
31
|
-
|
32
|
-
it "finds file path of docfile" do
|
33
|
-
d = Dummy.new
|
34
|
-
expect(Metanorma::Utils.localdir(d)).to eq "./"
|
35
|
-
d.docfile = "spec/utils_spec.rb"
|
36
|
-
expect(Metanorma::Utils.localdir(d)).to eq "spec/"
|
37
|
-
end
|
38
|
-
|
39
|
-
it "applies smart formatting" do
|
40
|
-
expect(Metanorma::Utils.smartformat("A - B A -- B A--B '80s '80' <A>"))
|
41
|
-
.to eq "A — B A — B A—B ’80s ‘80’ <A>"
|
42
|
-
end
|
43
|
-
|
44
|
-
it "applies en-dash normalisation" do
|
45
|
-
a = Nokogiri::XML(<<~INPUT)
|
46
|
-
<container>
|
47
|
-
<a>A -- B A - B</a>
|
48
|
-
<b>A--B</b>
|
49
|
-
</container>
|
50
|
-
INPUT
|
51
|
-
Metanorma::Utils.endash_date(a)
|
52
|
-
expect(a.to_xml).to be_equivalent_to <<~OUTPUT
|
53
|
-
<?xml version=\"1.0\"?>
|
54
|
-
<container><a>A–B A–B</a><b>A–B</b></container>
|
55
|
-
OUTPUT
|
56
|
-
end
|
57
|
-
|
58
|
-
it "sets hash values by dotted key path" do
|
59
|
-
a = {}
|
60
|
-
a = Metanorma::Utils.set_nested_value(a, ["X"], "x")
|
61
|
-
a = Metanorma::Utils.set_nested_value(a, ["X1"], 9)
|
62
|
-
a = Metanorma::Utils.set_nested_value(a, ["X2"], [3])
|
63
|
-
a = Metanorma::Utils.set_nested_value(a, ["X3"], { "a" => "b" })
|
64
|
-
expect(a.to_s).to be_equivalent_to <<~OUTPUT
|
65
|
-
{"X"=>"x", "X1"=>9, "X2"=>[3], "X3"=>{"a"=>"b"}}
|
66
|
-
OUTPUT
|
67
|
-
a = Metanorma::Utils.set_nested_value(a, ["X2"], 4)
|
68
|
-
a = Metanorma::Utils.set_nested_value(a, ["X1"], 4)
|
69
|
-
expect(a.to_s).to be_equivalent_to <<~OUTPUT
|
70
|
-
{"X"=>"x", "X1"=>[9, 4], "X2"=>[3, 4], "X3"=>{"a"=>"b"}}
|
71
|
-
OUTPUT
|
72
|
-
a = Metanorma::Utils.set_nested_value(a, ["X2", "A"], 5)
|
73
|
-
a = Metanorma::Utils.set_nested_value(a, ["X2a"], [])
|
74
|
-
a = Metanorma::Utils.set_nested_value(a, ["X2a", "A"], 6)
|
75
|
-
a = Metanorma::Utils.set_nested_value(a, ["X4", "A"], 10)
|
76
|
-
a = Metanorma::Utils.set_nested_value(a, ["X3", "A"], 7)
|
77
|
-
a = Metanorma::Utils.set_nested_value(a, ["X3", "a"], 8)
|
78
|
-
a = Metanorma::Utils.set_nested_value(a, ["X1", "a"], 11)
|
79
|
-
expect(a.to_s).to be_equivalent_to <<~OUTPUT
|
80
|
-
{"X"=>"x", "X1"=>[9, 4, {"a"=>11}], "X2"=>[3, 4, {"A"=>5}], "X3"=>{"a"=>["b", 8], "A"=>7}, "X2a"=>[{"A"=>6}], "X4"=>{"A"=>10}}
|
81
|
-
OUTPUT
|
82
|
-
end
|
83
|
-
|
84
|
-
it "maps languages to scripts" do
|
85
|
-
expect(Metanorma::Utils.default_script("hi")).to eq "Deva"
|
86
|
-
expect(Metanorma::Utils.rtl_script?(Metanorma::Utils.default_script("el")))
|
87
|
-
.to eq false
|
88
|
-
expect(Metanorma::Utils.rtl_script?(Metanorma::Utils.default_script("fa")))
|
89
|
-
.to eq true
|
90
|
-
end
|
91
|
-
|
92
|
-
# not testing Asciidoctor log extraction here
|
93
|
-
it "generates log" do
|
94
|
-
xml = Nokogiri::XML(<<~INPUT)
|
95
|
-
<xml>
|
96
|
-
<a>
|
97
|
-
<b>
|
98
|
-
c
|
99
|
-
</b></a></xml>
|
100
|
-
INPUT
|
101
|
-
FileUtils.rm_f("log.txt")
|
102
|
-
log = Metanorma::Utils::Log.new
|
103
|
-
log.add("Category 1", nil, "Message 1")
|
104
|
-
log.add("Category 1", "node", "Message 2")
|
105
|
-
log.add("Category 2", xml.at("//xml/a/b"), "Message 3")
|
106
|
-
log.write("log.txt")
|
107
|
-
expect(File.exist?("log.txt")).to be true
|
108
|
-
file = File.read("log.txt", encoding: "utf-8")
|
109
|
-
expect(file).to eq <<~OUTPUT
|
110
|
-
log.txt errors
|
111
|
-
|
112
|
-
|
113
|
-
== Category 1
|
114
|
-
|
115
|
-
(): Message 1
|
116
|
-
(node): Message 2
|
117
|
-
|
118
|
-
|
119
|
-
== Category 2
|
120
|
-
|
121
|
-
(XML Line 000003): Message 3
|
122
|
-
<b>
|
123
|
-
c
|
124
|
-
</b>
|
125
|
-
OUTPUT
|
126
|
-
end
|
127
|
-
|
128
|
-
it "deals with illegal characters in log" do
|
129
|
-
FileUtils.rm_f("log.txt")
|
130
|
-
log = Metanorma::Utils::Log.new
|
131
|
-
log.add("Category 1", nil, "é\xc2")
|
132
|
-
log.write("log.txt")
|
133
|
-
expect(File.exist?("log.txt")).to be true
|
134
|
-
file = File.read("log.txt", encoding: "utf-8")
|
135
|
-
expect(file).to eq <<~OUTPUT
|
136
|
-
log.txt errors
|
137
|
-
|
138
|
-
|
139
|
-
== Category 1
|
140
|
-
|
141
|
-
(): é�
|
142
|
-
OUTPUT
|
143
|
-
end
|
144
|
-
|
145
|
-
it "parses CSV" do
|
146
|
-
expect(Metanorma::Utils.csv_split("A;'B;C'")).to eq ["A", "'B", "C'"]
|
147
|
-
expect(Metanorma::Utils.csv_split('A;"B;C"')).to eq ["A", "B;C"]
|
148
|
-
expect(Metanorma::Utils.csv_split('A; "B;C"')).to eq ["A", "B;C"]
|
149
|
-
expect(Metanorma::Utils.csv_split('A; "B;C"', ",")).to eq ['A; "B;C"']
|
150
|
-
expect(Metanorma::Utils.csv_split('A, "B,C"', ",")).to eq ["A", "B,C"]
|
151
|
-
end
|
152
|
-
|
153
|
-
it "parses attributes from definition list" do
|
154
|
-
xml = Nokogiri::XML(<<~INPUT)
|
155
|
-
<xml>
|
156
|
-
<dummy/>
|
157
|
-
<dl>
|
158
|
-
<dt>attr1</dt><dd>value1</dd>
|
159
|
-
<dt>attr2</dt><dd><p>value1</p><p>value cont</p></dd>
|
160
|
-
</xml>
|
161
|
-
INPUT
|
162
|
-
Metanorma::Utils.dl_to_attrs(xml.at("//dummy"), xml.at("//dl"), "attr1")
|
163
|
-
Metanorma::Utils.dl_to_attrs(xml.at("//dummy"), xml.at("//dl"), "attr2")
|
164
|
-
expect(xml.to_xml).to be_equivalent_to <<~OUTPUT
|
165
|
-
<xml>
|
166
|
-
<dummy attr1="value1" attr2="value1"/>
|
167
|
-
<dl>
|
168
|
-
<dt>attr1</dt><dd>value1</dd>
|
169
|
-
<dt>attr2</dt><dd><p>value1</p><p>value cont</p></dd>
|
170
|
-
</dl>
|
171
|
-
</xml>
|
172
|
-
OUTPUT
|
173
|
-
end
|
174
|
-
|
175
|
-
it "parses attributes from definition list" do
|
176
|
-
xml = Nokogiri::XML(<<~INPUT)
|
177
|
-
<xml>
|
178
|
-
<dummy/>
|
179
|
-
<dl>
|
180
|
-
<dt>attr1</dt><dd>value1</dd>
|
181
|
-
<dt>attr2</dt><dd><p>value1</p><p>value cont</p></dd>
|
182
|
-
</xml>
|
183
|
-
INPUT
|
184
|
-
Metanorma::Utils.dl_to_attrs(xml.at("//dummy"), xml.at("//dl"), "attr1")
|
185
|
-
Metanorma::Utils.dl_to_attrs(xml.at("//dummy"), xml.at("//dl"), "attr2")
|
186
|
-
expect(xml.to_xml).to be_equivalent_to <<~OUTPUT
|
187
|
-
<xml>
|
188
|
-
<dummy attr1="value1" attr2="value1"/>
|
189
|
-
<dl>
|
190
|
-
<dt>attr1</dt><dd>value1</dd>
|
191
|
-
<dt>attr2</dt><dd><p>value1</p><p>value cont</p></dd>
|
192
|
-
</dl>
|
193
|
-
</xml>
|
194
|
-
OUTPUT
|
195
|
-
end
|
196
|
-
|
197
|
-
it "parses elements from definition list" do
|
198
|
-
xml = Nokogiri::XML(<<~INPUT)
|
199
|
-
<xml>
|
200
|
-
<dummy>
|
201
|
-
<attr2>A</attr2>
|
202
|
-
<attr3>A</attr3>
|
203
|
-
<attr2>A</attr2>
|
204
|
-
</dummy>
|
205
|
-
<dl>
|
206
|
-
<dt>attr1</dt><dd>value1</dd>
|
207
|
-
<dt>attr2</dt><dd><p>value1</p><p>value cont</p></dd>
|
208
|
-
</dl>
|
209
|
-
<dummy1/>
|
210
|
-
</xml>
|
211
|
-
INPUT
|
212
|
-
Metanorma::Utils.dl_to_elems(xml.at("//dummy1"), xml.at("//dummy"),
|
213
|
-
xml.at("//dl"), "attr1")
|
214
|
-
Metanorma::Utils.dl_to_elems(xml.at("//dummy1"), xml.at("//dummy"),
|
215
|
-
xml.at("//dl"), "attr2")
|
216
|
-
expect(xml.to_xml).to be_equivalent_to <<~OUTPUT
|
217
|
-
<xml>
|
218
|
-
<dummy>
|
219
|
-
<attr2>A</attr2>
|
220
|
-
<attr3>A</attr3>
|
221
|
-
<attr2>A</attr2><attr2><p>value1</p><p>value cont</p></attr2>
|
222
|
-
</dummy>
|
223
|
-
<dl>
|
224
|
-
<dt>attr1</dt>
|
225
|
-
<dt>attr2</dt>
|
226
|
-
</dl>
|
227
|
-
<dummy1/><attr1>value1</attr1>
|
228
|
-
</xml>
|
229
|
-
OUTPUT
|
230
|
-
end
|
231
|
-
end
|
data/spec/xml_spec.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "fileutils"
|
3
|
-
|
4
|
-
RSpec.describe Metanorma::Utils do
|
5
|
-
it "normalises anchors" do
|
6
|
-
expect(Metanorma::Utils.to_ncname("/:ab")).to eq "__ab"
|
7
|
-
expect(Metanorma::Utils.to_ncname("Löwe")).to eq "L__xf6_we"
|
8
|
-
expect(Metanorma::Utils.to_ncname("Löwe", asciionly: false)).to eq "Löwe"
|
9
|
-
expect(Metanorma::Utils.to_ncname("Löwe",
|
10
|
-
asciionly: true)).to eq "L__xf6_we"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "sets metanorma IDs if not provided" do
|
14
|
-
uuid = /^_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
|
15
|
-
expect(Metanorma::Utils.anchor_or_uuid)
|
16
|
-
.to match (uuid)
|
17
|
-
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new(nil)))
|
18
|
-
.to match (uuid)
|
19
|
-
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new("")))
|
20
|
-
.to match (uuid)
|
21
|
-
expect(Metanorma::Utils.anchor_or_uuid(Dummy.new("A"))).to eq "A"
|
22
|
-
end
|
23
|
-
|
24
|
-
it "generates XML snippets from Asciidoctor" do
|
25
|
-
input = <<~'EOS'
|
26
|
-
<A> –
|
27
|
-
EOS
|
28
|
-
|
29
|
-
doc = (Asciidoctor::Document.new input.lines,
|
30
|
-
{ standalone: false }).parse
|
31
|
-
out = Metanorma::Utils.noko do |xml|
|
32
|
-
xml << doc.blocks.first.content
|
33
|
-
end.join
|
34
|
-
expect(out).to be_equivalent_to <<~OUTPUT
|
35
|
-
<A>
|
36
|
-
OUTPUT
|
37
|
-
out = Metanorma::Utils.noko_html do |xml|
|
38
|
-
xml << doc.blocks.first.content
|
39
|
-
end.join
|
40
|
-
expect(out).to be_equivalent_to <<~OUTPUT
|
41
|
-
<A>
|
42
|
-
OUTPUT
|
43
|
-
end
|
44
|
-
|
45
|
-
it "wraps an Asciidoctor node in paragraph" do
|
46
|
-
input = <<~'EOS'
|
47
|
-
NOTE: XYZ
|
48
|
-
EOS
|
49
|
-
input2 = <<~'EOS'
|
50
|
-
====
|
51
|
-
A
|
52
|
-
|
53
|
-
B
|
54
|
-
====
|
55
|
-
EOS
|
56
|
-
|
57
|
-
doc = (Asciidoctor::Document.new input.lines,
|
58
|
-
{ standalone: false }).parse
|
59
|
-
doc2 = (Asciidoctor::Document.new input2.lines,
|
60
|
-
{ standalone: false }).parse
|
61
|
-
|
62
|
-
out = Metanorma::Utils.noko do |xml|
|
63
|
-
Metanorma::Utils.wrap_in_para(doc.blocks.first, xml)
|
64
|
-
end.join
|
65
|
-
expect(out).to be_equivalent_to <<~OUTPUT
|
66
|
-
<p>XYZ</p>
|
67
|
-
OUTPUT
|
68
|
-
out = Metanorma::Utils.noko do |xml|
|
69
|
-
Metanorma::Utils.wrap_in_para(doc2.blocks.first, xml)
|
70
|
-
end.join
|
71
|
-
expect(out).to be_equivalent_to <<~OUTPUT
|
72
|
-
<div class="paragraph"><p>A</p></div><div class="paragraph"><p>B</p></div>
|
73
|
-
OUTPUT
|
74
|
-
end
|
75
|
-
|
76
|
-
it "applies namespace to xpath" do
|
77
|
-
expect(Metanorma::Utils.ns("//ab/Bb/c1-d[ancestor::c][d = 'x'][e/f]"))
|
78
|
-
.to be_equivalent_to("//xmlns:ab/xmlns:Bb/xmlns:c1-d[ancestor::xmlns:c]" \
|
79
|
-
"[xmlns:d = 'x'][xmlns:e/xmlns:f]")
|
80
|
-
end
|
81
|
-
|
82
|
-
it "converts HTML escapes to hex" do
|
83
|
-
expect(Metanorma::Utils.numeric_escapes("AéB"))
|
84
|
-
.to be_equivalent_to "AéB"
|
85
|
-
expect(Metanorma::Utils.numeric_escapes("A<X>é</X>B"))
|
86
|
-
.to be_equivalent_to "A<X>é</X>B"
|
87
|
-
end
|
88
|
-
end
|