module IsoDoc module Itu class PresentationXMLConvert < IsoDoc::PresentationXMLConvert def bibdata_i18n(bib) super bibdata_dates(bib) bibdata_title(bib) amendment_id(bib) end def bibdata_dates(bib) bib.xpath(ns("./date")).each do |d| d.next = d.dup d.next["format"] = "ddMMMyyyy" d.next.children = ddMMMyyyy(d.text) end end def bibdata_title(bib) case bib.at(ns("./ext/doctype"))&.text when "service-publication" then bibdata_title_service_population(bib) when "resolution" then bibdata_title_resolution(bib) end end def bibdata_title_resolution(bib) place = bib.at(ns("./ext/meeting-place"))&.text year = bib.at(ns("./ext/meeting-date/from | ./ext/meeting-date/on")) &.text&.gsub(/-.*$/, "") text = bibdata_title_resolution_name(bib, place, year) bib.at(ns("./title")).next = <<~INS #{text} #{place}, #{year} INS end def bibdata_title_resolution_name(bib, place, year) ed = bib.at(ns("./edition"))&.text rev = ed && ed != "1" ? "#{@i18n.get['revision_abbreviation']} " : "" num = bib.at(ns("./docnumber")) @i18n.l10n("#{@i18n.get['doctype_dict']['resolution'].upcase} " \ "#{num&.text} (#{rev}#{place}, #{year})") end def bibdata_title_service_population(bib) date = bib&.at(ns("./date[@type = 'published']"))&.text or return text = l10n(@i18n.get["position_on"].sub("%", ddmmmmyyyy(date))) ins = bib.at(ns("./title")) ins.next = <<~INS #{text} INS end def ddMMMyyyy(date) d = date.split("-").map { |x| x.sub(/^0/, "") } case @lang when "zh" d[0] += "年" if d[0] d[1] += "月" if d[1] d[2] += "日" if d[2] d.join when "ar" d[1] = ::RomanNumerals.to_roman(d[1].to_i).upcase if d[1] d.join(".") else d[1] = ::RomanNumerals.to_roman(d[1].to_i).upcase if d[1] d.reverse.join(".") end end def ddmmmmyyyy(date) @lang == "zh" and return ddMMMyyyy(date) d = date.split("-") d[1] &&= @meta.months[d[1].to_sym] d[2] &&= d[2].sub(/^0/, "") l10n(d.reverse.join(" ")) end def amendment_id(bib) %w(amendment corrigendum).each do |w| if dn = bib.at(ns("./ext/structuredidentifier/#{w}")) dn["language"] = "" dn.next = dn.dup dn.next["language"] = @lang dn.next.children = @i18n.l10n("#{@i18n.get[w]} #{dn.text}") end end end end end end