metanorma-bipm 1.0.4 → 1.1.1
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 +9 -32
- data/.gitignore +1 -0
- data/.rubocop.yml +14 -0
- data/lib/asciidoctor/bipm/biblio.rng +4 -6
- data/lib/asciidoctor/bipm/bipm.rng +6 -0
- data/lib/asciidoctor/bipm/converter.rb +65 -34
- data/lib/asciidoctor/bipm/isodoc.rng +172 -3
- data/lib/isodoc/bipm/bipm.brochure.xsl +933 -406
- data/lib/isodoc/bipm/bipm.guide.xsl +933 -406
- data/lib/isodoc/bipm/bipm.mise-en-pratique.xsl +933 -406
- data/lib/isodoc/bipm/bipm.rapport.xsl +933 -406
- data/lib/isodoc/bipm/html/html_bipm_titlepage.html +4 -2
- data/lib/isodoc/bipm/html/htmlstyle.css +7 -0
- data/lib/isodoc/bipm/i18n-en.yaml +9 -0
- data/lib/isodoc/bipm/i18n-fr.yaml +6 -0
- data/lib/isodoc/bipm/index.rb +22 -10
- data/lib/isodoc/bipm/jcgm.standard.xsl +828 -333
- data/lib/isodoc/bipm/metadata.rb +15 -5
- data/lib/isodoc/bipm/pdf_convert.rb +12 -9
- data/lib/isodoc/bipm/presentation_xml_convert.rb +81 -23
- data/lib/isodoc/bipm/xref.rb +124 -55
- data/lib/metanorma/bipm/version.rb +1 -1
- data/metanorma-bipm.gemspec +7 -6
- data/metanorma.yml +1 -0
- metadata +33 -17
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,11 +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}"))
|
64
|
+
set(:org_abbrev,
|
65
|
+
isoxml.at(ns("//bibdata/ext/editorialgroup/committee"\
|
66
|
+
"[@acronym = 'JCGM']")) ? "JCGM" : "BIPM")
|
62
67
|
end
|
63
68
|
|
64
69
|
def extract_person_names_affiliations(authors)
|
65
70
|
extract_person_affiliations(authors)
|
66
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
|
67
77
|
end
|
68
78
|
end
|
69
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,21 +1,43 @@
|
|
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
|
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
|
26
|
+
end
|
27
|
+
|
9
28
|
def table1(f)
|
10
29
|
return if labelled_ancestor(f)
|
11
|
-
return if f["unnumbered"]
|
12
|
-
|
30
|
+
return if f["unnumbered"]
|
31
|
+
|
32
|
+
n = @xrefs.anchor(f["id"], :label, false)
|
13
33
|
prefix_name(f, ".<tab/>", l10n("#{@i18n.table.capitalize} #{n}"), "name")
|
14
34
|
end
|
15
35
|
|
16
36
|
def annex1(f)
|
37
|
+
return super if @jcgm
|
17
38
|
return if f["unnumbered"] == "true"
|
18
|
-
|
39
|
+
|
40
|
+
lbl = @xrefs.anchor(f["id"], :label)
|
19
41
|
if t = f.at(ns("./title"))
|
20
42
|
t.children = "<strong>#{t.children.to_xml}</strong>"
|
21
43
|
end
|
@@ -25,6 +47,7 @@ module IsoDoc
|
|
25
47
|
def clause1(f)
|
26
48
|
return if f["unnumbered"] == "true"
|
27
49
|
return if f.at(("./ancestor::*[@unnumbered = 'true']"))
|
50
|
+
|
28
51
|
super
|
29
52
|
end
|
30
53
|
|
@@ -33,28 +56,43 @@ module IsoDoc
|
|
33
56
|
doccontrol docxml
|
34
57
|
end
|
35
58
|
|
36
|
-
def doccontrol
|
59
|
+
def doccontrol(docxml)
|
37
60
|
return unless docxml.at(ns("//bibdata/relation[@type = 'supersedes']"))
|
61
|
+
|
38
62
|
clause = <<~END
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
<tr>#{list_draft(docxml, 2)&.map { |x| "<td>#{x}</td>" }&.join }
|
46
|
-
<td>#{list_chairs(docxml)}</td></tr>
|
47
|
-
#{list_drafts(docxml)}
|
48
|
-
</tbody></table></doccontrol>
|
63
|
+
<doccontrol>
|
64
|
+
<title>Document Control</title>
|
65
|
+
<table unnumbered="true"><tbody>
|
66
|
+
<tr><th>Authors:</th><td/><td>#{list_authors(docxml)}</td></tr>
|
67
|
+
#{doccontrol_row1(docxml)} #{doccontrol_row2(docxml)} #{list_drafts(docxml)}
|
68
|
+
</tbody></table></doccontrol>
|
49
69
|
END
|
50
70
|
docxml.root << clause
|
51
71
|
end
|
52
72
|
|
73
|
+
def doccontrol_row1(docxml)
|
74
|
+
return "" if list_draft(docxml, 1) == ["", ""] && list_cochairs(docxml).empty?
|
75
|
+
|
76
|
+
<<~ROW
|
77
|
+
<tr>#{list_draft(docxml, 1)&.map { |x| "<td>#{x}</td>" }&.join}
|
78
|
+
<td>#{list_cochairs(docxml)}</td></tr>
|
79
|
+
ROW
|
80
|
+
end
|
81
|
+
|
82
|
+
def doccontrol_row2(docxml)
|
83
|
+
return "" if list_draft(docxml, 2) == ["", ""] && list_chairs(docxml).empty?
|
84
|
+
|
85
|
+
<<~ROW
|
86
|
+
<tr>#{list_draft(docxml, 2)&.map { |x| "<td>#{x}</td>" }&.join}
|
87
|
+
<td>#{list_chairs(docxml)}</td></tr>
|
88
|
+
ROW
|
89
|
+
end
|
90
|
+
|
53
91
|
def list_drafts(xml)
|
54
92
|
ret = ""
|
55
93
|
i = 3
|
56
|
-
while
|
57
|
-
ret += "<tr>#{list_draft(xml, i).map { |x| "<td>#{x}</td>" }.join
|
94
|
+
while list_draft(xml, i) != ["", ""]
|
95
|
+
ret += "<tr>#{list_draft(xml, i).map { |x| "<td>#{x}</td>" }.join} "\
|
58
96
|
"<td/></tr>"
|
59
97
|
i += 1
|
60
98
|
end
|
@@ -62,19 +100,21 @@ module IsoDoc
|
|
62
100
|
end
|
63
101
|
|
64
102
|
def list_draft(xml, i)
|
65
|
-
return unless d =
|
103
|
+
return ["", ""] unless d =
|
66
104
|
xml.at(ns("//bibdata/relation[@type = 'supersedes'][#{i}]/bibitem"))
|
105
|
+
|
67
106
|
date = d&.at(ns("./date"))&.text
|
68
107
|
draft = d&.at(ns("./version/draft"))&.text and
|
69
108
|
draft = "Draft #{draft}"
|
70
109
|
edn = d&.at(ns("./edition"))&.text and
|
71
|
-
edn = "
|
72
|
-
[
|
110
|
+
edn = "Version #{edn}"
|
111
|
+
[[draft, edn].join(" "), date]
|
73
112
|
end
|
74
113
|
|
75
114
|
def list_authors(xml)
|
76
115
|
ret = list_people(
|
77
|
-
xml, "//bibdata/contributor[xmlns:role/@type = 'author']/person"
|
116
|
+
xml, "//bibdata/contributor[xmlns:role/@type = 'author']/person"
|
117
|
+
)
|
78
118
|
@i18n.multiple_and(ret, @i18n.get["and"])
|
79
119
|
end
|
80
120
|
|
@@ -84,16 +124,18 @@ module IsoDoc
|
|
84
124
|
|
85
125
|
def list_cochairs(xml)
|
86
126
|
ret = list_people(xml, "//bibdata/contributor[#{COCHAIR}]/person")
|
127
|
+
ret.empty? and return ""
|
87
128
|
role = xml&.at(ns("//bibdata/contributor[#{COCHAIR}]/role"))&.text
|
88
129
|
label = ret.size > 1 && role ? "#{role}s" : role
|
89
|
-
"#{label}: #{@i18n.multiple_and(ret, @i18n.get[
|
130
|
+
"#{label}: #{@i18n.multiple_and(ret, @i18n.get['and'])}"
|
90
131
|
end
|
91
132
|
|
92
133
|
def list_chairs(xml)
|
93
134
|
ret = list_people(xml, "//bibdata/contributor#{CHAIR}/person")
|
135
|
+
ret.empty? and return ""
|
94
136
|
role = xml&.at(ns("//bibdata/contributor#{CHAIR}/role"))&.text
|
95
137
|
label = ret.size > 1 && role ? "#{role}s" : role
|
96
|
-
"#{label}: #{@i18n.multiple_and(ret, @i18n.get[
|
138
|
+
"#{label}: #{@i18n.multiple_and(ret, @i18n.get['and'])}"
|
97
139
|
end
|
98
140
|
|
99
141
|
def list_people(xml, xpath)
|
@@ -110,13 +152,29 @@ module IsoDoc
|
|
110
152
|
end
|
111
153
|
|
112
154
|
def twitter_cldr_localiser_symbols
|
113
|
-
{ group: " ", fraction_group: " ",
|
155
|
+
{ group: " ", fraction_group: " ",
|
156
|
+
fraction_group_digits: 3 }
|
114
157
|
end
|
115
158
|
|
116
159
|
def mathml1(f, locale)
|
117
160
|
localize_maths(f, locale)
|
118
161
|
end
|
119
162
|
|
163
|
+
def bibdata_i18n(bibdata)
|
164
|
+
super
|
165
|
+
bibdata_dates(bibdata)
|
166
|
+
end
|
167
|
+
|
168
|
+
def bibdata_dates(bibdata)
|
169
|
+
pubdate = bibdata.at(ns("./date[not(@format)][@type = 'published']"))
|
170
|
+
return unless pubdate
|
171
|
+
|
172
|
+
meta = metadata_init(@lang, @script, @i18n)
|
173
|
+
pubdate.next = pubdate.dup
|
174
|
+
pubdate.next["format"] = "ddMMMyyyy"
|
175
|
+
pubdate.next.children = meta.monthyr(pubdate.text)
|
176
|
+
end
|
177
|
+
|
120
178
|
include Init
|
121
179
|
end
|
122
180
|
end
|
data/lib/isodoc/bipm/xref.rb
CHANGED
@@ -8,20 +8,56 @@ module IsoDoc
|
|
8
8
|
super
|
9
9
|
end
|
10
10
|
|
11
|
+
def parse(docxml)
|
12
|
+
@jcgm = docxml&.at(ns("//bibdata/ext/editorialgroup/committee/"\
|
13
|
+
"@acronym"))&.value == "JCGM"
|
14
|
+
@annexlbl =
|
15
|
+
if docxml.at(ns("//bibdata/ext/structuredidentifier/appendix"))
|
16
|
+
@labels["appendix"]
|
17
|
+
else
|
18
|
+
@labels["annex"]
|
19
|
+
end
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def wrap_brackets(txt)
|
24
|
+
return txt if /^\[.*\]$/.match?(txt)
|
25
|
+
|
26
|
+
"[#{txt}]"
|
27
|
+
end
|
28
|
+
|
29
|
+
def reference_names(ref)
|
30
|
+
super
|
31
|
+
if @jcgm
|
32
|
+
@anchors[ref["id"]][:xref] = wrap_brackets(@anchors[ref["id"]][:xref])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
11
36
|
def clause_names(docxml, sect_num)
|
37
|
+
if @jcgm
|
38
|
+
clause_names_jcgm(docxml, sect_num)
|
39
|
+
else
|
40
|
+
clause_names_bipm(docxml, sect_num)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def clause_names_jcgm(docxml, sect_num)
|
45
|
+
docxml.xpath(ns("//clause[parent::sections][not(@type = 'scope')]"\
|
46
|
+
"[not(descendant::terms)]")).each do |c|
|
47
|
+
section_names(c, sect_num, 1)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def clause_names_bipm(docxml, _sect_num)
|
12
52
|
n = Counter.new
|
13
53
|
docxml.xpath(ns("//sections/clause[not(@unnumbered = 'true')] | "\
|
14
54
|
"//sections/terms[not(@unnumbered = 'true')] | "\
|
15
|
-
"//sections/definitions[not(@unnumbered = 'true')]"))
|
16
|
-
|
17
|
-
section_names(c, n, 1)
|
18
|
-
end
|
55
|
+
"//sections/definitions[not(@unnumbered = 'true')]"))
|
56
|
+
.each { |c| section_names(c, n, 1) }
|
19
57
|
docxml.xpath(ns("//sections/clause[@unnumbered = 'true'] | "\
|
20
58
|
"//sections/terms[@unnumbered = 'true'] | "\
|
21
|
-
"//sections/definitions[@unnumbered = 'true']"))
|
22
|
-
|
23
|
-
unnumbered_section_names(c, 1)
|
24
|
-
end
|
59
|
+
"//sections/definitions[@unnumbered = 'true']"))
|
60
|
+
.each { |c| unnumbered_section_names(c, 1) }
|
25
61
|
end
|
26
62
|
|
27
63
|
NUMBERED_SUBCLAUSES = "./clause[not(@unnumbered = 'true')] | "\
|
@@ -36,18 +72,24 @@ module IsoDoc
|
|
36
72
|
"./terms[@unnumbered = 'true'] | "\
|
37
73
|
"./definitions[@unnumbered = 'true']".freeze
|
38
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
|
+
|
39
82
|
def section_names(clause, num, lvl)
|
40
83
|
return num if clause.nil?
|
84
|
+
|
41
85
|
num.increment(clause)
|
42
|
-
@anchors[clause["id"]] =
|
43
|
-
{ label: num.print, xref: l10n("#{@labels["clause"]} #{num.print}"),
|
44
|
-
level: lvl, type: "clause" }
|
86
|
+
@anchors[clause["id"]] = section_name_anchors(clause, num, lvl)
|
45
87
|
i = Counter.new
|
46
88
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
47
89
|
i.increment(c)
|
48
90
|
section_names1(c, "#{num.print}.#{i.print}", lvl + 1)
|
49
91
|
end
|
50
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).
|
92
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
|
51
93
|
unnumbered_section_names1(c, lvl + 1)
|
52
94
|
end
|
53
95
|
num
|
@@ -55,30 +97,37 @@ module IsoDoc
|
|
55
97
|
|
56
98
|
def unnumbered_section_names(clause, lvl)
|
57
99
|
return if clause.nil?
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
100
|
+
|
101
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
102
|
+
@anchors[clause["id"]] = { label: lbl, xref: l10n(%{"#{lbl}"}),
|
103
|
+
level: lvl, type: "clause" }
|
104
|
+
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
62
105
|
unnumbered_section_names1(c, lvl + 1)
|
63
106
|
end
|
64
107
|
end
|
65
108
|
|
66
|
-
def
|
109
|
+
def section_name1_anchors(clause, num, level)
|
110
|
+
lbl = @jcgm ? "" : "#{@labels['subclause']} "
|
67
111
|
@anchors[clause["id"]] =
|
68
|
-
{ label: num, level: level,
|
112
|
+
{ label: num, level: level,
|
113
|
+
xref: l10n("#{lbl}#{num}"),
|
69
114
|
type: "clause" }
|
115
|
+
end
|
116
|
+
|
117
|
+
def section_names1(clause, num, level)
|
118
|
+
@anchors[clause["id"]] = section_name1_anchors(clause, num, level)
|
70
119
|
i = Counter.new
|
71
120
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
72
121
|
i.increment(c)
|
73
122
|
section_names1(c, "#{num}.#{i.print}", level + 1)
|
74
123
|
end
|
75
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).
|
124
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
|
76
125
|
unnumbered_section_names1(c, lvl + 1)
|
77
126
|
end
|
78
127
|
end
|
79
128
|
|
80
129
|
def unnumbered_section_names1(clause, level)
|
81
|
-
lbl = clause&.at(ns("./title"))&.text || "[#{clause[
|
130
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
82
131
|
@anchors[clause["id"]] =
|
83
132
|
{ label: lbl, xref: l10n(%{"#{lbl}"}), level: level, type: "clause" }
|
84
133
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
@@ -88,75 +137,95 @@ module IsoDoc
|
|
88
137
|
|
89
138
|
def back_anchor_names(docxml)
|
90
139
|
super
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
140
|
+
i = @jcgm ? Counter.new("@", skip_i: true) : Counter.new(0)
|
141
|
+
docxml.xpath(ns("//annex[not(@unnumbered = 'true')]")).each do |c|
|
142
|
+
i.increment(c)
|
143
|
+
annex_names(c, i.print)
|
144
|
+
end
|
145
|
+
docxml.xpath(ns("//annex[@unnumbered = 'true']"))
|
146
|
+
.each { |c| unnumbered_annex_names(c) }
|
147
|
+
docxml.xpath(ns("//indexsect")).each { |b| preface_names(b) }
|
148
|
+
end
|
149
|
+
|
150
|
+
def annex_name_anchors(clause, num)
|
151
|
+
{ label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
|
152
|
+
xref: l10n("#{@annexlbl} #{num}"), level: 1 }
|
97
153
|
end
|
98
154
|
|
99
155
|
def annex_names(clause, num)
|
100
|
-
@anchors[clause["id"]] =
|
101
|
-
{ label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
|
102
|
-
xref: l10n("#{@annexlbl} #{num}"), level: 1 }
|
156
|
+
@anchors[clause["id"]] = annex_name_anchors(clause, num)
|
103
157
|
if a = single_annex_special_section(clause)
|
104
|
-
annex_names1(a,
|
158
|
+
annex_names1(a, num.to_s, 1)
|
105
159
|
else
|
106
160
|
i = Counter.new
|
107
161
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
108
162
|
i.increment(c)
|
109
163
|
annex_names1(c, "#{num}.#{i.print}", 2)
|
110
164
|
end
|
111
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
112
|
-
unnumbered_annex_names1(c, 2)
|
113
|
-
end
|
165
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
166
|
+
.each { |c| unnumbered_annex_names1(c, 2) }
|
114
167
|
end
|
115
168
|
hierarchical_asset_names(clause, num)
|
116
169
|
end
|
117
170
|
|
171
|
+
def unnumbered_annex_anchors(lbl)
|
172
|
+
{ label: lbl, type: "clause", value: "",
|
173
|
+
xref: l10n(%{"#{lbl}"}), level: 1 }
|
174
|
+
end
|
175
|
+
|
118
176
|
def unnumbered_annex_names(clause)
|
119
|
-
lbl = clause&.at(ns("./title"))&.text || "[#{clause[
|
120
|
-
@anchors[clause["id"]] =
|
121
|
-
{ label: lbl, type: "clause", value: "",
|
122
|
-
xref: l10n(%{"#{lbl}"}), level: 1 }
|
177
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
178
|
+
@anchors[clause["id"]] = unnumbered_annex_anchors(lbl)
|
123
179
|
if a = single_annex_special_section(clause)
|
124
|
-
annex_names1(a,
|
180
|
+
annex_names1(a, num.to_s, 1)
|
125
181
|
else
|
126
|
-
clause.xpath(ns(SUBCLAUSES))
|
127
|
-
unnumbered_annex_names1(c, 2)
|
128
|
-
end
|
182
|
+
clause.xpath(ns(SUBCLAUSES))
|
183
|
+
.each { |c| unnumbered_annex_names1(c, 2) }
|
129
184
|
end
|
130
185
|
hierarchical_asset_names(clause, lbl)
|
131
186
|
end
|
132
187
|
|
188
|
+
def annex_names1_anchors(num, level)
|
189
|
+
lbl = @jcgm ? "" : "#{@annexlbl} "
|
190
|
+
{ label: num, xref: l10n("#{lbl}#{num}"),
|
191
|
+
level: level, type: "clause" }
|
192
|
+
end
|
193
|
+
|
133
194
|
def annex_names1(clause, num, level)
|
134
|
-
@anchors[clause["id"]] =
|
135
|
-
{ label: num, xref: l10n("#{@annexlbl} #{num}"),
|
136
|
-
level: level, type: "clause" }
|
195
|
+
@anchors[clause["id"]] = annex_names1_anchors(num, level)
|
137
196
|
i = Counter.new
|
138
197
|
clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
|
139
198
|
i.increment(c)
|
140
199
|
annex_names1(c, "#{num}.#{i.print}", level + 1)
|
141
200
|
end
|
142
|
-
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
143
|
-
unnumbered_annex_names1(c, level + 1)
|
144
|
-
end
|
201
|
+
clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
|
202
|
+
.each { |c| unnumbered_annex_names1(c, level + 1) }
|
145
203
|
end
|
146
204
|
|
147
205
|
def unnumbered_annex_names1(clause, level)
|
148
|
-
lbl = clause&.at(ns("./title"))&.text || "[#{clause[
|
149
|
-
@anchors[clause["id"]] =
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
unnumbered_annex_names1(c, level + 1)
|
154
|
-
end
|
206
|
+
lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
|
207
|
+
@anchors[clause["id"]] = { label: lbl, xref: l10n(%{"#{lbl}"}),
|
208
|
+
level: level, type: "clause" }
|
209
|
+
clause.xpath(ns(SUBCLAUSES))
|
210
|
+
.each { |c| unnumbered_annex_names1(c, level + 1) }
|
155
211
|
end
|
156
212
|
|
157
|
-
def annex_name_lbl(
|
213
|
+
def annex_name_lbl(_clause, num)
|
158
214
|
l10n("<strong>#{@annexlbl} #{num}</strong>")
|
159
215
|
end
|
216
|
+
|
217
|
+
def sequential_formula_names(clause)
|
218
|
+
c = Counter.new
|
219
|
+
clause.xpath(ns(".//formula")).each do |t|
|
220
|
+
next if t["id"].nil? || t["id"].empty?
|
221
|
+
|
222
|
+
@anchors[t["id"]] = anchor_struct(
|
223
|
+
c.increment(t).print, nil,
|
224
|
+
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
225
|
+
"formula", t["unnumbered"]
|
226
|
+
)
|
227
|
+
end
|
228
|
+
end
|
160
229
|
end
|
161
230
|
end
|
162
231
|
end
|