Module: Metanorma::Mirror::Handlers::Table

Defined in:
lib/metanorma/mirror/handlers/table.rb

Class Method Summary collapse

Class Method Details

.build_cell(cell, context:) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/metanorma/mirror/handlers/table.rb', line 53

def self.build_cell(cell, context:)
  attrs = {}
  attrs[:colspan] = SafeAttr.read(cell, :colspan)
  attrs[:rowspan] = SafeAttr.read(cell, :rowspan)
  attrs[:align] = SafeAttr.read(cell, :align)
  attrs[:valign] = SafeAttr.read(cell, :valign)

  content = Inline.extract_inline(cell, context:)

  Handlers.build_node("table_cell", attrs: attrs.compact,
                                    content: content)
end

.call(element, context:) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/metanorma/mirror/handlers/table.rb', line 7

def self.call(element, context:)
  attrs = table_attrs(element)
  content = []

  thead = SafeAttr.read(element, :thead)
  if thead
    rows = extract_rows(thead, context:)
    unless rows.empty?
      content << Handlers.build_node("table_head",
                                     content: rows)
    end
  end

  tbody = SafeAttr.read(element, :tbody)
  if tbody
    rows = extract_rows(tbody, context:)
    unless rows.empty?
      content << Handlers.build_node("table_body",
                                     content: rows)
    end
  end

  tfoot = SafeAttr.read(element, :tfoot)
  if tfoot
    rows = extract_rows(tfoot, context:)
    unless rows.empty?
      content << Handlers.build_node("table_foot",
                                     content: rows)
    end
  end

  Handlers.build_node("table", attrs: attrs, content: content)
end

.extract_rows(table_section, context:) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/metanorma/mirror/handlers/table.rb', line 41

def self.extract_rows(table_section, context:)
  Array(table_section.tr).map do |tr|
    cells = Array(tr.td).map { |td| build_cell(td, context:) }
    Array(tr.th).each { |th| cells << build_cell(th, context:) }

    row_attrs = {}
    row_attrs[:id] = SafeAttr.read(tr, :id)
    Handlers.build_node("table_row", attrs: row_attrs.compact,
                                     content: cells)
  end
end

.table_attrs(element) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/metanorma/mirror/handlers/table.rb', line 66

def self.table_attrs(element)
  attrs = {}
  attrs[:id] = SafeAttr.read(element, :id)
  attrs[:width] = SafeAttr.read(element, :width)
  attrs[:align] = SafeAttr.read(element, :align)
  attrs[:unnumbered] = SafeAttr.read(element, :unnumbered)
  attrs[:semx_id] = SafeAttr.read(element, :semx_id)

  name = SafeAttr.read(element, :name)
  attrs[:title] = Handlers.extract_name_text(name) if name
  attrs.compact
end