metanorma-bipm 1.0.7 → 1.1.0

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