isodoc 1.4.1 → 1.5.3
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 +4 -4
- data/.github/workflows/rake.yml +17 -33
- data/isodoc.gemspec +3 -2
- data/lib/isodoc/convert.rb +1 -0
- data/lib/isodoc/function/inline.rb +1 -1
- data/lib/isodoc/function/references.rb +1 -1
- data/lib/isodoc/function/to_word_html.rb +2 -2
- data/lib/isodoc/function/utils.rb +4 -4
- data/lib/isodoc/html_function/postprocess.rb +3 -2
- data/lib/isodoc/presentation_function/block.rb +6 -0
- data/lib/isodoc/presentation_function/inline.rb +5 -1
- data/lib/isodoc/presentation_function/section.rb +1 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/inline.rb +2 -2
- data/lib/isodoc/word_function/postprocess_cover.rb +1 -1
- data/lib/isodoc/xref/xref_counter.rb +44 -12
- data/lib/isodoc/xref/xref_sect_gen.rb +33 -26
- data/spec/isodoc/blocks_spec.rb +82 -73
- data/spec/isodoc/inline_spec.rb +4 -1
- data/spec/isodoc/postproc_spec.rb +2 -0
- data/spec/isodoc/presentation_xml_spec.rb +5 -5
- data/spec/isodoc/xref_spec.rb +310 -2
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '084d4f07e708055ffd6bdd9b3a7aef78e9b437b5938cb3a0594f9a5f44dae6bd'
|
4
|
+
data.tar.gz: 046f4c2c521c1a3a13a502369229df28e3aa64eb4319eb2dc8761127d473f918
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7d440fc7f367c502b4b9fe61faa41b1c2ed3f189edaae426777f849217f98a81fb27fbd7facdbf5051b50a7bea6c23d88b5adcbecb48ea92502b6bb81c0672f
|
7
|
+
data.tar.gz: 27cfead9b111414f1dd384869707cd6e55db06680574d6035c203019272e435ee0c6c616114867531384715be89024e1647faf6743d053c196d5e447b7d1b29e
|
data/.github/workflows/rake.yml
CHANGED
@@ -16,17 +16,17 @@ jobs:
|
|
16
16
|
strategy:
|
17
17
|
fail-fast: false
|
18
18
|
matrix:
|
19
|
-
ruby: [ '2.6', '2.5', '2.4' ]
|
19
|
+
ruby: [ '2.7', '2.6', '2.5', '2.4' ]
|
20
20
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
21
21
|
experimental: [ false ]
|
22
22
|
include:
|
23
|
-
- ruby: '
|
23
|
+
- ruby: '3.0'
|
24
24
|
os: 'ubuntu-latest'
|
25
25
|
experimental: true
|
26
|
-
- ruby: '
|
26
|
+
- ruby: '3.0'
|
27
27
|
os: 'windows-latest'
|
28
28
|
experimental: true
|
29
|
-
- ruby: '
|
29
|
+
- ruby: '3.0'
|
30
30
|
os: 'macos-latest'
|
31
31
|
experimental: true
|
32
32
|
steps:
|
@@ -35,35 +35,19 @@ jobs:
|
|
35
35
|
- uses: ruby/setup-ruby@v1
|
36
36
|
with:
|
37
37
|
ruby-version: ${{ matrix.ruby }}
|
38
|
+
bundler-cache: true
|
38
39
|
|
39
|
-
- uses:
|
40
|
-
with:
|
41
|
-
path: vendor/bundle
|
42
|
-
key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
|
43
|
-
restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
|
44
|
-
|
45
|
-
- run: bundle config set path 'vendor/bundle'
|
46
|
-
|
47
|
-
- run: bundle install --jobs 4 --retry 3
|
48
|
-
|
49
|
-
- name: Install Inkscape macOS
|
50
|
-
if: matrix.os == 'macos-latest'
|
51
|
-
run: |
|
52
|
-
brew cask install inkscape
|
53
|
-
inkscape --version
|
54
|
-
|
55
|
-
- name: Install Inkscape Ubuntu
|
56
|
-
if: matrix.os == 'ubuntu-latest'
|
57
|
-
run: |
|
58
|
-
sudo add-apt-repository ppa:inkscape.dev/stable
|
59
|
-
sudo apt update
|
60
|
-
sudo apt install inkscape
|
61
|
-
inkscape --version
|
62
|
-
|
63
|
-
- name: Install Inkscape Windows
|
64
|
-
if: matrix.os == 'windows-latest'
|
65
|
-
run: |
|
66
|
-
choco install --no-progress -y inkscape
|
67
|
-
inkscape --version
|
40
|
+
- uses: metanorma/metanorma-build-scripts/inkscape-setup-action@master
|
68
41
|
|
69
42
|
- run: bundle exec rake
|
43
|
+
|
44
|
+
tests-passed:
|
45
|
+
needs: rake
|
46
|
+
runs-on: ubuntu-latest
|
47
|
+
steps:
|
48
|
+
- uses: peter-evans/repository-dispatch@v1
|
49
|
+
with:
|
50
|
+
token: ${{ secrets.METANORMA_CI_PAT_TOKEN || secrets.GITHUB_TOKEN }}
|
51
|
+
repository: ${{ github.repository }}
|
52
|
+
event-type: notify
|
53
|
+
client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'
|
data/isodoc.gemspec
CHANGED
@@ -30,11 +30,11 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
spec.add_dependency "asciimath"
|
32
32
|
spec.add_dependency "htmlentities", "~> 4.3.4"
|
33
|
-
spec.add_dependency "nokogiri", "
|
33
|
+
spec.add_dependency "nokogiri", "~> 1.10.4"
|
34
34
|
spec.add_dependency "thread_safe"
|
35
35
|
spec.add_dependency "uuidtools"
|
36
36
|
spec.add_dependency "html2doc", "~> 1.0.0"
|
37
|
-
spec.add_dependency "liquid"
|
37
|
+
spec.add_dependency "liquid", "~> 4"
|
38
38
|
spec.add_dependency "twitter_cldr"
|
39
39
|
spec.add_dependency "roman-numerals"
|
40
40
|
spec.add_dependency "metanorma", "~> 1.2.0"
|
@@ -50,4 +50,5 @@ Gem::Specification.new do |spec|
|
|
50
50
|
spec.add_development_dependency "rubocop", "= 0.54.0"
|
51
51
|
spec.add_development_dependency "simplecov", "~> 0.15"
|
52
52
|
spec.add_development_dependency "timecop", "~> 0.9"
|
53
|
+
spec.add_development_dependency "rexml"
|
53
54
|
end
|
data/lib/isodoc/convert.rb
CHANGED
@@ -39,7 +39,7 @@ module IsoDoc::Function
|
|
39
39
|
"uri[@type = 'citation']"))
|
40
40
|
return href unless url
|
41
41
|
href = suffix_url(url.text)
|
42
|
-
anchor = node&.at(ns(".//locality[@type = 'anchor']"))&.text
|
42
|
+
anchor = node&.at(ns(".//locality[@type = 'anchor']"))&.text&.strip
|
43
43
|
anchor and href += "##{anchor}"
|
44
44
|
href
|
45
45
|
end
|
@@ -87,7 +87,7 @@ module IsoDoc::Function
|
|
87
87
|
|
88
88
|
def omit_docid_prefix(prefix)
|
89
89
|
return true if prefix.nil? || prefix.empty?
|
90
|
-
return %w(ISO IEC ITU W3C metanorma).include? prefix
|
90
|
+
return %w(ISO IEC IEV ITU W3C metanorma rfc-anchor).include? prefix
|
91
91
|
end
|
92
92
|
|
93
93
|
def date_note_process(b, ref)
|
@@ -109,7 +109,7 @@ module IsoDoc::Function
|
|
109
109
|
@meta.get
|
110
110
|
end
|
111
111
|
|
112
|
-
def middle_title(out)
|
112
|
+
def middle_title(_isoxml, out)
|
113
113
|
out.p(**{ class: "zzSTDTitle1" }) { |p| p << @meta.get[:doctitle] }
|
114
114
|
end
|
115
115
|
|
@@ -120,7 +120,7 @@ module IsoDoc::Function
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def middle(isoxml, out)
|
123
|
-
middle_title(out)
|
123
|
+
middle_title(isoxml, out)
|
124
124
|
middle_admonitions(isoxml, out)
|
125
125
|
i = scope isoxml, out, 0
|
126
126
|
i = norm_ref isoxml, out, i
|
@@ -152,8 +152,8 @@ module IsoDoc::Function
|
|
152
152
|
def populate_template(docxml, _format = nil)
|
153
153
|
meta = @meta
|
154
154
|
.get
|
155
|
-
.merge(@labels
|
156
|
-
.merge(@meta.labels
|
155
|
+
.merge(@labels ? {labels: @labels} : {})
|
156
|
+
.merge(@meta.labels ? {labels: @meta.labels} : {})
|
157
157
|
.merge(fonts_options || {})
|
158
158
|
template = liquid(docxml)
|
159
159
|
template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h)
|
@@ -161,7 +161,7 @@ module IsoDoc::Function
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def save_dataimage(uri, _relative_dir = true)
|
164
|
-
%r{^data:image/(?<imgtype>[^;]+);base64,(?<imgdata>.+)$} =~ uri
|
164
|
+
%r{^data:(image|application)/(?<imgtype>[^;]+);base64,(?<imgdata>.+)$} =~ uri
|
165
165
|
imgtype.sub!(/\+[a-z0-9]+$/, '') # svg+xml
|
166
166
|
imgtype = 'png' unless /^[a-z0-9]+$/.match imgtype
|
167
167
|
Tempfile.open(['image', ".#{imgtype}"]) do |f|
|
@@ -173,7 +173,7 @@ module IsoDoc::Function
|
|
173
173
|
end
|
174
174
|
|
175
175
|
def image_localfile(i)
|
176
|
-
if /^data
|
176
|
+
if /^data:/.match? i['src']
|
177
177
|
save_dataimage(i['src'], false)
|
178
178
|
elsif %r{^([A-Z]:)?/}.match? i['src']
|
179
179
|
i['src']
|
@@ -137,7 +137,7 @@ module IsoDoc::HtmlFunction
|
|
137
137
|
docxml.xpath("//*[local-name() = 'img']").each do |i|
|
138
138
|
i["width"], i["height"] = Html2Doc.image_resize(i, image_localfile(i),
|
139
139
|
@maxheight, @maxwidth)
|
140
|
-
next if /^data
|
140
|
+
next if /^data:/.match i["src"]
|
141
141
|
@datauriimage ? datauri(i) : move_image1(i)
|
142
142
|
end
|
143
143
|
docxml
|
@@ -145,9 +145,10 @@ module IsoDoc::HtmlFunction
|
|
145
145
|
|
146
146
|
def datauri(i)
|
147
147
|
type = i["src"].split(".")[-1]
|
148
|
+
supertype = type == "xml" ? "application" : "image"
|
148
149
|
bin = IO.binread(image_localfile(i))
|
149
150
|
data = Base64.strict_encode64(bin)
|
150
|
-
i["src"] = "data
|
151
|
+
i["src"] = "data:#{supertype}/#{type};base64,#{data}"
|
151
152
|
end
|
152
153
|
|
153
154
|
def image_suffix(i)
|
@@ -211,7 +211,11 @@ module IsoDoc
|
|
211
211
|
def mathml1(f, locale)
|
212
212
|
localize_maths(f, locale)
|
213
213
|
return unless f.elements.size == 1 && f.elements.first.name == "mn"
|
214
|
-
f.
|
214
|
+
if f.parent.name == "stem"
|
215
|
+
f.parent.replace(f.at("./m:mn", MATHML).children)
|
216
|
+
else
|
217
|
+
f.replace(f.at("./m:mn", MATHML).children)
|
218
|
+
end
|
215
219
|
end
|
216
220
|
|
217
221
|
def variant(docxml)
|
data/lib/isodoc/version.rb
CHANGED
@@ -24,7 +24,7 @@ module IsoDoc::WordFunction
|
|
24
24
|
|
25
25
|
def imgsrc(node)
|
26
26
|
ret = svg_to_emf(node) and return ret
|
27
|
-
return node["src"] unless %r{^data:
|
27
|
+
return node["src"] unless %r{^data:}.match node["src"]
|
28
28
|
save_dataimage(node["src"])
|
29
29
|
end
|
30
30
|
|
@@ -45,7 +45,7 @@ module IsoDoc::WordFunction
|
|
45
45
|
def svg_to_emf(node)
|
46
46
|
return unless node["mimetype"] == "image/svg+xml"
|
47
47
|
uri = node["src"]
|
48
|
-
%r{^data:
|
48
|
+
%r{^data:}.match(uri) and uri = save_dataimage(uri)
|
49
49
|
ret = svg_to_emf_filename(uri)
|
50
50
|
File.exists?(ret) and return ret
|
51
51
|
exe = inkscape_installed? or return nil
|
@@ -96,7 +96,7 @@ module IsoDoc::WordFunction
|
|
96
96
|
def generate_header(filename, _dir)
|
97
97
|
return nil unless @header
|
98
98
|
template = IsoDoc::Common.liquid(File.read(@header, encoding: "UTF-8"))
|
99
|
-
meta = @meta.get.merge(@labels
|
99
|
+
meta = @meta.get.merge(@labels ? { labels: @labels } : {}).merge(@meta.labels ? { labels: @meta.labels } : {})
|
100
100
|
meta[:filename] = filename
|
101
101
|
params = meta.map { |k, v| [k.to_s, v] }.to_h
|
102
102
|
Tempfile.open(%w(header html), :encoding => "utf-8") do |f|
|
@@ -2,41 +2,56 @@ require "roman-numerals"
|
|
2
2
|
|
3
3
|
module IsoDoc::XrefGen
|
4
4
|
class Counter
|
5
|
-
def initialize(num = 0)
|
5
|
+
def initialize(num = 0, opts = {numerals: :arabic})
|
6
6
|
@num = num
|
7
7
|
@letter = ""
|
8
8
|
@subseq = ""
|
9
9
|
@letter_override = nil
|
10
10
|
@number_override = nil
|
11
|
+
@style = opts[:numerals]
|
11
12
|
@base = ""
|
13
|
+
if num.is_a? String
|
14
|
+
if /^\d+$/.match(num)
|
15
|
+
@num = num.to_i
|
16
|
+
else
|
17
|
+
@num = nil
|
18
|
+
@base = num[0..-2]
|
19
|
+
@letter = num[-1]
|
20
|
+
end
|
21
|
+
end
|
12
22
|
end
|
13
23
|
|
14
24
|
def new_subseq_increment(node)
|
15
25
|
@subseq = node["subsequence"]
|
16
|
-
@num += 1
|
26
|
+
@num += 1 unless @num.nil?
|
17
27
|
@letter = node["subsequence"] ? "a" : ""
|
18
28
|
@base = ""
|
19
29
|
if node["number"]
|
20
|
-
/^(?<b>.*?)(?<n>\d*)(?<a>[a-
|
30
|
+
/^(?<b>.*?)(?<n>\d*)(?<a>[a-zA-Z]*)$/ =~ node["number"]
|
21
31
|
if !n.empty? || !a.empty?
|
22
32
|
@letter_override = @letter = a unless a.empty?
|
23
33
|
@number_override = @num = n.to_i unless n.empty?
|
24
34
|
@base = b
|
25
35
|
else
|
26
36
|
@letter_override = node["number"]
|
27
|
-
@letter = @letter_override if /^[a-
|
37
|
+
@letter = @letter_override if /^[a-zA-Z]$/.match(@letter_override)
|
28
38
|
end
|
29
39
|
end
|
30
40
|
end
|
31
41
|
|
32
42
|
def sequence_increment(node)
|
33
43
|
if node["number"]
|
34
|
-
@base = ""
|
35
|
-
@number_override = node["number"]
|
44
|
+
@base = @letter_override = @number_override = ""
|
36
45
|
/^(?<b>.*?)(?<n>\d+)$/ =~ node["number"]
|
37
|
-
|
46
|
+
if blank?(n)
|
47
|
+
@num = nil
|
48
|
+
@base = node["number"][0..-2]
|
49
|
+
@letter = @letter_override = node["number"][-1]
|
50
|
+
else
|
51
|
+
@number_override = node["number"]
|
38
52
|
@num = n.to_i
|
39
53
|
@base = b
|
54
|
+
@letter = ""
|
40
55
|
end
|
41
56
|
else
|
42
57
|
@num += 1
|
@@ -47,9 +62,20 @@ module IsoDoc::XrefGen
|
|
47
62
|
if node["number"]
|
48
63
|
@base = ""
|
49
64
|
@letter_override = node["number"]
|
50
|
-
/^(?<b>.*?)(?<n>\d*)(?<a>[a-
|
51
|
-
|
52
|
-
|
65
|
+
/^(?<b>.*?)(?<n>\d*)(?<a>[a-zA-Z])$/ =~ node["number"]
|
66
|
+
if blank?(a)
|
67
|
+
if /^\d+$/.match(node["number"])
|
68
|
+
@letter_override = @letter = ""
|
69
|
+
@number_override = @num = node["number"].to_i
|
70
|
+
else
|
71
|
+
/^(?<b>.*)(?<a>[a-zA-Z])$/ =~ node["number"]
|
72
|
+
unless blank?(a)
|
73
|
+
@letter = @letter_override = a
|
74
|
+
@base = b
|
75
|
+
end
|
76
|
+
end
|
77
|
+
else
|
78
|
+
@letter_override = @letter = a
|
53
79
|
@base = b
|
54
80
|
@number_override = @num = n.to_i unless n.empty?
|
55
81
|
end
|
@@ -58,11 +84,15 @@ module IsoDoc::XrefGen
|
|
58
84
|
end
|
59
85
|
end
|
60
86
|
|
87
|
+
def blank?(x)
|
88
|
+
x.nil? || x.empty?
|
89
|
+
end
|
90
|
+
|
61
91
|
def increment(node)
|
62
92
|
return self if node["unnumbered"]
|
63
93
|
@letter_override = nil
|
64
94
|
@number_override = nil
|
65
|
-
if node["subsequence"] != @subseq
|
95
|
+
if node["subsequence"] != @subseq && !(blank?(node["subsequence"]) && blank?(@subseq))
|
66
96
|
new_subseq_increment(node)
|
67
97
|
elsif @letter.empty?
|
68
98
|
sequence_increment(node)
|
@@ -73,7 +103,9 @@ module IsoDoc::XrefGen
|
|
73
103
|
end
|
74
104
|
|
75
105
|
def print
|
76
|
-
|
106
|
+
num = @number_override || @num
|
107
|
+
num_out = @style == :roman && !num.nil? ? RomanNumerals.to_roman(num) : num
|
108
|
+
"#{@base}#{num_out}#{@letter_override || @letter}"
|
77
109
|
end
|
78
110
|
|
79
111
|
def ol_type(list, depth)
|
@@ -1,23 +1,25 @@
|
|
1
1
|
module IsoDoc::XrefGen
|
2
2
|
module Sections
|
3
3
|
def back_anchor_names(docxml)
|
4
|
-
|
5
|
-
|
4
|
+
i = Counter.new("@")
|
5
|
+
docxml.xpath(ns("//annex")).each do |c|
|
6
|
+
i.increment(c)
|
7
|
+
annex_names(c, i.print)
|
8
|
+
end
|
9
|
+
docxml.xpath(ns(@klass.bibliography_xpath)).each do |b|
|
10
|
+
preface_names(b)
|
11
|
+
end
|
12
|
+
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
|
13
|
+
reference_names(ref)
|
6
14
|
end
|
7
|
-
docxml.xpath(
|
8
|
-
ns(@klass.bibliography_xpath)).each do |b|
|
9
|
-
preface_names(b)
|
10
|
-
end
|
11
|
-
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
|
12
|
-
reference_names(ref)
|
13
|
-
end
|
14
15
|
end
|
15
16
|
|
16
17
|
def initial_anchor_names(d)
|
17
18
|
d.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
|
18
19
|
# potentially overridden in middle_section_asset_names()
|
19
20
|
sequential_asset_names(d.xpath(ns("//preface/*")))
|
20
|
-
n =
|
21
|
+
n = Counter.new
|
22
|
+
n = section_names(d.at(ns("//clause[@type = 'scope']")), n, 1)
|
21
23
|
n = section_names(d.at(ns(@klass.norm_ref_xpath)), n, 1)
|
22
24
|
n = section_names(d.at(ns("//sections/terms | "\
|
23
25
|
"//sections/clause[descendant::terms]")), n, 1)
|
@@ -52,8 +54,7 @@ module IsoDoc::XrefGen
|
|
52
54
|
label = title || parent_title
|
53
55
|
@anchors[clause["id"]] =
|
54
56
|
{ label: nil, level: level, xref: label, type: "clause" }
|
55
|
-
clause.xpath(ns(SUBCLAUSES)).
|
56
|
-
each_with_index do |c, i|
|
57
|
+
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
57
58
|
preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i+1}",
|
58
59
|
level + 1)
|
59
60
|
end
|
@@ -67,21 +68,22 @@ module IsoDoc::XrefGen
|
|
67
68
|
sequential_asset_names(d.xpath(ns(middle_sections)))
|
68
69
|
end
|
69
70
|
|
70
|
-
def clause_names(docxml,
|
71
|
+
def clause_names(docxml, n)
|
71
72
|
docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c, i|
|
72
|
-
section_names(c,
|
73
|
+
section_names(c, n, 1)
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
76
77
|
def section_names(clause, num, lvl)
|
77
78
|
return num if clause.nil?
|
78
|
-
num
|
79
|
+
num.increment(clause)
|
79
80
|
@anchors[clause["id"]] =
|
80
|
-
{ label: num.
|
81
|
+
{ label: num.print, xref: l10n("#{@labels["clause"]} #{num.print}"), level: lvl,
|
81
82
|
type: "clause" }
|
82
|
-
|
83
|
-
|
84
|
-
|
83
|
+
i = Counter.new
|
84
|
+
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
85
|
+
i.increment(c)
|
86
|
+
section_names1(c, "#{num.print}.#{i.print}", lvl + 1)
|
85
87
|
end
|
86
88
|
num
|
87
89
|
end
|
@@ -90,9 +92,10 @@ module IsoDoc::XrefGen
|
|
90
92
|
@anchors[clause["id"]] =
|
91
93
|
{ label: num, level: level, xref: l10n("#{@labels["clause"]} #{num}"),
|
92
94
|
type: "clause" }
|
93
|
-
|
94
|
-
|
95
|
-
|
95
|
+
i = Counter.new
|
96
|
+
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
97
|
+
i.increment(c)
|
98
|
+
section_names1(c, "#{num}.#{i.print}", level + 1)
|
96
99
|
end
|
97
100
|
end
|
98
101
|
|
@@ -118,8 +121,10 @@ module IsoDoc::XrefGen
|
|
118
121
|
if a = single_annex_special_section(clause)
|
119
122
|
annex_names1(a, "#{num}", 1)
|
120
123
|
else
|
121
|
-
|
122
|
-
|
124
|
+
i = Counter.new
|
125
|
+
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
126
|
+
i.increment(c)
|
127
|
+
annex_names1(c, "#{num}.#{i.print}", 2)
|
123
128
|
end
|
124
129
|
end
|
125
130
|
hierarchical_asset_names(clause, num)
|
@@ -128,8 +133,10 @@ module IsoDoc::XrefGen
|
|
128
133
|
def annex_names1(clause, num, level)
|
129
134
|
@anchors[clause["id"]] = { label: num, xref: "#{@labels["annex"]} #{num}",
|
130
135
|
level: level, type: "clause" }
|
131
|
-
|
132
|
-
|
136
|
+
i = Counter.new
|
137
|
+
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c|
|
138
|
+
i.increment(c)
|
139
|
+
annex_names1(c, "#{num}.#{i.print}", level + 1)
|
133
140
|
end
|
134
141
|
end
|
135
142
|
|