Module: IsoDoc::Function::Cleanup

Included in:
Common
Defined in:
lib/isodoc/function/cleanup.rb

Constant Summary collapse

TABLENOTE_CSS =
"div[@class = 'Note' or @class = 'BlockSource' " \
"or @class = 'TableFootnote' or @class = 'figdl']".freeze

Instance Method Summary collapse

Instance Method Details

#admonition_cleanup(docxml) ⇒ Object

todo PRESENTATION XML



28
29
30
31
32
33
34
35
36
# File 'lib/isodoc/function/cleanup.rb', line 28

def admonition_cleanup(docxml)
  docxml.xpath("//div[@class = 'Admonition'][title]").each do |d|
    title = d.at("./title")
    n = title.next_element
    n&.children&.first
      &.add_previous_sibling("#{title.remove.text}—")
  end
  docxml
end

#cleanup(docxml) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/isodoc/function/cleanup.rb', line 16

def cleanup(docxml)
  @i18n ||= i18n_init(@lang, @script, @locale)
  comment_cleanup(docxml)
  inline_header_cleanup(docxml)
  figure_cleanup(docxml)
  table_cleanup(docxml)
  symbols_cleanup(docxml)
  example_cleanup(docxml)
  admonition_cleanup(docxml)
end

#example_cleanup(docxml) ⇒ Object



38
39
40
41
42
43
# File 'lib/isodoc/function/cleanup.rb', line 38

def example_cleanup(docxml)
  docxml.xpath("//table[@class = 'example']//p[not(@class)]").each do |p|
    p["class"] = "example"
  end
  docxml
end

#figure_cleanup(docxml) ⇒ Object



45
# File 'lib/isodoc/function/cleanup.rb', line 45

def figure_cleanup(docxml); end

#inline_header_cleanup(docxml) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/isodoc/function/cleanup.rb', line 47

def inline_header_cleanup(docxml)
  docxml.xpath('//span[@class="zzMoveToFollowing"]').each do |x|
    x.delete("class")
    n = x.next_element
    if n.nil?
      x.name = "p"
    else
      n.add_first_child(x.remove)
    end
  end
  docxml
end

#merge_fnref_into_fn_text(elem) ⇒ Object



60
61
62
63
64
# File 'lib/isodoc/function/cleanup.rb', line 60

def merge_fnref_into_fn_text(elem)
  fn = elem.at('.//span[@class="TableFootnoteRef"]/..') or return
  n = fn.next_element
  n&.children&.first&.add_previous_sibling(fn.remove)
end

#new_fullcolspan_row(table, tfoot) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/isodoc/function/cleanup.rb', line 102

def new_fullcolspan_row(table, tfoot)
  # how many columns in the table?
  cols = 0
  table.at(".//tr").xpath("./td | ./th").each do |td|
    cols += (td["colspan"] ? td["colspan"].to_i : 1)
  end
  style =
    %{border-top:0pt;border-bottom:#{IsoDoc::Function::Table::SW} 1.5pt;}
  tfoot.add_child("<tr><td colspan='#{cols}' style='#{style}'/></tr>")
  tfoot.xpath(".//td").last
end

#passthrough_cleanup(docxml) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/isodoc/function/cleanup.rb', line 8

def passthrough_cleanup(docxml)
  docxml.split(%r{(<passthrough>|</passthrough>)}).each_slice(4)
    .map do |a|
    a.size > 2 and a[2] = HTMLEntities.new.decode(a[2])
    [a[0], a[2]]
  end.join
end

#remove_bottom_border(cell) ⇒ Object



86
87
88
89
# File 'lib/isodoc/function/cleanup.rb', line 86

def remove_bottom_border(cell)
  cell["style"] =
    cell["style"].gsub(/border-bottom:[^;]+;/, "border-bottom:0pt;")
end

#symbols_cleanup(docxml) ⇒ Object



134
# File 'lib/isodoc/function/cleanup.rb', line 134

def symbols_cleanup(docxml); end

#table_cleanup(docxml) ⇒ Object



128
129
130
131
132
# File 'lib/isodoc/function/cleanup.rb', line 128

def table_cleanup(docxml)
  table_footnote_cleanup(docxml)
  table_note_cleanup(docxml)
  docxml
end

#table_footnote_cleanup(docxml) ⇒ Object

preempt html2doc putting MsoNormal under TableFootnote class



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/isodoc/function/cleanup.rb', line 67

def table_footnote_cleanup(docxml)
  docxml.xpath("//table[descendant::aside]").each do |t|
    t.xpath(".//aside").each do |a|
      merge_fnref_into_fn_text(a)
      a.name = "div"
      a["class"] = "TableFootnote"
      t << a.remove # this is redundant
    end
  end
  table_footnote_cleanup_propagate(docxml)
end

#table_footnote_cleanup_propagate(docxml) ⇒ Object



79
80
81
82
83
84
# File 'lib/isodoc/function/cleanup.rb', line 79

def table_footnote_cleanup_propagate(docxml)
  docxml.xpath("//p[not(self::*[@class])]" \
               "[ancestor::*[@class = 'TableFootnote']]").each do |p|
    p["class"] = "TableFootnote"
  end
end

#table_get_or_make_tfoot(table) ⇒ Object



91
92
93
94
95
96
97
98
99
100
# File 'lib/isodoc/function/cleanup.rb', line 91

def table_get_or_make_tfoot(table)
  tfoot = table.at(".//tfoot")
  if tfoot.nil?
    table.add_child("<tfoot></tfoot>")
    tfoot = table.at(".//tfoot")
  else
    tfoot.xpath(".//td | .//th").each { |td| remove_bottom_border(td) }
  end
  tfoot
end

#table_note_cleanup(docxml) ⇒ Object



117
118
119
120
121
122
123
124
125
126
# File 'lib/isodoc/function/cleanup.rb', line 117

def table_note_cleanup(docxml)
  docxml.xpath("//table[dl or #{TABLENOTE_CSS}]").each do |t|
    tfoot = table_get_or_make_tfoot(t)
    insert_here = new_fullcolspan_row(t, tfoot)
    t.xpath("dl | p[@class = 'ListTitle'] | #{TABLENOTE_CSS}")
      .each do |d|
      d.parent = insert_here
    end
  end
end

#textcleanup(docxml) ⇒ Object



4
5
6
# File 'lib/isodoc/function/cleanup.rb', line 4

def textcleanup(docxml)
  passthrough_cleanup(docxml)
end