class Asciidoctor::UN::Converter

Constants

XML_NAMESPACE
XML_ROOT_TAG

Public Instance Methods

admonition_attrs(node) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 210
def admonition_attrs(node)
  attr_code(super.merge(unnumbered: node.option?("unnumbered"),
                        subsequence: node.attr("subsequence")))
end
asciidoc_sub(text) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 33
def asciidoc_sub(text)
  Metanorma::Utils::asciidoc_sub(text)
end
bibdata_validate(doc) click to toggle source
# File lib/asciidoctor/un/validate.rb, line 9
def bibdata_validate(doc)
  stage_validate(doc)
end
content_validate(doc) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/validate.rb, line 4
def content_validate(doc)
  super
  bibdata_validate(doc.root)
end
default_publisher() click to toggle source
# File lib/asciidoctor/un/converter.rb, line 14
def default_publisher
  "United Nations"
end
doc_converter(node) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 165
def doc_converter(node)
  IsoDoc::UN::WordConvert.new(doc_extract_attributes(node))
end
doc_extract_attributes(node) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 153
def doc_extract_attributes(node)
  super.merge(toc: node.attributes.has_key?("toc"))
end
doctype(node) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 116
def doctype(node)
  d = super
  unless %w{plenary recommendation addendum communication corrigendum
            reissue agenda budgetary sec-gen-notes expert-report
            resolution plenary-attachment}.include? d
    @log.add("Document Attributes", nil,
             "#{d} is not a legal document type: reverting to 'recommendation'")
    d = "recommendation"
  end
  d
end
html_converter(node) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 161
def html_converter(node)
  IsoDoc::UN::HtmlConvert.new(html_extract_attributes(node))
end
html_extract_attributes(node) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 149
def html_extract_attributes(node)
  super.merge(toc: node.attributes.has_key?("toc"))
end
makexml(node) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 109
def makexml(node)
  @draft = node.attributes.has_key?("draft")
  @no_number_subheadings =
    node.attributes.has_key?("do-not-number-subheadings")
  super
