Class: IsoDoc::Iso::Xref
- Inherits:
-
Xref
- Object
- Xref
- IsoDoc::Iso::Xref
- Defined in:
- lib/isodoc/iso/xref.rb,
lib/isodoc/iso/xref_section.rb
Instance Attribute Summary collapse
-
#anchors ⇒ Object
Returns the value of attribute anchors.
-
#anchors_previous ⇒ Object
Returns the value of attribute anchors_previous.
Instance Method Summary collapse
- #annex_name_anchors1(clause, num, level) ⇒ Object
- #annex_name_lbl(clause, num) ⇒ Object
- #annex_names(clause, num) ⇒ Object
- #annex_names1(clause, num, level) ⇒ Object
- #appendix_names(clause, _num) ⇒ Object
- #appendix_names1(clause, num, level, container) ⇒ Object
- #asset_anchor_names(doc) ⇒ Object
- #clause_order_back(docxml) ⇒ Object
- #clause_order_main(docxml) ⇒ Object
- #figure_anchor(elem, sublabel, label, klass, container: false) ⇒ Object
- #hierarchical_figure_class_names(clause, num) ⇒ Object
- #hierarchical_figure_names(clause, num) ⇒ Object
- #hierarchical_formula_names(clause, num) ⇒ Object
- #hierarchical_table_names(clause, _num) ⇒ Object
- #initial_anchor_names(doc) ⇒ Object
-
#introduction_names(clause) ⇒ Object
we can reference 0-number clauses in introduction.
- #list_anchor_names(sections) ⇒ Object
- #modspec_table_components_xrefs(table, table_label, container: false) ⇒ Object
- #modspec_table_xrefs(clause, container: false) ⇒ Object
- #note_anchor_names1(notes, counter) ⇒ Object
- #reference_names(ref) ⇒ Object
-
#section_name_anchors(clause, num, level) ⇒ Object
subclauses are not prefixed with “Clause” retaining subtype for the semantics.
- #sequential_figure_class_names(clause, container: false) ⇒ Object
- #sequential_figure_names(clause, container: false) ⇒ Object
- #sequential_table_names(clause, container: false) ⇒ Object
-
#single_ol_for_xrefs?(lists) ⇒ Boolean
all li in the ol in lists are consecutively numbered through @start.
- #subfigure_label(subfignum) ⇒ Object
- #uncountable_note?(note) ⇒ Boolean
- #xref_to_modspec(id, table_label) ⇒ Object
Instance Attribute Details
#anchors ⇒ Object
Returns the value of attribute anchors.
9 10 11 |
# File 'lib/isodoc/iso/xref.rb', line 9 def anchors @anchors end |
#anchors_previous ⇒ Object
Returns the value of attribute anchors_previous.
9 10 11 |
# File 'lib/isodoc/iso/xref.rb', line 9 def anchors_previous @anchors_previous end |
Instance Method Details
#annex_name_anchors1(clause, num, level) ⇒ Object
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/isodoc/iso/xref_section.rb', line 52 def annex_name_anchors1(clause, num, level) ret = { label: num, level: level, subtype: "annex" } ret2 = if level == 2 { xref: l10n("#{@labels['clause']} #{num}"), elem: @labels["clause"] } else { xref: num } end @anchors[clause["id"]] = ret.merge(ret2) end |
#annex_name_lbl(clause, num) ⇒ Object
80 81 82 |
# File 'lib/isodoc/iso/xref_section.rb', line 80 def annex_name_lbl(clause, num) super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>") end |
#annex_names(clause, num) ⇒ Object
16 17 18 19 |
# File 'lib/isodoc/iso/xref_section.rb', line 16 def annex_names(clause, num) appendix_names(clause, num) super end |
#annex_names1(clause, num, level) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/isodoc/iso/xref_section.rb', line 63 def annex_names1(clause, num, level) annex_name_anchors1(clause, num, level) i = Counter.new(0, prefix: "#{num}.") clause.xpath(ns("./clause | ./references")).each do |c| annex_names1(c, i.increment(c).print, level + 1) end end |
#appendix_names(clause, _num) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/isodoc/iso/xref_section.rb', line 21 def appendix_names(clause, _num) i = Counter.new clause.xpath(ns("./appendix")).each do |c| i.increment(c) @anchors[c["id"]] = anchor_struct(i.print, nil, @labels["appendix"], "clause").merge(level: 2, subtype: "annex", container: clause["id"]) j = Counter.new(0, prefix: "#{i.print}.") c.xpath(ns("./clause | ./references")).each do |c1| lbl = "#{@labels['appendix']} #{j.increment(c1).print}" appendix_names1(c1, l10n(lbl), 3, clause["id"]) end end end |
#appendix_names1(clause, num, level, container) ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/isodoc/iso/xref_section.rb', line 71 def appendix_names1(clause, num, level, container) @anchors[clause["id"]] = { label: num, xref: num, level: level, container: container } i = Counter.new(0, prefix: "#{num}.") clause.xpath(ns("./clause | ./references")).each do |c| appendix_names1(c, i.increment(c).print, level + 1, container) end end |
#asset_anchor_names(doc) ⇒ Object
41 42 43 44 45 |
# File 'lib/isodoc/iso/xref.rb', line 41 def asset_anchor_names(doc) super @parse_settings.empty? or return sequential_asset_names(doc.xpath(ns("//preface/*"))) end |
#clause_order_back(docxml) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/isodoc/iso/xref.rb', line 24 def clause_order_back(docxml) if @klass.amd?(docxml) [{ path: @klass.norm_ref_xpath }, { path: @klass.bibliography_xpath }, { path: "//indexsect", multi: true }, { path: "//colophon/*", multi: true }] else super end end |
#clause_order_main(docxml) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/isodoc/iso/xref.rb', line 11 def clause_order_main(docxml) if @klass.amd?(docxml) [{ path: "//sections/clause", multi: true }] else [{ path: "//sections/clause[@type = 'scope']" }, { path: @klass.norm_ref_xpath }, { path: "#{@klass.middle_clause(docxml)} | //sections/terms | " \ "//sections/clause[descendant::terms or descendant::definitions] | " \ "//sections/definitions | //sections/clause[@type = 'section']", multi: true }] end end |
#figure_anchor(elem, sublabel, label, klass, container: false) ⇒ Object
58 59 60 61 62 63 64 65 |
# File 'lib/isodoc/iso/xref.rb', line 58 def figure_anchor(elem, sublabel, label, klass, container: false) @anchors[elem["id"]] = anchor_struct( "#{label}#{sublabel}", container ? elem : nil, @labels[klass] || klass.capitalize, klass, elem["unnumbered"] ) !sublabel.empty? && elem["unnumbered"] != "true" and @anchors[elem["id"]][:label] = sublabel end |
#hierarchical_figure_class_names(clause, num) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/isodoc/iso/xref.rb', line 107 def hierarchical_figure_class_names(clause, num) c = {} j = 0 clause.xpath(ns(".//figure[@class][not(@class = 'pseudocode')]")) .noblank.each do |t| c[t["class"]] ||= IsoDoc::XrefGen::Counter.new j = subfigure_increment(j, c[t["class"]], t) label = "#{num}#{hiersep}#{c.print}" sublabel = j.zero? ? nil : "#{(j + 96).chr})" figure_anchor(t, sublabel, label, t["class"]) end end |
#hierarchical_figure_names(clause, num) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/isodoc/iso/xref.rb', line 95 def hierarchical_figure_names(clause, num) c = IsoDoc::XrefGen::Counter.new j = 0 clause.xpath(ns(FIGURE_NO_CLASS)).noblank.each do |t| j = subfigure_increment(j, c, t) label = "#{num}#{hiersep}#{c.print}" sublabel = subfigure_label(j) figure_anchor(t, sublabel, label, "figure") end hierarchical_figure_class_names(clause, num) end |
#hierarchical_formula_names(clause, num) ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/isodoc/iso/xref.rb', line 47 def hierarchical_formula_names(clause, num) c = IsoDoc::XrefGen::Counter.new clause.xpath(ns(".//formula")).noblank.each do |t| @anchors[t["id"]] = anchor_struct( "#{num}#{hiersep}#{c.increment(t).print}", t, t["inequality"] ? @labels["inequality"] : @labels["formula"], "formula", t["unnumbered"] ) end end |
#hierarchical_table_names(clause, _num) ⇒ Object
183 184 185 186 |
# File 'lib/isodoc/iso/xref.rb', line 183 def hierarchical_table_names(clause, _num) super modspec_table_xrefs(clause) if @anchors_previous end |
#initial_anchor_names(doc) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/isodoc/iso/xref.rb', line 34 def initial_anchor_names(doc) super if @parse_settings.empty? || @parse_settings[:clauses] introduction_names(doc.at(ns("//introduction"))) end end |
#introduction_names(clause) ⇒ Object
we can reference 0-number clauses in introduction
5 6 7 8 9 10 11 12 13 14 |
# File 'lib/isodoc/iso/xref_section.rb', line 5 def introduction_names(clause) clause.nil? and return clause.at(ns("./clause")) and @anchors[clause["id"]] = { label: nil, level: 1, type: "clause", xref: clause.at(ns("./title"))&.text } i = Counter.new(0, prefix: "0.") clause.xpath(ns("./clause")).each do |c| section_names1(c, i.increment(c).print, 2) end end |
#list_anchor_names(sections) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/isodoc/iso/xref.rb', line 126 def list_anchor_names(sections) sections.each do |s| notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) - s.xpath(ns(".//appendix//ol")) - s.xpath(ns(".//ol//ol")) c = Counter.new notes.noblank.each do |n| @anchors[n["id"]] = anchor_struct(increment_label(notes, n, c), n, @labels["list"], "list", false) list_item_anchor_names(n, @anchors[n["id"]], 1, "", !single_ol_for_xrefs?(notes)) end list_anchor_names(s.xpath(ns(CHILD_SECTIONS))) end end |
#modspec_table_components_xrefs(table, table_label, container: false) ⇒ Object
166 167 168 169 170 171 |
# File 'lib/isodoc/iso/xref.rb', line 166 def modspec_table_components_xrefs(table, table_label, container: false) table.xpath(ns(".//tr[@id]")).each do |tr| xref_to_modspec(tr["id"], table_label) or next container or @anchors[tr["id"]].delete(:container) end end |
#modspec_table_xrefs(clause, container: false) ⇒ Object
158 159 160 161 162 163 164 |
# File 'lib/isodoc/iso/xref.rb', line 158 def modspec_table_xrefs(clause, container: false) clause.xpath(ns(".//table[@class = 'modspec']")).noblank.each do |t| n = @anchors[t["id"]][:xref] xref_to_modspec(t["id"], n) or next modspec_table_components_xrefs(t, n, container: container) end end |
#note_anchor_names1(notes, counter) ⇒ Object
192 193 194 195 196 197 198 199 |
# File 'lib/isodoc/iso/xref.rb', line 192 def note_anchor_names1(notes, counter) countable = notes.reject { |n| uncountable_note?(n) } countable.each do |n| @anchors[n["id"]] = anchor_struct(increment_label(countable, n, counter), n, @labels["note_xref"], "note", false) end end |
#reference_names(ref) ⇒ Object
120 121 122 123 124 |
# File 'lib/isodoc/iso/xref.rb', line 120 def reference_names(ref) super @anchors[ref["id"]] = { xref: @anchors[ref["id"]][:xref] .sub(/ \(All Parts\)/i, "") } end |
#section_name_anchors(clause, num, level) ⇒ Object
subclauses are not prefixed with “Clause” retaining subtype for the semantics
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/isodoc/iso/xref_section.rb', line 39 def section_name_anchors(clause, num, level) if clause["type"] == "section" @anchors[clause["id"]] = { label: l10n("#{@labels['section']} #{num}"), xref: l10n("#{@labels['section']} #{num}"), title: clause_title(clause), level: level, type: "clause", elem: @labels["section"] } elsif level > 1 @anchors[clause["id"]] = { label: num, level: level, xref: num, subtype: "clause" } else super end end |
#sequential_figure_class_names(clause, container: false) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/isodoc/iso/xref.rb', line 83 def sequential_figure_class_names(clause, container: false) c = {} j = 0 clause.xpath(ns(".//figure[@class][not(@class = 'pseudocode')]")) .each do |t| c[t["class"]] ||= IsoDoc::XrefGen::Counter.new j = subfigure_increment(j, c[t["class"]], t) sublabel = j.zero? ? nil : "#{(j + 96).chr})" figure_anchor(t, sublabel, c.print, t["class"], container: container) end end |
#sequential_figure_names(clause, container: false) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/isodoc/iso/xref.rb', line 72 def sequential_figure_names(clause, container: false) j = 0 clause.xpath(ns(FIGURE_NO_CLASS)).noblank .each_with_object(IsoDoc::XrefGen::Counter.new) do |t, c| j = subfigure_increment(j, c, t) sublabel = subfigure_label(j) figure_anchor(t, sublabel, c.print, "figure", container: container) end sequential_figure_class_names(clause, container: container) end |
#sequential_table_names(clause, container: false) ⇒ Object
153 154 155 156 |
# File 'lib/isodoc/iso/xref.rb', line 153 def sequential_table_names(clause, container: false) super modspec_table_xrefs(clause, container: container) if @anchors_previous end |
#single_ol_for_xrefs?(lists) ⇒ Boolean
all li in the ol in lists are consecutively numbered through @start
142 143 144 145 146 147 148 149 150 151 |
# File 'lib/isodoc/iso/xref.rb', line 142 def single_ol_for_xrefs?(lists) lists.size == 1 and return true start = 0 lists.each_with_index do |l, i| i.zero? and next start += lists[i - 1].xpath(ns("./li")).size return false unless l["start"]&.to_i == start + 1 end true end |
#subfigure_label(subfignum) ⇒ Object
67 68 69 70 |
# File 'lib/isodoc/iso/xref.rb', line 67 def subfigure_label(subfignum) subfignum.zero? and return "" " #{(subfignum + 96).chr})" end |
#uncountable_note?(note) ⇒ Boolean
188 189 190 |
# File 'lib/isodoc/iso/xref.rb', line 188 def uncountable_note?(note) @anchors[note["id"]] || blank?(note["id"]) || note["type"] == "units" end |
#xref_to_modspec(id, table_label) ⇒ Object
173 174 175 176 177 178 179 180 181 |
# File 'lib/isodoc/iso/xref.rb', line 173 def xref_to_modspec(id, table_label) (@anchors[id] && !@anchors[id][:has_modspec]) or return @anchors[id][:has_modspec] = true x = @anchors_previous[id][:xref_bare] || @anchors_previous[id][:xref] @anchors[id][:xref] = l10n("#{table_label}, #{x}") @anchors[id][:modspec] = @anchors_previous[id][:modspec] @anchors[id][:subtype] = "modspec" # prevents citetbl style from beign applied true end |