metanorma-utils 1.4.4.1 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57ecf7558228131c734f18189db5fe9579683f11c9f8269f5edf430412054cb2
4
- data.tar.gz: 4762e8db65f0a9e03e6a0c958d3e40968b5194824f1018e5aea0f8aca1096a90
3
+ metadata.gz: cf98f7674d114f222187c3da69bd8c436990eaec0a9a988402afdd8e178fe2e8
4
+ data.tar.gz: fecee536903d05211404268e2408c983c32332aabdfaac56de813d7a7fdc8eef
5
5
  SHA512:
6
- metadata.gz: 644939cf2ef17f876d42224505ee084f57d1551ae44573f2792003c52392cd53fb3ae56cc872cba7f32680ca954738fefb1dda4c21d53395e74414c2140326ed
7
- data.tar.gz: 1f159cdbd7c383816693d5e1b4303829f498ba7e47b6af583388c246f736bd80533d26d53e2e1a381f027c7a5340cbf320dc7300eb0ecd766b52482aa7dbfc52
6
+ metadata.gz: e2f07346a598463eeb74fabb69e930ce7bb343a72e574303d3a22517532d421bb2df84733bcebd846bfce69b20d9cb1ee798d917dadcfe44f46920606a9b64c8
7
+ data.tar.gz: 8cb5b3a0b22c94d6945002d2735e4babc9809056bd14e26b396ec3d03391d5867829e21fad78955cca7c62cb876c56adb9d896feb53957c9c3da74dcd400bfa3
@@ -18,6 +18,9 @@ jobs:
18
18
  uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
19
19
  with:
20
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
21
24
  secrets:
22
25
  rubygems-api-key: ${{ secrets.METANORMA_CI_RUBYGEMS_API_KEY }}
23
26
  pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
data/lib/utils/image.rb CHANGED
@@ -127,12 +127,14 @@ module Metanorma
127
127
  # Check whether just the local path or the other specified relative path
128
128
  # works.
129
129
  def datauri(uri, local_dir = ".")
130
- return uri if datauri?(uri) || url?(uri) || absolute_path?(uri)
130
+ return uri if datauri?(uri) || url?(uri)
131
131
 
132
- path = [uri, File.join(local_dir, uri)].detect do |p|
132
+ options = absolute_path?(uri) ? [uri] : [uri, File.join(local_dir, uri)]
133
+ path = options.detect do |p|
133
134
  File.exist?(p) ? p : nil
134
135
  end
135
- unless path && File.exist?(path)
136
+
137
+ unless path
136
138
  warn "Image specified at `#{uri}` does not exist."
137
139
  return uri # Return original provided location
138
140
  end
data/lib/utils/main.rb CHANGED
@@ -3,6 +3,7 @@ require "tempfile"
3
3
  require "sterile"
4
4
  require "htmlentities"
5
5
  require "nokogiri"
6
+ require "csv"
6
7
 
7
8
  module Metanorma
8
9
  module Utils
data/lib/utils/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Utils
3
- VERSION = "1.4.4.1".freeze
3
+ VERSION = "1.4.5".freeze
4
4
  end
5
5
  end
data/lib/utils/xml.rb CHANGED
@@ -6,12 +6,19 @@ require "nokogiri"
6
6
 
7
7
  module Metanorma
8
8
  module Utils
9
- NAMECHAR = "\u0000-\u002c\u002f\u003a-\u0040\\u005b-\u005e"\
10
- "\u0060\u007b-\u00b6\u00b8-\u00bf\u00d7\u00f7\u037e"\
11
- "\u2000-\u200b"\
9
+ NAMECHAR = "\u0000-\u002c\u002f\u003a-\u0040\\u005b-\u005e" \
10
+ "\u0060\u007b-\u00b6\u00b8-\u00bf\u00d7\u00f7\u037e" \
11
+ "\u2000-\u200b" \
12
12
  "\u200e-\u203e\u2041-\u206f\u2190-\u2bff\u2ff0-\u3000".freeze
