require_relative "base_convert"
require_relative "init"
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',
normalfontsize: "15px",
footnotefontsize: "0.9em",
}
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
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 middle(isoxml, out)
middle_admonitions(isoxml, out)
clause isoxml, out
annex isoxml, out
bibliography isoxml, out
end
def introduction(isoxml, out)
f = isoxml.at(ns("//introduction")) || return
page_break(out)
out.div **{ class: "Section3", id: f["id"] } do |div|
clause_name(nil, f.at(ns("./title")), div, { class: "IntroTitle" })
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|
clause_name(nil, f.at(ns("./title")) || @i18n.foreword, s,
class: "ForewordTitle")
f.elements.each { |e| parse(e, s) unless e.name == "title" }
end
end
include BaseConvert
include Init
end
end
end