require "date"
require "nokogiri"
require "htmlentities"
require "pathname"
require "open-uri"
module Asciidoctor
module Standoc
module Front
def committee_component(compname, node, out)
out.send compname.gsub(/-/, "_"), node.attr(compname),
**attr_code(number: node.attr("#{compname}-number"),
type: node.attr("#{compname}-type"))
i = 2
while node.attr(compname+"_#{i}") do
out.send compname.gsub(/-/, "_"), node.attr(compname+"_#{i}"),
**attr_code(number: node.attr("#{compname}-number_#{i}"),
type: node.attr("#{compname}-type_#{i}"))
i += 1
end
end
def organization(org, orgname)
org.name orgname
end
def metadata_author(node, xml)
(node.attr("publisher") || "").split(/,[ ]?/).each do |p|
xml.contributor do |c|
c.role **{ type: "author" }
c.organization { |a| organization(a, p) }
end
end
personal_author(node, xml)
end
def personal_author(node, xml)
(node.attr("fullname") || node.attr("surname")) and
personal_author1(node, xml, "")
i = 2
while node.attr("fullname_#{i}") || node.attr("surname_#{i}")
personal_author1(node, xml, "_#{i}")
i += 1
end
end
def personal_author1(node, xml, suffix)
xml.contributor do |c|
c.role **{ type: node.attr("role#{suffix}")&.downcase || "author" }
c.person do |p|
person_name(node, xml, suffix, p)
person_affiliation(node, xml, suffix, p)
node.attr("phone#{suffix}") and p.phone node.attr("phone#{suffix}")
node.attr("fax#{suffix}") and
p.phone node.attr("fax#{suffix}"), **{type: "fax"}
node.attr("email#{suffix}") and p.email node.attr("email#{suffix}")
node.attr("contributor-uri#{suffix}") and
p.uri node.attr("contributor-uri#{suffix}")
end
end
end
def person_name(node, xml, suffix, p)
p.name do |n|
if node.attr("fullname#{suffix}")
n.completename node.attr("fullname#{suffix}")
else
n.forename node.attr("givenname#{suffix}")
n.initial node.attr("initials#{suffix}")
n.surname node.attr("surname#{suffix}")
end
end
end
def person_affiliation(node, xml, suffix, p)
node.attr("affiliation#{suffix}") and p.affiliation do |a|
a.organization do |o|
o.name node.attr("affiliation#{suffix}")
abbr = node.attr("affiliation_abbrev#{suffix}") and
o.abbreviation abbr
node.attr("address#{suffix}") and o.address do |ad|
ad.formattedAddress node.attr("address#{suffix}")
end
end
end
end
def metadata_publisher(node, xml)
publishers = node.attr("publisher") || return
publishers.split(/,[ ]?/).each do |p|
xml.contributor do |c|
c.role **{ type: "publisher" }
c.organization { |a| organization(a, p) }
end
end
end
end
end
end