lib/isodoc/iso/metadata.rb in metanorma-iso-1.1.5 vs lib/isodoc/iso/metadata.rb in metanorma-iso-1.2.0

- old
+ new

@@ -3,10 +3,19 @@ module IsoDoc module Iso class Metadata < IsoDoc::Metadata def initialize(lang, script, labels) super + @metadata = { + tc: "XXXX", + sc: "XXXX", + wg: "XXXX", + editorialgroup: [], + secretariat: "XXXX", + obsoletes: nil, + obsoletes_part: nil + } end STAGE_ABBRS = { "00": "PWI", "10": "NWIP", @@ -17,13 +26,14 @@ "60": "IS", "90": "(Review)", "95": "(Withdrawal)", }.freeze - def stage_abbrev(stage, iter, draft) + def stage_abbrev(stage, substage, iter, draft) return "" unless stage stage = STAGE_ABBRS[stage.to_sym] || "??" + stage = "PRF" if stage == "IS" && substage == "00" stage += iter if iter stage = "Pre" + stage if draft =~ /^0\./ stage end @@ -32,11 +42,13 @@ set(:unpublished, false) if docstatus set(:stage, docstatus.text) set(:stage_int, docstatus.text.to_i) set(:unpublished, docstatus.text.to_i > 0 && docstatus.text.to_i < 60) - abbr = stage_abbrev(docstatus.text, isoxml&.at(ns("//bibdata/status/iteration"))&.text, + abbr = stage_abbrev(docstatus.text, + isoxml&.at(ns("//bibdata/status/substage"))&.text, + isoxml&.at(ns("//bibdata/status/iteration"))&.text, isoxml&.at(ns("//version/draft"))&.text) set(:stageabbr, abbr) end revdate = isoxml.at(ns("//version/revision-date")) set(:revdate, revdate&.text) @@ -81,13 +93,13 @@ end main end def title(isoxml, _out) - intro = isoxml.at(ns("//bibdata//title-intro[@language='en']")) - main = isoxml.at(ns("//bibdata//title-main[@language='en']")) - part = isoxml.at(ns("//bibdata//title-part[@language='en']")) + intro = isoxml.at(ns("//bibdata//title[@type='title-intro' and @language='en']")) + main = isoxml.at(ns("//bibdata//title[@type='title-main' and @language='en']")) + part = isoxml.at(ns("//bibdata//title[@type='title-part' and @language='en']")) partnumber = isoxml.at(ns("//bibdata//project-number/@part")) subpartnumber = isoxml.at(ns("//bibdata//project-number/@subpart")) set(:doctitlemain, @c.encode(main ? main.text : "", :hexadecimal)) main = compose_title(main, intro, part, partnumber, subpartnumber, "en") @@ -96,20 +108,71 @@ set(:doctitlepartlabel, part_prefix(partnumber, subpartnumber, "en")) set(:doctitlepart, @c.encode(part.text, :hexadecimal)) if part end def subtitle(isoxml, _out) - intro = isoxml.at(ns("//bibdata//title-intro[@language='fr']")) - main = isoxml.at(ns("//bibdata//title-main[@language='fr']")) - part = isoxml.at(ns("//bibdata//title-part[@language='fr']")) + intro = isoxml.at(ns("//bibdata//title[@type='title-intro' and @language='fr']")) + main = isoxml.at(ns("//bibdata//title[@type='title-main' and @language='fr']")) + part = isoxml.at(ns("//bibdata//title[@type='title-part' and @language='fr']")) partnumber = isoxml.at(ns("//bibdata//project-number/@part")) subpartnumber = isoxml.at(ns("//bibdata//project-number/@subpart")) set(:docsubtitlemain, @c.encode(main ? main.text : "", :hexadecimal)) main = compose_title(main, intro, part, partnumber, subpartnumber, "fr") set(:docsubtitle, main) set(:docsubtitleintro, @c.encode(intro ? intro.text : "", :hexadecimal)) if intro set(:docsubtitlepartlabel, part_prefix(partnumber, subpartnumber, "fr")) set(:docsubtitlepart, @c.encode(part.text, :hexadecimal)) if part + end + + def author(xml, _out) + super + tc(xml) + sc(xml) + wg(xml) + secretariat(xml) + end + + def tc(xml) + tc_num = xml.at(ns("//bibdata/ext/editorialgroup/technical-committee/@number")) + tc_type = xml.at(ns("//bibdata/ext/editorialgroup/technical-committee/@type"))&. + text || "TC" + if tc_num + tcid = "#{tc_type} #{tc_num.text}" + set(:tc, tcid) + set(:editorialgroup, get[:editorialgroup] << tcid) + end + end + + def sc(xml) + sc_num = xml.at(ns("//bibdata/ext/editorialgroup/subcommittee/@number")) + sc_type = xml.at(ns("//bibdata/ext/editorialgroup/subcommittee/@type"))&.text || "SC" + if sc_num + scid = "#{sc_type} #{sc_num.text}" + set(:sc, scid) + set(:editorialgroup, get[:editorialgroup] << scid) + end + end + + def wg(xml) + wg_num = xml.at(ns("//bibdata/ext/editorialgroup/workgroup/@number")) + wg_type = xml.at(ns("//bibdata/ext/editorialgroup/workgroup/@type"))&.text || "WG" + if wg_num + wgid = "#{wg_type} #{wg_num.text}" + set(:wg, wgid) + set(:editorialgroup, get[:editorialgroup] << wgid) + end + end + + def secretariat(xml) + sec = xml.at(ns("//bibdata/ext/editorialgroup/secretariat")) + set(:secretariat, sec.text) if sec + end + + def doctype(isoxml, _out) + super + ics = [] + isoxml.xpath(ns("//bibdata/ext/ics/code")).each { |i| ics << i.text } + set(:ics, ics.empty? ? "XXX" : ics.join(", ")) end end end end