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_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
- #back_anchor_names(docxml) ⇒ Object
- #figure_anchor(elem, sublabel, label, klass) ⇒ 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
- #initial_anchor_names1(doc) ⇒ Object
- #initial_anchor_names_amd(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) ⇒ Object
- #modspec_table_xrefs(clause) ⇒ Object
- #reference_names(ref) ⇒ Object
-
#section_names1(clause, num, level) ⇒ Object
subclauses are not prefixed with “Clause” retaining subtype for the semantics.
- #sequential_figure_class_names(clause) ⇒ Object
- #sequential_figure_names(clause) ⇒ Object
- #sequential_table_names(clause) ⇒ Object
-
#single_ol_for_xrefs?(lists) ⇒ Boolean
all li in the ol in lists are consecutively numbered through @start.
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_lbl(clause, num) ⇒ Object
74 75 76 |
# File 'lib/isodoc/iso/xref_section.rb', line 74 def annex_name_lbl(clause, num) super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>") end |
#annex_names(clause, num) ⇒ Object
18 19 20 21 |
# File 'lib/isodoc/iso/xref_section.rb', line 18 def annex_names(clause, num) appendix_names(clause, num) super end |
#annex_names1(clause, num, level) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/isodoc/iso/xref_section.rb', line 54 def annex_names1(clause, num, level) @anchors[clause["id"]] = { label: num, xref: num, level: level, subtype: "annex" } i = Counter.new clause.xpath(ns("./clause | ./references")).each do |c| i.increment(c) annex_names1(c, "#{num}.#{i.print}", level + 1) end end |
#appendix_names(clause, _num) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/isodoc/iso/xref_section.rb', line 23 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 c.xpath(ns("./clause | ./references")).each do |c1| j.increment(c1) lbl = "#{@labels['appendix']} #{i.print}.#{j.print}" appendix_names1(c1, l10n(lbl), 3, clause["id"]) end end end |
#appendix_names1(clause, num, level, container) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/isodoc/iso/xref_section.rb', line 64 def appendix_names1(clause, num, level, container) @anchors[clause["id"]] = { label: num, xref: num, level: level, container: container } i = Counter.new clause.xpath(ns("./clause | ./references")).each do |c| i.increment(c) appendix_names1(c, "#{num}.#{i.print}", level + 1, container) end end |
#asset_anchor_names(doc) ⇒ Object
30 31 32 33 34 |
# File 'lib/isodoc/iso/xref.rb', line 30 def asset_anchor_names(doc) super @parse_settings.empty? or return sequential_asset_names(doc.xpath(ns("//preface/*"))) end |
#back_anchor_names(docxml) ⇒ Object
129 130 131 132 133 134 |
# File 'lib/isodoc/iso/xref.rb', line 129 def back_anchor_names(docxml) super if @parse_settings.empty? || @parse_settings[:clauses] docxml.xpath(ns("//indexsect")).each { |b| preface_names(b) } end end |
#figure_anchor(elem, sublabel, label, klass) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/isodoc/iso/xref.rb', line 66 def figure_anchor(elem, sublabel, label, klass) @anchors[elem["id"]] = anchor_struct( (sublabel ? "#{label} #{sublabel}" : label), nil, @labels[klass] || klass.capitalize, klass, elem["unnumbered"] ) sublabel && elem["unnumbered"] != "true" and @anchors[elem["id"]][:label] = sublabel end |
#hierarchical_figure_class_names(clause, num) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/isodoc/iso/xref.rb', line 110 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
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/isodoc/iso/xref.rb', line 98 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 = j.zero? ? nil : "#{(j + 96).chr})" figure_anchor(t, sublabel, label, "figure") end hierarchical_figure_class_names(clause, num) end |
#hierarchical_formula_names(clause, num) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/isodoc/iso/xref.rb', line 53 def hierarchical_formula_names(clause, num) c = IsoDoc::XrefGen::Counter.new clause.xpath(ns(".//formula")).each do |t| next if blank?(t["id"]) @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
191 192 193 194 |
# File 'lib/isodoc/iso/xref.rb', line 191 def hierarchical_table_names(clause, _num) super modspec_table_xrefs(clause) if @anchors_previous end |
#initial_anchor_names(doc) ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/isodoc/iso/xref.rb', line 11 def initial_anchor_names(doc) if @klass.amd(doc) then initial_anchor_names_amd(doc) else initial_anchor_names1(doc) end if @parse_settings.empty? || @parse_settings[:clauses] introduction_names(doc.at(ns("//introduction"))) end end |
#initial_anchor_names1(doc) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/isodoc/iso/xref.rb', line 36 def initial_anchor_names1(doc) if @parse_settings.empty? || @parse_settings[:clauses] doc.xpath(ns("//preface/*")).each do |c| c.element? and preface_names(c) end # potentially overridden in middle_section_asset_names() sequential_asset_names(doc.xpath(ns("//preface/*"))) n = Counter.new n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1) n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1) doc.xpath(ns("//sections/clause[not(@type = 'scope')] | "\ "//sections/terms | //sections/definitions")).each do |c| n = section_names(c, n, 1) end end end |
#initial_anchor_names_amd(doc) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/isodoc/iso/xref.rb', line 20 def initial_anchor_names_amd(doc) if @parse_settings.empty? || @parse_settings[:clauses] ["//preface/*", "//sections/clause"].each do |xpath| doc.xpath(ns(xpath)).each do |c| c.element? and preface_names(c) end end end end |
#introduction_names(clause) ⇒ Object
we can reference 0-number clauses in introduction
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/isodoc/iso/xref_section.rb', line 5 def introduction_names(clause) return if clause.nil? clause.at(ns("./clause")) and @anchors[clause["id"]] = { label: "0", level: 1, type: "clause", xref: clause.at(ns("./title"))&.text } i = Counter.new clause.xpath(ns("./clause")).each do |c| i.increment(c) section_names1(c, "0.#{i.print}", 2) end end |
#list_anchor_names(sections) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/isodoc/iso/xref.rb', line 136 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.reject { |n| blank?(n["id"]) }.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) ⇒ Object
181 182 183 184 185 186 187 188 189 |
# File 'lib/isodoc/iso/xref.rb', line 181 def modspec_table_components_xrefs(table, table_label) table.xpath(ns(".//tr[@id]")).each do |tr| (@anchors[tr["id"]] && !@anchors[tr["id"]][:modspec]) or next @anchors[tr["id"]][:modspec] = true @anchors[tr["id"]][:xref] = l10n("#{table_label}, #{@anchors_previous[tr['id']][:xref]}") @anchors[tr["id"]].delete(:container) end end |
#modspec_table_xrefs(clause) ⇒ Object
170 171 172 173 174 175 176 177 178 179 |
# File 'lib/isodoc/iso/xref.rb', line 170 def modspec_table_xrefs(clause) clause.xpath(ns(".//table[@class = 'modspec']")).noblank.each do |t| (@anchors[t["id"]] && !@anchors[t["id"]][:modspec]) or next n = @anchors[t["id"]][:xref] @anchors[t["id"]][:modspec] = true @anchors[t["id"]][:xref] = l10n("#{n}, #{@anchors_previous[t['id']][:xref_bare]}") modspec_table_components_xrefs(t, n) end end |
#reference_names(ref) ⇒ Object
123 124 125 126 127 |
# File 'lib/isodoc/iso/xref.rb', line 123 def reference_names(ref) super @anchors[ref["id"]] = { xref: @anchors[ref["id"]][:xref] .sub(/ \(All Parts\)/i, "") } end |
#section_names1(clause, num, level) ⇒ Object
subclauses are not prefixed with “Clause” retaining subtype for the semantics
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/isodoc/iso/xref_section.rb', line 42 def section_names1(clause, num, level) @anchors[clause["id"]] = { label: num, level: level, xref: num, subtype: "clause" } i = Counter.new clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\ "./references")) .each do |c| i.increment(c) section_names1(c, "#{num}.#{i.print}", level + 1) end end |
#sequential_figure_class_names(clause) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/isodoc/iso/xref.rb', line 86 def sequential_figure_class_names(clause) 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"]) end end |
#sequential_figure_names(clause) ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/isodoc/iso/xref.rb', line 75 def sequential_figure_names(clause) 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 = j.zero? ? nil : "#{(j + 96).chr})" figure_anchor(t, sublabel, c.print, "figure") end sequential_figure_class_names(clause) end |
#sequential_table_names(clause) ⇒ Object
165 166 167 168 |
# File 'lib/isodoc/iso/xref.rb', line 165 def sequential_table_names(clause) super modspec_table_xrefs(clause) if @anchors_previous end |
#single_ol_for_xrefs?(lists) ⇒ Boolean
all li in the ol in lists are consecutively numbered through @start
152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/isodoc/iso/xref.rb', line 152 def single_ol_for_xrefs?(lists) return true if lists.size == 1 start = 0 lists.each_with_index do |l, i| next if i.zero? start += lists[i - 1].xpath(ns("./li")).size return false unless l["start"]&.to_i == start + 1 end true end |