metanorma-ieee 0.0.2 → 0.0.5
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 +13 -22
- data/lib/isodoc/ieee/html/ieee.css +23 -18
- data/lib/isodoc/ieee/html/ieee.scss +24 -18
- data/lib/isodoc/ieee/html/word_ieee_titlepage.html +12 -1
- data/lib/isodoc/ieee/html_convert.rb +37 -1
- data/lib/isodoc/ieee/i18n-en.yaml +1 -0
- data/lib/isodoc/ieee/ieee.amendment.xsl +4151 -3293
- data/lib/isodoc/ieee/ieee.standard.xsl +4151 -3293
- data/lib/isodoc/ieee/metadata.rb +23 -60
- data/lib/isodoc/ieee/pdf_convert.rb +2 -2
- data/lib/isodoc/ieee/presentation_ref.rb +81 -0
- data/lib/isodoc/ieee/presentation_terms.rb +90 -30
- data/lib/isodoc/ieee/presentation_xml_convert.rb +114 -63
- data/lib/isodoc/ieee/word_authority.rb +19 -3
- data/lib/isodoc/ieee/word_convert.rb +12 -0
- data/lib/metanorma/ieee/boilerplate.xml +68 -19
- data/lib/metanorma/ieee/cleanup.rb +135 -34
- data/lib/metanorma/ieee/cleanup_ref.rb +11 -2
- data/lib/metanorma/ieee/converter.rb +8 -0
- data/lib/metanorma/ieee/front.rb +53 -53
- data/lib/metanorma/ieee/ieee.rng +97 -6
- data/lib/metanorma/ieee/isodoc.rng +16 -1
- data/lib/metanorma/ieee/reqt.rng +1 -1
- data/lib/metanorma/ieee/term_lookup_cleanup.rb +11 -0
- data/lib/metanorma/ieee/validate.rb +58 -53
- data/lib/metanorma/ieee/validate_style.rb +53 -0
- data/lib/metanorma/ieee/version.rb +1 -1
- data/lib/relaton/render/config.yml +1 -1
- data/metanorma-itu.gemspec +1 -1
- metadata +7 -4
@@ -46,6 +46,7 @@ module IsoDoc
|
|
46
46
|
officeholder_style(p)
|
47
47
|
end
|
48
48
|
officemember_style(docxml)
|
49
|
+
officeorgrep_style(docxml)
|
49
50
|
three_column_officemembers(docxml
|
50
51
|
.at("//div[@id = 'boilerplate-participants']"))
|
51
52
|
end
|
@@ -53,9 +54,9 @@ module IsoDoc
|
|
53
54
|
def officeholder_style(para)
|
54
55
|
n = para.next_element
|
55
56
|
p = para.previous_element
|
56
|
-
n && n.name == "p" && n["type"]
|
57
|
+
n && n.name == "p" && n["type"] != "officeholder" and
|
57
58
|
klass = "IEEEStdsNamesCtrCxSpLast"
|
58
|
-
p && p.name == "p" && p["type"]
|
59
|
+
p && p.name == "p" && p["type"] != "officeholder" and
|
59
60
|
klass = "IEEEStdsNamesCtrCxSpFirst"
|
60
61
|
para["class"] = klass || "IEEEStdsNamesCtrCxSpMiddle"
|
61
62
|
end
|
@@ -68,7 +69,8 @@ module IsoDoc
|
|
68
69
|
BREAK
|
69
70
|
|
70
71
|
def officemember_style(docxml)
|
71
|
-
docxml.xpath("//p[@type = 'officemember']")
|
72
|
+
docxml.xpath("//p[@type = 'officemember' or @type = 'officeorgmember']")
|
73
|
+
.each do |p|
|
72
74
|
p["class"] = "IEEEStdsNamesList"
|
73
75
|
end
|
74
76
|
docxml.xpath("//p[@type = 'emeritus_sign']").each do |p|
|
@@ -76,6 +78,19 @@ module IsoDoc
|
|
76
78
|
end
|
77
79
|
end
|
78
80
|
|
81
|
+
def officeorgrep_style(docxml)
|
82
|
+
docxml.xpath("//p[@type = 'officeorgrepmemberhdr']").each do |p|
|
83
|
+
p["class"] = "IEEEStdsNamesList"
|
84
|
+
p["style"] =
|
85
|
+
"margin-bottom:6.0pt;tab-stops:right 432.0pt;"
|
86
|
+
end
|
87
|
+
docxml.xpath("//p[@type = 'officeorgrepmember']").each do |p|
|
88
|
+
p["class"] = "IEEEStdsNamesList"
|
89
|
+
p["style"] =
|
90
|
+
"margin-top:6.0pt;tab-stops:right dotted 432.0pt;"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
79
94
|
def three_column_officemembers(div)
|
80
95
|
return unless div
|
81
96
|
|
@@ -85,6 +100,7 @@ module IsoDoc
|
|
85
100
|
|
86
101
|
def three_column_officemembers_split(div)
|
87
102
|
prev = false
|
103
|
+
div.xpath(".//div").each { |d| d.replace(d.children) }
|
88
104
|
div.elements.each_with_object([[]]) do |e, m|
|
89
105
|
member = e.name == "p" && e["type"] == "officemember"
|
90
106
|
(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
|
|
@@ -243,26 +243,61 @@
|
|
243
243
|
</clause>
|
244
244
|
<clause id="boilerplate-participants">
|
245
245
|
<title>Participants</title>
|
246
|
+
<clause id="boilerplate-participants-wg">
|
246
247
|
<p>At the time this draft {{ doctype }} was completed, the {{ working_group }} Working Group had the following membership:</p>
|
247
|
-
<
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
{
|
248
|
+
<membership>
|
249
|
+
<ul>
|
250
|
+
<li><dl><dt>name</dt><dd><Chair Name></dd><dt>role</dt><dd>Chair</dd></dl></li>
|
251
|
+
<li><dl><dt>name</dt><dd><Vice-chair Name></dd><dt>role</dt><dd>Vice Chair</dd></dl></li>
|
252
|
+
<li><dl><dt>name</dt><dd>Participant1</dd><dt>role</dt><dd>Member</dd></dl></li>
|
253
|
+
<li><dl><dt>name</dt><dd>Participant2</dd><dt>role</dt><dd>Member</dd></dl></li>
|
254
|
+
<li><dl><dt>name</dt><dd>Participant3</dd><dt>role</dt><dd>Member</dd></dl></li>
|
255
|
+
<li><dl><dt>name</dt><dd>Participant4</dd><dt>role</dt><dd>Member</dd></dl></li>
|
256
|
+
<li><dl><dt>name</dt><dd>Participant5</dd><dt>role</dt><dd>Member</dd></dl></li>
|
257
|
+
<li><dl><dt>name</dt><dd>Participant6</dd><dt>role</dt><dd>Member</dd></dl></li>
|
258
|
+
<li><dl><dt>name</dt><dd>Participant7</dd><dt>role</dt><dd>Member</dd></dl></li>
|
259
|
+
<li><dl><dt>name</dt><dd>Participant8</dd><dt>role</dt><dd>Member</dd></dl></li>
|
260
|
+
<li><dl><dt>name</dt><dd>Participant9</dd><dt>role</dt><dd>Member</dd></dl></li>
|
261
|
+
</ul>
|
262
|
+
</membership>
|
263
|
+
</clause>
|
264
|
+
<clause id="boilerplate-participants-bg">
|
265
|
+
<p>The following members of the {{ balloting_group_type }} {{ balloting_group }} Standards Association balloting group voted on this {{ doctype }}. Balloters may have voted for approval, disapproval, or abstention.</p>
|
266
|
+
<membership>
|
267
|
+
<ul>
|
268
|
+
<li><dl><dt>name</dt><dd>Balloter1</dd><dt>role</dt><dd>Member</dd></dl></li>
|
269
|
+
<li><dl><dt>name</dt><dd>Balloter2</dd><dt>role</dt><dd>Member</dd></dl></li>
|
270
|
+
<li><dl><dt>name</dt><dd>Balloter3</dd><dt>role</dt><dd>Member</dd></dl></li>
|
271
|
+
<li><dl><dt>name</dt><dd>Balloter4</dd><dt>role</dt><dd>Member</dd></dl></li>
|
272
|
+
<li><dl><dt>name</dt><dd>Balloter5</dd><dt>role</dt><dd>Member</dd></dl></li>
|
273
|
+
<li><dl><dt>name</dt><dd>Balloter6</dd><dt>role</dt><dd>Member</dd></dl></li>
|
274
|
+
<li><dl><dt>name</dt><dd>Balloter7</dd><dt>role</dt><dd>Member</dd></dl></li>
|
275
|
+
<li><dl><dt>name</dt><dd>Balloter8</dd><dt>role</dt><dd>Member</dd></dl></li>
|
276
|
+
<li><dl><dt>name</dt><dd>Balloter9</dd><dt>role</dt><dd>Member</dd></dl></li>
|
277
|
+
</ul>
|
278
|
+
</membership>
|
279
|
+
</clause>
|
280
|
+
<clause id="boilerplate-participants-sb">
|
281
|
+
<p>When the IEEE SA Standards Board approved this {{ doctype }} on {{ issueddate }}, it had the following membership:</p>
|
282
|
+
<membership>
|
283
|
+
<ul>
|
284
|
+
<li><dl><dt>name</dt><dd><Name></dd><dt>role</dt><dd>Chair</dd></dl></li>
|
285
|
+
<li><dl><dt>name</dt><dd><Name></dd><dt>role</dt><dd>Vice Chair</dd></dl></li>
|
286
|
+
<li><dl><dt>name</dt><dd><Name></dd><dt>role</dt><dd>Past Chair</dd></dl></li>
|
287
|
+
<li><dl><dt>name</dt><dd><Name></dd><dt>role</dt><dd>Secretary</dd></dl></li>
|
288
|
+
<li><dl><dt>name</dt><dd>SBMember1</dd><dt>role</dt><dd>Member</dd></dl></li>
|
289
|
+
<li><dl><dt>name</dt><dd>SBMember2</dd><dt>role</dt><dd>Member</dd></dl></li>
|
290
|
+
<li><dl><dt>name</dt><dd>SBMember3</dd><dt>role</dt><dd>Member</dd></dl></li>
|
291
|
+
<li><dl><dt>name</dt><dd>SBMember4</dd><dt>role</dt><dd>Member</dd></dl></li>
|
292
|
+
<li><dl><dt>name</dt><dd>SBMember5</dd><dt>role</dt><dd>Member</dd></dl></li>
|
293
|
+
<li><dl><dt>name</dt><dd>SBMember6</dd><dt>role</dt><dd>Member</dd></dl></li>
|
294
|
+
<li><dl><dt>name</dt><dd>SBMember7</dd><dt>role</dt><dd>Member</dd></dl></li>
|
295
|
+
<li><dl><dt>name</dt><dd>SBMember8</dd><dt>role</dt><dd>Member</dd></dl></li>
|
296
|
+
<li><dl><dt>name</dt><dd>SBMember9</dd><dt>role</dt><dd>Member</dd></dl></li>
|
297
|
+
</ul>
|
298
|
+
</membership>
|
265
299
|
<p type="emeritus_sign">*Member Emeritus</p>
|
300
|
+
</clause>
|
266
301
|
</clause>
|
267
302
|
</legal-statement>
|
268
303
|
<feedback-statement>
|
@@ -272,7 +307,7 @@
|
|
272
307
|
|
273
308
|
<clause>
|
274
309
|
<p>Copyright © {{ docyear }} by The Institute of Electrical and Electronics Engineers, Inc.</p>
|
275
|
-
<p>All rights reserved. Published {{
|
310
|
+
<p>All rights reserved. Published {{ issueddate }}. Printed in the United States of America.</p>
|
276
311
|
</clause>
|
277
312
|
|
278
313
|
<clause>
|
@@ -294,5 +329,19 @@
|
|
294
329
|
<em>No part of this publication may be reproduced in any form, in an electronic retrieval system or otherwise, without the prior written permission of the publisher.</em></p>
|
295
330
|
</clause>
|
296
331
|
</feedback-statement>
|
332
|
+
{% if docsubtype == "Amendment" or docsubtype == "Corrigendum" %}
|
333
|
+
<note id="boilerplate_front">
|
334
|
+
<p>The editing instructions contained in this {{ docsubtype | downcase }} define how to merge the material contained therein into the existing base standard and its amendments to form the comprehensive standard.</p>
|
335
|
+
<p>The editing instructions are shown in <strong><em>bold italic</em></strong>. Four editing instructions are used: change, delete, insert, and replace. <strong><em>Change</em></strong> is used to make corrections in existing text or tables. The editing instruction specifies the location of the change and describes what is being changed by using <strike>strikethrough</strike> (to remove old material) and <underline>underscore</underline> (to add new material). <strong><em>Delete</em></strong> removes existing material. <strong><em>Insert</em></strong> adds new material without disturbing the existing material. Insertions may require renumbering. If so, renumbering instructions are given in the editing instruction. <strong><em>Replace</em></strong> is used to make changes in figures or equations by removing the existing figure or equation and replacing it with a new one. Editing instructions, change markings, and this NOTE will not be carried over into future editions because the changes will be incorporated into the base standard.</p>
|
336
|
+
</note>
|
337
|
+
{% else %}
|
338
|
+
<clause id="boilerplate_word_usage">
|
339
|
+
<title>Word usage</title>
|
340
|
+
<p>The word <em>shall</em> indicates mandatory requirements strictly to be followed in order to conform to the standard and from which no deviation is permitted (<em>shall</em> equals <em>is required to</em>).<fn><p>The use of the word <em>must</em> is deprecated and cannot be used when stating mandatory requirements; <em>must</em> is used only to describe unavoidable situations.</p></fn><fn><p>The use of <em>will</em> is deprecated and cannot be used when stating mandatory requirements; <em>will</em> is only used in statements of fact.</p></fn></p>
|
341
|
+
<p>The word <em>should</em> indicates that among several possibilities one is recommended as particularly suitable, without mentioning or excluding others; or that a certain course of action is preferred but not necessarily required (<em>should</em> equals <em>is recommended that</em>).</p>
|
342
|
+
<p>The word <em>may</em> is used to indicate a course of action permissible within the limits of the standard (<em>may</em> equals <em>is permitted to</em>).</p>
|
343
|
+
<p>The word <em>can</em> is used for statements of possibility and capability, whether material, physical, or causal (<em>can</em> equals <em>is able to</em>).</p>
|
344
|
+
</clause>
|
345
|
+
{% endif %}
|
297
346
|
</boilerplate>
|
298
347
|
|
@@ -1,11 +1,15 @@
|
|
1
1
|
require_relative "cleanup_ref"
|
2
|
+
require_relative "term_lookup_cleanup"
|
2
3
|
|
3
4
|
module Metanorma
|
4
5
|
module IEEE
|
5
6
|
class Converter < Standoc::Converter
|
6
7
|
def initial_boilerplate(xml, isodoc)
|
7
8
|
intro_boilerplate(xml, isodoc)
|
8
|
-
super
|
9
|
+
super if @document_scheme == "ieee-sa-2021"
|
10
|
+
initial_note(xml)
|
11
|
+
word_usage(xml)
|
12
|
+
participants(xml)
|
9
13
|
end
|
10
14
|
|
11
15
|
def intro_boilerplate(xml, isodoc)
|
@@ -18,6 +22,24 @@ module Metanorma
|
|
18
22
|
intro.next = "<admonition>#{adm}</admonition>"
|
19
23
|
end
|
20
24
|
|
25
|
+
def initial_note(xml)
|
26
|
+
n = xml.at("//boilerplate//note[@id = 'boilerplate_front']")
|
27
|
+
s = xml.at("//sections")
|
28
|
+
(n && s) or return
|
29
|
+
s.children.empty? and s << " "
|
30
|
+
s.children.first.previous = n.remove
|
31
|
+
end
|
32
|
+
|
33
|
+
def word_usage(xml)
|
34
|
+
return unless @document_scheme == "ieee-sa-2021"
|
35
|
+
|
36
|
+
n = xml.at("//boilerplate//clause[@id = 'boilerplate_word_usage']")
|
37
|
+
&.remove
|
38
|
+
s = xml.at("//clause[@type = 'overview']")
|
39
|
+
(n && s) or return
|
40
|
+
s << n
|
41
|
+
end
|
42
|
+
|
21
43
|
def obligations_cleanup_norm(xml)
|
22
44
|
super
|
23
45
|
xml.xpath("//sections/clause").each do |r|
|
@@ -53,39 +75,6 @@ module Metanorma
|
|
53
75
|
ins << "<fn><p>#{@i18n.note_inform_fn}</p></fn>"
|
54
76
|
end
|
55
77
|
|
56
|
-
def termdef_cleanup(xmldoc)
|
57
|
-
term_reorder(xmldoc)
|
58
|
-
super
|
59
|
-
end
|
60
|
-
|
61
|
-
def term_reorder(xmldoc)
|
62
|
-
xmldoc.xpath("//terms").each do |t|
|
63
|
-
term_reorder1(t)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def term_reorder1(terms)
|
68
|
-
ins = terms.at("./term")&.previous_element or return
|
69
|
-
coll = terms.xpath("./term")
|
70
|
-
ret = sort_terms(coll)
|
71
|
-
coll.each(&:remove)
|
72
|
-
ret.reverse.each { |t| ins.next = t }
|
73
|
-
end
|
74
|
-
|
75
|
-
def sort_terms(terms)
|
76
|
-
terms.sort do |a, b|
|
77
|
-
sort_terms_key(a) <=> sort_terms_key(b)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def sort_terms_key(term)
|
82
|
-
d = term.at("./preferred/expression/name | "\
|
83
|
-
"./preferred/letter-designation/name | "\
|
84
|
-
"./preferred/graphical-symbol/figure/name | "\
|
85
|
-
"./preferred/graphical-symbol/figure/@id")
|
86
|
-
d.text.downcase
|
87
|
-
end
|
88
|
-
|
89
78
|
def table_footnote_renumber1(fnote, idx, seen)
|
90
79
|
content = footnote_content(fnote)
|
91
80
|
idx += 1
|
@@ -119,6 +108,118 @@ module Metanorma
|
|
119
108
|
end
|
120
109
|
|
121
110
|
def term_defs_boilerplate_cont(src, term, isodoc); end
|
111
|
+
|
112
|
+
def termlookup_cleanup(xmldoc)
|
113
|
+
Metanorma::IEEE::TermLookupCleanup.new(xmldoc, @log).call
|
114
|
+
end
|
115
|
+
|
116
|
+
def boilerplate_isodoc(xmldoc)
|
117
|
+
x = xmldoc.dup
|
118
|
+
x.root.add_namespace(nil, self.class::XML_NAMESPACE)
|
119
|
+
xml = Nokogiri::XML(x.to_xml)
|
120
|
+
i = isodoc(@lang, @script)
|
121
|
+
i.bibdata_i18n(xml.at("//xmlns:bibdata"))
|
122
|
+
i.info(xml, nil)
|
123
|
+
i
|
124
|
+
end
|
125
|
+
|
126
|
+
def participants(xml)
|
127
|
+
return unless @document_scheme == "ieee-sa-2021"
|
128
|
+
|
129
|
+
{ "boilerplate-participants-wg": "working group",
|
130
|
+
"boilerplate-participants-bg": "balloting group",
|
131
|
+
"boilerplate-participants-sb": "standards board" }.each do |k, v|
|
132
|
+
populate_participants(xml, k.to_s, v)
|
133
|
+
end
|
134
|
+
p = xml.at(".//p[@type = 'emeritus_sign']")
|
135
|
+
ul = xml.at("//clause[@id = 'boilerplate-participants-sb']//ul")
|
136
|
+
p && ul and ul.next = p
|
137
|
+
xml.at("//clause[@type = 'participants']")&.remove
|
138
|
+
end
|
139
|
+
|
140
|
+
def populate_participants(xml, target, subtitle)
|
141
|
+
t = xml.at("//clause[@id = '#{target}']/membership")
|
142
|
+
s = xml.xpath("//clause[@type = 'participants']/clause").detect do |x|
|
143
|
+
n = x.at("./title") and n.text.strip.downcase == subtitle
|
144
|
+
end
|
145
|
+
t.replace(populate_participants1(s || t))
|
146
|
+
end
|
147
|
+
|
148
|
+
def populate_participants1(clause)
|
149
|
+
participants_dl_to_ul(clause)
|
150
|
+
clause.xpath(".//ul | .//ol").each do |ul|
|
151
|
+
ul.name = "ul"
|
152
|
+
ul.xpath("./li").each { |li| populate_participants2(li) }
|
153
|
+
ul.xpath(".//p[normalize-space() = '']").each(&:remove)
|
154
|
+
end
|
155
|
+
clause.children.to_xml
|
156
|
+
end
|
157
|
+
|
158
|
+
def participants_dl_to_ul(clause)
|
159
|
+
clause.xpath(".//dl").each do |dl|
|
160
|
+
next unless dl.ancestors("dl, ul, ol").empty?
|
161
|
+
|
162
|
+
dl.name = "ul"
|
163
|
+
dl.xpath("./dt").each(&:remove)
|
164
|
+
dl.xpath("./dd").each { |li| li.name = "li" }
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def populate_participants2(list)
|
169
|
+
if dl = list.at("./dl")
|
170
|
+
ret = extract_participants(dl)
|
171
|
+
dl.children = ret.keys.map do |k|
|
172
|
+
"<dt>#{k}</dt><dd>#{ret[k]}</dd>"
|
173
|
+
end.join
|
174
|
+
else
|
175
|
+
list.children = "<dl><dt>name</dt><dd>#{list.children.to_xml}</dd>"\
|
176
|
+
"<dt>role</dt><dd>member</dd></dl>"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def extract_participants(dlist)
|
181
|
+
key = ""
|
182
|
+
map = dlist.xpath("./dt | ./dd").each_with_object({}) do |dtd, m|
|
183
|
+
(dtd.name == "dt" and key = dtd.text.sub(/:+$/, "")) or
|
184
|
+
m[key.strip.downcase] =
|
185
|
+
@c.encode(@c.decode(dtd.text.strip), :hexadecimal)
|
186
|
+
end
|
187
|
+
map["role"] ||= "member"
|
188
|
+
map
|
189
|
+
end
|
190
|
+
|
191
|
+
def bibdata_cleanup(xmldoc)
|
192
|
+
super
|
193
|
+
provenance_title(xmldoc)
|
194
|
+
end
|
195
|
+
|
196
|
+
def provenance_title(xmldoc)
|
197
|
+
u = xmldoc.xpath("//bibdata/relation[@type = 'updates']")
|
198
|
+
m = xmldoc.xpath("//bibdata/relation[@type = 'merges']")
|
199
|
+
u.empty? and m.empty? and return
|
200
|
+
ins = xmldoc.at("//bibdata/title")
|
201
|
+
t = provenance_title1(u, m)
|
202
|
+
ins.next = "<title type='provenance' language='en' "\
|
203
|
+
"format='application/xml'>#{t}</title>"
|
204
|
+
end
|
205
|
+
|
206
|
+
def provenance_title1(updates, merges)
|
207
|
+
ret = ""
|
208
|
+
u = @isodoc.i18n.boolean_conj(tm_id_extract(updates), "and")
|
209
|
+
m = @isodoc.i18n.boolean_conj(tm_id_extract(merges), "and")
|
210
|
+
u.empty? or ret += "Revision of #{u}"
|
211
|
+
!u.empty? && !m.empty? and ret += "<br/>"
|
212
|
+
m.empty? or ret += "Incorporates #{m}"
|
213
|
+
ret
|
214
|
+
end
|
215
|
+
|
216
|
+
def tm_id_extract(relations)
|
217
|
+
relations.map do |u|
|
218
|
+
u.at("./bibitem/docidentifier[@scope = 'trademark']") ||
|
219
|
+
u.at("./bibitem/docidentifier[@primary = 'true']") ||
|
220
|
+
u.at("./bibitem/docidentifier")
|
221
|
+
end.map(&:text)
|
222
|
+
end
|
122
223
|
end
|
123
224
|
end
|
124
225
|
end
|
@@ -34,6 +34,7 @@ module Metanorma
|
|
34
34
|
name = designator_or_name(bib)
|
35
35
|
title = bib.at("./title[@type = 'main']")&.text ||
|
36
36
|
bib.at("./title")&.text || bib.at("./formattedref")&.text
|
37
|
+
title.gsub!(/[[:punct:]]/, "")
|
37
38
|
"#{name}. #{title}"
|
38
39
|
end
|
39
40
|
|
@@ -76,7 +77,7 @@ module Metanorma
|
|
76
77
|
.each_with_object({}) do |b, m|
|
77
78
|
n = b.at("./contributor[role/@type = 'publisher']/organization/name")
|
78
79
|
n&.text == "Institute of Electrical and Electronics Engineers" and
|
79
|
-
m[b["id"]] =
|
80
|
+
m[b["id"]] = b.at("./docidentifier[@scope = 'trademark']")&.text
|
80
81
|
end
|
81
82
|
trademark_ieee_erefs1(xmldoc, "//preface//eref", ieee)
|
82
83
|
trademark_ieee_erefs1(xmldoc, "//sections//eref | //annex//eref", ieee)
|
@@ -85,7 +86,7 @@ module Metanorma
|
|
85
86
|
def trademark_ieee_erefs1(xmldoc, path, ieee)
|
86
87
|
xmldoc.xpath(path).each_with_object({}) do |e, m|
|
87
88
|
ieee[e["bibitemid"]] or next
|
88
|
-
m[e["bibitemid"]] or e["citeas"]
|
89
|
+
m[e["bibitemid"]] or e["citeas"] = ieee[e["bibitemid"]]
|
89
90
|
m[e["bibitemid"]] = true
|
90
91
|
end
|
91
92
|
end
|
@@ -112,6 +113,14 @@ module Metanorma
|
|
112
113
|
"<docidentifier type='metanorma-ordinal'>[B#{idx}]</docidentifier>"
|
113
114
|
end
|
114
115
|
end
|
116
|
+
|
117
|
+
def select_docid(ref)
|
118
|
+
ret = super
|
119
|
+
if %w(standard techreport).include?(ref["type"]) then ret
|
120
|
+
else
|
121
|
+
ref.at("./docidentifier[@type = 'metanorma-ordinal']") || ret
|
122
|
+
end
|
123
|
+
end
|
115
124
|
end
|
116
125
|
end
|
117
126
|
end
|
@@ -16,6 +16,7 @@ module Metanorma
|
|
16
16
|
|
17
17
|
def init(node)
|
18
18
|
super
|
19
|
+
@document_scheme ||= "ieee-sa-2021"
|
19
20
|
@hierarchical_assets = node.attr("hierarchical-object-numbering")
|
20
21
|
end
|
21
22
|
|
@@ -34,10 +35,17 @@ module Metanorma
|
|
34
35
|
when "Overview" then attrs[:type] = "overview"
|
35
36
|
when "Scope" then attrs[:type] = "scope"
|
36
37
|
when "Word Usage" then attrs[:type] = "word-usage"
|
38
|
+
when "Participants" then attrs[:type] = "participants"
|
37
39
|
end
|
38
40
|
super
|
39
41
|
end
|
40
42
|
|
43
|
+
def termsource_attrs(node, matched)
|
44
|
+
ret = super
|
45
|
+
node.option? "adapted" and ret[:status] = "adapted"
|
46
|
+
ret
|
47
|
+
end
|
48
|
+
|
41
49
|
def outputs(node, ret)
|
42
50
|
File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
|
43
51
|
presentation_xml_converter(node).convert("#{@filename}.xml")
|
data/lib/metanorma/ieee/front.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
+
require "isoics"
|
2
|
+
|
1
3
|
module Metanorma
|
2
4
|
module IEEE
|
3
5
|
class Converter < Standoc::Converter
|
4
6
|
def metadata_committee(node, xml)
|
5
7
|
return unless node.attr("committee") || node.attr("society")
|
6
8
|
|
9
|
+
node.attr("balloting-group") && !node.attr("balloting-group-type") and
|
10
|
+
node.set_attr("balloting-group-type", "individual")
|
11
|
+
|
7
12
|
xml.editorialgroup do |a|
|
8
13
|
committee_component("society", node, a)
|
9
14
|
committee_component("balloting-group", node, a)
|
@@ -29,59 +34,6 @@ module Metanorma
|
|
29
34
|
xml.docnumber node.attr("docnumber")
|
30
35
|
end
|
31
36
|
|
32
|
-
def metadata_author(node, xml)
|
33
|
-
super
|
34
|
-
wg_members(node, xml)
|
35
|
-
bg_members(node, xml)
|
36
|
-
std_board_members(node, xml)
|
37
|
-
end
|
38
|
-
|
39
|
-
def metadata_editor(name, role, xml)
|
40
|
-
xml.contributor do |c|
|
41
|
-
c.role role, **{ type: "editor" }
|
42
|
-
c.person do |p|
|
43
|
-
p.name do |n|
|
44
|
-
n.completename name
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def metadata_multi_editors(names, role, xml)
|
51
|
-
csv_split(names).each do |n|
|
52
|
-
metadata_editor(n, role, xml)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def wg_members(node, xml)
|
57
|
-
a = node.attr("wg-chair") and
|
58
|
-
metadata_editor(a, "Working Group Chair", xml)
|
59
|
-
a = node.attr("wg-vicechair") and
|
60
|
-
metadata_editor(a, "Working Group Vice-Chair", xml)
|
61
|
-
a = node.attr("wg-secretary") and
|
62
|
-
metadata_editor(a, "Working Group Secretary", xml)
|
63
|
-
a = node.attr("wg-members") and
|
64
|
-
metadata_multi_editors(a, "Working Group Member", xml)
|
65
|
-
end
|
66
|
-
|
67
|
-
def bg_members(node, xml)
|
68
|
-
a = node.attr("balloting-group-members") and
|
69
|
-
metadata_multi_editors(a, "Balloting Group Member", xml)
|
70
|
-
end
|
71
|
-
|
72
|
-
def std_board_members(node, xml)
|
73
|
-
a = node.attr("std-board-chair") and
|
74
|
-
metadata_editor(a, "Standards Board Chair", xml)
|
75
|
-
a = node.attr("std-board-vicechair") and
|
76
|
-
metadata_editor(a, "Standards Board Vice-Chair", xml)
|
77
|
-
a = node.attr("std-board-pastchair") and
|
78
|
-
metadata_editor(a, "Standards Board Past Chair", xml)
|
79
|
-
a = node.attr("std-board-secretary") and
|
80
|
-
metadata_editor(a, "Standards Board Secretary", xml)
|
81
|
-
a = node.attr("balloting-group-members") and
|
82
|
-
metadata_multi_editors(a, "Standards Board Member", xml)
|
83
|
-
end
|
84
|
-
|
85
37
|
def metadata_publisher(node, xml)
|
86
38
|
publishers = node.attr("publisher") || "IEEE"
|
87
39
|
csv_split(publishers).each do |p|
|
@@ -112,6 +64,23 @@ module Metanorma
|
|
112
64
|
end
|
113
65
|
end
|
114
66
|
|
67
|
+
def metadata_status(node, xml)
|
68
|
+
status = node.attr("status") || node.attr("docstage") ||
|
69
|
+
(node.attr("draft") ? "draft" : "approved")
|
70
|
+
xml.status do |s|
|
71
|
+
s.stage status
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def datetypes
|
76
|
+
super + %w{feedback-ended}
|
77
|
+
end
|
78
|
+
|
79
|
+
def metadata_subdoctype(node, xml)
|
80
|
+
xml.subdoctype (node.attr("docsubtype") || "document")
|
81
|
+
s = node.attr("trial-use") and xml.trial_use s
|
82
|
+
end
|
83
|
+
|
115
84
|
def org_abbrev
|
116
85
|
{ "Institute of Electrical and Electronic Engineers" => "IEEE" }
|
117
86
|
end
|
@@ -119,6 +88,37 @@ module Metanorma
|
|
119
88
|
def relaton_relations
|
120
89
|
super + %w(merges updates)
|
121
90
|
end
|
91
|
+
|
92
|
+
def metadata_ics(node, xml)
|
93
|
+
ics = node.attr("library-ics")
|
94
|
+
ics&.split(/,\s*/)&.each do |i|
|
95
|
+
xml.ics {
|
96
|
+
|elem| elem.code i
|
97
|
+
icsdata = Isoics.fetch i
|
98
|
+
elem.text_ icsdata.description
|
99
|
+
}
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def metadata_ext(node, xml)
|
104
|
+
super
|
105
|
+
structured_id(node, xml)
|
106
|
+
end
|
107
|
+
|
108
|
+
def structured_id(node, xml)
|
109
|
+
return unless node.attr("docnumber")
|
110
|
+
|
111
|
+
xml.structuredidentifier do |i|
|
112
|
+
i.docnumber node.attr("docnumber")
|
113
|
+
i.agency "IEEE"
|
114
|
+
i.class_ doctype(node)
|
115
|
+
a = node.attr("edition") and i.edition a
|
116
|
+
a = node.attr("draft") and i.version a
|
117
|
+
a = node.attr("amendment-number") and i.amendment a
|
118
|
+
a = node.attr("corrigendum-number") and i.corrigendum a
|
119
|
+
a = node.attr("copyright-year") and i.year a
|
120
|
+
end
|
121
|
+
end
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|