Module: IsoDoc::Gb::BaseConvert

Included in:
HtmlConvert, WordConvert
Defined in:
lib/isodoc/gb/gbbaseconvert.rb

Constant Summary collapse

EXAMPLE_TBL_ATTR =
{ class: "example_label",
style: "padding:2pt 2pt 2pt 2pt;vertical-align:top;" }.freeze

Instance Method Summary collapse

Instance Method Details

#clause_name(num, title, div, header_class) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 198

def clause_name(num, title, div, header_class)
  header_class = {} if header_class.nil?
  div.h1 **attr_code(header_class) do |h1|
    if num && !@suppressheadingnumbers
      h1 << "#{num}."
      h1 << "&#x3000;"
    end
    title.is_a?(String) ? h1 << title :
      title&.children&.each { |c2| parse(c2, h1) }
  end
  div.parent.at(".//h1")
end

#clausedelimspace(out) ⇒ Object



194
195
196
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 194

def clausedelimspace(out)
  out << "&#x3000;"
end

#cleanup(docxml) ⇒ Object



29
30
31
32
33
34
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 29

def cleanup(docxml)
  @cleanup = Cleanup.new(@script, @deprecated_lbl)
  super
  @cleanup.cleanup(docxml)
  docxml
end

#deprecated_term_parse(node, out) ⇒ Object



156
157
158
159
160
161
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 156

def deprecated_term_parse(node, out)
  out.p **{ class: "DeprecatedTerms" } do |p|
    p << l10n("#{@deprecated_lbl}: ")
    node.children.each { |c| parse(c, p) }
  end
end

#end_line(_isoxml, out) ⇒ Object



133
134
135
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 133

def end_line(_isoxml, out)
  out.hr **{ width: "25%" }
end

#error_parse(node, out) ⇒ Object



137
138
139
140
141
142
143
144
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 137

def error_parse(node, out)
  # catch elements not defined in ISO
  case node.name
  when "string" then string_parse(node, out)
  else
    super
  end
end

#example_cleanup(docxml) ⇒ Object



36
37
38
39
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 36

def example_cleanup(docxml)
  super
  @cleanup.example_cleanup(docxml)
end

#example_label(node) ⇒ Object



100
101
102
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 100

def example_label(node)
  l10n(super + ":")
end

#example_p_parse(node, div) ⇒ Object



222
223
224
225
226
227
228
229
230
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 222

def example_p_parse(node, div)
  name = node&.at(ns("./name"))&.remove
  div.p do |p|
    example_span_label(node, p, name)
    insert_tab(p, 1)
    node.first_element_child.children.each { |n| parse(n, p) }
  end
  node.element_children[1..-1].each { |n| parse(n, div) }
end

#example_parse(node, out) ⇒ Object



249
250
251
252
253
254
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 249

def example_parse(node, out)
  out.div **{ id: node["id"], class: "example" } do |div|
    node_begins_with_para(node) ?
      example_p_parse(node, div) : example_parse1(node, div)
  end
end

#example_parse1(node, div) ⇒ Object



232
233
234
235
236
237
238
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 232

def example_parse1(node, div)
  div.p do |p|
    example_span_label(node, p, node.at(ns("./name")))
    insert_tab(p, 1)
  end
  node.children.each { |n| parse(n, div) unless n.name == "name" }
end

#example_span_label(node, div, name) ⇒ Object



211
212
213
214
215
216
217
218
219
220
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 211

def example_span_label(node, div, name)
  n = get_anchors[node["id"]]
  div.span **{ class: "example_label" } do |p|
    lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
      l10n("#{@example_lbl} #{n[:label]}")
    p << l10n(lbl + ":")
    name and !lbl.nil? and p << "&nbsp;&mdash; "
    name and name.children.each { |n| parse(n, div) }
  end
end

#extract_fonts(options) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 10

def extract_fonts(options)
  b = options[:bodyfont] || "Arial"
  h = options[:headerfont] || "Arial"
  m = options[:monospacefont] || "Courier"
  t = options[:titlefont] || "Arial"
  "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"\
    "$titlefont: #{t};\n"
end

#foreword(isoxml, out) ⇒ Object



182
183
184
185
186
187
188
189
190
191
192
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 182

def foreword(isoxml, out)
  f = isoxml.at(ns("//foreword")) || return
  page_break(out)
  out.div do |s|
    s.h1 **{ class: "ForewordTitle" } do |h1|
      h1 << "#{@foreword_lbl}&nbsp;"
      # insert_tab(h1, 1)
    end
    f.elements.each { |e| parse(e, s) unless e.name == "title" }
  end
end

#formula_dl_parse(node, out) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 80

