isodoc 3.7.4.pre.alpha.3 → 3.7.4.pre.alpha.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: 958bda381712f8b0f32a6a72d94aca6db070e09402b4b23febcf17d3ed04706f
4
- data.tar.gz: eedbfd933bc474d4856d979619874f4b27002dc2756461473c765026f3a899d6
3
+ metadata.gz: 2ac7ddfe63cebf2580cf793bda41a563367084ed78ac621f9914bbb1c143eedf
4
+ data.tar.gz: 8771309031dc897df944bb3d0d38b604eca00ef7ffe5f67d0eb17104a72d1627
5
5
  SHA512:
6
- metadata.gz: 8cf6ca52b75c0a2c5758c8acdf8d412f1a4fb390af7ee2453d0d9d87f55021dcd7ea5a1a90893c00a4f2139ed86b5326ab02dbbd083aeedcb3b80ff09b0cf320
7
- data.tar.gz: ff08979e810bca8e30f78e3b5f28731fc47937716b2d2d42bfb67cb497d0bd463ac0879a5a16a8d16b3530ab26f1e34fbbcef519b8d5eb9169e13267a4aa10a0
6
+ metadata.gz: 74fd307bb5d2b69531726d7c7f05e8fbbc5532921f20e9fa8e98b61d3e292c3328a0a28daf05285f2750cd0ef15cd890a2e137b294b99bafc936b0334c1dbfbe
7
+ data.tar.gz: c022667c987d194c5308817b405b0cba5cdc446bd4caa7f1a046fdd8586e3799191c3a366663af99190575d37927ba09710d5b882468e9213921e053e3847f50
data/README.adoc CHANGED
@@ -100,3 +100,5 @@ The runtime SCSS compilation path (`css.rb#convert_scss`, which `require`s `sass
100
100
  * a downstream project resolves isodoc from git (e.g. `gem "isodoc", github: "metanorma/isodoc"`): bundler installs the gemspec's file list, which carries only `.scss`
101
101
 
102
102
  NOTE: Downstream maintainers: if your Gemfile pins isodoc from git, your HTML renders will `require "sassc-embedded"` at runtime even though released-gem consumers never do. A downstream `gem "sassc-embedded"` line in that setup is load-bearing, not dead weight — and it becomes droppable once you revert to a released isodoc gem.
103
+
104
+ Conversely, **do not declare `sassc-embedded` in this gem's gemspec** — not as a fix, not as a "missing dependency": released-gem consumers never execute that code path, and adding a compilation toolchain as a hard runtime dependency would burden every consumer for an optional path. The requirement belongs to the consumer's Gemfile precisely when the consumer's resolution pulls `.scss` sources.
data/isodoc.gemspec CHANGED
@@ -32,20 +32,23 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency "bigdecimal"
33
33
  spec.add_dependency "html2doc", "~> 1.12"
34
34
  # spec.add_dependency "isodoc-i18n", "~> 1.5" # already in relaton-render and mn-requirements
35
- spec.add_dependency "relaton-cli", ">= 3.0.0.pre.alpha", "< 3.1.0"
35
+ spec.add_dependency "relaton-cli", ">= 3.0.0", "< 3.1"
36
36
  # spec.add_dependency "metanorma-utils", "~> 2.0" # already in isodoc-i18n
37
37
  spec.add_dependency "mn2pdf", ">= 2.13"
38
38
  spec.add_dependency "mn-requirements", "~> 0.5.0"
39
- # Allowance for the relaton 3.0.0.pre family (mirrors the relaton-cli
40
- # allowance in #824): relaton 3.0.0.pre requires relaton-render
41
- # 3.0.0.pre, which joins the family's versioning and restores the 1.x
42
- # leaves as deprecated shims, so flavor stacks boot against it.
39
+ # Allowance for the relaton 3.0 family (mirrors the relaton-cli
40
+ # allowance in #824): relaton-render 3.0.0 joins the family's
41
+ # versioning and restores the 1.x leaves as deprecated shims, so
42
+ # flavor stacks boot against it.
43
43
  # Released isodoc lines keep resolving relaton-render 1.3.0; only a
44
- # stack that explicitly adopts the relaton prerelease co-resolves
45
- # 3.0.0.pre.
46
- spec.add_dependency "relaton-render", "~> 3.0.0.pre.alpha", "< 5"
44
+ # stack on this floor co-resolves the relaton 3.0 line.
45
+ spec.add_dependency "relaton-render", "~> 3.0", "< 5"
47
46
  spec.add_dependency "roman-numerals"
48
47
  spec.add_dependency "rouge", "~> 4.0"
48
+ # lib/isodoc/css.rb requires sassc-embedded (SassC::Engine) at
49
+ # SCSS-compile time; without a declared dependency, fresh minimal
50
+ # bundles crash at populate_css (metanorma/isodoc#862)
51
+ spec.add_dependency "sassc-embedded"
49
52
  spec.add_dependency "thread_safe"
50
53
  spec.add_dependency "twitter_cldr", ">= 6.6.0"
51
54
  spec.add_dependency "uuidtools"
@@ -86,8 +86,12 @@ module IsoDoc
86
86
  end
87
87
 
88
88
  def annex_delim_override(elem)
89
+ if instance_variable_defined?(:@annex_delim_override)
90
+ return @annex_delim_override
91
+ end
92
+
89
93
  m = elem.document.root.at(ns("//presentation-metadata/annex-delim"))
90
- m ? to_xml(m.children) : annex_delim(elem)
94
+ @annex_delim_override = m ? to_xml(m.children) : annex_delim(elem)
91
95
  end
92
96
 
93
97
  def annex_delim(_elem)
@@ -73,7 +73,18 @@ module IsoDoc
73
73
  def merge_second_preferred1(desgns, term)
74
74
  desgns[1..].each(&:remove)
75
75
  ret = l10n(desgns.map { |x| to_xml(x) }.join("; "))
76
- term.ancestors("fmt-related").empty? and ret = "<p>#{ret}</p>"
76
+ # Node#ancestors(selector) matches via XPath per ancestor; this runs
77
+ # per term, so walk parents directly.
78
+ in_fmt_related = false
79
+ parent = term.parent
80
+ while parent.is_a?(Nokogiri::XML::Element)
81
+ if parent.name == "fmt-related"
82
+ in_fmt_related = true
83
+ break
84
+ end
85
+ parent = parent.parent
86
+ end
87
+ in_fmt_related or ret = "<p>#{ret}</p>"
77
88
  ret
78
89
  end
79
90
 
@@ -78,10 +78,16 @@ module IsoDoc
78
78
  %w(&#x2014;)
79
79
  end
80
80
 
81
+ # Presentation metadata is fixed for the duration of conversion, but
82
+ # this runs per list item: the whole-document XPath per <ul> is
83
+ # quadratic on large documents. Memoize per converter instance.
81
84
  def ul_label_list_from_metadata(docxml)
85
+ if instance_variable_defined?(:@ul_label_list_from_metadata)
86
+ return @ul_label_list_from_metadata
87
+ end
88
+
82
89
  list = docxml.xpath(ns("//presentation-metadata/ul-label-list"))
83
- list.empty? and return nil
84
- list.map(&:text)
90
+ @ul_label_list_from_metadata = list.empty? ? nil : list.map(&:text)
85
91
  end
86
92
 
87
93
  def ul_label(elem)
@@ -92,10 +98,22 @@ module IsoDoc
92
98
  end
93
99
 
94
100
  def ul_label_value(elem)
95
- depth = elem.ancestors("ul, ol").size
101
+ depth = list_nesting_depth(elem)
96
102
  val = ul_label_list_from_metadata(elem.document.root) ||
97
103
  ul_label_list(elem)
98
104
  val[(depth - 1) % val.size]
99
105
  end
106
+
107
+ # Walk parents directly: Node#ancestors(selector) runs an XPath match
108
+ # per ancestor, which is quadratic on deeply nested lists.
109
+ def list_nesting_depth(elem)
110
+ depth = 0
111
+ node = elem.parent
112
+ while node.is_a?(Nokogiri::XML::Element)
113
+ depth += 1 if node.name == "ul" || node.name == "ol"
114
+ node = node.parent
115
+ end
116
+ depth
117
+ end
100
118
  end
101
119
  end
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "3.7.4.pre.alpha.3".freeze
2
+ VERSION = "3.7.4.pre.alpha.5".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.4.pre.alpha.3
4
+ version: 3.7.4.pre.alpha.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: 2026-10-26 00:00:00.000000000 Z
11
+ date: 2026-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -58,20 +58,20 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 3.0.0.pre.alpha
61
+ version: 3.0.0
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: 3.1.0
64
+ version: '3.1'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: 3.0.0.pre.alpha
71
+ version: 3.0.0
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: 3.1.0
74
+ version: '3.1'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: mn2pdf
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: 3.0.0.pre.alpha
109
+ version: '3.0'
110
110
  - - "<"
111
111
  - !ruby/object:Gem::Version
112
112
  version: '5'
@@ -116,7 +116,7 @@ dependencies:
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: 3.0.0.pre.alpha
119
+ version: '3.0'
120
120
  - - "<"
121
121
  - !ruby/object:Gem::Version
122
122
  version: '5'
@@ -148,6 +148,20 @@ dependencies:
148
148
  - - "~>"
149
149
  - !ruby/object:Gem::Version
150
150
  version: '4.0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: sassc-embedded
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :runtime
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
151
165
  - !ruby/object:Gem::Dependency
152
166
  name: thread_safe
153
167
  requirement: !ruby/object:Gem::Requirement