Class: IsoDoc::Iho::PresentationXMLConvert

Inherits:
Generic::PresentationXMLConvert
  • Object
show all
Includes:
Init
Defined in:
lib/isodoc/iho/presentation_xml_convert.rb

Constant Summary collapse

UPDATE_RELATIONS =
<<~XPATH.freeze
  //bibdata/relation[@type = 'updatedBy' or @type = 'merges' or @type = 'splits' or @type = 'hasDraft']/bibitem
XPATH

Instance Method Summary collapse

Methods included from Init

#bibrenderer, #i18n_init, #info, #metadata_init, #xref_init

Instance Method Details

#bibdata(docxml) ⇒ Object


33
34
35
36
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 33

def bibdata(docxml)
  super
  dochistory(docxml)
end

#biblio_ref_entry_code(ordinal, _idents, _ids, _standard, _datefn, _bib) ⇒ Object


13
14
15
16
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 13

def biblio_ref_entry_code(ordinal, _idents, _ids, _standard, _datefn,
_bib)
  "[#{ordinal}]<tab/>"
end

#clause(docxml) ⇒ Object


169
170
171
172
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 169

def clause(docxml)
  super
  docxml.xpath(ns("//executivesummary | //appendix")).each { |x| clause1(x) }
end

#clausedelimObject


165
166
167
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 165

def clausedelim
  ""
end

#collapse_term(docxml) ⇒ Object


154
155
156
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 154

def collapse_term(docxml)
  docxml.xpath(ns("//term")).each { |t| collapse_term1(t) }
end

#collapse_term1(term) ⇒ Object


158
159
160
161
162
163
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 158

def collapse_term1(term)
  defn = term.at(ns("./fmt-definition")) or return
  source = term.at(ns("./fmt-termsource")) or return
  defn.elements.last << source.children
  source.remove
end

#ddMMMyyyy(isodate) ⇒ Object


108
109
110
111
112
113
114
115
116
117
118
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 108

def ddMMMyyyy(isodate)
  isodate.nil? and return nil
  arr = isodate.split("-")
  if arr.size == 1 && (/^\d+$/.match isodate)
    Date.new(*arr.map(&:to_i)).strftime("%Y")
  elsif arr.size == 2
    Date.new(*arr.map(&:to_i)).strftime("%B %Y")
  else
    Date.parse(isodate).strftime("%d %B %Y")
  end
end

#dochistory(docxml) ⇒ Object


42
43
44
45
46
47
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 42

def dochistory(docxml)
  updates = docxml.xpath(ns(UPDATE_RELATIONS))
  updates.empty? and return
  pref = preface_insert_point(docxml)
  generate_dochistory(updates, pref)
end

#dochistory_contributor(contrib) ⇒ Object


88
89
90
91
92
93
94
95
96
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 88

def dochistory_contributor(contrib)
  ret = contrib.at("./organization/abbreviation") ||
    contrib.at("./organization/subdivision") ||
    contrib.at("./organization/name") ||
    contrib.at("./person/name/abbreviation") ||
    contrib.at("./person/name/completename")
  ret and return ret.text
  format_personalname(contrib)
end

#dochistory_contributors(item) ⇒ Object


82
83
84
85
86
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 82

def dochistory_contributors(item)
  item.xpath(ns("./contributor")).map do |c|
    dochistory_contributor(c)
  end.join(", ")
end

#dochistory_date(item) ⇒ Object


75
76
77
78
79
80
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 75

def dochistory_date(item)
  d = item.at(ns("./date[@type = 'updated']")) ||
    item.at(ns("./date[@type = 'published']")) ||
    item.at(ns("./date[@type = 'issued']")) or return ""
  ddMMMyyyy(d.text.strip)
end

#dochistory_description(item) ⇒ Object


103
104
105
106
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 103

def dochistory_description(item)
  d = item.at(ns("./amend/description")) or return ""
  d.children.to_xml
end

#format_personalname(contrib) ⇒ Object


98
99
100
101
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 98

def format_personalname(contrib)
  Relaton::Render::General.new(template: { book: "{{ creatornames }}" })
    .render("<bibitem type='book'>#{contrib.to_xml}</bibitem>")
end

#generate_dochistory(updates, pref) ⇒ Object


54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 54

def generate_dochistory(updates, pref)
  ret = updates.map { |u| generate_dochistory_row(u) }.flatten.join("\n")
  pref << <<~XML
    <clause id='_#{UUIDTools::UUID.random_create}'>
    <title>#{@i18n.dochistory}</title>
    <table unnumbered="true"><thead>
    <tr><th>Version Number</th><th>Date</th><th>Author</th><th>Description</th></tr>
    </thead><tbody>
    #{ret}
    </tbody></table></clause>
  XML
end

#generate_dochistory_row(item) ⇒ Object


67
68
69
70
71
72
73
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 67

def generate_dochistory_row(item)
  e = item.at(ns("./edition"))&.text
  date = dochistory_date(item)
  c = dochistory_contributors(item)
  desc = dochistory_description(item)
  "<tr><td>#{e}</td><td>#{date}</td><td>#{c}</td><td>#{desc}</td></tr>"
end

#middle_title(docxml) ⇒ Object


18
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 18

def middle_title(docxml); end

#norm_ref_entry_code(ordinal, _idents, _ids, _standard, _datefn, _bib) ⇒ Object


9
10
11
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 9

def norm_ref_entry_code(ordinal, _idents, _ids, _standard, _datefn, _bib)
  "[#{ordinal}]<tab/>"
end

#omit_docid_prefix(prefix) ⇒ Object


120
121
122
123
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 120

def omit_docid_prefix(prefix)
  prefix == "IHO" and return true
  super
end

#preface_insert_point(docxml) ⇒ Object


49
50
51
52
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 49

def preface_insert_point(docxml)
  docxml.at(ns("//preface")) || docxml.at(ns("//sections"))
    .add_previous_sibling("<preface> </preface>").first
end

#preface_rearrange(doc) ⇒ Object


20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 20

def preface_rearrange(doc)
  preface_move(doc.xpath(ns("//preface/abstract")),
               %w(foreword executivesummary introduction clause acknowledgements), doc)
  preface_move(doc.xpath(ns("//preface/foreword")),
               %w(executivesummary introduction clause acknowledgements), doc)
  preface_move(doc.xpath(ns("//preface/executivesummary")),
               %w(introduction clause acknowledgements), doc)
  preface_move(doc.xpath(ns("//preface/introduction")),
               %w(clause acknowledgements), doc)
  preface_move(doc.xpath(ns("//preface/acknowledgements")),
               %w(), doc)
end

#term1(elem) ⇒ Object


125
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 125

def term1(elem); end

#termcleanup(docxml) ⇒ Object


149
150
151
152
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 149

def termcleanup(docxml)
  collapse_term docxml
  super
end

#termsource1(elem) ⇒ Object

KILL


128
129
130
131
132
133
134
135
136
137
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 128

def termsource1(elem)
  elem.parent.nil? and return
  while elem&.next_element&.name == "termsource"
    elem << "; #{to_xml(elem.next_element.remove.children)}"
  end
  t = elem.at("./ancestor::xmlns:term") or return
  s = l10n(" [#{to_xml(elem.remove.children).strip}]")
  defn = t.at(ns(".//definition[last()]")) or return
  defn.elements.last << s
end

#termsource_label(elem, sources) ⇒ Object


144
145
146
147
# File 'lib/isodoc/iho/presentation_xml_convert.rb', line 144

def termsource_label(elem, sources)
    elem.at("./ancestor::xmlns:term") or return
  elem.replace(l10n("[#{sources}]"))
end