Module: IsoDoc::Function::Cleanup
- Included in:
- Common
- Defined in:
- lib/isodoc/function/cleanup.rb
Constant Summary collapse
- FIGURE_WITH_FOOTNOTES =
"//div[@class = 'figure'][descendant::aside]"\ "[not(descendant::div[@class = 'figure'])]".freeze
Instance Method Summary collapse
- #admonition_cleanup(docxml) ⇒ Object
- #break_up_long_strings(t) ⇒ Object
- #break_up_long_strings1(w1) ⇒ Object
- #cleanup(docxml) ⇒ Object
- #example_cleanup(docxml) ⇒ Object
- #figure_aside_process(f, aside, key) ⇒ Object
-
#figure_cleanup(docxml) ⇒ Object
move footnotes into key, and get rid of footnote reference since it is in diagram.
- #figure_get_or_make_dl(t) ⇒ Object
- #footnote_cleanup(docxml) ⇒ Object
- #footnote_reference_format(a) ⇒ Object
- #inline_header_cleanup(docxml) ⇒ Object
- #merge_fnref_into_fn_text(a) ⇒ Object
- #new_fullcolspan_row(t, tfoot) ⇒ Object
- #passthrough_cleanup(docxml) ⇒ Object
- #remove_bottom_border(td) ⇒ Object
- #symbols_cleanup(docxml) ⇒ Object
- #table_cleanup(docxml) ⇒ Object
- #table_footnote_cleanup(docxml) ⇒ Object
- #table_footnote_reference_format(a) ⇒ Object
- #table_get_or_make_tfoot(t) ⇒ Object
- #table_long_strings_cleanup(docxml) ⇒ Object
- #table_note_cleanup(docxml) ⇒ Object
- #termref_cleanup(docxml) ⇒ Object
- #textcleanup(docxml) ⇒ Object
Instance Method Details
#admonition_cleanup(docxml) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/isodoc/function/cleanup.rb', line 65 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 |
#break_up_long_strings(t) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/isodoc/function/cleanup.rb', line 46 def break_up_long_strings(t) return t if t.match(/^\s*$/) t.split(/(?=\s)/).map do |w| (/^\s*$/.match(t) or w.size < 30) ? w : w.scan(/.{,30}/).map do |w1| (w1.size < 30) ? w1 : break_up_long_strings1(w1) end.join end.join end |
#break_up_long_strings1(w1) ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/isodoc/function/cleanup.rb', line 56 def break_up_long_strings1(w1) s = w1.split(%r{(?<=[,.?+;/=])}) if s.size == 1 then w1 + " " else s[-1] = " " + s[-1] s.join end end |
#cleanup(docxml) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/isodoc/function/cleanup.rb', line 23 def cleanup(docxml) @i18n ||= i18n_init(@lang, @script) comment_cleanup(docxml) footnote_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
74 75 76 77 78 79 |
# File 'lib/isodoc/function/cleanup.rb', line 74 def example_cleanup(docxml) docxml.xpath("//table[@class = 'example']//p[not(@class)]").each do |p| p["class"] = "example" end docxml end |
#figure_aside_process(f, aside, key) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/isodoc/function/cleanup.rb', line 94 def figure_aside_process(f, aside, key) # get rid of footnote link, it is in diagram f&.at("./a[@class='TableFootnoteRef']")&.remove fnref = f.at(".//span[@class='TableFootnoteRef']/..") dt = key.add_child("<dt></dt>").first dd = key.add_child("<dd></dd>").first fnref.parent = dt aside.xpath(".//p").each do |a| a.delete("class") a.parent = dd end end |
#figure_cleanup(docxml) ⇒ Object
move footnotes into key, and get rid of footnote reference since it is in diagram
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/isodoc/function/cleanup.rb', line 109 def figure_cleanup(docxml) docxml.xpath(FIGURE_WITH_FOOTNOTES).each do |f| next unless f.at(".//aside[not(ancestor::p[@class = 'FigureTitle'])]") key = figure_get_or_make_dl(f) f.xpath(".//aside").each do |aside| figure_aside_process(f, aside, key) end end docxml end |
#figure_get_or_make_dl(t) ⇒ Object
81 82 83 84 85 86 87 88 |
# File 'lib/isodoc/function/cleanup.rb', line 81 def figure_get_or_make_dl(t) dl = t.at(".//dl") if dl.nil? t.add_child("<p><b>#{@i18n.key}</b></p><dl></dl>") dl = t.at(".//dl") end dl end |
#footnote_cleanup(docxml) ⇒ Object
133 134 135 136 137 138 |
# File 'lib/isodoc/function/cleanup.rb', line 133 def footnote_cleanup(docxml) docxml.xpath('//a[@class = "FootnoteRef"]/sup').each_with_index do |x, i| x.content = (i + 1).to_s end docxml end |
#footnote_reference_format(a) ⇒ Object
214 215 216 |
# File 'lib/isodoc/function/cleanup.rb', line 214 def footnote_reference_format(a) a end |
#inline_header_cleanup(docxml) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/isodoc/function/cleanup.rb', line 120 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.children.first.previous = x.remove end end docxml end |
#merge_fnref_into_fn_text(a) ⇒ Object
140 141 142 143 144 |
# File 'lib/isodoc/function/cleanup.rb', line 140 def merge_fnref_into_fn_text(a) fn = a.at('.//span[@class="TableFootnoteRef"]/..') n = fn.next_element n&.children&.first&.add_previous_sibling(fn.remove) end |
#new_fullcolspan_row(t, tfoot) ⇒ Object
178 179 180 181 182 183 184 185 186 187 |
# File 'lib/isodoc/function/cleanup.rb', line 178 def new_fullcolspan_row(t, tfoot) # how many columns in the table? cols = 0 t.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
16 17 18 19 20 21 |
# File 'lib/isodoc/function/cleanup.rb', line 16 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(td) ⇒ Object
162 163 164 165 |
# File 'lib/isodoc/function/cleanup.rb', line 162 def remove_bottom_border(td) td["style"] = td["style"].gsub(/border-bottom:[^;]+;/, "border-bottom:0pt;") end |
#symbols_cleanup(docxml) ⇒ Object
207 208 |
# File 'lib/isodoc/function/cleanup.rb', line 207 def symbols_cleanup(docxml) end |
#table_cleanup(docxml) ⇒ Object
200 201 202 203 204 205 |
# File 'lib/isodoc/function/cleanup.rb', line 200 def table_cleanup(docxml) table_footnote_cleanup(docxml) table_note_cleanup(docxml) table_long_strings_cleanup(docxml) docxml end |
#table_footnote_cleanup(docxml) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/isodoc/function/cleanup.rb', line 146 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 end end # preempt html2doc putting MsoNormal there docxml.xpath("//p[not(self::*[@class])]"\ "[ancestor::*[@class = 'TableFootnote']]").each do |p| p["class"] = "TableFootnote" end end |
#table_footnote_reference_format(a) ⇒ Object
210 211 212 |
# File 'lib/isodoc/function/cleanup.rb', line 210 def table_footnote_reference_format(a) a end |
#table_get_or_make_tfoot(t) ⇒ Object
167 168 169 170 171 172 173 174 175 176 |
# File 'lib/isodoc/function/cleanup.rb', line 167 def table_get_or_make_tfoot(t) tfoot = t.at(".//tfoot") if tfoot.nil? t.add_child("<tfoot></tfoot>") tfoot = t.at(".//tfoot") else tfoot.xpath(".//td | .//th").each { |td| remove_bottom_border(td) } end tfoot end |
#table_long_strings_cleanup(docxml) ⇒ Object
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/isodoc/function/cleanup.rb', line 35 def table_long_strings_cleanup(docxml) return unless @break_up_urls_in_tables == true docxml.xpath("//td | //th").each do |d| d.traverse do |n| next unless n.text? n.replace(HTMLEntities.new.encode( break_up_long_strings(n.text))) end end end |
#table_note_cleanup(docxml) ⇒ Object
189 190 191 192 193 194 195 196 197 198 |
# File 'lib/isodoc/function/cleanup.rb', line 189 def table_note_cleanup(docxml) docxml.xpath("//table[div[@class = 'Note' or "\ "@class = 'TableFootnote']]").each do |t| tfoot = table_get_or_make_tfoot(t) insert_here = new_fullcolspan_row(t, tfoot) t.xpath("div[@class = 'Note' or @class = 'TableFootnote']").each do |d| d.parent = insert_here end end end |
#termref_cleanup(docxml) ⇒ Object
7 8 9 10 11 12 13 14 |
# File 'lib/isodoc/function/cleanup.rb', line 7 def termref_cleanup(docxml) docxml. gsub(/\s*\[MODIFICATION\]\s*\[\/TERMREF\]/, l10n(", #{@i18n.modified} [/TERMREF]")). gsub(%r{\s*\[/TERMREF\]\s*</p>\s*<p>\s*\[TERMREF\]}, "; "). gsub(/\[TERMREF\]\s*/, l10n("[#{@i18n.source}: ")). gsub(%r{\s*\[\/TERMREF\]\s*}, l10n("]")). gsub(/\s*\[MODIFICATION\]/, l10n(", #{@i18n.modified} — ")) end |
#textcleanup(docxml) ⇒ Object
3 4 5 |
# File 'lib/isodoc/function/cleanup.rb', line 3 def textcleanup(docxml) docxml = termref_cleanup(passthrough_cleanup(docxml)) end |