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



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

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
    h1 << title
  end
  div.parent.at(".//h1")
end

#clausedelimspace(out) ⇒ Object



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

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

#cleanup(docxml) ⇒ Object



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

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

#deprecated_term_parse(node, out) ⇒ Object



159
160
161
162
163
164
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 159

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



136
137
138
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 136

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

#error_parse(node, out) ⇒ Object



140
141
142
143
144
145
146
147
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 140

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



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

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

#example_label(node) ⇒ Object



96
97
98
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 96

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
255
256
257
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 249

def example_parse(node, out)
  out.div **{ id: node["id"], class: "example" } do |div|
    if node_begins_with_para(node)
      example_p_parse(node, div)
    else
      example_parse1(node, div)
    end
  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
# 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



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

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



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 76

def formula_dl_parse(node, out)
  out.table **{ class: "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



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

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



70
71
72
73
74
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 70

def formula_where(dl, out)
  return unless dl
  out.p { |p| p << @where_lbl }
  formula_dl_parse(dl, out)
end

#i18n_init(lang, script) ⇒ Object



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

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



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

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



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

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



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 100

def note_parse(node, out)
  @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(note_label(node) + ":")
      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



53
54
55
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 53

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

#string_parse(node, out) ⇒ Object



149
150
151
152
153
154
155
156
157
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 149

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



116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 116

def termnote_parse(node, out)
  @note = true
  out.table **attr_code(id: node["id"], class: "Note") do |t|
    t.tr do |tr|
      tr.td **EXAMPLE_TBL_ATTR do |td|
        td << l10n("#{anchor(node['id'], :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

#termref_render(x) ⇒ Object



166
167
168
169
170
171
172
173
174
# File 'lib/isodoc/gb/gbbaseconvert.rb', line 166

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



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

def termref_resolve(docxml)
  docxml.split(%r{(\[TERMREF\]|\[/TERMREF\])}).each_slice(4).
    map do |a|
    a.size < 3 ? a[0] : a[0] + termref_render(a[2])
  end.join
end