require "fileutils" require "base64" module IsoDoc module HtmlFunction module Html def convert1(docxml, filename, dir) bibitem_lookup(docxml) noko do |xml| xml.html **{ lang: @lang.to_s } do |html| info docxml, nil populate_css html.head { |head| define_head head, filename, dir } make_body(html, docxml) end end.join("\n") end def make_body1(body, _docxml) return if @bare body.div **{ class: "title-section" } do |div1| div1.p { |p| p << " " } # placeholder end section_break(body) end def make_body2(body, _docxml) return if @bare body.div **{ class: "prefatory-section" } do |div2| div2.p { |p| p << " " } # placeholder end section_break(body) end def make_body3(body, docxml) body.div **{ class: "main-section" } do |div3| boilerplate docxml, div3 preface_block docxml, div3 abstract docxml, div3 foreword docxml, div3 introduction docxml, div3 preface docxml, div3 acknowledgements docxml, div3 middle docxml, div3 footnotes div3 comments div3 end end def googlefonts <<~HEAD.freeze HEAD end def html_head <<~HEAD.freeze #{@meta&.get&.dig(:doctitle)} #{' '} #{googlefonts} HEAD end def html_button return "" if @bare ''.freeze end def html_main(docxml) docxml.at("//head").add_child(html_head) d = docxml.at('//div[@class="main-section"]') d.name = "main" d.children.empty? or d.children.first.previous = html_button end def sourcecodelang(lang) return unless lang case lang.downcase when "javascript" then "lang-js" when "c" then "lang-c" when "c+" then "lang-cpp" when "console" then "lang-bsh" when "ruby" then "lang-rb" when "html" then "lang-html" when "java" then "lang-java" when "xml" then "lang-xml" when "perl" then "lang-perl" when "python" then "lang-py" when "xsl" then "lang-xsl" else "" end end def sourcecode_parse(node, out) name = node.at(ns("./name")) class1 = "prettyprint #{sourcecodelang(node&.at(ns('./@lang'))&.value)}" out.pre **sourcecode_attrs(node).merge(class: class1) do |div| @sourcecode = true node.children.each { |n| parse(n, div) unless n.name == "name" } @sourcecode = false end sourcecode_name_parse(node, out, name) end def underline_parse(node, out) out.span **{ style: "text-decoration: underline;" } do |e| node.children.each { |n| parse(n, e) } end end def table_long_strings_cleanup(docxml); end def table_attrs(node) ret = super node.at(ns("./colgroup")) and ret[:style] += "table-layout:fixed;" ret end def image_parse(node, out, caption) if svg = node.at("./m:svg", "m" => "http://www.w3.org/2000/svg") svg_parse(svg, out) return end super end end end end