metanorma-iso 3.5.3 → 3.5.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: 66c9e9b0d1e7b7543e36cc45fcf3da25412f1f5a07f743a1cfc7a13258a9bcb7
4
- data.tar.gz: c9f02b3911b7e103ba710fd51f9e08266c185c3e3de5a0b0cba2d718f96ed768
3
+ metadata.gz: 4f1dc7166ec0bc4f7cfef9674b44ab2536dc8fcca3945005c6414049de029543
4
+ data.tar.gz: 88a444de3e410a1bfc61427b8c563528c726ac97982d583900fa7ea6c01a5fb5
5
5
  SHA512:
6
- metadata.gz: 2f72541b1c6ddf638541c2724ce5bad4c1f7fab8141f0250b9d0f01531f21437f5b1f08ff80ee08bbeac9f00ffff96141880a816a131d0776a9d391772d22c13
7
- data.tar.gz: 4a6a3271493c97dcd34eac4acda96ad20dfbeddf526bfa87b8407d94c72c75456767016f348d2ad88485290cab68977110edf23476b43037b3f2a4f9a0b54de2
6
+ metadata.gz: c07733849883b99aaa801630ff27fcda045fd6c7a512e7faed3f37b73af0a4925c6d92ddc6edef85adad50c34c65ddb32c1c265a96cde3c789e51c5b7782c0a6
7
+ data.tar.gz: 0e4f6bd8b003198fab58d3b3a30c0786b05011f4bb56ba6fb28995091b50f82baabf6f1adb9158ba9de0e6c80c8fd54c8f20c9997a30e230a097759c8a62a8f5
@@ -332,6 +332,12 @@ module Metanorma
332
332
  vocab: @vocab, amd: @amd, i18n: @i18n,
333
333
  novalid: @novalid, document: @localdir
334
334
  )
335
+ # ModelValidator deserializes the full document into a typed model
336
+ # tree — for large documents that tree is gigabytes on top of the
337
+ # converter-phase garbage (asciidoctor tree, macro temporaries).
338
+ # Collect the garbage first so the spike stacks on the live set,
339
+ # not on the high-water mark of earlier phases.
340
+ GC.start
335
341
  Metanorma::Iso::Validation::ModelValidator.run(
336
342
  doc.to_xml, log: @log, state: state,
337
343
  profile: validation_profile
@@ -57,12 +57,12 @@ module Metanorma
57
57
 
58
58
  def add_id(shared, id, node)
59
59
  shared.doc_ids[id] ||= { node: node }
60
- shared.id_seq << id unless shared.id_seq.include?(id)
60
+ shared.id_seq << id
61
61
  end
62
62
 
63
63
  def add_anchor(shared, anchor, node)
64
64
  shared.doc_anchors[anchor] ||= { node: node }
65
- shared.anchor_seq << anchor unless shared.anchor_seq.include?(anchor)
65
+ shared.anchor_seq << anchor
66
66
  end
67
67
 
68
68
  def collect_duplicate_issues(context)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "set"
4
+
3
5
  module Metanorma
4
6
  module Iso
5
7
  module Validation
@@ -7,6 +9,10 @@ module Metanorma
7
9
  # collection) and read by later rules (e.g. xref integrity).
8
10
  #
9
11
  # Lives on {Context} so every rule sees the same shared map within a run.
12
+ #
13
+ # The seq members are Sets: they collect one entry per identifier
14
+ # across the whole document, and duplicate checks run per identifier,
15
+ # so Array#include? made collection quadratic in document size.
10
16
  SharedState = Struct.new(
11
17
  :doc_ids, :doc_anchors, :doc_xrefs, :id_seq, :anchor_seq,
12
18
  keyword_init: true
@@ -16,8 +22,8 @@ module Metanorma
16
22
  self.doc_ids ||= {}
17
23
  self.doc_anchors ||= {}
18
24
  self.doc_xrefs ||= {}
19
- self.id_seq ||= []
20
- self.anchor_seq ||= []
25
+ self.id_seq ||= Set.new
26
+ self.anchor_seq ||= Set.new
21
27
  end
22
28
  end
23
29
  end
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Iso
3
- VERSION = "3.5.3".freeze
3
+ VERSION = "3.5.4".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-iso
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.3
4
+ version: 3.5.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-10-30 00:00:00.000000000 Z
11
+ date: 2026-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-document