metanorma-ieee 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/isodoc/ieee/html/header_amd.html +105 -0
- data/lib/isodoc/ieee/html/html_ieee_titlepage.html +11 -12
- data/lib/isodoc/ieee/html/ieee.css +23 -15
- data/lib/isodoc/ieee/html/ieee.scss +24 -15
- data/lib/isodoc/ieee/html/word_ieee_titlepage.html +12 -1
- data/lib/isodoc/ieee/i18n-en.yaml +1 -0
- data/lib/isodoc/ieee/ieee.amendment.xsl +370 -184
- data/lib/isodoc/ieee/ieee.standard.xsl +370 -184
- data/lib/isodoc/ieee/metadata.rb +25 -47
- data/lib/isodoc/ieee/pdf_convert.rb +2 -2
- data/lib/isodoc/ieee/presentation_ref.rb +70 -0
- data/lib/isodoc/ieee/presentation_terms.rb +67 -20
- data/lib/isodoc/ieee/presentation_xml_convert.rb +97 -63
- data/lib/isodoc/ieee/word_authority.rb +5 -3
- data/lib/isodoc/ieee/word_convert.rb +12 -0
- data/lib/metanorma/ieee/boilerplate.xml +68 -19
- data/lib/metanorma/ieee/cleanup.rb +96 -33
- data/lib/metanorma/ieee/cleanup_ref.rb +1 -0
- data/lib/metanorma/ieee/converter.rb +7 -0
- data/lib/metanorma/ieee/front.rb +40 -53
- data/lib/metanorma/ieee/ieee.rng +32 -2
- data/lib/metanorma/ieee/isodoc.rng +10 -0
- data/lib/metanorma/ieee/term_lookup_cleanup.rb +11 -0
- data/lib/metanorma/ieee/validate.rb +57 -53
- data/lib/metanorma/ieee/validate_style.rb +53 -0
- data/lib/metanorma/ieee/version.rb +1 -1
- metadata +5 -2
data/lib/isodoc/ieee/metadata.rb
CHANGED
@@ -6,11 +6,13 @@ module IsoDoc
|
|
6
6
|
class Metadata < IsoDoc::Metadata
|
7
7
|
def initialize(lang, script, i18n, fonts_options = {})
|
8
8
|
super
|
9
|
-
@metadata[:
|
9
|
+
@metadata[:issueddate] = "<Date Approved>"
|
10
10
|
end
|
11
11
|
|
12
12
|
def bibdate(isoxml, _out)
|
13
|
-
|
13
|
+
isoxml.xpath(ns("//bibdata/date[@format = 'ddMMMyyyy']")).each do |d|
|
14
|
+
set("#{d['type'].gsub(/-/, '_')}date".to_sym, Common::date_range(d))
|
15
|
+
end
|
14
16
|
draft = isoxml.at(ns("//bibdata/date[@type = 'issued']")) ||
|
15
17
|
isoxml.at(ns("//bibdata/date[@type = 'circulated']")) ||
|
16
18
|
isoxml.at(ns("//bibdata/date[@type = 'created']")) ||
|
@@ -25,8 +27,10 @@ module IsoDoc
|
|
25
27
|
b = isoxml.at(ns("//bibdata/ext/doctype"))&.text or return
|
26
28
|
set(:doctype, b.split(/[- ]/).map(&:capitalize).join(" "))
|
27
29
|
set(:doctype_abbrev, @labels["doctype_abbrev"][b])
|
28
|
-
s = isoxml.at(ns("//bibdata/ext/
|
30
|
+
s = isoxml.at(ns("//bibdata/ext/subdoctype"))&.text and
|
29
31
|
set(:docsubtype, s.split(/[- ]/).map(&:capitalize).join(" "))
|
32
|
+
s = isoxml.at(ns("//bibdata/ext/trial-use"))&.text and s == "true" and
|
33
|
+
set(:trial_use, true)
|
30
34
|
end
|
31
35
|
|
32
36
|
def author(xml, _out)
|
@@ -35,7 +39,6 @@ module IsoDoc
|
|
35
39
|
tc(xml)
|
36
40
|
wg(xml)
|
37
41
|
bg(xml)
|
38
|
-
std_group(xml)
|
39
42
|
end
|
40
43
|
|
41
44
|
def society(xml)
|
@@ -50,59 +53,17 @@ module IsoDoc
|
|
50
53
|
set(:technical_committee, tc)
|
51
54
|
end
|
52
55
|
|
53
|
-
def editor_names(xml, role)
|
54
|
-
xml.xpath(ns("//bibdata/contributor[role/@type = 'editor']"\
|
55
|
-
"[role = '#{role}']/person/name/completename"))
|
56
|
-
&.each&.map(&:text)
|
57
|
-
end
|
58
|
-
|
59
|
-
def editor_name(xml, role)
|
60
|
-
editor_names(xml, role)&.first
|
61
|
-
end
|
62
|
-
|
63
56
|
def wg(xml)
|
64
57
|
wg = xml.at(ns("//bibdata/ext/editorialgroup/"\
|
65
58
|
"working-group")) or return nil
|
66
59
|
set(:working_group, wg.text)
|
67
|
-
m = {}
|
68
|
-
["Chair", "Vice-Chair", "Secretary"].each do |r|
|
69
|
-
a = editor_name(xml, "Working Group #{r}") and
|
70
|
-
m[r.downcase.gsub(/ /, "-")] = a
|
71
|
-
end
|
72
|
-
wg_members(xml, m)
|
73
|
-
end
|
74
|
-
|
75
|
-
def wg_members(xml, members)
|
76
|
-
a = editor_names(xml, "Working Group Member") and members["members"] = a
|
77
|
-
members["members"].empty? and (1..9).each do |i|
|
78
|
-
members["members"] << "Participant#{i}"
|
79
|
-
end
|
80
|
-
set(:wg_members, members)
|
81
60
|
end
|
82
61
|
|
83
62
|
def bg(xml)
|
84
63
|
bg = xml.at(ns("//bibdata/ext/editorialgroup/"\
|
85
64
|
"balloting-group")) or return nil
|
86
65
|
set(:balloting_group, bg.text)
|
87
|
-
|
88
|
-
m["members"] = editor_names(xml, "Balloting Group Member")
|
89
|
-
m["members"].empty? and (1..9).each do |i|
|
90
|
-
m["members"] << "Balloter#{i}"
|
91
|
-
end
|
92
|
-
set(:balloting_group_members, m["members"])
|
93
|
-
end
|
94
|
-
|
95
|
-
def std_group(xml)
|
96
|
-
m = {}
|
97
|
-
["Chair", "Vice-Chair", "Past Chair", "Secretary"].each do |r|
|
98
|
-
m[r.downcase.gsub(/ /, "-")] =
|
99
|
-
editor_name(xml, "Standards Board #{r}") || "<Name>"
|
100
|
-
end
|
101
|
-
m["members"] = editor_names(xml, "Standards Board Member")
|
102
|
-
m["members"].empty? and (1..9).each do |i|
|
103
|
-
m["members"] << "SBMember#{i}"
|
104
|
-
end
|
105
|
-
set(:std_board, m)
|
66
|
+
set(:balloting_group_type, bg["type"])
|
106
67
|
end
|
107
68
|
|
108
69
|
def otherid(isoxml, _out)
|
@@ -120,6 +81,10 @@ module IsoDoc
|
|
120
81
|
set(:stdid_pdf, dn&.text || "STDXXXXX")
|
121
82
|
dn = isoxml.at(ns("//#{id}[@scope = 'print']"))
|
122
83
|
set(:stdid_print, dn&.text || "STDPDXXXXX")
|
84
|
+
dn = isoxml.at(ns("//bibdata/ext/structuredidentifier/amendment")) and
|
85
|
+
set(:amd, dn.text)
|
86
|
+
dn = isoxml.at(ns("//bibdata/ext/structuredidentifier/corrigendum")) and
|
87
|
+
set(:corr, dn.text)
|
123
88
|
end
|
124
89
|
|
125
90
|
def title(isoxml, _out)
|
@@ -152,6 +117,19 @@ module IsoDoc
|
|
152
117
|
end
|
153
118
|
set(type.to_sym, ret)
|
154
119
|
end
|
120
|
+
|
121
|
+
def ddMMMyyyy(isodate)
|
122
|
+
return nil if isodate.nil?
|
123
|
+
|
124
|
+
arr = isodate.split("-")
|
125
|
+
if arr.size == 1 && (/^\d+$/.match isodate)
|
126
|
+
Date.new(*arr.map(&:to_i)).strftime("%Y")
|
127
|
+
elsif arr.size == 2
|
128
|
+
Date.new(*arr.map(&:to_i)).strftime("%b %Y")
|
129
|
+
else
|
130
|
+
Date.parse(isodate).strftime("%d %b %Y")
|
131
|
+
end
|
132
|
+
end
|
155
133
|
end
|
156
134
|
end
|
157
135
|
end
|
@@ -12,8 +12,8 @@ module IsoDoc
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def pdf_stylesheet(docxml)
|
15
|
-
doctype = docxml&.at(ns("//bibdata/ext/
|
16
|
-
if
|
15
|
+
doctype = docxml&.at(ns("//bibdata/ext/subdoctype"))&.text
|
16
|
+
if %w(amendment corrigendum erratum).include?(doctype)
|
17
17
|
"ieee.amendment.xsl"
|
18
18
|
else
|
19
19
|
"ieee.standard.xsl"
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module IEEE
|
3
|
+
class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
|
4
|
+
# Style manual 19
|
5
|
+
def anchor_linkend(node, linkend)
|
6
|
+
@bibanchors ||= biblio_ids_titles(node.document)
|
7
|
+
if node["citeas"] && i = @bibanchors[node["bibitemid"]]
|
8
|
+
biblio_anchor_linkend(node, i)
|
9
|
+
else super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def biblio_anchor_linkend(node, bib)
|
14
|
+
if %w(techreport standard).include?(bib[:type])
|
15
|
+
node["citeas"] + " #{bib[:ord]}"
|
16
|
+
else
|
17
|
+
"#{bib[:title]} " + node["citeas"]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def biblio_ids_titles(xmldoc)
|
22
|
+
xmldoc.xpath(ns("//references[@normative = 'false']/bibitem"))
|
23
|
+
.each_with_object({}) do |b, m|
|
24
|
+
m[b["id"]] =
|
25
|
+
{ docid: pref_ref_code(b), type: b["type"],
|
26
|
+
title: b.at(ns("./title"))&.text ||
|
27
|
+
b.at(ns("./formattedref"))&.text,
|
28
|
+
ord: b.at(ns("./docidentifier[@type = 'metanorma' or "\
|
29
|
+
"@type = 'metanorma-ordinal']")).text }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def bibrenderer
|
34
|
+
::Relaton::Render::IEEE::General.new(language: @lang,
|
35
|
+
i18nhash: @i18n.get)
|
36
|
+
end
|
37
|
+
|
38
|
+
def bibrender_relaton(xml)
|
39
|
+
bib = xml.dup
|
40
|
+
bib["suppress_identifier"] == true and
|
41
|
+
bib.xpath(ns("./docidentifier")).each(&:remove)
|
42
|
+
xml.children =
|
43
|
+
"#{bibrenderer.render(bib.to_xml)}"\
|
44
|
+
"#{xml.xpath(ns('./docidentifier | ./uri | ./note | ./title')).to_xml}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def creatornames(bibitem)
|
48
|
+
::Relaton::Render::IEEE::General
|
49
|
+
.new(language: @lang, i18nhash: @i18n.get,
|
50
|
+
template: { (bibitem["type"] || "misc").to_sym =>
|
51
|
+
"{{ creatornames }}" })
|
52
|
+
.parse1(RelatonBib::XMLParser.from_xml(bibitem.to_xml))
|
53
|
+
end
|
54
|
+
|
55
|
+
def bibliography_bibitem_number1(bibitem, idx)
|
56
|
+
if mn = bibitem.at(ns(".//docidentifier[@type = 'metanorma']"))
|
57
|
+
/^\[?\d\]?$/.match?(mn&.text) and
|
58
|
+
idx = mn.text.sub(/^\[B?/, "").sub(/\]$/, "").to_i
|
59
|
+
end
|
60
|
+
unless bibliography_bibitem_number_skip(bibitem)
|
61
|
+
|
62
|
+
idx += 1
|
63
|
+
bibitem.at(ns(".//docidentifier")).previous =
|
64
|
+
"<docidentifier type='metanorma-ordinal'>[B#{idx}]</docidentifier>"
|
65
|
+
end
|
66
|
+
idx
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -12,7 +12,8 @@ module IsoDoc
|
|
12
12
|
c = IsoDoc::XrefGen::Counter.new("@")
|
13
13
|
elem.xpath(ns("./definition")).each do |d|
|
14
14
|
c.increment(d)
|
15
|
-
d.elements.first.previous =
|
15
|
+
d.elements.first.children.first.previous =
|
16
|
+
"<strong>(#{c.print})</strong> "
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
@@ -20,9 +21,20 @@ module IsoDoc
|
|
20
21
|
ins = elem.at(ns("./definition")).previous_element
|
21
22
|
coll = elem.xpath(ns("./definition"))
|
22
23
|
coll.each(&:remove)
|
23
|
-
ins.next = "<definition>#{coll
|
24
|
-
|
25
|
-
|
24
|
+
ins.next = "<definition>#{unwrap_multidef(coll)}</definition>"
|
25
|
+
end
|
26
|
+
|
27
|
+
def unwrap_multidef(coll)
|
28
|
+
if coll.all? do |c|
|
29
|
+
c.elements.size == 1 && c.elements.first.name == "p"
|
30
|
+
end
|
31
|
+
ret = coll.map do |c|
|
32
|
+
c.elements.first.children.to_xml
|
33
|
+
end
|
34
|
+
"<p>#{ret.join}</p>"
|
35
|
+
else
|
36
|
+
coll.map { |c| c.children.to_xml }.join
|
37
|
+
end
|
26
38
|
end
|
27
39
|
|
28
40
|
def unwrap_definition(docxml)
|
@@ -60,10 +72,10 @@ module IsoDoc
|
|
60
72
|
|
61
73
|
def sort_terms_key(term)
|
62
74
|
d = term.at(ns("./preferred/expression/name | "\
|
63
|
-
"./preferred/letter-
|
75
|
+
"./preferred/letter-symbol/name | "\
|
64
76
|
"./preferred/graphical-symbol/figure/name | "\
|
65
77
|
"./preferred/graphical-symbol/figure/@id"))
|
66
|
-
d&.text&.downcase
|
78
|
+
HTMLEntities.new.decode(d&.text&.strip&.downcase) || "ZZZ"
|
67
79
|
end
|
68
80
|
|
69
81
|
def term_related_reorder(coll)
|
@@ -99,21 +111,47 @@ module IsoDoc
|
|
99
111
|
|
100
112
|
def admitted_to_related(docxml)
|
101
113
|
docxml.xpath(ns("//term/admitted")).each do |a|
|
102
|
-
a
|
103
|
-
a.name = "related"
|
104
|
-
a.children = "<preferred>#{a.children.to_xml}</preferred>"
|
114
|
+
admitted_to_related1(a, a.parent.at(ns("./preferred")))
|
105
115
|
end
|
116
|
+
term_reorder(docxml)
|
106
117
|
end
|
107
118
|
|
108
|
-
def
|
109
|
-
|
110
|
-
|
119
|
+
def admitted_to_related1(adm, pref)
|
120
|
+
new = adm.dup
|
121
|
+
adm["type"] = "equivalent"
|
122
|
+
adm.name = "related"
|
123
|
+
adm.children = "<preferred>#{adm.children.to_xml}</preferred>"
|
124
|
+
adm.parent.next = <<~TERM
|
125
|
+
<term><preferred>#{new.children.to_xml}</preferred>
|
126
|
+
<related type='see'><preferred>#{pref.children.to_xml}</preferred></related></term>
|
127
|
+
TERM
|
128
|
+
end
|
129
|
+
|
130
|
+
def term_reorder(xmldoc)
|
131
|
+
xmldoc.xpath(ns("//terms")).each { |t| term_reorder1(t) }
|
132
|
+
end
|
133
|
+
|
134
|
+
def term_reorder1(terms)
|
135
|
+
ins = terms.at(ns("./term"))&.previous_element or return
|
136
|
+
coll = terms.xpath(ns("./term"))
|
137
|
+
ret = sort_terms(coll)
|
138
|
+
coll.each(&:remove)
|
139
|
+
ret.reverse.each { |t| ins.next = t }
|
140
|
+
end
|
141
|
+
|
142
|
+
def sort_terms(terms)
|
143
|
+
terms.sort do |a, b|
|
144
|
+
sort_terms_key(a) <=> sort_terms_key(b)
|
111
145
|
end
|
112
146
|
end
|
113
147
|
|
148
|
+
def collapse_term(docxml)
|
149
|
+
docxml.xpath(ns("//term")).each { |t| collapse_term1(t) }
|
150
|
+
end
|
151
|
+
|
114
152
|
def collapse_term1(term)
|
115
153
|
ret = collapse_term_template(
|
116
|
-
pref: term.at(ns("./preferred"))
|
154
|
+
pref: term.at(ns("./preferred"))&.remove,
|
117
155
|
def: term.at(ns("./definition")),
|
118
156
|
rels: term.xpath(ns("./related")).map(&:remove),
|
119
157
|
source: term.at(ns("./termsource")),
|
@@ -124,8 +162,9 @@ module IsoDoc
|
|
124
162
|
|
125
163
|
def collapse_term_related(rels)
|
126
164
|
ret = rels.map do |r|
|
165
|
+
p = r.at(ns("./preferred"))
|
127
166
|
"<em>#{@i18n.relatedterms[r['type']]}:</em> "\
|
128
|
-
"#{
|
167
|
+
"#{p&.children&.to_xml || '**RELATED TERM NOT FOUND**'}"
|
129
168
|
end.join(". ")
|
130
169
|
ret += "." unless ret.empty?
|
131
170
|
ret
|
@@ -136,7 +175,7 @@ module IsoDoc
|
|
136
175
|
src = nil
|
137
176
|
opt[:source] and src = "(#{opt[:source].remove.children.to_xml.strip})"
|
138
177
|
<<~TERM
|
139
|
-
<p>#{opt[:pref]
|
178
|
+
<p>#{opt[:pref]&.children&.to_xml || '**TERM NOT FOUND**'}: #{defn}
|
140
179
|
#{collapse_term_related(opt[:rels])}
|
141
180
|
#{src}</p>
|
142
181
|
TERM
|
@@ -158,6 +197,14 @@ module IsoDoc
|
|
158
197
|
while elem&.next_element&.name == "termsource"
|
159
198
|
elem << "; #{elem.next_element.remove.children.to_xml}"
|
160
199
|
end
|
200
|
+
adapt = termsource_adapt(elem["status"]) and
|
201
|
+
elem.children = l10n("#{adapt}#{elem.children.to_xml.strip}")
|
202
|
+
end
|
203
|
+
|
204
|
+
def termsource_adapt(status)
|
205
|
+
case status
|
206
|
+
when "adapted" then @i18n.adapted_from
|
207
|
+
end
|
161
208
|
end
|
162
209
|
|
163
210
|
def designation_field(desgn, name)
|
@@ -170,12 +217,12 @@ module IsoDoc
|
|
170
217
|
end
|
171
218
|
|
172
219
|
def merge_second_preferred(term)
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
end
|
220
|
+
prefs = term.xpath(ns("./preferred[expression/name]"))
|
221
|
+
prefs.size > 1 or return
|
222
|
+
alts = prefs[1..-1].map do |p|
|
223
|
+
p.remove.at(ns("./expression/name")).children.to_xml.strip
|
178
224
|
end
|
225
|
+
prefs.first.at(ns("./expression/name")) << " (#{alts.join(', ')})"
|
179
226
|
end
|
180
227
|
|
181
228
|
def termnote1(elem)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative "init"
|
2
2
|
require_relative "presentation_terms"
|
3
|
+
require_relative "presentation_ref"
|
3
4
|
require "isodoc"
|
4
5
|
|
5
6
|
module IsoDoc
|
@@ -53,35 +54,6 @@ module IsoDoc
|
|
53
54
|
l10n(ret)
|
54
55
|
end
|
55
56
|
|
56
|
-
# Style manual 19
|
57
|
-
def anchor_linkend(node, linkend)
|
58
|
-
@bibanchors ||= biblio_ids_titles(node.document)
|
59
|
-
if node["citeas"] && i = @bibanchors[node["bibitemid"]]
|
60
|
-
biblio_anchor_linkend(node, i)
|
61
|
-
else super
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def biblio_anchor_linkend(node, bib)
|
66
|
-
if %w(techreport standard).include?(bib[:type])
|
67
|
-
node["citeas"] + " #{bib[:ord]}"
|
68
|
-
else
|
69
|
-
"#{bib[:title]} " + node["citeas"]
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def biblio_ids_titles(xmldoc)
|
74
|
-
xmldoc.xpath(ns("//references[@normative = 'false']/bibitem"))
|
75
|
-
.each_with_object({}) do |b, m|
|
76
|
-
m[b["id"]] =
|
77
|
-
{ docid: pref_ref_code(b), type: b["type"],
|
78
|
-
title: b.at(ns("./title"))&.text ||
|
79
|
-
b.at(ns("./formattedref"))&.text,
|
80
|
-
ord: b.at(ns("./docidentifier[@type = 'metanorma' or "\
|
81
|
-
"@type = 'metanorma-ordinal']")).text }
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
57
|
def anchor_linkend1(node)
|
86
58
|
linkend = @xrefs.anchor(node["target"], :xref)
|
87
59
|
@xrefs.anchor(node["target"], :type) == "clause" &&
|
@@ -102,10 +74,8 @@ module IsoDoc
|
|
102
74
|
return if elem.parent.name == "bibitem" || elem["notag"] == "true"
|
103
75
|
|
104
76
|
n = @xrefs.get[elem["id"]]
|
105
|
-
lbl = if n.nil? || n[:label].nil? || n[:label].empty?
|
106
|
-
|
107
|
-
else
|
108
|
-
l10n("#{@i18n.note} #{n[:label]}")
|
77
|
+
lbl = if n.nil? || n[:label].nil? || n[:label].empty? then @i18n.note
|
78
|
+
else l10n("#{@i18n.note} #{n[:label]}")
|
109
79
|
end
|
110
80
|
prefix_name(elem, block_delim, lbl, "name")
|
111
81
|
end
|
@@ -124,48 +94,112 @@ module IsoDoc
|
|
124
94
|
display_order_xpath(docxml, "//indexsect", i)
|
125
95
|
end
|
126
96
|
|
127
|
-
def
|
128
|
-
|
129
|
-
|
97
|
+
def annex1(elem)
|
98
|
+
lbl = @xrefs.anchor(elem["id"], :label)
|
99
|
+
if t = elem.at(ns("./title"))
|
100
|
+
t.children = "<strong>#{t.children.to_xml}</strong>"
|
101
|
+
end
|
102
|
+
prefix_name(elem, "<br/>", lbl, "title")
|
130
103
|
end
|
131
104
|
|
132
|
-
def
|
133
|
-
|
134
|
-
bib
|
135
|
-
bib.xpath(ns("./docidentifier")).each(&:remove)
|
136
|
-
xml.children =
|
137
|
-
"#{bibrenderer.render(bib.to_xml)}"\
|
138
|
-
"#{xml.xpath(ns('./docidentifier | ./uri | ./note | ./title')).to_xml}"
|
105
|
+
def bibdata_i18n(bib)
|
106
|
+
super
|
107
|
+
bibdata_dates(bib)
|
139
108
|
end
|
140
109
|
|
141
|
-
def
|
142
|
-
|
143
|
-
.
|
144
|
-
|
145
|
-
|
146
|
-
|
110
|
+
def bibdata_dates(bib)
|
111
|
+
bib.xpath(ns("./date")).each do |d|
|
112
|
+
d.next = d.dup
|
113
|
+
d.next["format"] = "ddMMMyyyy"
|
114
|
+
d.next.xpath(ns("./from | ./to | ./on")).each do |x|
|
115
|
+
x.children = ddMMMyyyy(x.text)
|
116
|
+
end
|
117
|
+
end
|
147
118
|
end
|
148
119
|
|
149
|
-
def
|
150
|
-
|
151
|
-
|
152
|
-
|
120
|
+
def ddMMMyyyy(isodate)
|
121
|
+
return nil if isodate.nil?
|
122
|
+
|
123
|
+
arr = isodate.split("-")
|
124
|
+
if arr.size == 1 && (/^\d+$/.match isodate)
|
125
|
+
Date.new(*arr.map(&:to_i)).strftime("%Y")
|
126
|
+
elsif arr.size == 2
|
127
|
+
Date.new(*arr.map(&:to_i)).strftime("%b %Y")
|
128
|
+
else
|
129
|
+
Date.parse(isodate).strftime("%d %b %Y")
|
153
130
|
end
|
154
|
-
|
131
|
+
end
|
155
132
|
|
156
|
-
|
157
|
-
|
158
|
-
|
133
|
+
def amend1(elem)
|
134
|
+
elem.xpath(ns("./description/p")).each do |p|
|
135
|
+
p.children = p.children.to_xml.strip
|
136
|
+
amend_format(p)
|
159
137
|
end
|
160
|
-
|
138
|
+
super
|
161
139
|
end
|
162
140
|
|
163
|
-
def
|
164
|
-
|
165
|
-
|
166
|
-
|
141
|
+
def amend_format(para)
|
142
|
+
2.times do
|
143
|
+
para.children.size == 1 &&
|
144
|
+
%(em strong).include?(para.children.first.name) and
|
145
|
+
para.children = para.elements.first.children
|
167
146
|
end
|
168
|
-
|
147
|
+
para.children = "<strong><em>#{para.children.to_xml}</em></strong>"
|
148
|
+
end
|
149
|
+
|
150
|
+
def section(docxml)
|
151
|
+
boilerplate(docxml)
|
152
|
+
super
|
153
|
+
end
|
154
|
+
|
155
|
+
def boilerplate(docxml)
|
156
|
+
docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/"\
|
157
|
+
"clause/title")).each(&:remove)
|
158
|
+
docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/clause"))
|
159
|
+
.each do |clause|
|
160
|
+
participants(clause)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def participants(clause)
|
165
|
+
clause.xpath(ns(".//ul")).each_with_index do |ulist, idx|
|
166
|
+
ulist.xpath(ns("./li")).each { |list| participants1(list, idx) }
|
167
|
+
ulist.replace(ulist.children)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def participants1(list, idx)
|
172
|
+
key = ""
|
173
|
+
map = list.xpath(ns(".//dt | .//dd")).each_with_object({}) do |dtd, m|
|
174
|
+
(dtd.name == "dt" and key = dtd.text) or
|
175
|
+
m[key] = dtd.text.strip
|
176
|
+
end
|
177
|
+
list.replace(participant_para(map, idx))
|
178
|
+
end
|
179
|
+
|
180
|
+
def participant_para(map, idx)
|
181
|
+
name = participant_name(map)
|
182
|
+
if map["role"]&.casecmp("member")&.zero?
|
183
|
+
participant_member_para(map, name, idx)
|
184
|
+
else
|
185
|
+
participant_officeholder_para(map, name, idx)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def participant_member_para(map, name, _idx)
|
190
|
+
(map["company"] and "<p type='officeorgmember'>#{name}</p>") or
|
191
|
+
"<p type='officemember'>#{name}</p>"
|
192
|
+
end
|
193
|
+
|
194
|
+
def participant_officeholder_para(map, name, idx)
|
195
|
+
name = "<strong>#{name}</strong>" if idx.zero?
|
196
|
+
br = map["role"].size > 30 ? "<br/>" : ""
|
197
|
+
"<p type='officeholder' align='center'>#{name}, #{br}"\
|
198
|
+
"<em>#{map['role']}</em></p>"
|
199
|
+
end
|
200
|
+
|
201
|
+
def participant_name(map)
|
202
|
+
map["company"] || map["name"] || "#{map['given']} #{map['surname']}"
|
169
203
|
end
|
170
204
|
|
171
205
|
include Init
|
@@ -53,9 +53,9 @@ module IsoDoc
|
|
53
53
|
def officeholder_style(para)
|
54
54
|
n = para.next_element
|
55
55
|
p = para.previous_element
|
56
|
-
n && n.name == "p" && n["type"]
|
56
|
+
n && n.name == "p" && n["type"] != "officeholder" and
|
57
57
|
klass = "IEEEStdsNamesCtrCxSpLast"
|
58
|
-
p && p.name == "p" && p["type"]
|
58
|
+
p && p.name == "p" && p["type"] != "officeholder" and
|
59
59
|
klass = "IEEEStdsNamesCtrCxSpFirst"
|
60
60
|
para["class"] = klass || "IEEEStdsNamesCtrCxSpMiddle"
|
61
61
|
end
|
@@ -68,7 +68,8 @@ module IsoDoc
|
|
68
68
|
BREAK
|
69
69
|
|
70
70
|
def officemember_style(docxml)
|
71
|
-
docxml.xpath("//p[@type = 'officemember']")
|
71
|
+
docxml.xpath("//p[@type = 'officemember' or @type = 'officeorgmember']")
|
72
|
+
.each do |p|
|
72
73
|
p["class"] = "IEEEStdsNamesList"
|
73
74
|
end
|
74
75
|
docxml.xpath("//p[@type = 'emeritus_sign']").each do |p|
|
@@ -85,6 +86,7 @@ module IsoDoc
|
|
85
86
|
|
86
87
|
def three_column_officemembers_split(div)
|
87
88
|
prev = false
|
89
|
+
div.xpath(".//div").each { |d| d.replace(d.children) }
|
88
90
|
div.elements.each_with_object([[]]) do |e, m|
|
89
91
|
member = e.name == "p" && e["type"] == "officemember"
|
90
92
|
(prev == member and m[-1] << e.to_xml) or m << [e.to_xml]
|
@@ -12,6 +12,14 @@ module IsoDoc
|
|
12
12
|
super
|
13
13
|
end
|
14
14
|
|
15
|
+
def convert1(docxml, filename, dir)
|
16
|
+
doctype = docxml.at(ns("//bibdata/ext/doctype"))
|
17
|
+
if %w(amendment corrigendum).include?(doctype&.text)
|
18
|
+
@header = html_doc_path("header_amd.html")
|
19
|
+
end
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
15
23
|
def default_fonts(options)
|
16
24
|
{ bodyfont: (if options[:script] == "Hans"
|
17
25
|
'"Source Han Sans",serif'
|
@@ -65,6 +73,10 @@ module IsoDoc
|
|
65
73
|
def middle_title_ieee(_docxml, out)
|
66
74
|
out.p(**{ class: "IEEEStdsTitle", style: "margin-top:70.0pt" }) do |p|
|
67
75
|
p << @meta.get[:full_doctitle]
|
76
|
+
@meta.get[:amd] || @meta.get[:corr] and p << "<br/>"
|
77
|
+
@meta.get[:amd] and p << "Amendment #{@meta.get[:amd]}"
|
78
|
+
@meta.get[:amd] && @meta.get[:corr] and p << " "
|
79
|
+
@meta.get[:corr] and p << "Corrigenda #{@meta.get[:corr]}"
|
68
80
|
end
|
69
81
|
end
|
70
82
|
|