Class: IsoDoc::Bipm::Xref

Inherits:
Xref
  • Object
show all
Defined in:
lib/isodoc/bipm/xref.rb

Constant Summary collapse

UNNUM =
"@unnumbered = 'true'".freeze
NUMBERED_SUBCLAUSES =
<<~XPATH.freeze
  ./clause[not(#{UNNUM})] | ./references[not(#{UNNUM})] | ./term[not(#{UNNUM})] | ./terms[not(#{UNNUM})] | ./definitions[not(#{UNNUM})]
XPATH
UNNUMBERED_SUBCLAUSES =
<<~XPATH.freeze
  ./clause[#{UNNUM}] | ./references[#{UNNUM}] | ./term[#{UNNUM}] | ./terms[#{UNNUM}] | ./definitions[#{UNNUM}]
XPATH

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lang, script, klass, i18n, options = {}) ⇒ Xref

Returns a new instance of Xref.



9
10
11
12
# File 'lib/isodoc/bipm/xref.rb', line 9

def initialize(lang, script, klass, i18n, options = {})
  @iso = IsoDoc::Iso::Xref.new(lang, script, klass, i18n, options)
  super
end

Instance Attribute Details

#jcgmObject

Returns the value of attribute jcgm.



7
8
9
# File 'lib/isodoc/bipm/xref.rb', line 7

def jcgm
  @jcgm
end

Instance Method Details

#annex_anchor_names(docxml) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/isodoc/bipm/xref.rb', line 133

def annex_anchor_names(docxml)
  n = @jcgm ? Counter.new("@", skip_i: true) : Counter.new(0)
  clause_order_annex(docxml).each_with_index do |a, i|
    docxml.xpath(ns(a[:path])).each do |c|
      if i.zero?
        n.increment(c)
        annex_names(c, n.print)
      else unnumbered_annex_names(c) end
      a[:multi] or break
    end
  end
end

#annex_name_anchors(clause, num) ⇒ Object



146
147
148
149
# File 'lib/isodoc/bipm/xref.rb', line 146

def annex_name_anchors(clause, num)
  { label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
    xref: labelled_autonum(@annexlbl, num), level: 1, elem: @annexlbl }
end

#annex_name_anchors1(clause, num, level) ⇒ Object



190
191
192
193
194
195
# File 'lib/isodoc/bipm/xref.rb', line 190

def annex_name_anchors1(clause, num, level)
  lbl = @jcgm ? "" : @annexlbl
  @anchors[clause["id"]] = 
    { label: num, xref: labelled_autonum(lbl, num), #l10n("#{lbl}#{num}"),
      level: level, type: "clause", elem: lbl }
end

#annex_name_lbl(_clause, num) ⇒ Object



217
218
219
# File 'lib/isodoc/bipm/xref.rb', line 217

def annex_name_lbl(_clause, num)
  l10n("<strong>#{labelled_autonum(@annexlbl, num)}</strong>")
end

#annex_names(clause, num) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/isodoc/bipm/xref.rb', line 151

def annex_names(clause, num)
  appendix_names(clause, num)
  lbl = semx(clause, num)
  prefix = @jcgm ? "" : "A"
  lbl1 = semx(clause, "#{prefix}#{num}")
  @anchors[clause["id"]] = annex_name_anchors(clause, lbl)
  if @klass.single_term_clause?(clause)
    annex_names1(clause.at(ns("./references | ./terms | ./definitions")),
                 nil, "#{prefix}#{num}", 1)
  else
    i = Counter.new(0)
    clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
      annex_names1(c, lbl1, i.increment(c).print, 2)
    end
    clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
      .each { |c| unnumbered_annex_names1(c, 2) }
  end
  hierarchical_asset_names(clause, "#{prefix}#{num}")
end

#annex_names1(clause, parentnum, num, level) ⇒ Object



197
198
199
200
201
202
203
204
205
206
# File 'lib/isodoc/bipm/xref.rb', line 197

def annex_names1(clause, parentnum, num, level)
  lbl = clause_number_semx(parentnum, clause, num)
  annex_name_anchors1(clause, lbl, level)
  i = Counter.new(0)
  clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
    annex_names1(c, lbl, i.increment(c).print, level + 1)
  end
  clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
    .each { |c| unnumbered_annex_names1(c, level + 1) }
end

#clause_order_annex(_docxml) ⇒ Object



128
129
130
131
# File 'lib/isodoc/bipm/xref.rb', line 128

def clause_order_annex(_docxml)
  [{ path: "//annex[not(#{UNNUM})]", multi: true },
   { path: "//annex[#{UNNUM}]", multi: true }]
end

#clause_order_main(docxml) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/isodoc/bipm/xref.rb', line 29

def clause_order_main(docxml)
  @jcgm and return @iso.clause_order_main(docxml)
  [{ path: "//sections/clause[not(#{UNNUM})] | " \
           "//sections/terms[not(#{UNNUM})] | " \
           "//sections/definitions[not(#{UNNUM})] | " \
           "//sections/references[not(#{UNNUM})]", multi: true },
   { path: "//sections/clause[#{UNNUM}] | " \
           "//sections/terms[#{UNNUM}] | " \
           "//sections/definitions[#{UNNUM}] | " \
           "//sections/references[#{UNNUM}]", multi: true }]
end

#hierarchical_figure_names(clause, num) ⇒ Object



246
247
248
249
250
# File 'lib/isodoc/bipm/xref.rb', line 246

def hierarchical_figure_names(clause, num)
  @jcgm or return super
  @iso.hierarchical_figure_names(clause, num)
  @anchors.merge!(@iso.get)
end

#initial_anchor_names(doc) ⇒ Object



232
233
234
235
236
237
238
# File 'lib/isodoc/bipm/xref.rb', line 232

def initial_anchor_names(doc)
  super
  if (@parse_settings.empty? || @parse_settings[:clauses]) && @jcgm
    @iso.introduction_names(doc.at(ns("//introduction")))
    @anchors.merge!(@iso.get)
  end
end

#main_anchor_names(xml) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/isodoc/bipm/xref.rb', line 41

def main_anchor_names(xml)
  @jcgm and return super
  t = clause_order_main(xml)
  n = Counter.new
  t.each_with_index do |a, i|
    xml.xpath(ns(a[:path])).each do |c|
      i.zero? ? section_names(c, n, 1) : unnumbered_section_names(c, 1)
      a[:multi] or break
    end
  end
end

#parse(docxml) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/isodoc/bipm/xref.rb', line 14

def parse(docxml)
  @jcgm = docxml.at(ns(<<~XPATH))&.text == "JCGM"
    //bibdata/contributor[role/description = 'committee']/organization/subdivision[@type = 'Committee']/identifier[not(@type = 'full')]
  XPATH
  @annexlbl =
    if @jcgm then @labels["iso_annex"]
    elsif docxml.at(ns("//bibdata/ext/structuredidentifier/appendix"))
      @labels["appendix"]
    else @labels["annex"]
    end
  super
end

#section_name1_anchors(clause, num, level) ⇒ Object



97
98
99
100
101
102
103
104
# File 'lib/isodoc/bipm/xref.rb', line 97

def section_name1_anchors(clause, num, level)
  lbl = @jcgm ? "" : @labels['subclause']
  xref = labelled_autonum(@labels[lbl], num)
  label = num
  @anchors[clause["id"]] =
    { label: num, level: level, xref: labelled_autonum(lbl, num),
      type: "clause", elem: lbl }
end

#section_name_anchors(clause, num, level) ⇒ Object



61
62
63
64
65
66
67
68
69
# File 'lib/isodoc/bipm/xref.rb', line 61

def section_name_anchors(clause, num, level)
  lbl = @jcgm ? "clause_jcgm" : "clause"
  xref = labelled_autonum(@labels[lbl], num)
  label = num
  c = clause_title(clause) and title = semx(clause, c, "title")
  @anchors[clause["id"]] =
    { label:, xref:, title:, level:, type: "clause",
      elem: @labels[lbl] }
end

#section_names(clause, num, lvl) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/isodoc/bipm/xref.rb', line 71

def section_names(clause, num, lvl)
  unnumbered_section_name?(clause) and return num
  num.increment(clause)
  lbl = semx(clause, num.print)
  section_name_anchors(clause, lbl, lvl)
  clause.xpath(ns(NUMBERED_SUBCLAUSES))
    .each_with_object(clause_counter(0)) do |c, i|
      section_names1(c, lbl, i.increment(c).print, lvl + 1)
    end
  clause.xpath(ns(UNNUMBERED_SUBCLAUSES))
    .each_with_object(clause_counter(0)) do |c, i|
      unnumbered_section_names1(c, lvl + 1)
    end
  num
end

#section_names1(clause, parentnum, num, level) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/isodoc/bipm/xref.rb', line 106

def section_names1(clause, parentnum, num, level)
  lbl = clause_number_semx(parentnum, clause, num)
  @anchors[clause["id"]] = section_name1_anchors(clause, lbl, level)
  i = Counter.new(0)
  clause.xpath(ns(NUMBERED_SUBCLAUSES)).each do |c|
    section_names1(c, lbl, i.increment(c).print, level + 1)
  end
  clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
    unnumbered_section_names1(c, level + 1)
  end
end

#sequential_figure_names(clause, container: false) ⇒ Object



240
241
242
243
244
# File 'lib/isodoc/bipm/xref.rb', line 240

def sequential_figure_names(clause, container: false)
  @jcgm or return super
  @iso.sequential_figure_names(clause, container: container)
  @anchors.merge!(@iso.get)
end

#sequential_formula_names(clause, container: false) ⇒ Object



221
222
223
224
225
226
227
228
229
230
# File 'lib/isodoc/bipm/xref.rb', line 221

def sequential_formula_names(clause, container: false)
  c = Counter.new
  clause.xpath(ns(".//formula")).noblank.each do |t|
    @anchors[t["id"]] = anchor_struct(
      semx(t, c.increment(t).print), t,
      t["inequality"] ? @labels["inequality"] : @labels["formula"],
      "formula", { unnumb: t["unnumbered"], container: }
    )
  end
end

#unnumbered_annex_anchors(lbl) ⇒ Object



171
172
173
174
# File 'lib/isodoc/bipm/xref.rb', line 171

def unnumbered_annex_anchors(lbl)
  { label: lbl, type: "clause", value: "",
    xref: (%{"#{lbl}"}), level: 1 }
end

#unnumbered_annex_names(clause) ⇒ Object



176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/isodoc/bipm/xref.rb', line 176

def unnumbered_annex_names(clause)
  lbl = clause.at(ns("./title"))&.text || "[#{clause['id']}]"
  lbl = semx(clause, lbl, "title")
  @anchors[clause["id"]] = unnumbered_annex_anchors(lbl)
  if @klass.single_term_clause?(clause)
    unnumbered_annex_names1(clause.at(ns("./references | ./terms | ./definitions")),
                            1)
  else
    clause.xpath(ns(SUBCLAUSES))
      .each { |c| unnumbered_annex_names1(c, 2) }
  end
  hierarchical_asset_names(clause, lbl)
end

#unnumbered_annex_names1(clause, level) ⇒ Object



208
209
210
211
212
213
214
215
# File 'lib/isodoc/bipm/xref.rb', line 208

def unnumbered_annex_names1(clause, level)
  lbl = clause&.at(ns("./title"))&.text || "[#{clause['id']}]"
  lbl = semx(clause, lbl, "title")
  @anchors[clause["id"]] = { label: lbl, xref: l10n(%{"#{lbl}"}),
                             level: level, type: "clause" }
  clause.xpath(ns(SUBCLAUSES))
    .each { |c| unnumbered_annex_names1(c, level + 1) }
end

#unnumbered_section_names(clause, lvl) ⇒ Object



87
88
89
90
91
92
93
94
95
# File 'lib/isodoc/bipm/xref.rb', line 87

def unnumbered_section_names(clause, lvl)
  lbl = clause.at(ns("./title"))&.text || "[#{clause['id']}]"
  lbl = semx(clause, lbl, "title")
  @anchors[clause["id"]] = { label: lbl, xref: l10n(%{"#{lbl}"}),
                             level: lvl, type: "clause" }
  clause.xpath(ns(SUBCLAUSES)).each do |c|
    unnumbered_section_names1(c, lvl + 1)
  end
end

#unnumbered_section_names1(clause, level) ⇒ Object



118
119
120
121
122
123
124
125
126
# File 'lib/isodoc/bipm/xref.rb', line 118

def unnumbered_section_names1(clause, level)
  lbl = clause.at(ns("./title"))&.text || "[#{clause['id']}]"
  lbl = semx(clause, lbl, "title")
  @anchors[clause["id"]] =
    { label: lbl, xref: %{"#{lbl}"}, level: level, type: "clause" }
  clause.xpath(ns(SUBCLAUSES)).each do |c|
    unnumbered_section_names1(c, level + 1)
  end
end