metanorma-nist 0.0.9 → 0.1.0
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/.travis.yml +4 -2
- data/README.adoc +7 -8
- data/appveyor.yml +7 -2
- data/lib/asciidoctor/nist/biblio.rng +2 -2
- data/lib/asciidoctor/nist/cleanup.rb +8 -0
- data/lib/asciidoctor/nist/front.rb +16 -12
- data/lib/asciidoctor/nist/isodoc.rng +44 -48
- data/lib/asciidoctor/nist/isostandard.rng +28 -248
- data/lib/asciidoctor/nist/nist.rng +16 -222
- data/lib/asciidoctor/nist/reqt.rng +5 -0
- data/lib/asciidoctor/nist/validate.rb +50 -4
- data/lib/isodoc/nist/base_convert.rb +15 -36
- data/lib/isodoc/nist/html/html_nist_titlepage.html +134 -45
- data/lib/isodoc/nist/html/htmlstyle.scss +129 -30
- data/lib/isodoc/nist/html/word_nist_titlepage.html +2 -2
- data/lib/isodoc/nist/html_convert.rb +10 -0
- data/lib/isodoc/nist/metadata.rb +14 -22
- data/lib/isodoc/nist/pdf_convert.rb +10 -18
- data/lib/isodoc/nist/render.rb +6 -6
- data/lib/metanorma/nist/version.rb +1 -1
- data/metanorma-nist.gemspec +5 -4
- metadata +36 -22
@@ -9,19 +9,6 @@
|
|
9
9
|
<start>
|
10
10
|
<ref name="nist-standard"/>
|
11
11
|
</start>
|
12
|
-
<define name="btitle">
|
13
|
-
<element name="title">
|
14
|
-
<ref name="TypedTitleString"/>
|
15
|
-
</element>
|
16
|
-
</define>
|
17
|
-
<define name="docidentifier">
|
18
|
-
<element name="docidentifier">
|
19
|
-
<optional>
|
20
|
-
<attribute name="type"/>
|
21
|
-
</optional>
|
22
|
-
<text/>
|
23
|
-
</element>
|
24
|
-
</define>
|
25
12
|
<define name="figure">
|
26
13
|
<element name="figure">
|
27
14
|
<attribute name="id">
|
@@ -62,9 +49,18 @@
|
|
62
49
|
</choice>
|
63
50
|
</element>
|
64
51
|
</define>
|
65
|
-
<define name="
|
52
|
+
<define name="DocumentType">
|
66
53
|
<value>standard</value>
|
67
54
|
</define>
|
55
|
+
<define name="TitleType">
|
56
|
+
<choice>
|
57
|
+
<value>alternative</value>
|
58
|
+
<value>original</value>
|
59
|
+
<value>unofficial</value>
|
60
|
+
<value>subtitle</value>
|
61
|
+
<value>main</value>
|
62
|
+
</choice>
|
63
|
+
</define>
|
68
64
|
<!-- DocRelationType |= "obsoletedBy" | "supersedes" | "supersededBy" -->
|
69
65
|
<define name="DocRelationType">
|
70
66
|
<choice>
|
@@ -107,57 +103,6 @@
|
|
107
103
|
<value>superseded</value>
|
108
104
|
</choice>
|
109
105
|
</define>
|
110
|
-
<!-- TitleType |= "document-class" -->
|
111
|
-
<define name="TitleType">
|
112
|
-
<choice>
|
113
|
-
<value>alternative</value>
|
114
|
-
<value>original</value>
|
115
|
-
<value>unofficial</value>
|
116
|
-
<value>subtitle</value>
|
117
|
-
<value>main</value>
|
118
|
-
<value>document-class</value>
|
119
|
-
<value>short-title</value>
|
120
|
-
<value>short-subtitle</value>
|
121
|
-
</choice>
|
122
|
-
</define>
|
123
|
-
<define name="editorialgroup">
|
124
|
-
<element name="editorialgroup">
|
125
|
-
<oneOrMore>
|
126
|
-
<ref name="committee"/>
|
127
|
-
</oneOrMore>
|
128
|
-
</element>
|
129
|
-
</define>
|
130
|
-
<define name="stage">
|
131
|
-
<element name="stage">
|
132
|
-
<choice>
|
133
|
-
<value>draft-internal</value>
|
134
|
-
<value>draft-wip</value>
|
135
|
-
<value>draft-prelim</value>
|
136
|
-
<value>draft-public</value>
|
137
|
-
<value>final</value>
|
138
|
-
<value>final-review</value>
|
139
|
-
</choice>
|
140
|
-
</element>
|
141
|
-
</define>
|
142
|
-
<define name="substage">
|
143
|
-
<element name="substage">
|
144
|
-
<choice>
|
145
|
-
<value>active</value>
|
146
|
-
<value>retired</value>
|
147
|
-
<value>withdrawn</value>
|
148
|
-
</choice>
|
149
|
-
</element>
|
150
|
-
</define>
|
151
|
-
<define name="iteration">
|
152
|
-
<element name="iteration">
|
153
|
-
<text/>
|
154
|
-
</element>
|
155
|
-
</define>
|
156
|
-
<define name="title-main">
|
157
|
-
<element name="title-main">
|
158
|
-
<ref name="FormattedString"/>
|
159
|
-
</element>
|
160
|
-
</define>
|
161
106
|
<define name="preface">
|
162
107
|
<element name="preface">
|
163
108
|
<optional>
|
@@ -218,169 +163,23 @@
|
|
218
163
|
</choice>
|
219
164
|
</element>
|
220
165
|
</define>
|
221
|
-
<define name="
|
166
|
+
<define name="BibDataExtensionType">
|
222
167
|
<optional>
|
223
|
-
<
|
224
|
-
<ref name="BibItemType"/>
|
225
|
-
</attribute>
|
168
|
+
<ref name="doctype"/>
|
226
169
|
</optional>
|
227
170
|
<oneOrMore>
|
228
|
-
<ref name="
|
171
|
+
<ref name="bkeyword"/>
|
229
172
|
</oneOrMore>
|
230
173
|
<optional>
|
231
|
-
<ref name="
|
232
|
-
</optional>
|
233
|
-
<zeroOrMore>
|
234
|
-
<ref name="bsource"/>
|
235
|
-
</zeroOrMore>
|
236
|
-
<zeroOrMore>
|
237
|
-
<ref name="nistdocidentifier"/>
|
238
|
-
</zeroOrMore>
|
239
|
-
<optional>
|
240
|
-
<ref name="docnumber"/>
|
241
|
-
</optional>
|
242
|
-
<zeroOrMore>
|
243
|
-
<ref name="bdate"/>
|
244
|
-
</zeroOrMore>
|
245
|
-
<zeroOrMore>
|
246
|
-
<ref name="contributor"/>
|
247
|
-
</zeroOrMore>
|
248
|
-
<optional>
|
249
|
-
<ref name="edition"/>
|
250
|
-
</optional>
|
251
|
-
<optional>
|
252
|
-
<ref name="revision"/>
|
253
|
-
</optional>
|
254
|
-
<optional>
|
255
|
-
<ref name="version"/>
|
174
|
+
<ref name="commentperiod"/>
|
256
175
|
</optional>
|
257
|
-
<zeroOrMore>
|
258
|
-
<ref name="biblionote"/>
|
259
|
-
</zeroOrMore>
|
260
|
-
<zeroOrMore>
|
261
|
-
<ref name="language"/>
|
262
|
-
</zeroOrMore>
|
263
|
-
<zeroOrMore>
|
264
|
-
<ref name="script"/>
|
265
|
-
</zeroOrMore>
|
266
|
-
<zeroOrMore>
|
267
|
-
<ref name="abstract"/>
|
268
|
-
</zeroOrMore>
|
269
|
-
<optional>
|
270
|
-
<ref name="status"/>
|
271
|
-
</optional>
|
272
|
-
<ref name="copyright"/>
|
273
|
-
<zeroOrMore>
|
274
|
-
<ref name="docrelation"/>
|
275
|
-
</zeroOrMore>
|
276
|
-
<optional>
|
277
|
-
<ref name="nistseries"/>
|
278
|
-
</optional>
|
279
|
-
<optional>
|
280
|
-
<ref name="nistsubseries"/>
|
281
|
-
</optional>
|
282
|
-
<optional>
|
283
|
-
<ref name="editorialgroup"/>
|
284
|
-
</optional>
|
285
|
-
<zeroOrMore>
|
286
|
-
<ref name="ics"/>
|
287
|
-
</zeroOrMore>
|
288
|
-
<optional>
|
289
|
-
<ref name="security"/>
|
290
|
-
</optional>
|
291
|
-
<oneOrMore>
|
292
|
-
<ref name="keyword"/>
|
293
|
-
</oneOrMore>
|
294
|
-
<ref name="commentperiod"/>
|
295
176
|
</define>
|
296
177
|
</include>
|
297
|
-
<define name="
|
298
|
-
<element name="
|
299
|
-
<attribute name="type">
|
300
|
-
<choice>
|
301
|
-
<value>technical</value>
|
302
|
-
<value>provisional</value>
|
303
|
-
</choice>
|
304
|
-
</attribute>
|
305
|
-
<text/>
|
306
|
-
</element>
|
307
|
-
</define>
|
308
|
-
<define name="title-sub">
|
309
|
-
<element name="title-sub">
|
310
|
-
<ref name="FormattedString"/>
|
311
|
-
</element>
|
312
|
-
</define>
|
313
|
-
<define name="nistdocidentifier">
|
314
|
-
<element name="docidentifier">
|
315
|
-
<attribute name="type">
|
316
|
-
<choice>
|
317
|
-
<value>nist</value>
|
318
|
-
<value>nist-long</value>
|
319
|
-
<value>nist-mr</value>
|
320
|
-
</choice>
|
321
|
-
</attribute>
|
322
|
-
<text/>
|
323
|
-
</element>
|
324
|
-
</define>
|
325
|
-
<define name="security">
|
326
|
-
<element name="security">
|
178
|
+
<define name="bkeyword">
|
179
|
+
<element name="keyword">
|
327
180
|
<text/>
|
328
181
|
</element>
|
329
182
|
</define>
|
330
|
-
<define name="nistseries">
|
331
|
-
<element name="series">
|
332
|
-
<attribute name="type">
|
333
|
-
<value>main</value>
|
334
|
-
</attribute>
|
335
|
-
<ref name="nistseriestitle"/>
|
336
|
-
<optional>
|
337
|
-
<ref name="abbreviation"/>
|
338
|
-
</optional>
|
339
|
-
</element>
|
340
|
-
</define>
|
341
|
-
<define name="nistsubseries">
|
342
|
-
<element name="series">
|
343
|
-
<attribute name="type">
|
344
|
-
<value>secondary</value>
|
345
|
-
</attribute>
|
346
|
-
<ref name="nistsubseriestitle"/>
|
347
|
-
</element>
|
348
|
-
</define>
|
349
|
-
<define name="nistseriestitle">
|
350
|
-
<element name="title">
|
351
|
-
<choice>
|
352
|
-
<value>NIST Advanced Manufacturing Series</value>
|
353
|
-
<value>NIST Building Science Series</value>
|
354
|
-
<value>NIST Federal Information Processing Standards</value>
|
355
|
-
<value>NIST Grant/Contract Reports</value>
|
356
|
-
<value>NIST Handbook</value>
|
357
|
-
<value>ITL Bulletin</value>
|
358
|
-
<value>Journal of Physical and Chemical Reference Data</value>
|
359
|
-
<value>NIST Journal of Research</value>
|
360
|
-
<value>NIST Letter Circular</value>
|
361
|
-
<value>NIST Monograph</value>
|
362
|
-
<value>NIST National Construction Safety Team Act Reports</value>
|
363
|
-
<value>NIST National Standard Reference Data Series</value>
|
364
|
-
<value>NIST Interagency/Internal Report</value>
|
365
|
-
<value>NIST Product Standards</value>
|
366
|
-
<value>NIST Special Publication</value>
|
367
|
-
<value>NIST Technical Note</value>
|
368
|
-
<value>NIST Other</value>
|
369
|
-
<value>CSRC White Paper</value>
|
370
|
-
<value>CSRC Book</value>
|
371
|
-
<value>CSRC Use Case</value>
|
372
|
-
<value>CSRC Building Block</value>
|
373
|
-
</choice>
|
374
|
-
</element>
|
375
|
-
</define>
|
376
|
-
<define name="nistsubseriestitle">
|
377
|
-
<element name="title">
|
378
|
-
<choice>
|
379
|
-
<value>computer-security</value>
|
380
|
-
<value>information-security</value>
|
381
|
-
</choice>
|
382
|
-
</element>
|
383
|
-
</define>
|
384
183
|
<define name="commentperiod">
|
385
184
|
<element name="commentperiod">
|
386
185
|
<element name="from">
|
@@ -408,11 +207,6 @@
|
|
408
207
|
<ref name="Basic-Section"/>
|
409
208
|
</element>
|
410
209
|
</define>
|
411
|
-
<define name="revision">
|
412
|
-
<element name="revision">
|
413
|
-
<text/>
|
414
|
-
</element>
|
415
|
-
</define>
|
416
210
|
<define name="nist-standard">
|
417
211
|
<element name="nist-standard">
|
418
212
|
<ref name="bibdata"/>
|
@@ -1,24 +1,70 @@
|
|
1
1
|
module Asciidoctor
|
2
2
|
module NIST
|
3
3
|
class Converter < Standoc::Converter
|
4
|
-
|
4
|
+
def title_validate(root)
|
5
5
|
nil
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
def content_validate(doc)
|
9
|
+
super
|
10
|
+
bibdata_validate(doc.root)
|
11
|
+
end
|
12
|
+
|
13
|
+
def bibdata_validate(doc)
|
14
|
+
doctype_validate(doc)
|
15
|
+
stage_validate(doc)
|
16
|
+
substage_validate(doc)
|
17
|
+
iteration_validate(doc)
|
18
|
+
series_validate(doc)
|
19
|
+
end
|
20
|
+
|
21
|
+
def doctype_validate(xmldoc)
|
22
|
+
doctype = xmldoc&.at("//bibdata/ext/doctype")&.text
|
23
|
+
%w(standard).include? doctype or
|
24
|
+
warn "Document Attributes: #{doctype} is not a recognised document type"
|
25
|
+
end
|
26
|
+
|
27
|
+
def stage_validate(xmldoc)
|
28
|
+
stage = xmldoc&.at("//bibdata/status/stage")&.text
|
29
|
+
%w(draft-internal draft-wip draft-prelim draft-public draft-approval
|
30
|
+
final final-review).include? stage or
|
31
|
+
warn "Document Attributes: #{stage} is not a recognised stage"
|
32
|
+
end
|
33
|
+
|
34
|
+
def substage_validate(xmldoc)
|
35
|
+
substage = xmldoc&.at("//bibdata/status/substage")&.text or return
|
36
|
+
%w(active retired withdrawn).include? substage or
|
37
|
+
warn "Document Attributes: #{substage} is not a recognised substage"
|
38
|
+
end
|
39
|
+
|
40
|
+
def iteration_validate(xmldoc)
|
41
|
+
iteration = xmldoc&.at("//bibdata/status/iteration")&.text or return
|
42
|
+
%w(final).include? iteration.downcase or /^\d+$/.match(iteration) or
|
43
|
+
warn "Document Attributes: #{iteration} is not a recognised iteration"
|
44
|
+
end
|
45
|
+
|
46
|
+
def series_validate(xmldoc)
|
47
|
+
series = xmldoc&.at("//bibdata/series/title")&.text or return
|
48
|
+
found = false
|
49
|
+
SERIES.each { |_, v| found = true if v == series }
|
50
|
+
found or
|
51
|
+
warn "Document Attributes: #{series} is not a recognised series"
|
52
|
+
end
|
53
|
+
|
54
|
+
def validate(doc)
|
9
55
|
content_validate(doc)
|
10
56
|
schema_validate(formattedstr_strip(doc.dup),
|
11
57
|
File.join(File.dirname(__FILE__), "nist.rng"))
|
12
58
|
end
|
13
59
|
|
14
|
-
|
60
|
+
def introduction_validate(doc)
|
15
61
|
intro = doc.at("//sections/clause/title")
|
16
62
|
intro&.text == "Introduction" or
|
17
63
|
warn "First section of document body should be Introduction, "\
|
18
64
|
"not #{intro&.text}"
|
19
65
|
end
|
20
66
|
|
21
|
-
|
67
|
+
REF_SECTIONS_TO_VALIDATE = "//references[not(parent::clause)]/title | "\
|
22
68
|
"//clause[descendant::references][not(parent::clause)]/title".freeze
|
23
69
|
|
24
70
|
def section_validate(doc)
|
@@ -35,7 +35,7 @@ module IsoDoc
|
|
35
35
|
patent = ["Call for Patent Claims", "Patent Disclosure Notice"].include? title&.text
|
36
36
|
out.div **attr_code(id: c["id"]) do |s|
|
37
37
|
page_break(s) if patent
|
38
|
-
clause_name(
|
38
|
+
clause_name(anchor(c['id'], :label), title&.content, s,
|
39
39
|
class: (c.name == "executivesummary") ? "NormalTitle" :
|
40
40
|
"IntroTitle")
|
41
41
|
c.elements.reject { |c1| c1.name == "title" }.each do |c1|
|
@@ -70,9 +70,10 @@ module IsoDoc
|
|
70
70
|
|
71
71
|
def requirement_cleanup(docxml)
|
72
72
|
docxml.xpath("//div[@class = 'recommend' or @class = 'require' "\
|
73
|
-
"or @class = 'permission']
|
74
|
-
title = d.at("./
|
73
|
+
"or @class = 'permission']").each do |d|
|
74
|
+
title = d.at("./p[@class = 'AdmonitionTitle']") or next
|
75
75
|
title.name = "b"
|
76
|
+
title.delete("class")
|
76
77
|
n = title.next_element
|
77
78
|
n&.children&.first&.add_previous_sibling(" ")
|
78
79
|
n&.children&.first&.add_previous_sibling(title.remove)
|
@@ -146,39 +147,15 @@ module IsoDoc
|
|
146
147
|
end
|
147
148
|
end
|
148
149
|
|
149
|
-
def recommendation_parse(node, out)
|
150
|
-
name = node["type"]
|
151
|
-
out.div **{ class: "recommend" } do |t|
|
152
|
-
t.title { |b| b << "Recommendation #{get_anchors[node['id']][:label]}:" }
|
153
|
-
node.children.each do |n|
|
154
|
-
parse(n, t)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def requirement_parse(node, out)
|
160
|
-
name = node["type"]
|
161
|
-
out.div **{ class: "require" } do |t|
|
162
|
-
t.title { |b| b << "Requirement #{get_anchors[node['id']][:label]}:" }
|
163
|
-
node.children.each do |n|
|
164
|
-
parse(n, t)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def permission_parse(node, out)
|
170
|
-
name = node["type"]
|
171
|
-
out.div **{ class: "permission" } do |t|
|
172
|
-
t.title { |b| b << "Permission #{get_anchors[node['id']][:label]}:" }
|
173
|
-
node.children.each do |n|
|
174
|
-
parse(n, t)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
150
|
def errata_parse(node, out)
|
180
151
|
out.a **{ name: "errata_XYZZY" }
|
181
152
|
out.table **make_table_attr(node) do |t|
|
153
|
+
errata_head(t)
|
154
|
+
errata_body(t, node)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def errata_head(t)
|
182
159
|
t.thead do |h|
|
183
160
|
h.tr do |tr|
|
184
161
|
%w(Date Type Change Pages).each do |hdr|
|
@@ -186,6 +163,9 @@ module IsoDoc
|
|
186
163
|
end
|
187
164
|
end
|
188
165
|
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def errata_body(t, node)
|
189
169
|
t.tbody do |b|
|
190
170
|
node.xpath(ns("./row")).each do |row|
|
191
171
|
b.tr do |tr|
|
@@ -199,7 +179,6 @@ module IsoDoc
|
|
199
179
|
end
|
200
180
|
end
|
201
181
|
end
|
202
|
-
end
|
203
182
|
end
|
204
183
|
|
205
184
|
MIDDLE_CLAUSE = "//clause[parent::sections] | "\
|
@@ -291,7 +270,7 @@ module IsoDoc
|
|
291
270
|
|
292
271
|
def annex_name(annex, name, div)
|
293
272
|
div.h1 **{ class: "Annex" } do |t|
|
294
|
-
t << "#{
|
273
|
+
t << "#{anchor(annex['id'], :label)} — "
|
295
274
|
t.b do |b|
|
296
275
|
if @bibliographycount == 1 && annex.at(ns("./references"))
|
297
276
|
b << "References"
|
@@ -379,7 +358,7 @@ module IsoDoc
|
|
379
358
|
|
380
359
|
def omit_docid_prefix(prefix)
|
381
360
|
return true if prefix.nil? || prefix.empty?
|
382
|
-
return ["ISO", "IEC", "
|
361
|
+
return ["ISO", "IEC", "NIST"].include? prefix
|
383
362
|
end
|
384
363
|
|
385
364
|
def nist_reference_format(b, r)
|