Module: IsoDoc::Unece::BaseConvert
- Included in:
- HtmlConvert, PdfConvert, WordConvert
- Defined in:
- lib/isodoc/unece/base_convert.rb
Constant Summary collapse
- MIDDLE_CLAUSE =
"//clause[parent::sections]".freeze
- NONTERMINAL =
"./clause | ./term | ./terms | ./definitions | ./references".freeze
Instance Method Summary collapse
- #admonition_name_parse(node, div, name) ⇒ Object
- #admonition_parse(node, out) ⇒ Object
- #annex_levelnum(num, lvl) ⇒ Object
- #annex_name(annex, name, div) ⇒ Object
- #annex_name_lbl(clause, num) ⇒ Object
- #annex_names(clause, num) ⇒ Object
- #annex_names1(clause, num, level) ⇒ Object
- #back_anchor_names(docxml) ⇒ Object
- #clause_names(docxml, sect_num) ⇒ Object
- #fileloc(loc) ⇒ Object
- #hierarchical_admonition_names(clause, num) ⇒ Object
- #hierarchical_asset_names(clause, num) ⇒ Object
- #i18n_init(lang, script) ⇒ Object
- #initial_anchor_names(d) ⇒ Object
- #inline_header_title(out, node, c1) ⇒ Object
- #label_annex_leaf_section(clause, num, lvl) ⇒ Object
- #label_leaf_section(clause, lvl) ⇒ Object
- #leaf_section?(clause) ⇒ Boolean
- #levelnumber(num, lvl) ⇒ Object
- #metadata_init(lang, script, labels) ⇒ Object
- #section_names(clause, num, lvl) ⇒ Object
- #section_names1(clause, num, level) ⇒ Object
- #sequential_admonition_names(clause) ⇒ Object
- #sequential_asset_names(clause) ⇒ Object
Instance Method Details
#admonition_name_parse(node, div, name) ⇒ Object
196 197 198 199 200 201 202 203 |
# File 'lib/isodoc/unece/base_convert.rb', line 196 def admonition_name_parse(node, div, name) div.p **{ class: "AdmonitionTitle", style: "text-align:center;" } do |p| lbl = anchor(node['id'], :label) lbl.nil? or p << l10n("#{@admonition_lbl} #{lbl}") name and !lbl.nil? and p << " — " name and name.children.each { |n| parse(n, div) } end end |
#admonition_parse(node, out) ⇒ Object
205 206 207 208 209 210 211 212 213 |
# File 'lib/isodoc/unece/base_convert.rb', line 205 def admonition_parse(node, out) name = node.at(ns("./name")) out.div **{ class: "Admonition" } do |t| admonition_name_parse(node, t, name) if name node.children.each do |n| parse(n, t) unless n.name == "name" end end end |
#annex_levelnum(num, lvl) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/isodoc/unece/base_convert.rb', line 62 def annex_levelnum(num, lvl) case lvl % 3 when 0 then RomanNumerals.to_roman(num) when 1 then ("A".ord + num - 1).chr when 2 then num.to_s end end |
#annex_name(annex, name, div) ⇒ Object
13 14 15 16 17 18 19 20 21 |
# File 'lib/isodoc/unece/base_convert.rb', line 13 def annex_name(annex, name, div) div.h1 **{ class: "Annex" } do |t| t << "#{anchor(annex['id'], :label)}" t.br t.b do |b| name&.children&.each { |c2| parse(c2, b) } end end end |
#annex_name_lbl(clause, num) ⇒ Object
120 121 122 |
# File 'lib/isodoc/unece/base_convert.rb', line 120 def annex_name_lbl(clause, num) l10n("<b>#{@annex_lbl} #{num}</b>") end |
#annex_names(clause, num) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/isodoc/unece/base_convert.rb', line 124 def annex_names(clause, num) hierarchical_asset_names(clause, num) leaf_section?(clause) and label_annex_leaf_section(clause, num, 1) and return @anchors[clause["id"]] = { label: annex_name_lbl(clause, num), type: "clause", xref: "#{@annex_lbl} #{num}", level: 1 } i = 1 clause.xpath(ns("./clause")).each do |c| annex_names1(c, "#{num}.#{annex_levelnum(i, 2)}", 2) i += 1 if !leaf_section?(c) end end |
#annex_names1(clause, num, level) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/isodoc/unece/base_convert.rb', line 138 def annex_names1(clause, num, level) leaf_section?(clause) and label_annex_leaf_section(clause, num, level) and return /\.(?<leafnum>[^.]+$)/ =~ num @anchors[clause["id"]] = { label: leafnum, xref: "#{@annex_lbl} #{num}", level: level, type: "clause" } i = 1 clause.xpath(ns("./clause | ./references")).each do |c| annex_names1(c, "#{num}.#{annex_levelnum(i, level + 1)}", level + 1) i += 1 if !leaf_section?(c) end end |
#back_anchor_names(docxml) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/isodoc/unece/base_convert.rb', line 151 def back_anchor_names(docxml) docxml.xpath(ns("//annex")).each_with_index do |c, i| @paranumber = 0 annex_names(c, RomanNumerals.to_roman(i + 1)) end docxml.xpath(ns("//bibliography/clause |"\ "//bibliography/references")).each do |b| preface_names(b) end docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref| reference_names(ref) end end |
#clause_names(docxml, sect_num) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/isodoc/unece/base_convert.rb', line 46 def clause_names(docxml, sect_num) q = "//clause[parent::sections]" @paranumber = 0 docxml.xpath(ns(q)).each_with_index do |c, i| section_names(c, (i + sect_num), 1) end end |
#fileloc(loc) ⇒ Object
29 30 31 |
# File 'lib/isodoc/unece/base_convert.rb', line 29 def fileloc(loc) File.join(File.dirname(__FILE__), loc) end |
#hierarchical_admonition_names(clause, num) ⇒ Object
175 176 177 178 179 180 181 182 183 184 |
# File 'lib/isodoc/unece/base_convert.rb', line 175 def hierarchical_admonition_names(clause, num) i = 0 clause.xpath(ns(".//admonition")).each do |t| i += 1 unless t["unnumbered"] next if t["id"].nil? || t["id"].empty? @anchors[t["id"]] = anchor_struct("#{num}.#{i}", nil, @admonition_lbl, "box", t["unnumbered"]) end end |
#hierarchical_asset_names(clause, num) ⇒ Object
191 192 193 194 |
# File 'lib/isodoc/unece/base_convert.rb', line 191 def hierarchical_asset_names(clause, num) super hierarchical_admonition_names(clause, num) end |
#i18n_init(lang, script) ⇒ Object
23 24 25 26 27 |
# File 'lib/isodoc/unece/base_convert.rb', line 23 def i18n_init(lang, script) super @admonition_lbl = "Box" @abstract_lbl = "Summary" end |
#initial_anchor_names(d) ⇒ Object
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/isodoc/unece/base_convert.rb', line 35 def initial_anchor_names(d) preface_names(d.at(ns("//abstract"))) preface_names(d.at(ns("//foreword"))) preface_names(d.at(ns("//introduction"))) sequential_asset_names(d.xpath(ns("//foreword | //introduction"))) middle_section_asset_names(d) clause_names(d, 0) termnote_anchor_names(d) termexample_anchor_names(d) end |
#inline_header_title(out, node, c1) ⇒ Object
215 216 217 218 219 220 221 222 223 224 |
# File 'lib/isodoc/unece/base_convert.rb', line 215 def inline_header_title(out, node, c1) title = c1&.content || "" out.span **{ class: "zzMoveToFollowing" } do |s| if lbl = anchor(node['id'], :label) s << "#{lbl}. " unless @suppressheadingnumbers insert_tab(s, 1) end s << "#{title} " end end |
#label_annex_leaf_section(clause, num, lvl) ⇒ Object
86 87 88 89 90 91 |
# File 'lib/isodoc/unece/base_convert.rb', line 86 def label_annex_leaf_section(clause, num, lvl) @paranumber += 1 @anchors[clause["id"]] = {label: @paranumber.to_s, xref: "paragraph #{num}.#{@paranumber}", level: lvl, type: "paragraph" } end |
#label_leaf_section(clause, lvl) ⇒ Object
79 80 81 82 83 84 |
# File 'lib/isodoc/unece/base_convert.rb', line 79 def label_leaf_section(clause, lvl) @paranumber += 1 @anchors[clause["id"]] = {label: @paranumber.to_s, xref: "paragraph #{@paranumber}", level: lvl, type: "paragraph" } end |
#leaf_section?(clause) ⇒ Boolean
73 74 75 76 77 |
# File 'lib/isodoc/unece/base_convert.rb', line 73 def leaf_section?(clause) !clause.at(ns(NONTERMINAL)) && !%w(definitions annex terms).include?(clause.name) && clause.at(ns("./p | ./bibitem")) end |
#levelnumber(num, lvl) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/isodoc/unece/base_convert.rb', line 54 def levelnumber(num, lvl) case lvl % 3 when 1 then RomanNumerals.to_roman(num) when 2 then ("A".ord + num - 1).chr when 0 then num.to_s end end |
#metadata_init(lang, script, labels) ⇒ Object
8 9 10 11 |
# File 'lib/isodoc/unece/base_convert.rb', line 8 def (lang, script, labels) @meta = Metadata.new(lang, script, labels) @meta.set(:toc, @toc) end |
#section_names(clause, num, lvl) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/isodoc/unece/base_convert.rb', line 93 def section_names(clause, num, lvl) return num if clause.nil? leaf_section?(clause) and label_leaf_section(clause, lvl) and return num = num + 1 lbl = levelnumber(num, 1) @anchors[clause["id"]] = { label: lbl, level: lvl, type: "clause", xref: l10n("#{@clause_lbl} #{lbl}") } i = 1 clause.xpath(ns(NONTERMINAL)).each do |c| section_names1(c, "#{lbl}.#{levelnumber(i, lvl + 1)}", lvl + 1) i += 1 if !leaf_section?(c) end num end |
#section_names1(clause, num, level) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/isodoc/unece/base_convert.rb', line 108 def section_names1(clause, num, level) leaf_section?(clause) and label_leaf_section(clause, level) and return /\.(?<leafnum>[^.]+$)/ =~ num @anchors[clause["id"]] = { label: leafnum, level: level, type: "clause", xref: l10n("#{@clause_lbl} #{num}") } i = 1 clause.xpath(ns(NONTERMINAL)).each do |c| section_names1(c, "#{num}.#{levelnumber(i, level + 1)}", level + 1) i += 1 if !leaf_section?(c) end end |
#sequential_admonition_names(clause) ⇒ Object
165 166 167 168 169 170 171 172 173 |
# File 'lib/isodoc/unece/base_convert.rb', line 165 def sequential_admonition_names(clause) i = 0 clause.xpath(ns(".//admonition")).each do |t| i += 1 unless t["unnumbered"] next if t["id"].nil? || t["id"].empty? @anchors[t["id"]] = anchor_struct(i.to_s, nil, @admonition_lbl, "box", t["unnumbered"]) end end |
#sequential_asset_names(clause) ⇒ Object
186 187 188 189 |
# File 'lib/isodoc/unece/base_convert.rb', line 186 def sequential_asset_names(clause) super sequential_admonition_names(clause) end |