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