13
- NAMESTARTCHAR = "\\u002d\u002e\u0030-\u0039\u00b7\u0300-\u036f"\
13
+ NAMESTARTCHAR = "\\u002d\u002e\u0030-\u0039\u00b7\u0300-\u036f" \
14
14
  "\u203f-\u2040".freeze
15
+ NOKOHEAD = <<~HERE.freeze
16
+ <!DOCTYPE html SYSTEM
17
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
18
+ <html xmlns="http://www.w3.org/1999/xhtml">
19
+ <head> <title></title> <meta charset="UTF-8" /> </head>
20
+ <body> </body> </html>
21
+ HERE
15
22
 
16
23
  class << self
17
24
  def to_ncname(tag, asciionly: true)
@@ -31,14 +38,6 @@ module Metanorma
31
38
  node.nil? || node.id.nil? || node.id.empty? ? "_#{uuid}" : node.id
32
39
  end
33
40
 
34
- NOKOHEAD = <<~HERE.freeze
35
- <!DOCTYPE html SYSTEM
36
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
37
- <html xmlns="http://www.w3.org/1999/xhtml">
38
- <head> <title></title> <meta charset="UTF-8" /> </head>
39
- <body> </body> </html>
40
- HERE
41
-
42
41
  # block for processing XML document fragments as XHTML,
43
42
  # to allow for HTMLentities
44
43
  # Unescape special chars used in Asciidoctor substitution processing
@@ -55,12 +54,36 @@ module Metanorma
55
54
  end
56
55
  end
57
56
 
57
+ def noko_html(&block)
58
+ doc = ::Nokogiri::XML.parse(NOKOHEAD)
59
+ fragment = doc.fragment("")
60
+ ::Nokogiri::XML::Builder.with fragment, &block
61
+ fragment.to_xml(encoding: "US-ASCII").lines.map do |l|
62
+ l.gsub(/\s*\n/, "")
63
+ end
64
+ end
65
+
66
+ def to_xhtml_fragment(xml)
67
+ doc = ::Nokogiri::XML.parse(NOKOHEAD)
68
+ doc.fragment(xml)
69
+ end
70
+
58
71
  def ns(xpath)
59
72
  xpath.gsub(%r{/([a-zA-z])}, "/xmlns:\\1")
60
73
  .gsub(%r{::([a-zA-z])}, "::xmlns:\\1")
