relaton-bib 2.1.2 → 2.1.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: 103ee7e7e99ea81a307302c1dd476f812a7b1f9b1653213062e0bf80b9950987
4
- data.tar.gz: 031625043b1a7b9d6a2d2d674b68f500ccfec8f836c7d9d645a8f4e751cd88e1
3
+ metadata.gz: c5fed587d3ea43b2fdba3f26039e44b076eea06413c7d44c815c44054bc2006a
4
+ data.tar.gz: 1ce1ef4de4d2cc010e899971a247bba869ec67f588423dcd5e1e9d44beb36932
5
5
  SHA512:
6
- metadata.gz: 34d61ff26b50b995ac955707449111866cd15f30c68beda845f0ae3fcb7fe04e1e7999b8c560b3f874dac83e0777cbc7b26723000c8cfd8b0c2e7f11b734e7cf
7
- data.tar.gz: 838061a378904a0a338e9c87f569099b45656e33614265eb07a61afaa9e7e0b76f5278faeb4e414451fc31c11936867c3db01e61e52f65cd7cc490510e1967bc
6
+ metadata.gz: 10279cf57d50ddb7e0339815be6edbc74ebc8568ffae16e2ca75f802939d3027639615fe117f060dc5985d0e3b074d021a4aa8a2a73745c6dd8aac7f71928f6c
7
+ data.tar.gz: a53c8ca8225e43038fab4dc8c39dde6871e8fffdbe1bbc3816a47379dbf79f5033c4a8b5cb2eaefa5aba6529714f289507160c19e0fc70e54541ce18fbe53fae
@@ -26,7 +26,14 @@ module Relaton
26
26
  end
27
27
 
28
28
  class LocalizedMarkedUpString < LocalizedStringAttrs
29
+ module ContentSanitization
30
+ def content=(value)
31
+ super(Relaton::Bib::Sanitizer.sanitize(value))
32
+ end
33
+ end
34
+
29
35
  attribute :content, :string, raw: true
36
+ prepend ContentSanitization
30
37
 
31
38
  xml do
32
39
  map_all to: :content
@@ -0,0 +1,54 @@
1
+ require "nokogiri"
2
+
3
+ module Relaton
4
+ module Bib
5
+ # Strips inline markup not in the basicdoc PureTextElement set
6
+ # (plus <p>, <eref>, <xref>, <fn>) from raw marked-up content strings.
7
+ # Disallowed elements are unwrapped: tags removed, inner text kept.
8
+ #
9
+ # <fn> is admitted beyond strict PureTextElement because bibliographic
10
+ # titles in real Metanorma input routinely carry footnotes (e.g. ISO
11
+ # standards titles with a disclaimer footnote), and downstream
12
+ # consumers — notably relaton-render's own inline-tag allow-list —
13
+ # already accept <fn> as a legitimate child of <title>. Stripping it
14
+ # here would break the round-trip.
15
+ module Sanitizer
16
+ ALLOWED = %w[
17
+ em strong sub sup tt underline strike smallcap br stem
18
+ p eref xref fn
19
+ ].freeze
20
+
21
+ RENAME = {
22
+ "italic" => "em",
23
+ }.freeze
24
+
25
+ TAG_RX = %r{<[a-zA-Z/!?]}
26
+
27
+ def self.sanitize(content)
28
+ return content unless sanitizable?(content)
29
+
30
+ fragment = Nokogiri::XML::DocumentFragment.parse(content)
31
+ return content if fragment.errors.any?
32
+
33
+ sanitize_children(fragment)
34
+ fragment.children.map { |c| c.to_xml(encoding: "UTF-8") }.join
35
+ end
36
+
37
+ def self.sanitizable?(content)
38
+ content.is_a?(::String) && !content.empty? && content.match?(TAG_RX)
39
+ end
40
+ private_class_method :sanitizable?
41
+
42
+ def self.sanitize_children(node)
43
+ node.children.to_a.each do |child|
44
+ next unless child.element?
45
+
46
+ child.name = RENAME[child.name] if RENAME.key?(child.name)
47
+ sanitize_children(child)
48
+ child.replace(child.children) unless ALLOWED.include?(child.name)
49
+ end
50
+ end
51
+ private_class_method :sanitize_children
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  module Relaton
2
2
  module Bib
3
- VERSION = "2.1.2".freeze
3
+ VERSION = "2.1.4".freeze
4
4
  end
5
5
  end
data/lib/relaton/bib.rb CHANGED
@@ -7,6 +7,7 @@ require "rfcxml"
7
7
  require "relaton/core"
8
8
  require_relative "bib/version"
9
9
  require_relative "bib/util"
10
+ require_relative "bib/sanitizer"
10
11
  require_relative "bib/namespace_helper"
11
12
  require_relative "bib/item_data"
12
13
  require_relative "bib/model/item"
@@ -32,7 +33,7 @@ module Relaton
32
33
  # @return [Hash{String=>String}] schema versions
33
34
  #
34
35
  def schema_versions
35
- @@schema_versions ||= JSON.parse File.read(File.join(__dir__, "../../grammars/versions.json"))
36
+ @@schema_versions ||= JSON.parse File.read(File.join(__dir__, "bib/versions.json"))
36
37
  end
37
38
  end
38
39
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.1.4
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-05-07 00:00:00.000000000 Z
11
+ date: 2026-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bibtex-ruby
@@ -160,11 +160,6 @@ files:
160
160
  - bin/rspec
161
161
  - bin/setup
162
162
  - docs/hash.adoc
163
- - grammars/basicdoc.rng
164
- - grammars/biblio-compile.rng
165
- - grammars/biblio-standoc.rng
166
- - grammars/biblio.rng
167
- - grammars/versions.json
168
163
  - lib/relaton/bib.rb
169
164
  - lib/relaton/bib/converter/asciibib.rb
170
165
  - lib/relaton/bib/converter/asciibib/to_asciibib.rb
@@ -232,8 +227,10 @@ files:
232
227
  - lib/relaton/bib/model/validity.rb
233
228
  - lib/relaton/bib/model/version.rb
234
229
  - lib/relaton/bib/namespace_helper.rb
230
+ - lib/relaton/bib/sanitizer.rb
235
231
  - lib/relaton/bib/util.rb
236
232
  - lib/relaton/bib/version.rb
233
+ - lib/relaton/bib/versions.json
237
234
  - relaton-bib.gemspec
238
235
  homepage: https://github.com/relaton/relaton-bib
239
236
  licenses: