metanorma-utils 1.11.2 → 1.11.4

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: fb7eb442187f8f1129b1e5e0a6ae9e05f504522cb55c2a3f75b784fc803717cf
4
- data.tar.gz: 6819e04fc69ba93d601ce0053905db9ab10cea6d1e4af39e51a6d3b283603c02
3
+ metadata.gz: a8c2df70df3cd5a6bef631ad7d34473f3f1784a9f768d1888dc4ac97f11e9498
4
+ data.tar.gz: dc3a32cdeed25c29f9e4a417f13f955b34ce7b71e20fa8ccfd5266dc507c8e89
5
5
  SHA512:
6
- metadata.gz: f21d1d2c7431b3de60715d50848d1a9ae6314c0dce3918a4db1d020e81928fff965148c8de4865186ab470e2242f775d35184ea212aa9c96f988a9ee32fc06bf
7
- data.tar.gz: cc86b4e88d4cb126ac2d7824a996341db7194724ff95242bf17f4d2743a56552bb01486fb122e674901012cfe6a7f361acba60dd9504b98af7b8a8f7bbf3dbb8
6
+ metadata.gz: bc965c8edc5dc9cbfe074e27991a0866c94c237720c73e953352a471d214a542a515bef6f24d309c87d681ea6508d1d2183b0a9da89baeac37e1a97a75598db1
7
+ data.tar.gz: a6744e87b03d506a040d6b4dde5c4855012f15a85b5a454cc234a8ad3103f6aaf46829859f8156d297e5a32fc86c407698d657c27a5fda3792a9d647f7744995
data/lib/utils/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Utils
3
- VERSION = "1.11.2".freeze
3
+ VERSION = "1.11.4".freeze
4
4
  end
5
5
  end
data/lib/utils/xml.rb CHANGED
@@ -6,12 +6,6 @@ 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" \
12
- "\u200e-\u203e\u2041-\u206f\u2190-\u2bff\u2ff0-\u3000".freeze
13
- NAMESTARTCHAR = "\\u002d\u002e\u0030-\u0039\u00b7\u0300-\u036f" \
14
- "\u203f-\u2040".freeze
15
9
  NOKOHEAD = <<~HERE.freeze
16
10
  <!DOCTYPE html SYSTEM
17
11
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@@ -27,17 +21,110 @@ module Metanorma
27
21
  end
28
22
  end
29
23
 