61
74
  .gsub(%r{\[([a-zA-z][a-z0-9A-Z@/-]* ?=)}, "[xmlns:\\1")
62
75
  .gsub(%r{\[([a-zA-z][a-z0-9A-Z@/-]*[/\[\]])}, "[xmlns:\\1")
63
76
  end
77
+
78
+ def numeric_escapes(xml)
79
+ c = HTMLEntities.new
80
+ xml.split(/(&[^ \r\n\t#;]+;)/).map do |t|
81
+ if /^(&[^ \t\r\n#;]+;)/.match?(t)
82
+ c.encode(c.decode(t), :hexadecimal)
83
+ else t
84
+ end
85
+ end.join
86
+ end
64
87
  end
65
88
  end
66
89
  end
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_dependency "asciidoctor", ">= 2"
28
28
  spec.add_dependency "concurrent-ruby"
29
+ spec.add_dependency "csv"
29
30
  spec.add_dependency "htmlentities", "~> 4.3.4"
30
31
  spec.add_dependency "marcel", "~> 1.0.0"
31
32
  spec.add_dependency "mime-types"
@@ -37,7 +38,6 @@ Gem::Specification.new do |spec|
37
38
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
38
39
  spec.add_development_dependency "guard", "~> 2.14"
39
40
  spec.add_development_dependency "guard-rspec", "~> 4.7"
40
- spec.add_development_dependency "metanorma-standoc", "~> 2.0"
41
41
  spec.add_development_dependency "rake", "~> 13.0"
42
42
  spec.add_development_dependency "rspec", "~> 3.6"
43
43
  spec.add_development_dependency "rubocop", "~> 1.5.2"
data/spec/img_spec.rb CHANGED
@@ -2,6 +2,38 @@ require "spec_helper"
2
2
  require "fileutils"
3
3
 
4
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
+
5
37
  it "recognises data uris" do
6
38
  expect(Metanorma::Utils.datauri?("data:img/gif,base64,ABBC"))
7
39
  .to eq true
@@ -306,10 +338,12 @@ RSpec.describe Metanorma::Utils do
306
338
  it "generates data uris" do
307
339
  expect(Metanorma::Utils.datauri("data:xyz")).to eq "data:xyz"
308
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="
309
- expect(Metanorma::Utils.datauri("rice_image1.png",
341
+ expect(Metanorma::Utils.datauri("rice_image1.png",
310
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="
311
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"
312
- expect(Metanorma::Utils.datauri("spec/fixtures/rice_image0.png")).to be_equivalent_to "spec/fixtures/rice_image0.png"
313
- expect{Metanorma::Utils.datauri("spec/fixtures/rice_image0.png")}.to output(%r{Image specified at `spec/fixtures/rice_image0\.png` does not exist\.}).to_stderr
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
314
348
  end
315
349
  end
data/spec/utils_spec.rb CHANGED
@@ -23,11 +23,10 @@ RSpec.describe Metanorma::Utils do
23
23
  end
24
24
 
25
25
  it "applies Asciidoctor substitutions" do
26
- require "metanorma-standoc"
27
- expect(Metanorma::Utils.asciidoc_sub("A -- B"))
26
+ expect(Metanorma::Utils.asciidoc_sub("A -- B", "html"))
28
27
  .to eq "A&#8201;&#8212;&#8201;B"
29
- expect(Metanorma::Utils.asciidoc_sub("*A* stem:[x]"))
30
- .to eq "<strong>A</strong> <stem type=\"AsciiMath\">x</stem>"
28
+ expect(Metanorma::Utils.asciidoc_sub("*A* stem:[x]", "html"))
29
+ .to eq "<strong>A</strong> \\$x\\$"
31
30
  end
32
31
 
33
32
  it "finds file path of docfile" do
data/spec/xml_spec.rb CHANGED
@@ -34,6 +34,12 @@ RSpec.describe Metanorma::Utils do
34
34
  expect(out).to be_equivalent_to <<~OUTPUT
35
35
  &lt;A&gt; –
36
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
+ &lt;A&gt; –
42
+ OUTPUT
37
43
  end
38
44
 
39
45
  it "wraps an Asciidoctor node in paragraph" do
@@ -69,7 +75,14 @@ RSpec.describe Metanorma::Utils do
69
75
 
70
76
  it "applies namespace to xpath" do
71
77
  expect(Metanorma::Utils.ns("//ab/Bb/c1-d[ancestor::c][d = 'x'][e/f]"))
72
- .to be_equivalent_to("//xmlns:ab/xmlns:Bb/xmlns:c1-d[ancestor::xmlns:c]"\
78
+ .to be_equivalent_to("//xmlns:ab/xmlns:Bb/xmlns:c1-d[ancestor::xmlns:c]" \
73
79
  "[xmlns:d = 'x'][xmlns:e/xmlns:f]")
74
80
  end
81
+
82
+ it "converts HTML escapes to hex" do
83
+ expect(Metanorma::Utils.numeric_escapes("A&eacute;B"))
84
+ .to be_equivalent_to "A&#xe9;B"
85
+ expect(Metanorma::Utils.numeric_escapes("A<X>&eacute;</X>B"))
86
+ .to be_equivalent_to "A<X>&#xe9;</X>B"
87
+ end
75
88
  end
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.1
4
+ version: 1.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-25 00:00:00.000000000 Z
11
+ date: 2022-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: csv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: htmlentities
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -178,20 +192,6 @@ dependencies:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
194
  version: '4.7'
181
- - !ruby/object:Gem::Dependency
182
- name: metanorma-standoc
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '2.0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '2.0'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: rake
197
197
  requirement: !ruby/object:Gem::Requirement