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

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 << "&nbsp;&mdash; "
    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

Returns:

  • (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