end
metadata_committee(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 18
def metadata_committee(node, xml)
  return unless node.attr("committee")

  xml.editorialgroup do |a|
    a.committee node.attr("committee"),
                **attr_code(type: node.attr("committee-type"))
    i = 2
    while node.attr("committee_#{i}")
      a.committee node.attr("committee_#{i}"),
                  **attr_code(type: node.attr("committee-type_#{i}"))
      i += 1
    end
  end
end
metadata_distribution(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 62
def metadata_distribution(node, xml)
  xml.distribution node.attr("distribution") if node.attr("distribution")
end
metadata_ext(node, xml) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 98
def metadata_ext(node, xml)
  super
  metadata_distribution(node, xml)
  metadata_session(node, xml)
  metadata_submission_language(node, xml)
end
metadata_id(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 51
def metadata_id(node, xml)
  dn = node.attr("docnumber")
  if docstatus = node.attr("status")
    abbr = IsoDoc::UN::Metadata.new("en", "Latn", @i18n)
      .stage_abbr(docstatus)
    dn = "#{dn}(#{abbr})" unless abbr.empty?
  end
  xml.docidentifier { |i| i << dn }
  xml.docnumber { |i| i << node.attr("docnumber") }
end
metadata_language(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 87
def metadata_language(node, xml)
  languages = node&.attr("language")&.split(/, */) ||
    %w(ar ru en fr zh es)
  languages.each { |l| xml.language l }
end
metadata_session(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 66
def metadata_session(node, xml)
  xml.session do |session|
    session.number node.attr("session") if node.attr("session")
    session.date node.attr("session-date") if node.attr("session-date")
    node&.attr("item-number")&.split(/, */)&.each do |i|
      session.item_number i
    end
    node&.attr("item-name")&.split(/, */)&.each do |i|
      session.item_name i
    end
    node&.attr("subitem-name")&.split(/, */)&.each do |i|
      session.subitem_name i
    end
    node.attr("collaborator") and
      session.collaborator node.attr("collaborator")
    session.id node.attr("agenda-id") if node.attr("agenda-id")
    node.attr("item-footnote") and
      session.item_footnote node.attr("item-footnote")
  end
end
metadata_submission_language(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 93
def metadata_submission_language(node, xml)
  languages = node&.attr("submissionlanguage")&.split(/, */) || []
  languages.each { |l| xml.submissionlanguage l }
end
no_number_subheadings(xmldoc) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 181
def no_number_subheadings(xmldoc)
  xmldoc.xpath("//sections/clause | "\
               "//sections/definitions | //annex").each do |s|
    s.xpath(".//clause | .//definitions").each do |c|
      c["unnumbered"] = true
    end
  end
end
outputs(node, ret) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 128
def outputs(node, ret)
  File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
  presentation_xml_converter(node).convert(@filename + ".xml")
  html_converter(node).convert(@filename + ".presentation.xml",
                               nil, false, "#{@filename}.html")
  doc_converter(node).convert(@filename + ".presentation.xml",
                              nil, false, "#{@filename}.doc")
  pdf_converter(node)&.convert(@filename + ".presentation.xml",
                               nil, false, "#{@filename}.pdf")
end
para_to_clause(xmldoc) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 190
def para_to_clause(xmldoc)
  doctype = xmldoc&.at("//bibdata/ext/doctype")&.text
  %w(plenary agenda budgetary).include?(doctype) or
    para_to_clause1(xmldoc)
end
para_to_clause1(xmldoc) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 196
def para_to_clause1(xmldoc)
  xmldoc.xpath("//clause/p | //annex/p").each do |p|
    cl = Nokogiri::XML::Node.new("clause", xmldoc)
    cl["id"] = p["id"]
    cl["inline-header"] = "true"
    p["id"] = "_#{UUIDTools::UUID.random_create}"
    p.replace(cl)
    p.parent = cl
    while (n = cl.next_element) && !%w(p clause).include?(n.name)
      n.parent = cl
    end
  end
end
pdf_converter(node) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 169
def pdf_converter(node)
  return nil if node.attr("no-pdf")

  IsoDoc::UN::PdfConvert.new(doc_extract_attributes(node))
end
presentation_xml_converter(node) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 157
def presentation_xml_converter(node)
  IsoDoc::UN::PresentationXMLConvert.new(html_extract_attributes(node))
end
sections_cleanup(xmldoc) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 175
def sections_cleanup(xmldoc)
  super
  no_number_subheadings(xmldoc) if @no_number_subheadings
  para_to_clause(xmldoc)
end
sectiontype_streamline(ret) click to toggle source
Calls superclass method
# File lib/asciidoctor/un/converter.rb, line 215
def sectiontype_streamline(ret)
  case ret
  when "foreword", "introduction" then "donotrecognise-foreword"
  else
    super
  end
end
stage_validate(xmldoc) click to toggle source
# File lib/asciidoctor/un/validate.rb, line 13
def stage_validate(xmldoc)
  stage = xmldoc&.at("//bibdata/status/stage")&.text
  %w(proposal working-draft committee-draft draft-standard final-draft
     published withdrawn).include? stage or
    @log.add("Document Attributes", nil,
             "#{stage} is not a recognised status")
end
style(_node, _text) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 145
def style(_node, _text)
  nil
end
title(node, xml) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 37
def title(node, xml)
  ["en"].each do |lang|
    xml.title **{ type: "main", language: lang,
                  format: "text/plain" } do |t|
      t << (asciidoc_sub(node.attr("title")) || node.title)
    end
    node.attr("subtitle") and
      xml.title **{ type: "subtitle", language: lang,
                    format: "text/plain" } do |t|
        t << asciidoc_sub(node.attr("subtitle"))
      end
  end
end
title_validate(_root) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 105
def title_validate(_root)
  nil
end
validate(doc) click to toggle source
# File lib/asciidoctor/un/converter.rb, line 139
def validate(doc)
  content_validate(doc)
  schema_validate(formattedstr_strip(doc.dup),
                  File.join(File.dirname(__FILE__), "un.rng"))
end