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



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

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



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

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



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

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



215
216
217
# File 'lib/isodoc/bipm/xref.rb', line 215

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

#annex_names(clause, num) ⇒ Object



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

def annex_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



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

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



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

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

#clause_order_main(docxml) ⇒ Object



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

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



244
245
246
247
248
# File 'lib/isodoc/bipm/xref.rb', line 244

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



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

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



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

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
# File 'lib/isodoc/bipm/xref.rb', line 14

def parse(docxml)
  @jcgm = docxml.at(ns("//bibdata/ext/editorialgroup/committee/" \
                       "@acronym"))&.value == "JCGM"
  @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



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

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



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

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



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

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



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

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



238
239
240
241
242
# File 'lib/isodoc/bipm/xref.rb', line 238

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



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

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



169
170
171
172
# File 'lib/isodoc/bipm/xref.rb', line 169

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

#unnumbered_annex_names(clause) ⇒ Object



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

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



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

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



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

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



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

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