metanorma-bipm 1.0.7 → 1.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 +4 -4
- data/.github/workflows/rake.yml +12 -11
- data/.gitignore +4 -1
- data/.hound.yml +5 -0
- data/.rubocop.yml +4 -8
- data/Gemfile +2 -2
- data/Rakefile +2 -2
- data/lib/asciidoctor/bipm/biblio.rng +1 -0
- data/lib/asciidoctor/bipm/bipm.rng +3 -0
- data/lib/asciidoctor/bipm/converter.rb +72 -33
- data/lib/asciidoctor/bipm/isodoc.rng +321 -4
- data/lib/isodoc/bipm/base_convert.rb +25 -11
- data/lib/isodoc/bipm/bipm.brochure.xsl +674 -85
- data/lib/isodoc/bipm/bipm.guide.xsl +674 -85
- data/lib/isodoc/bipm/bipm.mise-en-pratique.xsl +674 -85
- data/lib/isodoc/bipm/bipm.rapport.xsl +674 -85
- data/lib/isodoc/bipm/html/html_bipm_titlepage.html +2 -0
- data/lib/isodoc/bipm/html/htmlstyle.css +7 -0
- data/lib/isodoc/bipm/i18n-en.yaml +11 -0
- data/lib/isodoc/bipm/i18n-fr.yaml +8 -0
- data/lib/isodoc/bipm/index.rb +30 -19
- data/lib/isodoc/bipm/init.rb +1 -2
- data/lib/isodoc/bipm/jcgm.standard.xsl +713 -129
- data/lib/isodoc/bipm/metadata.rb +15 -7
- data/lib/isodoc/bipm/pdf_convert.rb +12 -9
- data/lib/isodoc/bipm/presentation_xml_convert.rb +149 -48
- data/lib/isodoc/bipm/xref.rb +122 -51
- data/lib/metanorma-bipm.rb +4 -4
- data/lib/metanorma/bipm/version.rb +1 -1
- data/metanorma-bipm.gemspec +5 -4
- metadata +29 -14
data/lib/isodoc/bipm/metadata.rb
CHANGED
@@ -8,7 +8,8 @@ module IsoDoc
|
|
8
8
|
end
|
9
9
|
|
10
10
|
SI_ASPECT = %w(A_e_deltanu A_e cd_Kcd_h_deltanu cd_Kcd full K_k_deltanu
|
11
|
-
|
11
|
+
K_k kg_h_c_deltanu kg_h m_c_deltanu m_c mol_NA
|
12
|
+
s_deltanu).freeze
|
12
13
|
|
13
14
|
def initialize(lang, script, labels)
|
14
15
|
super
|
@@ -24,12 +25,12 @@ module IsoDoc
|
|
24
25
|
TITLE = "//bibdata/title".freeze
|
25
26
|
|
26
27
|
def title(isoxml, _out)
|
27
|
-
lang1, lang2
|
28
|
+
lang1, lang2 = @lang == "fr" ? %w(fr en) : %w(en fr)
|
28
29
|
set(:doctitle, @c.encode(isoxml&.at(
|
29
30
|
ns("#{TITLE}[@type='main'][@language='#{lang1}']"))&.text || ""))
|
30
31
|
set(:docsubtitle, @c.encode(isoxml&.at(
|
31
32
|
ns("#{TITLE}[@type='main'][@language='#{lang2}']"))&.text || ""))
|
32
|
-
%w(appendix annex part subtitle).each do |e|
|
33
|
+
%w(appendix annex part subtitle provenance).each do |e|
|
33
34
|
set("#{e}title".to_sym, @c.encode(isoxml&.at(
|
34
35
|
ns("#{TITLE}[@type='#{e}'][@language='#{lang1}']"))&.text || ""))
|
35
36
|
set("#{e}subtitle".to_sym, @c.encode(isoxml&.at(
|
@@ -40,9 +41,10 @@ module IsoDoc
|
|
40
41
|
def status_print(status)
|
41
42
|
return "Procès-Verbal" if status == "procès-verbal"
|
42
43
|
return "CIPM-MRA" if status == "cipm-mra"
|
44
|
+
|
43
45
|
status.split(/[- ]/).map.with_index do |s, i|
|
44
|
-
|
45
|
-
end.join(
|
46
|
+
%w(en de).include?(s) && i.positive? ? s : s.capitalize
|
47
|
+
end.join(" ")
|
46
48
|
end
|
47
49
|
|
48
50
|
def docid(isoxml, _out)
|
@@ -59,13 +61,19 @@ module IsoDoc
|
|
59
61
|
dn = isoxml.at(ns("//bibdata/ext/structuredidentifier/part"))
|
60
62
|
dn and set(:partid, @i18n.l10n("#{label1} #{dn&.text}"))
|
61
63
|
dn and set(:partid_alt, @i18n.l10n("#{label2} #{dn&.text}"))
|
62
|
-
set(:org_abbrev,
|
63
|
-
isoxml.at(ns("//bibdata/ext/editorialgroup/committee
|
64
|
+
set(:org_abbrev,
|
65
|
+
isoxml.at(ns("//bibdata/ext/editorialgroup/committee"\
|
66
|
+
"[@acronym = 'JCGM']")) ? "JCGM" : "BIPM")
|
64
67
|
end
|
65
68
|
|
66
69
|
def extract_person_names_affiliations(authors)
|
67
70
|
extract_person_affiliations(authors)
|
68
71
|
end
|
72
|
+
|
73
|
+
def bibdate(isoxml, _out)
|
74
|
+
pubdate = isoxml.at(ns("//bibdata/date[not(@format)][@type = 'published']"))
|
75
|
+
pubdate and set(:pubdate_monthyear, monthyr(pubdate.text))
|
76
|
+
end
|
69
77
|
end
|
70
78
|
end
|
71
79
|
end
|
@@ -4,7 +4,7 @@ module IsoDoc
|
|
4
4
|
module BIPM
|
5
5
|
# A {Converter} implementation that generates PDF HTML output, and a
|
6
6
|
# document schema encapsulation of the document for validation
|
7
|
-
class PdfConvert <
|
7
|
+
class PdfConvert < IsoDoc::XslfoPdfConvert
|
8
8
|
def initialize(options)
|
9
9
|
@libdir = File.dirname(__FILE__)
|
10
10
|
super
|
@@ -15,20 +15,23 @@ module IsoDoc
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def pdf_stylesheet(docxml)
|
18
|
-
|
18
|
+
docxml&.at(ns("//bibdata/ext/editorialgroup/committee/@acronym"))
|
19
|
+
&.value == "JCGM" and
|
20
|
+
return "jcgm.standard.xsl"
|
21
|
+
|
19
22
|
doctype = docxml&.at(ns("//bibdata/ext/doctype"))&.text
|
20
|
-
doctype = "brochure" unless %w(guide mise-en-pratique rapport)
|
21
|
-
include? doctype
|
23
|
+
doctype = "brochure" unless %w(guide mise-en-pratique rapport)
|
24
|
+
.include? doctype
|
22
25
|
"bipm.#{doctype}.xsl"
|
23
26
|
end
|
24
27
|
|
25
28
|
def pdf_options(docxml)
|
29
|
+
n = configuration.document_namespace
|
30
|
+
q = "//m:bipm-standard/m:bibdata/m:language[@current = 'true']"
|
26
31
|
if docxml.root.name == "metanorma-collection" &&
|
27
|
-
docxml.at("
|
28
|
-
|
29
|
-
|
30
|
-
"m" => configuration.document_namespace)
|
31
|
-
"--split-by-language"
|
32
|
+
docxml.at("#{q}[. = 'fr']", "m" => n) &&
|
33
|
+
docxml.at("#{q}[. = 'en']", "m" => n)
|
34
|
+
"#{super} --split-by-language"
|
32
35
|
else
|
33
36
|
super
|
34
37
|
end
|
@@ -1,30 +1,70 @@
|
|
1
1
|
require "isodoc"
|
2
2
|
require "metanorma-generic"
|
3
|
+
require "metanorma-iso"
|
3
4
|
require_relative "init"
|
4
5
|
require_relative "index"
|
5
6
|
|
6
7
|
module IsoDoc
|
7
8
|
module BIPM
|
8
9
|
class PresentationXMLConvert < IsoDoc::Generic::PresentationXMLConvert
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
def convert1(docxml, filename, dir)
|
11
|
+
@jcgm = docxml&.at(ns("//bibdata/ext/editorialgroup/committee/"\
|
12
|
+
"@acronym"))&.value == "JCGM"
|
13
|
+
@iso = IsoDoc::Iso::PresentationXMLConvert
|
14
|
+
.new({ language: @lang, script: @script })
|
15
|
+
i18n = @iso.i18n_init(@lang, @script, nil)
|
16
|
+
@iso.metadata_init(@lang, @script, i18n)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def eref_localities1(target, type, from, to, delim, n, lang = "en")
|
21
|
+
if @jcgm
|
22
|
+
@iso.eref_localities1(target, type, from, to, delim, n, lang)
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
14
26
|
end
|
15
27
|
|
16
|
-
def
|
17
|
-
return if
|
18
|
-
|
19
|
-
|
28
|
+
def table1(elem)
|
29
|
+
return if labelled_ancestor(elem)
|
30
|
+
return if elem["unnumbered"]
|
31
|
+
|
32
|
+
n = @xrefs.anchor(elem["id"], :label, false)
|
33
|
+
prefix_name(elem, ".<tab/>",
|
34
|
+
l10n("#{@i18n.table.capitalize} #{n}"), "name")
|
35
|
+
end
|
36
|
+
|
37
|
+
def figure1(elem)
|
38
|
+
if @jcgm
|
39
|
+
@iso.xrefs = @xrefs
|
40
|
+
@iso.figure1(elem)
|
41
|
+
else super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def annex1(elem)
|
46
|
+
return super if @jcgm
|
47
|
+
return if elem["unnumbered"] == "true"
|
48
|
+
|
49
|
+
lbl = @xrefs.anchor(elem["id"], :label)
|
50
|
+
if t = elem.at(ns("./title"))
|
20
51
|
t.children = "<strong>#{t.children.to_xml}</strong>"
|
21
52
|
end
|
22
|
-
prefix_name(
|
53
|
+
prefix_name(elem, ".<tab/>", lbl, "title")
|
23
54
|
end
|
24
55
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
56
|
+
def clause(docxml)
|
57
|
+
super
|
58
|
+
if @jcgm
|
59
|
+
docxml.xpath(ns("//preface/introduction[clause]")).each do |f|
|
60
|
+
clause1(f)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def clause1(elem)
|
66
|
+
return if elem["unnumbered"] == "true"
|
67
|
+
return if elem.at(("./ancestor::*[@unnumbered = 'true']"))
|
28
68
|
super
|
29
69
|
end
|
30
70
|
|
@@ -33,62 +73,64 @@ module IsoDoc
|
|
33
73
|
doccontrol docxml
|
34
74
|
end
|
35
75
|
|
36
|
-
def doccontrol(
|
37
|
-
return unless
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
docxml.root << clause
|
76
|
+
def doccontrol(doc)
|
77
|
+
return unless doc.at(ns("//bibdata/relation[@type = 'supersedes']"))
|
78
|
+
|
79
|
+
clause = <<~DOCCONTROL
|
80
|
+
<doccontrol>
|
81
|
+
<title>Document Control</title>
|
82
|
+
<table unnumbered="true"><tbody>
|
83
|
+
<tr><th>Authors:</th><td/><td>#{list_authors(doc)}</td></tr>
|
84
|
+
#{doccontrol_row1(doc)} #{doccontrol_row2(doc)} #{list_drafts(doc)}
|
85
|
+
</tbody></table></doccontrol>
|
86
|
+
DOCCONTROL
|
87
|
+
doc.root << clause
|
49
88
|
end
|
50
89
|
|
51
|
-
def doccontrol_row1(
|
52
|
-
return "" if list_draft(
|
90
|
+
def doccontrol_row1(doc)
|
91
|
+
return "" if list_draft(doc, 1) == ["", ""] && list_cochairs(doc).empty?
|
92
|
+
|
53
93
|
<<~ROW
|
54
|
-
|
55
|
-
|
94
|
+
<tr>#{list_draft(doc, 1)&.map { |x| "<td>#{x}</td>" }&.join}
|
95
|
+
<td>#{list_cochairs(doc)}</td></tr>
|
56
96
|
ROW
|
57
97
|
end
|
58
98
|
|
59
99
|
def doccontrol_row2(docxml)
|
60
|
-
|
100
|
+
list_draft(docxml, 2) == ["", ""] && list_chairs(docxml).empty? and
|
101
|
+
return ""
|
102
|
+
|
61
103
|
<<~ROW
|
62
|
-
|
63
|
-
|
104
|
+
<tr>#{list_draft(docxml, 2)&.map { |x| "<td>#{x}</td>" }&.join}
|
105
|
+
<td>#{list_chairs(docxml)}</td></tr>
|
64
106
|
ROW
|
65
107
|
end
|
66
108
|
|
67
109
|
def list_drafts(xml)
|
68
110
|
ret = ""
|
69
111
|
i = 3
|
70
|
-
while
|
71
|
-
ret += "<tr>#{list_draft(xml, i).map { |x| "<td>#{x}</td>" }.join
|
112
|
+
while list_draft(xml, i) != ["", ""]
|
113
|
+
ret += "<tr>#{list_draft(xml, i).map { |x| "<td>#{x}</td>" }.join} "\
|
72
114
|
"<td/></tr>"
|
73
115
|
i += 1
|
74
116
|
end
|
75
117
|
ret
|
76
118
|
end
|
77
119
|
|
78
|
-
def list_draft(xml,
|
79
|
-
|
80
|
-
|
120
|
+
def list_draft(xml, idx)
|
121
|
+
d = xml.at(ns("//bibdata/relation[@type = 'supersedes'][#{idx}]"\
|
122
|
+
"/bibitem")) or return ["", ""]
|
123
|
+
|
81
124
|
date = d&.at(ns("./date"))&.text
|
82
|
-
draft = d&.at(ns("./version/draft"))&.text and
|
83
|
-
|
84
|
-
edn = d&.at(ns("./edition"))&.text and
|
85
|
-
edn = "Version #{edn}"
|
125
|
+
draft = d&.at(ns("./version/draft"))&.text and draft = "Draft #{draft}"
|
126
|
+
edn = d&.at(ns("./edition"))&.text and edn = "Version #{edn}"
|
86
127
|
[[draft, edn].join(" "), date]
|
87
128
|
end
|
88
129
|
|
89
130
|
def list_authors(xml)
|
90
131
|
ret = list_people(
|
91
|
-
xml, "//bibdata/contributor[xmlns:role/@type = 'author']/person"
|
132
|
+
xml, "//bibdata/contributor[xmlns:role/@type = 'author']/person"
|
133
|
+
)
|
92
134
|
@i18n.multiple_and(ret, @i18n.get["and"])
|
93
135
|
end
|
94
136
|
|
@@ -101,7 +143,7 @@ module IsoDoc
|
|
101
143
|
ret.empty? and return ""
|
102
144
|
role = xml&.at(ns("//bibdata/contributor[#{COCHAIR}]/role"))&.text
|
103
145
|
label = ret.size > 1 && role ? "#{role}s" : role
|
104
|
-
"#{label}: #{@i18n.multiple_and(ret, @i18n.get[
|
146
|
+
"#{label}: #{@i18n.multiple_and(ret, @i18n.get['and'])}"
|
105
147
|
end
|
106
148
|
|
107
149
|
def list_chairs(xml)
|
@@ -109,7 +151,7 @@ module IsoDoc
|
|
109
151
|
ret.empty? and return ""
|
110
152
|
role = xml&.at(ns("//bibdata/contributor#{CHAIR}/role"))&.text
|
111
153
|
label = ret.size > 1 && role ? "#{role}s" : role
|
112
|
-
"#{label}: #{@i18n.multiple_and(ret, @i18n.get[
|
154
|
+
"#{label}: #{@i18n.multiple_and(ret, @i18n.get['and'])}"
|
113
155
|
end
|
114
156
|
|
115
157
|
def list_people(xml, xpath)
|
@@ -126,11 +168,70 @@ module IsoDoc
|
|
126
168
|
end
|
127
169
|
|
128
170
|
def twitter_cldr_localiser_symbols
|
129
|
-
{ group: " ", fraction_group: " ",
|
171
|
+
{ group: " ", fraction_group: " ",
|
172
|
+
fraction_group_digits: 3 }
|
130
173
|
end
|
131
174
|
|
132
|
-
def mathml1(
|
133
|
-
localize_maths(
|
175
|
+
def mathml1(elem, locale)
|
176
|
+
localize_maths(elem, locale)
|
177
|
+
end
|
178
|
+
|
179
|
+
def bibdata_i18n(bibdata)
|
180
|
+
super
|
181
|
+
bibdata_dates(bibdata)
|
182
|
+
end
|
183
|
+
|
184
|
+
def bibdata_dates(bibdata)
|
185
|
+
pubdate = bibdata.at(ns("./date[not(@format)][@type = 'published']"))
|
186
|
+
return unless pubdate
|
187
|
+
|
188
|
+
meta = metadata_init(@lang, @script, @i18n)
|
189
|
+
pubdate.next = pubdate.dup
|
190
|
+
pubdate.next["format"] = "ddMMMyyyy"
|
191
|
+
pubdate.next.children = meta.monthyr(pubdate.text)
|
192
|
+
end
|
193
|
+
|
194
|
+
def eref(docxml)
|
195
|
+
super
|
196
|
+
jcgm_eref(docxml, "//eref")
|
197
|
+
end
|
198
|
+
|
199
|
+
def origin(docxml)
|
200
|
+
super
|
201
|
+
jcgm_eref(docxml, "//origin[not(termref)]")
|
202
|
+
end
|
203
|
+
|
204
|
+
def quotesource(docxml)
|
205
|
+
super
|
206
|
+
jcgm_eref(docxml, "//quote/source")
|
207
|
+
end
|
208
|
+
|
209
|
+
def jcgm_eref(docxml, xpath)
|
210
|
+
return unless @jcgm
|
211
|
+
|
212
|
+
docxml.xpath(ns(xpath)).each do |x|
|
213
|
+
extract_brackets(x)
|
214
|
+
end
|
215
|
+
# merge adjacent text nodes
|
216
|
+
docxml.root.replace(Nokogiri::XML(docxml.root.to_xml).root)
|
217
|
+
docxml.xpath(ns(xpath)).each do |x| # rubocop: disable Style/CombinableLoops
|
218
|
+
if x&.next&.text? && /^\],\s+\[$/.match?(x&.next&.text) &&
|
219
|
+
%w(eref origin source).include?(x&.next&.next&.name)
|
220
|
+
x.next.replace(", ")
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def extract_brackets(node)
|
226
|
+
start = node.at("./text()[1]")
|
227
|
+
finish = node.at("./text()[last()]")
|
228
|
+
if /^\[/.match?(start.text) && /\]$/.match?(finish.text)
|
229
|
+
start.replace(start.text[1..-1])
|
230
|
+
node.previous = "["
|
231
|
+
finish = node.at("./text()[last()]")
|
232
|
+
finish.replace(finish.text[0..-2])
|
233
|
+
node.next = "]"
|
234
|
+
end
|
134
235
|
end
|
135
236
|
|
136
237
|
include Init
|
data/lib/isodoc/bipm/xref.rb
CHANGED
@@ -5,12 +5,36 @@ module IsoDoc
|
|
5
5
|
|
6
6
|
class Xref < IsoDoc::Xref
|
7
7
|
def initialize(lang, script, klass, i18n, options = {})
|
8
|
+
@iso = IsoDoc::Iso::Xref.new(lang, script, klass, i18n, options)
|
8
9
|
super
|
9
10
|
end
|
10
11
|
|
12
|
+
def parse(docxml)
|
13
|
+
@jcgm = docxml&.at(ns("//bibdata/ext/editorialgroup/committee/"\
|
14
|
+
"@acronym"))&.value == "JCGM"
|
15
|
+
@annexlbl =
|
16
|
+
if @jcgm then @labels["iso_annex"]
|
17
|
+
elsif docxml.at(ns("//bibdata/ext/structuredidentifier/appendix"))
|
18
|
+
@labels["appendix"]
|
19
|
+
else @labels["annex"]
|
20
|
+
end
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
def wrap_brackets(txt)
|
25
|
+
return txt if /^\[.*\]$/.match?(txt)
|
26
|
+
|
27
|
+
"[#{txt}]"
|
28
|
+
end
|
29
|
+
|
30
|
+
def reference_names(ref)
|
31
|
+
super
|
32
|
+
@jcgm and
|
33
|
+
@anchors[ref["id"]][:xref] = wrap_brackets(@anchors[ref["id"]][:xref])
|
34
|
+
end
|
35
|
+
|
11
36
|
def clause_names(docxml, sect_num)
|
12
|
-
if
|
13
|
-
value == "JCGM"
|
37
|
+
if @jcgm
|
14
38
|
clause_names_jcgm(docxml, sect_num)
|
15
39
|
else
|
16
40
|
clause_names_bipm(docxml, sect_num)
|
@@ -19,21 +43,21 @@ module IsoDoc
|
|
19
43
|
|
20
44
|
def clause_names_jcgm(docxml, sect_num)
|
21
45
|
docxml.xpath(ns("//clause[parent::sections][not(@type = 'scope')]"\
|
22
|
-
"[not(descendant::terms)]")).
|
46
|
+
"[not(descendant::terms)]")).each do |c|
|
23
47
|
section_names(c, sect_num, 1)
|
24
48
|
end
|
25
49
|
end
|
26
50
|
|
27
|
-
def clause_names_bipm(docxml,
|
51
|
+
def clause_names_bipm(docxml, _sect_num)
|
28
52
|
n = Counter.new
|
29
53
|
docxml.xpath(ns("//sections/clause[not(@unnumbered = 'true')] | "\
|
30
54
|
"//sections/terms[not(@unnumbered = 'true')] | "\
|
31
|
-
"//sections/definitions[not(@unnumbered = 'true')]"))
|
32
|
-
|
55
|
+
"//sections/definitions[not(@unnumbered = 'true')]"))
|
56
|
+
.each { |c| section_names(c, n, 1) }
|
33
57
|
docxml.xpath(ns("//sections/clause[@unnumbered = 'true'] | "\
|
34
58
|
"//sections/terms[@unnumbered = 'true'] | "\
|
35
|
-
"//sections/definitions[@unnumbered = 'true']"))
|
36
|
-
|
59
|
+
"//sections/definitions[@unnumbered = 'true']"))
|
60
|
+
.each { |c| unnumbered_section_names(c, 1) }
|
37
61
|
end
|
38
62
|
|
39
63
|
NUMBERED_SUBCLAUSES = "./clause[not(@unnumbered = 'true')] | "\
|
@@ -48,18 +72,24 @@ module IsoDoc
|
|
48
72
|
"./terms[@unnumbered = 'true'] | "\
|
49
73
|
"./definitions[@unnumbered = 'true']".freeze
|
50
74
|
|
75
|
+
def section_name_anchors(clause, num, lvl)
|
76
|
+
lbl = @jcgm ? "clause_jcgm" : "clause"
|
77
|
+
@anchors[clause["id"]] =
|
78
|
+
{ label: num.print, xref: l10n("#{@labels[lbl]} #{num.print}"),
|
79
|
+
level: lvl, type: "clause" }
|
80
|
+
end
|
81
|
+
|
51
82
|
def section_names(clause, num, lvl)
|
52
83
|
return num if clause.nil?
|
84
|
+
|
53
85
|
num.increment(clause)
|
54
|
-
@anchors[clause["id"]] =
|
55
|
-
{ label: num.print, xref: l10n("#{@labels["clause"]} #{num.print}"),
|
56
|
-
level: lvl, type: "clause" }
|
86
|
+
@anchors[clause["id"]] = section_name_anchors(clause, num, lvl)
|
57
87
|
i = Counter.new
|
58
88
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
59
89
|
i.increment(c)
|
60
90
|
section_names1(c, "#{num.print}.#{i.print}", lvl + 1)
|
61
91
|
end
|
62
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).
|
92
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
|
63
93
|
unnumbered_section_names1(c, lvl + 1)
|
64
94
|
end
|
65
95
|
num
|
@@ -67,31 +97,36 @@ module IsoDoc
|
|
67
97
|
|
68
98
|
def unnumbered_section_names(clause, lvl)
|
69
99
|
return if clause.nil?
|
70
|
-
|
100
|
+
|
101
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
71
102
|
@anchors[clause["id"]] = { label: lbl, xref: l10n(%{"#{lbl}"}),
|
72
103
|
level: lvl, type: "clause" }
|
73
|
-
clause.xpath(ns(SUBCLAUSES)).
|
104
|
+
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
74
105
|
unnumbered_section_names1(c, lvl + 1)
|
75
106
|
end
|
76
107
|
end
|
77
108
|
|
78
|
-
def
|
109
|
+
def section_name1_anchors(clause, num, level)
|
110
|
+
lbl = @jcgm ? "" : "#{@labels['subclause']} "
|
79
111
|
@anchors[clause["id"]] =
|
80
|
-
{ label: num, level: level,
|
81
|
-
xref: l10n("#{@labels["subclause"]} #{num}"),
|
112
|
+
{ label: num, level: level, xref: l10n("#{lbl}#{num}"),
|
82
113
|
type: "clause" }
|
114
|
+
end
|
115
|
+
|
116
|
+
def section_names1(clause, num, level)
|
117
|
+
@anchors[clause["id"]] = section_name1_anchors(clause, num, level)
|
83
118
|
i = Counter.new
|
84
119
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
85
120
|
i.increment(c)
|
86
121
|
section_names1(c, "#{num}.#{i.print}", level + 1)
|
87
122
|
end
|
88
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).
|
123
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
|
89
124
|
unnumbered_section_names1(c, lvl + 1)
|
90
125
|
end
|
91
126
|
end
|
92
127
|
|
93
128
|
def unnumbered_section_names1(clause, level)
|
94
|
-
lbl = clause&.at(ns("./title"))&.text || "[#{clause[
|
129
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
95
130
|
@anchors[clause["id"]] =
|
96
131
|
{ label: lbl, xref: l10n(%{"#{lbl}"}), level: level, type: "clause" }
|
97
132
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
@@ -101,69 +136,80 @@ module IsoDoc
|
|
101
136
|
|
102
137
|
def back_anchor_names(docxml)
|
103
138
|
super
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
139
|
+
i = @jcgm ? Counter.new("@", skip_i: true) : Counter.new(0)
|
140
|
+
docxml.xpath(ns("//annex[not(@unnumbered = 'true')]")).each do |c|
|
141
|
+
i.increment(c)
|
142
|
+
annex_names(c, i.print)
|
143
|
+
end
|
144
|
+
docxml.xpath(ns("//annex[@unnumbered = 'true']"))
|
145
|
+
.each { |c| unnumbered_annex_names(c) }
|
110
146
|
docxml.xpath(ns("//indexsect")).each { |b| preface_names(b) }
|
111
147
|
end
|
112
148
|
|
149
|
+
def annex_name_anchors(clause, num)
|
150
|
+
{ label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
|
151
|
+
xref: l10n("#{@annexlbl} #{num}"), level: 1 }
|
152
|
+
end
|
153
|
+
|
113
154
|
def annex_names(clause, num)
|
114
|
-
@anchors[clause["id"]] =
|
115
|
-
{ label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
|
116
|
-
xref: l10n("#{@annexlbl} #{num}"), level: 1 }
|
155
|
+
@anchors[clause["id"]] = annex_name_anchors(clause, num)
|
117
156
|
if a = single_annex_special_section(clause)
|
118
|
-
annex_names1(a,
|
157
|
+
annex_names1(a, num.to_s, 1)
|
119
158
|
else
|
120
159
|
i = Counter.new
|
121
160
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
122
161
|
i.increment(c)
|
123
162
|
annex_names1(c, "#{num}.#{i.print}", 2)
|
124
163
|
end
|
125
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
126
|
-
each { |c| unnumbered_annex_names1(c, 2) }
|
164
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
165
|
+
.each { |c| unnumbered_annex_names1(c, 2) }
|
127
166
|
end
|
128
167
|
hierarchical_asset_names(clause, num)
|
129
168
|
end
|
130
169
|
|
170
|
+
def unnumbered_annex_anchors(lbl)
|
171
|
+
{ label: lbl, type: "clause", value: "",
|
172
|
+
xref: l10n(%{"#{lbl}"}), level: 1 }
|
173
|
+
end
|
174
|
+
|
131
175
|
def unnumbered_annex_names(clause)
|
132
|
-
lbl = clause&.at(ns("./title"))&.text || "[#{clause[
|
133
|
-
@anchors[clause["id"]] =
|
134
|
-
{ label: lbl, type: "clause", value: "",
|
135
|
-
xref: l10n(%{"#{lbl}"}), level: 1 }
|
176
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
177
|
+
@anchors[clause["id"]] = unnumbered_annex_anchors(lbl)
|
136
178
|
if a = single_annex_special_section(clause)
|
137
|
-
annex_names1(a,
|
179
|
+
annex_names1(a, num.to_s, 1)
|
138
180
|
else
|
139
|
-
clause.xpath(ns(SUBCLAUSES))
|
140
|
-
each { |c| unnumbered_annex_names1(c, 2) }
|
181
|
+
clause.xpath(ns(SUBCLAUSES))
|
182
|
+
.each { |c| unnumbered_annex_names1(c, 2) }
|
141
183
|
end
|
142
184
|
hierarchical_asset_names(clause, lbl)
|
143
185
|
end
|
144
186
|
|
187
|
+
def annex_names1_anchors(num, level)
|
188
|
+
lbl = @jcgm ? "" : "#{@annexlbl} "
|
189
|
+
{ label: num, xref: l10n("#{lbl}#{num}"),
|
190
|
+
level: level, type: "clause" }
|
191
|
+
end
|
192
|
+
|
145
193
|
def annex_names1(clause, num, level)
|
146
|
-
@anchors[clause["id"]] =
|
147
|
-
{ label: num, xref: l10n("#{@annexlbl} #{num}"),
|
148
|
-
level: level, type: "clause" }
|
194
|
+
@anchors[clause["id"]] = annex_names1_anchors(num, level)
|
149
195
|
i = Counter.new
|
150
196
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
151
197
|
i.increment(c)
|
152
198
|
annex_names1(c, "#{num}.#{i.print}", level + 1)
|
153
199
|
end
|
154
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
155
|
-
each { |c| unnumbered_annex_names1(c, level + 1) }
|
200
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
201
|
+
.each { |c| unnumbered_annex_names1(c, level + 1) }
|
156
202
|
end
|
157
203
|
|
158
204
|
def unnumbered_annex_names1(clause, level)
|
159
|
-
lbl = clause&.at(ns("./title"))&.text || "[#{clause[
|
205
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
160
206
|
@anchors[clause["id"]] = { label: lbl, xref: l10n(%{"#{lbl}"}),
|
161
207
|
level: level, type: "clause" }
|
162
|
-
clause.xpath(ns(SUBCLAUSES))
|
163
|
-
each { |c| unnumbered_annex_names1(c, level + 1) }
|
208
|
+
clause.xpath(ns(SUBCLAUSES))
|
209
|
+
.each { |c| unnumbered_annex_names1(c, level + 1) }
|
164
210
|
end
|
165
211
|
|
166
|
-
def annex_name_lbl(
|
212
|
+
def annex_name_lbl(_clause, num)
|
167
213
|
l10n("<strong>#{@annexlbl} #{num}</strong>")
|
168
214
|
end
|
169
215
|
|
@@ -171,13 +217,38 @@ module IsoDoc
|
|
171
217
|
c = Counter.new
|
172
218
|
clause.xpath(ns(".//formula")).each do |t|
|
173
219
|
next if t["id"].nil? || t["id"].empty?
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
220
|
+
|
221
|
+
@anchors[t["id"]] = anchor_struct(
|
222
|
+
c.increment(t).print, nil,
|
223
|
+
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
224
|
+
"formula", t["unnumbered"]
|
225
|
+
)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def initial_anchor_names(doc)
|
230
|
+
super
|
231
|
+
if @jcgm
|
232
|
+
@iso.introduction_names(doc.at(ns("//introduction")))
|
233
|
+
@anchors.merge!(@iso.get)
|
178
234
|
end
|
179
235
|
end
|
180
236
|
|
237
|
+
def sequential_figure_names(clause)
|
238
|
+
if @jcgm
|
239
|
+
@iso.sequential_figure_names(clause)
|
240
|
+
@anchors.merge!(@iso.get)
|
241
|
+
else super
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def hierarchical_figure_names(clause, num)
|
246
|
+
if @jcgm
|
247
|
+
@iso.hierarchical_figure_names(clause, num)
|
248
|
+
@anchors.merge!(@iso.get)
|
249
|
+
else super
|
250
|
+
end
|
251
|
+
end
|
181
252
|
end
|
182
253
|
end
|
183
254
|
end
|