30
- def to_ncname(tag, asciionly: true)
31
- asciionly and tag = HTMLEntities.new.encode(tag, :basic,
32
- :hexadecimal)
33
- start = tag[0]
34
- ret1 = if %r([#{NAMECHAR}#])o.match?(start)
35
- "_"
36
- else
37
- (%r([#{NAMESTARTCHAR}#])o.match?(start) ? "_#{start}" : start)
38
- end
39
- ret2 = tag[1..-1] || ""
40
- (ret1 || "") + ret2.gsub(%r([#{NAMECHAR}#])o, "_")
24
+ # Following XML requirements for NCName: https://www.w3.org/TR/xml-names/#NT-NCName
25
+ BASECHAR = "A-Za-z\u{C0}-\u{D6}\u{D8}-\u{F6}\u{F8}-\u{FF}\u{100}-\u{131}\u{134}-\u{13E}" \
26
+ "\u{141}-\u{148}\u{14A}-\u{17E}\u{180}-\u{1C3}\u{1CD}-\u{1F0}\u{1F4}-\u{1F5}" \
27
+ "\u{1FA}-\u{217}\u{250}-\u{2A8}\u{2BB}-\u{2C1}\u{386}\u{388}-\u{38A}\u{38C}" \
28
+ "\u{38E}-\u{3A1}\u{3A3}-\u{3CE}\u{3D0}-\u{3D6}\u{3DA}\u{3DC}\u{3DE}\u{3E0}" \
29
+ "\u{3E2}-\u{3F3}\u{401}-\u{40C}\u{40E}-\u{44F}\u{451}-\u{45C}\u{45E}-\u{481}" \
30
+ "\u{490}-\u{4C4}\u{4C7}-\u{4C8}\u{4CB}-\u{4CC}\u{4D0}-\u{4EB}\u{4EE}-\u{4F5}" \
31
+ "\u{4F8}-\u{4F9}\u{531}-\u{556}\u{559}\u{561}-\u{586}\u{5D0}-\u{5EA}" \
32
+ "\u{5F0}-\u{5F2}\u{621}-\u{63A}\u{641}-\u{64A}\u{671}-\u{6B7}\u{6BA}-\u{6BE}" \
33
+ "\u{6C0}-\u{6CE}\u{6D0}-\u{6D3}\u{6D5}\u{6E5}-\u{6E6}\u{905}-\u{939}\u{93D}" \
34
+ "\u{958}-\u{961}\u{985}-\u{98C}\u{98F}-\u{990}\u{993}-\u{9A8}\u{9AA}-\u{9B0}" \
35
+ "\u{9B2}\u{9B6}-\u{9B9}\u{9DC}-\u{9DD}\u{9DF}-\u{9E1}\u{9F0}-\u{9F1}" \
36
+ "\u{A05}-\u{A0A}\u{A0F}-\u{A10}\u{A13}-\u{A28}\u{A2A}-\u{A30}\u{A32}-\u{A33}" \
37
+ "\u{A35}-\u{A36}\u{A38}-\u{A39}\u{A59}-\u{A5C}\u{A5E}\u{A72}-\u{A74}" \
38
+ "\u{A85}-\u{A8B}\u{A8D}\u{A8F}-\u{A91}\u{A93}-\u{AA8}\u{AAA}-\u{AB0}" \
39
+ "\u{AB2}-\u{AB3}\u{AB5}-\u{AB9}\u{ABD}\u{AE0}\u{B05}-\u{B0C}\u{B0F}-\u{B10}" \
40
+ "\u{B13}-\u{B28}\u{B2A}-\u{B30}\u{B32}-\u{B33}\u{B36}-\u{B39}\u{B3D}" \
41
+ "\u{B5C}-\u{B5D}\u{B5F}-\u{B61}\u{B85}-\u{B8A}\u{B8E}-\u{B90}\u{B92}-\u{B95}" \
42
+ "\u{B99}-\u{B9A}\u{B9C}\u{B9E}-\u{B9F}\u{BA3}-\u{BA4}\u{BA8}-\u{BAA}" \
43
+ "\u{BAE}-\u{BB5}\u{BB7}-\u{BB9}\u{C05}-\u{C0C}\u{C0E}-\u{C10}\u{C12}-\u{C28}" \
44
+ "\u{C2A}-\u{C33}\u{C35}-\u{C39}\u{C60}-\u{C61}\u{C85}-\u{C8C}\u{C8E}-\u{C90}" \
45
+ "\u{C92}-\u{CA8}\u{CAA}-\u{CB3}\u{CB5}-\u{CB9}\u{CDE}\u{CE0}-\u{CE1}" \
46
+ "\u{D05}-\u{D0C}\u{D0E}-\u{D10}\u{D12}-\u{D28}\u{D2A}-\u{D39}\u{D60}-\u{D61}" \
47
+ "\u{E01}-\u{E2E}\u{E30}\u{E32}-\u{E33}\u{E40}-\u{E45}\u{E81}-\u{E82}\u{E84}" \
48
+ "\u{E87}-\u{E88}\u{E8A}\u{E8D}\u{E94}-\u{E97}\u{E99}-\u{E9F}\u{EA1}-\u{EA3}" \
49
+ "\u{EA5}\u{EA7}\u{EAA}-\u{EAB}\u{EAD}-\u{EAE}\u{EB0}\u{EB2}-\u{EB3}\u{EBD}" \
50
+ "\u{EC0}-\u{EC4}\u{F40}-\u{F47}\u{F49}-\u{F69}\u{10A0}-\u{10C5}\u{10D0}-\u{10F6}" \
51
+ "\u{1100}\u{1102}-\u{1103}\u{1105}-\u{1107}\u{1109}\u{110B}-\u{110C}" \
52
+ "\u{110E}-\u{1112}\u{113C}\u{113E}\u{1140}\u{114C}\u{114E}\u{1150}" \
53
+ "\u{1154}-\u{1155}\u{1159}\u{115F}-\u{1161}\u{1163}\u{1165}\u{1167}\u{1169}" \
54
+ "\u{116D}-\u{116E}\u{1172}-\u{1173}\u{1175}\u{119E}\u{11A8}\u{11AB}" \
55
+ "\u{11AE}-\u{11AF}\u{11B7}-\u{11B8}\u{11BA}\u{11BC}-\u{11C2}\u{11EB}\u{11F0}" \
56
+ "\u{11F9}\u{1E00}-\u{1E9B}\u{1EA0}-\u{1EF9}\u{1F00}-\u{1F15}\u{1F18}-\u{1F1D}" \
57
+ "\u{1F20}-\u{1F45}\u{1F48}-\u{1F4D}\u{1F50}-\u{1F57}\u{1F59}\u{1F5B}\u{1F5D}" \
58
+ "\u{1F5F}-\u{1F7D}\u{1F80}-\u{1FB4}\u{1FB6}-\u{1FBC}\u{1FBE}\u{1FC2}-\u{1FC4}" \
59
+ "\u{1FC6}-\u{1FCC}\u{1FD0}-\u{1FD3}\u{1FD6}-\u{1FDB}\u{1FE0}-\u{1FEC}" \
60
+ "\u{1FF2}-\u{1FF4}\u{1FF6}-\u{1FFC}\u{2126}\u{212A}-\u{212B}\u{212E}" \
61
+ "\u{2180}-\u{2182}\u{3041}-\u{3094}\u{30A1}-\u{30FA}\u{3105}-\u{312C}" \
62
+ "\u{AC00}-\u{D7A3}".freeze
63
+ IDEOGRAPHIC = "\u{4E00}-\u{9FA5}\u{3007}\u{3021}-\u{3029}".freeze
64
+ LETTER = "#{BASECHAR}#{IDEOGRAPHIC}".freeze
65
+ DIGIT = "0-9\u{0660}-\u{0669}\u{06F0}-\u{06F9}\u{0966}-\u{096F}\u{09E6}-\u{09EF}" \
66
+ "\u{0A66}-\u{0A6F}\u{0AE6}-\u{0AEF}\u{0B66}-\u{0B6F}\u{0BE7}-\u{0BEF}" \
67
+ "\u{0C66}-\u{0C6F}\u{0CE6}-\u{0CEF}\u{0D66}-\u{0D6F}\u{0E50}-\u{0E59}" \
68
+ "\u{0ED0}-\u{0ED9}\u{0F20}-\u{0F29}".freeze
69
+ COMBINING_CHAR = "\u{0300}-\u{0345}\u{0360}-\u{0361}\u{0483}-\u{0486}\u{0591}-\u{05A1}" \
70
+ "\u{05A3}-\u{05B9}\u{05BB}-\u{05BD}\u{05BF}\u{05C1}-\u{05C2}\u{05C4}" \
71
+ "\u{064B}-\u{0652}\u{0670}\u{06D6}-\u{06DC}\u{06DD}-\u{06DF}" \
72
+ "\u{06E0}-\u{06E4}\u{06E7}-\u{06E8}\u{06EA}-\u{06ED}\u{0901}-\u{0903}" \
73
+ "\u{093C}\u{093E}-\u{094C}\u{094D}\u{0951}-\u{0954}\u{0962}-\u{0963}" \
74
+ "\u{0981}-\u{0983}\u{09BC}\u{09BE}\u{09BF}\u{09C0}-\u{09C4}" \
75
+ "\u{09C7}-\u{09C8}\u{09CB}-\u{09CD}\u{09D7}\u{09E2}-\u{09E3}\u{0A02}" \
76
+ "\u{0A3C}\u{0A3E}\u{0A3F}\u{0A40}-\u{0A42}\u{0A47}-\u{0A48}" \
77
+ "\u{0A4B}-\u{0A4D}\u{0A70}-\u{0A71}\u{0A81}-\u{0A83}\u{0ABC}" \
78
+ "\u{0ABE}-\u{0AC5}\u{0AC7}-\u{0AC9}\u{0ACB}-\u{0ACD}\u{0B01}-\u{0B03}" \
79
+ "\u{0B3C}\u{0B3E}-\u{0B43}\u{0B47}-\u{0B48}\u{0B4B}-\u{0B4D}" \
80
+ "\u{0B56}-\u{0B57}\u{0B82}-\u{0B83}\u{0BBE}-\u{0BC2}\u{0BC6}-\u{0BC8}" \
81
+ "\u{0BCA}-\u{0BCD}\u{0BD7}\u{0C01}-\u{0C03}\u{0C3E}-\u{0C44}" \
82
+ "\u{0C46}-\u{0C48}\u{0C4A}-\u{0C4D}\u{0C55}-\u{0C56}\u{0C82}-\u{0C83}" \
83
+ "\u{0CBE}-\u{0CC4}\u{0CC6}-\u{0CC8}\u{0CCA}-\u{0CCD}\u{0CD5}-\u{0CD6}" \
84
+ "\u{0D02}-\u{0D03}\u{0D3E}-\u{0D43}\u{0D46}-\u{0D48}\u{0D4A}-\u{0D4D}" \
85
+ "\u{0D57}\u{0E31}\u{0E34}-\u{0E3A}\u{0E47}-\u{0E4E}\u{0EB1}" \
86
+ "\u{0EB4}-\u{0EB9}\u{0EBB}-\u{0EBC}\u{0EC8}-\u{0ECD}\u{0F18}-\u{0F19}" \
87
+ "\u{0F35}\u{0F37}\u{0F39}\u{0F3E}\u{0F3F}\u{0F71}-\u{0F84}" \
88
+ "\u{0F86}-\u{0F8B}\u{0F90}-\u{0F95}\u{0F97}\u{0F99}-\u{0FAD}" \
89
+ "\u{0FB1}-\u{0FB7}\u{0FB9}\u{20D0}-\u{20DC}\u{20E1}\u{302A}-\u{302F}" \
90
+ "\u{3099}\u{309A}".freeze
91
+ EXTENDER = "\u{00B7}\u{02D0}\u{02D1}\u{0387}\u{0640}\u{0E46}\u{0EC6}\u{3005}" \
92
+ "\u{3031}-\u{3035}\u{309D}-\u{309E}\u{30FC}-\u{30FE}".freeze
93
+
94
+ # NCName specific constants - NCName is "an XML Name, minus the :"
95
+ # NCName = (Letter | '_') (NCNameChar)*
96
+ NCNAME_START_CHAR = "#{LETTER}_".freeze
97
+ NCNAME_CHAR = "#{LETTER}#{DIGIT}._\\-#{COMBINING_CHAR}#{EXTENDER}".freeze
98
+ INVALID_NCNAME_START_REGEXP = /[^#{NCNAME_START_CHAR}]/.freeze
99
+ INVALID_NCNAME_CHAR_REGEXP = /[^#{NCNAME_CHAR}]/.freeze
100
+ SAFE_NCNAME_REGEXP = /\A[#{NCNAME_START_CHAR}][#{NCNAME_CHAR}]*\z/.freeze
101
+ NCNAME_INVALID = "_".freeze
102
+
103
+ # A utility method for escaping XML NCNames (XML Names without colons).
104
+ #
105
+ # to_ncname('1 < 2 & 3')
106
+ # # => "1___2___3"
107
+ #
108
+ # It follows the requirements of the specification for NCName: https://www.w3.org/TR/xml-names/#NT-NCName
109
+ # NCName is "an XML Name, minus the :"
110
+ def to_ncname(name, asciionly: false)
111
+ name, valid = to_ncname_prep(name, asciionly)
112
+ valid and return name
113
+ starting_char = name[0]
114
+ starting_char.gsub!(INVALID_NCNAME_START_REGEXP, NCNAME_INVALID)
115
+ name.size == 1 and return starting_char
116
+ following_chars = name[1..-1]
117
+ following_chars.gsub!(INVALID_NCNAME_CHAR_REGEXP, NCNAME_INVALID)
118
+ following_chars.gsub!(":", NCNAME_INVALID)
119
+ starting_char << following_chars
120
+ end
121
+
122
+ def to_ncname_prep(name, asciionly)
123
+ name = name&.to_s
124
+ name.nil? and name = ""
125
+ asciionly and name = HTMLEntities.new.encode(name,
126
+ :basic, :hexadecimal)
127
+ [name, name.nil? || name.empty? || name.match?(SAFE_NCNAME_REGEXP)]
41
128
  end
42
129
 
43
130
  def anchor_or_uuid(node = nil)
@@ -42,11 +42,10 @@ Gem::Specification.new do |spec|
42
42
  spec.add_development_dependency "rake", "~> 13.0"
43
43
  spec.add_development_dependency "rspec", "~> 3.6"
44
44
  spec.add_development_dependency "rubocop", "~> 1"
45
- spec.add_development_dependency "rubocop-performance"
45
+ spec.add_development_dependency "rubocop-performance"
46
46
  spec.add_development_dependency "simplecov", "~> 0.15"
47
47
  spec.add_development_dependency "timecop", "~> 0.9"
48
- spec.add_development_dependency "vcr", "~> 6.1.0"
49
48
  spec.add_development_dependency "webmock"
50
49
  spec.add_development_dependency "xml-c14n"
51
- #spec.metadata["rubygems_mfa_required"] = "true"
50
+ # spec.metadata["rubygems_mfa_required"] = "true"
52
51
  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.11.2
4
+ version: 1.11.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-17 00:00:00.000000000 Z
11
+ date: 2025-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -262,20 +262,6 @@ dependencies:
262
262
  - - "~>"
263
263
  - !ruby/object:Gem::Version
264
264
  version: '0.9'
265
- - !ruby/object:Gem::Dependency
266
- name: vcr
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - "~>"
270
- - !ruby/object:Gem::Version
271
- version: 6.1.0
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - "~>"
277
- - !ruby/object:Gem::Version
278
- version: 6.1.0
279
265
  - !ruby/object:Gem::Dependency
280
266
  name: webmock
281
267
  requirement: !ruby/object:Gem::Requirement