def formula_dl_parse(node, out)
  out.table **{ class: "formula_dl" } do |v|
    node.elements.each_slice(2) do |dt, dd|
      v.tr do |tr|
        tr.td **{ style: "vertical-align:top;text-align:left;" } do |term|
          dt_parse(dt, term)
        end
        tr.td(**{ style: "vertical-align:top;" }) { |td| td << "&mdash;" }
        tr.td **{ style: "vertical-align:top;" } do |listitem|
          dd.children.each { |n| parse(n, listitem) }
        end
      end
    end
  end
end

#formula_parse(node, out) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 59

def formula_parse(node, out)
  out.div **attr_code(id: node["id"], class: "formula") do |div|
    insert_tab(div, 1)
    parse(node.at(ns("./stem")), out)
    lbl = anchor(node['id'], :label, false)
    unless lbl.nil?
      insert_tab(div, 1)
      div << "(#{lbl})"
    end
  end
  formula_where(node.at(ns("./dl")), out)
end

#formula_where(dl, out) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 72

def formula_where(dl, out)
  return unless dl
  out.p **{ style: "page-break-after:avoid;"} do |p|
    p << @where_lbl
  end
  formula_dl_parse(dl, out)
end

#i18n_init(lang, script) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 41

def i18n_init(lang, script)
  super
  y = if lang == "en"
        YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
      elsif lang == "zh" && script == "Hans"
        YAML.load_file(File.join(File.dirname(__FILE__),
                                 "i18n-zh-Hans.yaml"))
      else
        YAML.load_file(File.join(File.dirname(__FILE__),
                                 "i18n-zh-Hans.yaml"))
      end
  @labels = @labels.merge(y)
end

#metadata_init(lang, script, labels) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 19

def (lang, script, labels)
  unless ["en", "zh"].include? lang
    lang = "zh"
    script = "Hans"
  end
  @meta = Metadata.new(lang, script, labels)
  @meta.set(:standardclassimg, @standardclassimg)
  @common.meta = @meta
end

#middle(isoxml, out) ⇒ Object



128
129
130
131
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 128

def middle(isoxml, out)
  super
  end_line(isoxml, out)
end

#node_begins_with_para(node) ⇒ Object



240
241
242
243
244
245
246
247
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 240

def node_begins_with_para(node)
  node.elements.each do |e|
    next if e.name == "name"
    return true if e.name == "p"
    return false
  end
  false
end

#note_parse(node, out) ⇒ Object



104
105
106
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 104

def note_parse(node, out)
  note_parse1(node, out, note_label(node) + ":")
end

#note_parse1(node, out, label) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 108

def note_parse1(node, out, label)
  @note = true
  out.table **attr_code(id: node["id"], class: "Note") do |t|
    t.tr do |tr|
      @libdir = File.dirname(__FILE__)
      tr.td **EXAMPLE_TBL_ATTR do |td|
        td << l10n(label)
      end
      tr.td **{ style: "vertical-align:top;", class: "Note" } do |td|
        node.children.each { |n| parse(n, td) }
      end
    end
  end
  @note = false
end

#omit_docid_prefix(prefix) ⇒ Object



55
56
57
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 55

def omit_docid_prefix(prefix)
  super || prefix == "Chinese Standard"
end

#string_parse(node, out) ⇒ Object



146
147
148
149
150
151
152
153
154
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 146

def string_parse(node, out)
  if node["script"] == "Hant"
    out.span **{ class: "Hant" } do |s|
      node.children.each { |c| parse(c, s) }
    end
  else
    node.children.each { |c| parse(c, out) }
  end
end

#termnote_parse(node, out) ⇒ Object



124
125
126
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 124

def termnote_parse(node, out)
  note_parse1(node, out, "#{anchor(node['id'], :label)}:")
end

#termref_render(x) ⇒ Object



163
164
165
166
167
168
169
170
171
172
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 163

def termref_render(x)
  x.sub!(%r{\s*\[MODIFICATION\]\s*$}m, l10n(", #{@modified_lbl}"))
  parts = x.split(%r{(\s*\[MODIFICATION\]|,)}m)
  parts[1] = l10n(", #{@source_lbl}") if parts.size > 1 &&
    parts[1] == "," && !/^\s*#{@modified_lbl}/.match(parts[2])
    parts.map do |p|
      /\s*\[MODIFICATION\]/.match(p) ?
        l10n(", #{@modified_lbl} &mdash; ") : p
    end.join.sub(/\A\s*/m, l10n("[")).sub(/\s*\z/m, l10n("]"))
end

#termref_resolve(docxml) ⇒ Object



174
175
176
177
178
179
180
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 174

def termref_resolve(docxml)
  docxml.gsub(%r{\s*\[/TERMREF\]\s*</p>\s*<p>\s*\[TERMREF\]}, l10n("; ")).
    split(%r{(\[TERMREF\]|\[/TERMREF\])}).each_slice(4).
    map do |a|
    a.size < 3 ? a[0] : a[0] + termref_render(a[2])
  end.join
end

#textcleanup(docxml) ⇒ Object



256
257
258
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 256

def textcleanup(docxml)
  termref_resolve(docxml)
end