module Iso690Render =begin def self.multiplenames_and(names) return "" if names.length == 0 return names[0] if names.length == 1 return "#{names[0]} and #{names[1]}" if names.length == 2 names[0..-2].join(", ") + " and #{names[-1]}" end =end def self.multiplenames(names) names.join(", ") end def self.extract_orgname(org) name = org.at("./name") name&.text || "--" end def self.frontname(given, initials) if given.empty? && initials.empty? then "" elsif initials.empty? given.map{ |m| m.text[0] }.join("") else initials.map{ |m| m.text[0] }.join("") end end def self.commajoin(a, b) return a unless b return b unless a #"#{a}, #{b}" "#{a} #{b}" end def self.extract_personname(person) completename = person.at("./name/completename") return completename.text if completename surname = person.at("./name/surname") initials = person.xpath("./name/initials") forenames = person.xpath("./name/forename") #given = [] #forenames.each { |x| given << x.text } #given.empty? && initials.each { |x| given << x.text } commajoin(surname&.text, frontname(forenames, initials)) end def self.extractname(contributor) org = contributor.at("./organization") person = contributor.at("./person") return extract_orgname(org) if org return extract_personname(person) if person "--" end def self.contributorRole(contributors) return "" unless contributors.length > 0 if contributors[0]&.at("role/@type")&.text == "editor" return contributors.length > 1 ? " (Eds.)" : "(Ed.)" end "" end def self.creatornames(doc) cr = doc.xpath("./contributor[role/@type = 'author']") cr.empty? and cr = doc.xpath("./contributor[role/@type = 'performer']") cr.empty? and cr = doc.xpath("./contributor[role/@type = 'adapter']") cr.empty? and cr = doc.xpath("./contributor[role/@type = 'translator']") cr.empty? and cr = doc.xpath("./contributor[role/@type = 'editor']") cr.empty? and cr = doc.xpath("./contributor[role/@type = 'publisher']") cr.empty? and cr = doc.xpath("./contributor[role/@type = 'distributor']") cr.empty? and cr = doc.xpath("./contributor") cr.empty? and return "" ret = [] cr.each do |x| ret << extractname(x) end multiplenames(ret) + contributorRole(cr) end end