require_relative "base_convert"
require "isodoc"
module IsoDoc
module UN
# A {Converter} implementation that generates HTML output, and a document
# schema encapsulation of the document for validation
#
class HtmlConvert < IsoDoc::HtmlConvert
def initialize(options)
@libdir = File.dirname(__FILE__)
super
end
def default_fonts(options)
{
bodyfont: (
options[:script] == "Hans" ?
'"SimSun",serif' :
'"Times New Roman", serif'
),
headerfont: (
options[:script] == "Hans" ?
'"SimHei",sans-serif' :
'"Times New Roman", serif'
),
monospacefont: '"Courier New",monospace'
}
end
def default_file_locations(_options)
{
htmlstylesheet: html_doc_path("htmlstyle.scss"),
htmlcoverpage: html_doc_path("html_unece_titlepage.html"),
htmlintropage: html_doc_path("html_unece_intro.html"),
scripts: html_doc_path("scripts.html"),
}
end
def googlefonts
<<~HEAD.freeze
HEAD
end
def make_body(xml, docxml)
plenary = is_plenary?(docxml)
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
if plenary && @htmlcoverpage == html_doc_path("html_unece_titlepage.html")
@htmlcoverpage = html_doc_path("html_unece_plenary_titlepage.html")
end
xml.body **body_attr do |body|
make_body1(body, docxml)
make_body2(body, docxml)
make_body3(body, docxml)
end
end
def make_body3(body, docxml)
body.div **{ class: "main-section" } do |div3|
boilerplate 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 middle(isoxml, out)
middle_admonitions(isoxml, out)
clause isoxml, out
annex isoxml, out
bibliography isoxml, out
end
def clause_parse_title(node, div, c1, out)
if node["inline-header"] == "true"
inline_header_title(out, node, c1)
else
div.send "h#{@xrefs.anchor(node['id'], :level, false) || '1'}" do |h|
lbl = @xrefs.anchor(node['id'], :label, false)
h << "#{lbl}. " if lbl && !@suppressheadingnumbers
insert_tab(h, 1) if lbl && !@suppressheadingnumbers
c1&.children&.each { |c2| parse(c2, h) }
end
end
end
def introduction(isoxml, out)
f = isoxml.at(ns("//introduction")) || return
page_break(out)
out.div **{ class: "Section3", id: f["id"] } do |div|
div.h1(**{ class: "IntroTitle" }) do |h1|
h1 << @introduction_lbl
end
f.elements.each do |e|
parse(e, div) unless e.name == "title"
end
end
end
def foreword(isoxml, out)
f = isoxml.at(ns("//foreword")) || return
page_break(out)
out.div **attr_code(id: f["id"]) do |s|
s.h1(**{ class: "ForewordTitle" }) do |h1|
h1 << @foreword_lbl
end
f.elements.each { |e| parse(e, s) unless e.name == "title" }
end
end
include BaseConvert
end
end
end