relaton-render 1.1.0 → 1.2.1

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: d4f484dc0f8b679d7aa4e200ea5288c7b08120ed482eb50dbb4feb6d8f4ebc18
4
- data.tar.gz: 5775265c429b2861268f838b794d8a2a874c6caa789b73d77b4e1e6983b7a57e
3
+ metadata.gz: 4bcf0448a633329d256fee9e297e7c50182a5e214014a7cb78a9d3ab7ec3147f
4
+ data.tar.gz: 766c8ddbb23a88334eaf2d3be35894ffe62ce300126c7cdded5af90e8341a7a6
5
5
  SHA512:
6
- metadata.gz: 4fd197eee29210c266c87a38b195a6358d8446aefac03baac057b15a93524b2f590c5470ed1ae419595b986067d20f725878e058574acd146b0435e4eebce8be
7
- data.tar.gz: b53ec5cadb07fe27883468c83b1799ed0191efaa56cf5bf11715f0320a4d9c0329ce99e7447e8b558b2ae1ebac953f42c20e6f83f7a3831bee952c27452992bf
6
+ metadata.gz: 9ff2d1381a4075e7c0c5b46a5fb174b1190621b25760600928f2b49da2379eea21006f17468d74c89e9c1f30cd8abb49f591bd5361e5ab57e029a6de04d09c57
7
+ data.tar.gz: 18b0f1710c29a3e8ce67f055d3dcdefeaf62191ff7711beaa296bf95f669f49699186868172a617a429765c9544de52eb30669b98c2b63f41a46c76b36b91b65
@@ -241,7 +241,7 @@ module Relaton
241
241
 
242
242
  def valid_parse(ret)
243
243
  @i18n.select(nil).get["no_date"] == ret and return nil
244
- ret
244
+ ret&.gsub(/\+\+\+(.+?)\+\+\+/, '\1')
245
245
  end
246
246
 
247
247
  # expect array of Relaton objects, in sorted order
@@ -82,6 +82,8 @@ module Relaton
82
82
  end
83
83
  end
84
84
 
85
+ ALLOWED_INLINE_TAGS = %w[em strong sub sup a smallcap].freeze
86
+
85
87
  private
86
88
 
87
89
  def blank?(text)
@@ -93,6 +95,19 @@ module Relaton
93
95
  "<esc>#{text}</esc>"
94
96
  end
95
97
 
98
+ # Strip any tag not in ALLOWED_INLINE_TAGS, in both literal (<tag>) and
99
+ # entity-encoded (&lt;tag&gt;) forms. Used to defend Liquid template
100
+ # output against embedded structural markup (most commonly <title>) in
101
+ # bibliographic text fields, where relaton-bib may surface either form
102
+ # depending on lutaml-model serialisation behaviour.
103
+ def sanitise_inline_markup(str)
104
+ blank?(str) and return str
105
+ allowed = ALLOWED_INLINE_TAGS.join("|")
106
+ literal = %r{</?(?!(?:#{allowed})\b)[A-Za-z][\w:-]*(?:\s[^>]*)?/?>}
107
+ encoded = %r{&lt;/?(?!(?:#{allowed})\b)[A-Za-z][\w:-]*(?:\s[^&]*?)?/?&gt;}
108
+ str.gsub(literal, "").gsub(encoded, "")
109
+ end
110
+
96
111
  def wrap_in_esc(obj)
97
112
  case obj
98
113
  when String then esc(obj)
@@ -4,15 +4,12 @@ module Relaton
4
4
  def content(node)
5
5
  node.nil? and return node
6
6
  node.is_a?(String) and
7
- return node.strip.gsub("</title>", "").gsub("<title>", "")
7
+ return sanitise_inline_markup(node.strip)
8
8
  .gsub(/>\n\s*</, "><").gsub(/\n\s*/, " ")
9
9
  node.content.is_a?(Array) and return node.content.map { |x| content(x) }
10
- ret = node.content.strip
11
- .gsub("</title>", "").gsub("<title>", "")
10
+ ret = sanitise_inline_markup(node.content.strip)
12
11
  # safeguard against indented XML
13
12
  ret.gsub(/>\n\s*</, "><").gsub(/\n\s*/, " ")
14
- # node.children.map { |n| n.text? ? n.content : n.to_xml }.join
15
- # node.text? ? node.content.strip : node.to_xml.strip
16
13
  end
17
14
 
18
15
  def extract_orgname(org)
@@ -1,5 +1,5 @@
1
1
  module Relaton
2
2
  module Render
3
- VERSION = "1.1.0".freeze
3
+ VERSION = "1.2.1".freeze
4
4
  end
5
5
  end
@@ -19,11 +19,11 @@ Gem::Specification.new do |spec|
19
19
  spec.bindir = "exe"
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
22
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.2.0")
23
23
 
24
24
  spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "canon"
25
26
  spec.add_development_dependency "debug"
26
- spec.add_development_dependency "equivalent-xml", "~> 0.6"
27
27
  spec.add_development_dependency "isodoc"
28
28
  spec.add_development_dependency "openssl"
29
29
  spec.add_development_dependency "rake", ">= 12.3.3"
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_dependency "base64" # Liquid
34
34
  spec.add_dependency "bigdecimal" # Liquid
35
- spec.add_dependency "isodoc-i18n", "~> 1.4.0"
35
+ spec.add_dependency "isodoc-i18n", "~> 1.5.0"
36
36
  spec.add_dependency "liquid", "~> 5"
37
37
  spec.add_dependency "metanorma-utils", "~> 2"
38
38
  spec.add_dependency "nokogiri"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-render
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-04-09 00:00:00.000000000 Z
11
+ date: 2026-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: debug
28
+ name: canon
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: equivalent-xml
42
+ name: debug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.6'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0.6'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: isodoc
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 1.4.0
159
+ version: 1.5.0
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 1.4.0
166
+ version: 1.5.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: liquid
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -313,7 +313,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
313
313
  requirements:
314
314
  - - ">="
315
315
  - !ruby/object:Gem::Version
316
- version: 2.7.0
316
+ version: 3.2.0
317
317
  required_rubygems_version: !ruby/object:Gem::Requirement
318
318
  requirements:
319
319
  - - ">="