module IsoDoc module Ietf class RfcConvert < ::IsoDoc::Convert def u_cleanup(xmldoc) xmldoc.traverse do |n| next unless n.text? next unless %w(t blockquote li dd preamble td th annotation) .include? n.parent.name n.replace(n.text.gsub(/[\u0080-\uffff]/, "\\0")) end end def footnote_cleanup(docxml) fn = footnote_refs_cleanup(docxml) endnotes = make_endnotes(docxml) docxml.xpath("//section[descendant::fn] | "\ "//abstract[descendant::fn]").each do |s| s.xpath(".//fn").each do |f| ref = f.at(".//ref") and ref.replace("[#{fn[ref.text]}] ") endnotes << f.remove.children end end end def footnote_refs_cleanup(docxml) i = 0 fn = {} docxml.xpath("//fnref").each do |f| unless fn[f.text] i = i + 1 fn[f.text] = i.to_s end f.replace(" [#{fn[f.text]}]") end fn end def make_endnotes(docxml) return unless docxml.at("//fn") unless endnotes = docxml.at("//back") docxml << "" and endnotes = docxml.at("//back") end endnotes << "
Endnotes
" docxml.at("//back/section[last()]") end def image_cleanup(docxml) docxml.xpath("//t[descendant::artwork]").each do |t| insert = t t.xpath(".//artwork").each_with_index do |a, i| insert.next = a.dup insert = insert.next a.replace("[IMAGE #{i + 1}]") end end end def bookmark_cleanup(docxml) docxml.xpath("//bookmark").each(&:remove) end def cref_cleanup(docxml) docxml.xpath("//cref").each do |c| c.xpath("./t").each do |t| t.replace(t.children) end next unless %w(section abstract).include? c.parent.name c.wrap("") end end end end end