metanorma-nist 0.2.3 → 0.2.4
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/.github/workflows/macos.yml +34 -0
- data/.github/workflows/ubuntu.yml +34 -0
- data/.github/workflows/windows.yml +37 -0
- data/README.adoc +17 -7
- data/lib/asciidoctor/nist/basicdoc.rng +3 -0
- data/lib/asciidoctor/nist/boilerplate.rb +3 -1
- data/lib/asciidoctor/nist/cleanup.rb +1 -0
- data/lib/asciidoctor/nist/converter.rb +1 -0
- data/lib/asciidoctor/nist/front.rb +7 -5
- data/lib/asciidoctor/nist/isodoc.rng +21 -0
- data/lib/asciidoctor/nist/nist_intro_cswp.xml +45 -0
- data/lib/isodoc/nist/base_convert.rb +11 -3
- data/lib/isodoc/nist/html/_coverpage.scss +327 -0
- data/lib/isodoc/nist/html/header_cswp.html +309 -0
- data/lib/isodoc/nist/html/html_nist_titlepage.html +3 -3
- data/lib/isodoc/nist/html/htmlstyle.scss +231 -1088
- data/lib/isodoc/nist/html/logo_cswp.png +0 -0
- data/lib/isodoc/nist/html/nist_cswp.scss +866 -0
- data/lib/isodoc/nist/html/word_nist_intro_cswp.html +0 -0
- data/lib/isodoc/nist/html/word_nist_titlepage_cswp.html +68 -0
- data/lib/isodoc/nist/html/wordstyle_cswp.scss +1073 -0
- data/lib/isodoc/nist/html_convert.rb +1 -0
- data/lib/isodoc/nist/metadata.rb +19 -8
- data/lib/isodoc/nist/pdf_convert.rb +1 -0
- data/lib/isodoc/nist/word_convert.rb +24 -8
- data/lib/metanorma/nist/version.rb +1 -1
- metadata +13 -4
- data/.travis.yml +0 -22
- data/appveyor.yml +0 -37
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1ade7003156424dd8933b9db67420ee3d8d16c5abafb109750a8c48abd7ec87e
|
|
4
|
+
data.tar.gz: 958c85c11773fd4eb70d0b6604026067e8e48962cda5ed2bdeea73d35916d42e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 46c6f1a1a443e805b5362cd1e16d47d74a05e5586410c08ae989bfd363c5187df4c8062dd317be1cacfee085c2d0fb432c9b2def06496a287e26d242e01e5a85
|
|
7
|
+
data.tar.gz: 6a960942edd97e79272ab858ae2f3483bb49e8bc64fecfe55e0b627f686aa5495b712cf83f9d6a5ef0f8ac9effedec06f683bbb4bad35c1acd1ea60c5f99c2d4
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Auto-generated !!! Do not edit it manually
|
|
2
|
+
# use ci-master https://github.com/metanorma/metanorma-build-scripts
|
|
3
|
+
name: macos
|
|
4
|
+
|
|
5
|
+
on: [push]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test-macos:
|
|
9
|
+
name: Test on Ruby ${{ matrix.ruby }} macOS
|
|
10
|
+
runs-on: macos-latest
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
ruby: [ '2.6', '2.5', '2.4' ]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@master
|
|
16
|
+
- name: Use Ruby
|
|
17
|
+
uses: actions/setup-ruby@v1
|
|
18
|
+
with:
|
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
|
20
|
+
architecture: 'x64'
|
|
21
|
+
- name: Update gems
|
|
22
|
+
run: |
|
|
23
|
+
sudo gem install bundler -v "~> 2" --force
|
|
24
|
+
bundle install --jobs 4 --retry 3
|
|
25
|
+
- name: Use Node
|
|
26
|
+
uses: actions/setup-node@v1
|
|
27
|
+
with:
|
|
28
|
+
node-version: '8'
|
|
29
|
+
- name: Install Puppeteer
|
|
30
|
+
run: |
|
|
31
|
+
npm install -g puppeteer
|
|
32
|
+
- name: Run specs
|
|
33
|
+
run: |
|
|
34
|
+
bundle exec rake
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Auto-generated !!! Do not edit it manually
|
|
2
|
+
# use ci-master https://github.com/metanorma/metanorma-build-scripts
|
|
3
|
+
name: ubuntu
|
|
4
|
+
|
|
5
|
+
on: [push]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test-linux:
|
|
9
|
+
name: Test on Ruby ${{ matrix.ruby }} Ubuntu
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
ruby: [ '2.6', '2.5', '2.4' ]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@master
|
|
16
|
+
- name: Use Ruby
|
|
17
|
+
uses: actions/setup-ruby@v1
|
|
18
|
+
with:
|
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
|
20
|
+
architecture: 'x64'
|
|
21
|
+
- name: Update gems
|
|
22
|
+
run: |
|
|
23
|
+
gem install bundler -v "~> 2"
|
|
24
|
+
bundle install --jobs 4 --retry 3
|
|
25
|
+
- name: Use Node
|
|
26
|
+
uses: actions/setup-node@v1
|
|
27
|
+
with:
|
|
28
|
+
node-version: '8'
|
|
29
|
+
- name: Install Puppeteer
|
|
30
|
+
run: |
|
|
31
|
+
npm install -g puppeteer
|
|
32
|
+
- name: Run specs
|
|
33
|
+
run: |
|
|
34
|
+
bundle exec rake
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Auto-generated !!! Do not edit it manually
|
|
2
|
+
# use ci-master https://github.com/metanorma/metanorma-build-scripts
|
|
3
|
+
name: windows
|
|
4
|
+
|
|
5
|
+
on: [push]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test-windows:
|
|
9
|
+
name: Test on Ruby ${{ matrix.ruby }} Windows
|
|
10
|
+
runs-on: windows-latest
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
ruby: [ '2.6', '2.5', '2.4' ]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@master
|
|
16
|
+
- name: Use Ruby
|
|
17
|
+
uses: actions/setup-ruby@v1
|
|
18
|
+
with:
|
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
|
20
|
+
architecture: 'x64'
|
|
21
|
+
- name: Update gems
|
|
22
|
+
shell: pwsh
|
|
23
|
+
run: |
|
|
24
|
+
gem install bundler -v "~> 2"
|
|
25
|
+
bundle config --local path vendor/bundle
|
|
26
|
+
bundle update
|
|
27
|
+
bundle install --jobs 4 --retry 3
|
|
28
|
+
- name: Use Node
|
|
29
|
+
uses: actions/setup-node@v1
|
|
30
|
+
with:
|
|
31
|
+
node-version: '8'
|
|
32
|
+
- name: Install Puppeteer
|
|
33
|
+
run: |
|
|
34
|
+
npm install -g puppeteer
|
|
35
|
+
- name: Run specs
|
|
36
|
+
run: |
|
|
37
|
+
bundle exec rake
|
data/README.adoc
CHANGED
|
@@ -148,8 +148,12 @@ docnumber-edition (if edition is present)
|
|
|
148
148
|
`:docidentifier:`:: The document identifier for the document. Normally this should not be supplied,
|
|
149
149
|
as the document identifier is composed from the document series, document number, document volume,
|
|
150
150
|
and edition/revision (e.g. _NIST SP 800 Revision 1_).
|
|
151
|
+
|
|
151
152
|
If the `:docidentifier:` value is provided, it will override this composed value.
|
|
152
153
|
|
|
154
|
+
CSWP publications do not have a distinct `:docidentifier:` or `:docnumber:`: they are identified
|
|
155
|
+
by their `:issued-date:`.
|
|
156
|
+
|
|
153
157
|
`:status:`:: Document status/stage. The permitted types are:
|
|
154
158
|
+
|
|
155
159
|
--
|
|
@@ -259,13 +263,13 @@ e.g. "Computer Security" for SP 800.
|
|
|
259
263
|
publishes the document under.)
|
|
260
264
|
|
|
261
265
|
`:call-for-patent-claims:`:: Include the Call for Patent Claims in document drafts,
|
|
262
|
-
and the Patent Disclosure Notice in finalised documents.
|
|
266
|
+
and the Patent Disclosure Notice in finalised documents. (Not applicable to CSWP.)
|
|
263
267
|
|
|
264
268
|
`:commitment-to-licence:`:: Indicate in the Patent Disclosure Notice that
|
|
265
|
-
notice and commitment to license have been received.
|
|
269
|
+
notice and commitment to license have been received. (Not applicable to CSWP.)
|
|
266
270
|
|
|
267
271
|
`:patent-contact:`:: Contact for the Call for Patent Claims or Patent Disclosure Notice.
|
|
268
|
-
If not supplied, `:doc-email:` is used.
|
|
272
|
+
If not supplied, `:doc-email:` is used. (Not applicable to CSWP.)
|
|
269
273
|
|
|
270
274
|
`:iteration:`:: The iteration of a stage, in case there have been multiple drafts.
|
|
271
275
|
Can be a number, or text (e.g. "initial", "final").
|
|
@@ -294,8 +298,13 @@ Can be a number, or text (e.g. "initial", "final").
|
|
|
294
298
|
* csrc-book
|
|
295
299
|
* csrc-use-case
|
|
296
300
|
* csrc-building-block
|
|
301
|
+
* nist-cswp
|
|
297
302
|
--
|
|
298
303
|
|
|
304
|
+
Documents belonging to different series are expected to be rendered differently. As of this
|
|
305
|
+
writing, styling has been provided for `nist-cswp` (Cybersecurity White Papers) and for
|
|
306
|
+
`nist-sp` (SP-800).
|
|
307
|
+
|
|
299
308
|
`:comment-from:`:: The beginning of the period during which comments may be submitted to the NIST
|
|
300
309
|
document draft. ISO-8601 date.
|
|
301
310
|
|
|
@@ -311,7 +320,8 @@ forward. If present, bibliographies are treated in the legacy manner: they are t
|
|
|
311
320
|
and are given an appendix number according to where in the document they occur.
|
|
312
321
|
|
|
313
322
|
`:boilerplate-authority:`:: Nominate a Metanorma XML file encoding the authority statement of the document,
|
|
314
|
-
to overwrite the default authority statement included in the gem
|
|
323
|
+
to overwrite the default authority statement included in the gem
|
|
324
|
+
(link:lib/asciidoctor/nist/nist_intro.xml[], link:lib/asciidoctor/nist/nist_intro_cswp.xml[]),
|
|
315
325
|
in case the document is historical, and needs to be generated with a previous authority statement.
|
|
316
326
|
|
|
317
327
|
`:obsoletes:`::
|
|
@@ -422,15 +432,15 @@ The authority statement in NIST consists of five sections. They are semantically
|
|
|
422
432
|
XML under the `boilerplate` tag, as subclauses:
|
|
423
433
|
|
|
424
434
|
`boilerplate/legal-statement/clause[@id = 'authority1']`:: The initial section of the authority section ("This publication has been developed
|
|
425
|
-
by NIST...").
|
|
426
|
-
`boilerplate/legal-statement/clause[@id = 'authority2']`:: The identifier, revision date, and URL of the document.
|
|
435
|
+
by NIST..."). (Not applicable to CSWP.)
|
|
436
|
+
`boilerplate/legal-statement/clause[@id = 'authority2']`:: The identifier, revision date, and URL of the document. (Not applicanble to CSWP.)
|
|
427
437
|
`boilerplate/legal-statement/clasue[@id = 'authority3']`:: The boxed disclaimer statement ("Any mention of commercial products or reference to commercial organizations...")
|
|
428
438
|
`boilerplate/feedback-statement/clause[@id = 'authority4']`:: The public comment period, for drafts
|
|
429
439
|
`boilerplate/feedback-statement/clause[@id = 'authority5']`:: The contact details for comments
|
|
430
440
|
|
|
431
441
|
The authority statement has been marked up in Metanorma XML rather than Asciidoctor because of its complexity.
|
|
432
442
|
If you wish to supply a different authority statement, you will need to provide a piece of Metanorma XML corresponding
|
|
433
|
-
to the existing default statement (available from link:lib/asciidoctor/nist/nist_intro.xml[]), and containing
|
|
443
|
+
to the existing default statement (available from link:lib/asciidoctor/nist/nist_intro.xml[] and link:lib/asciidoctor/nist/nist_intro_cswp.xml[]), and containing
|
|
434
444
|
text corresponding to the sections given above. You can give the location of your own authority statement file
|
|
435
445
|
relative to the current document through the document attribute `:boilerplate-authority:`.
|
|
436
446
|
|
|
@@ -23,6 +23,7 @@ module Asciidoctor
|
|
|
23
23
|
"csrc-book": "CSRC Book",
|
|
24
24
|
"csrc-use-case": "CSRC Use Case",
|
|
25
25
|
"csrc-building-block": "CSRC Building Block",
|
|
26
|
+
"nist-cswp": "NIST Cybersecurity White Paper",
|
|
26
27
|
}.freeze
|
|
27
28
|
|
|
28
29
|
SERIES_ABBR = {
|
|
@@ -47,6 +48,7 @@ module Asciidoctor
|
|
|
47
48
|
"csrc-book": "CSRC Book",
|
|
48
49
|
"csrc-use-case": "CSRC Use Case",
|
|
49
50
|
"csrc-building-block": "CSRC Building Block",
|
|
51
|
+
"nist-cswp": "NIST CSWP",
|
|
50
52
|
}.freeze
|
|
51
53
|
|
|
52
54
|
CALL_FOR_PATENT_CLAIMS = <<~END.freeze
|
|
@@ -100,7 +102,7 @@ module Asciidoctor
|
|
|
100
102
|
conv.labels = {nist_division: @nistdivision,
|
|
101
103
|
nist_division_address: @nistdivisionaddress}
|
|
102
104
|
file = @boilerplateauthority ? "#{@localdir}/#{@boilerplateauthority}" :
|
|
103
|
-
File.join(File.dirname(__FILE__),"nist_intro.xml")
|
|
105
|
+
File.join(File.dirname(__FILE__), @series == "nist-cswp" ? "nist_intro_cswp.xml" : "nist_intro.xml")
|
|
104
106
|
conv.populate_template((File.read(file, encoding: "UTF-8")), nil)
|
|
105
107
|
end
|
|
106
108
|
end
|
|
@@ -128,6 +128,7 @@ module Asciidoctor
|
|
|
128
128
|
"Computer Security Division, Information Technology Laboratory"
|
|
129
129
|
@nistdivisionaddress = node.attr("nist-division-address") ||
|
|
130
130
|
"100 Bureau Drive (Mail Stop 8930) Gaithersburg, MD 20899-8930"
|
|
131
|
+
@series = node.attr("series")
|
|
131
132
|
super
|
|
132
133
|
end
|
|
133
134
|
|
|
@@ -4,11 +4,13 @@ require "fileutils"
|
|
|
4
4
|
|
|
5
5
|
module Asciidoctor
|
|
6
6
|
module NIST
|
|
7
|
-
|
|
8
7
|
# A {Converter} implementation that generates RSD output, and a document
|
|
9
8
|
# schema encapsulation of the document for validation
|
|
10
|
-
|
|
9
|
+
|
|
11
10
|
class Converter < Standoc::Converter
|
|
11
|
+
def doctype(node)
|
|
12
|
+
node.attr("doctype") || "sp-800"
|
|
13
|
+
end
|
|
12
14
|
|
|
13
15
|
def datetypes
|
|
14
16
|
super + %w(abandoned superseded)
|
|
@@ -63,6 +65,7 @@ module Asciidoctor
|
|
|
63
65
|
def metadata_id(node, xml)
|
|
64
66
|
did = node.attr("docidentifier")
|
|
65
67
|
dn = node.attr("docnumber")
|
|
68
|
+
dn = Iso690Render.MMMddyyyy(node.attr("issued-date")) if @series == "nist-cswp" and !dn
|
|
66
69
|
if did
|
|
67
70
|
xml.docidentifier did, **attr_code(type: "NIST")
|
|
68
71
|
xml.docidentifier unabbreviate(did), **attr_code(type: "nist-long")
|
|
@@ -124,7 +127,7 @@ module Asciidoctor
|
|
|
124
127
|
|
|
125
128
|
def add_id_parts_mr(args)
|
|
126
129
|
args[:series] and
|
|
127
|
-
name = SERIES_ABBR
|
|
130
|
+
name = SERIES_ABBR&.dig(args[:series].to_sym)&.sub(/^NIST /, "")
|
|
128
131
|
"NIST.#{name}.#{args[:vol]}.#{args[:revision]}.#{args[:date]}"
|
|
129
132
|
end
|
|
130
133
|
|
|
@@ -189,8 +192,7 @@ module Asciidoctor
|
|
|
189
192
|
end
|
|
190
193
|
|
|
191
194
|
def metadata_series(node, xml)
|
|
192
|
-
series = node.attr("series")
|
|
193
|
-
series || return
|
|
195
|
+
series = node.attr("series") || "nist-sp"
|
|
194
196
|
series and xml.series **{ type: "main" } do |s|
|
|
195
197
|
s.title (SERIES.dig(series.to_sym) || series)
|
|
196
198
|
SERIES_ABBR.dig(series.to_sym) and
|
|
@@ -44,6 +44,27 @@
|
|
|
44
44
|
</oneOrMore>
|
|
45
45
|
</element>
|
|
46
46
|
</define>
|
|
47
|
+
<define name="references">
|
|
48
|
+
<element name="references">
|
|
49
|
+
<optional>
|
|
50
|
+
<attribute name="id">
|
|
51
|
+
<data type="ID"/>
|
|
52
|
+
</attribute>
|
|
53
|
+
</optional>
|
|
54
|
+
<optional>
|
|
55
|
+
<ref name="section-title"/>
|
|
56
|
+
</optional>
|
|
57
|
+
<zeroOrMore>
|
|
58
|
+
<ref name="BasicBlock"/>
|
|
59
|
+
</zeroOrMore>
|
|
60
|
+
<zeroOrMore>
|
|
61
|
+
<ref name="bibitem"/>
|
|
62
|
+
<zeroOrMore>
|
|
63
|
+
<ref name="note"/>
|
|
64
|
+
</zeroOrMore>
|
|
65
|
+
</zeroOrMore>
|
|
66
|
+
</element>
|
|
67
|
+
</define>
|
|
47
68
|
</include>
|
|
48
69
|
<define name="standard-document">
|
|
49
70
|
<element name="standard-document">
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<boilerplate>
|
|
2
|
+
<legal-statement>
|
|
3
|
+
|
|
4
|
+
<clause id="authority3">
|
|
5
|
+
<title>Disclaimer</title>
|
|
6
|
+
<p>Any mention of commercial products or reference to commercial organizations is for information only; it does not imply recommendation or endorsement by NIST, nor does it imply that the products mentioned are necessarily the best available for the purpose.</p>
|
|
7
|
+
</clause>
|
|
8
|
+
|
|
9
|
+
<clause id="authority3a">
|
|
10
|
+
<title>Additional Information</title>
|
|
11
|
+
<p>For additional information on NIST's Cybersecurity programs, projects and publications, visit the <link target="https://csrc.nist.gov">Computer Security Resource Center</link>. Information on other efforts at <link target="https://www.nist.gov">NIST</link> and in the <link target="https://www.nist.gov/itl">Information Technology Laboratory</link> (ITL) is also available.</p>
|
|
12
|
+
</clause>
|
|
13
|
+
</legal-statement>
|
|
14
|
+
|
|
15
|
+
<feedback-statement>
|
|
16
|
+
{% if unpublished %}
|
|
17
|
+
<clause id="authority4">
|
|
18
|
+
{% if comment_extended %}
|
|
19
|
+
<p align="center">[{{ comment_extended}}: Comment period extended]</p>
|
|
20
|
+
{% endif %}
|
|
21
|
+
|
|
22
|
+
{% if comment_from and comment_to %}
|
|
23
|
+
<p align="center"><strong>Public comment period: <em>{{ comment_from }}</em> through <em>{{comment_to}}</em></strong></p>
|
|
24
|
+
{% else %}
|
|
25
|
+
{% if comment_from %}
|
|
26
|
+
<p align="center"><strong>Public comment period: from <em>{{ comment_from }}</em></strong></p>
|
|
27
|
+
{% endif %}
|
|
28
|
+
{% endif %}
|
|
29
|
+
</clause>
|
|
30
|
+
{% endif %}
|
|
31
|
+
|
|
32
|
+
<clause id="authority5">
|
|
33
|
+
<p align="center"><strong>Comments on this publication may be submitted to:</strong></p>
|
|
34
|
+
|
|
35
|
+
<p align="center">National Institute of Standards and Technology <br/>
|
|
36
|
+
Attn: {{ nist_division }} <br/>
|
|
37
|
+
{{ nist_division_address }} <br/>
|
|
38
|
+
{% if email %}
|
|
39
|
+
Email: <link target="mailto:{{ email }}"/>
|
|
40
|
+
{% endif %}</p>
|
|
41
|
+
|
|
42
|
+
<p align="center">All comments are subject to release under the Freedom of Information Act (FOIA).</p>
|
|
43
|
+
</clause>
|
|
44
|
+
</feedback-statement>
|
|
45
|
+
</boilerplate>
|
|
@@ -189,8 +189,13 @@ module IsoDoc
|
|
|
189
189
|
super
|
|
190
190
|
end
|
|
191
191
|
|
|
192
|
+
def wrap_brackets(txt)
|
|
193
|
+
return txt if /^\[.*\]$/.match txt
|
|
194
|
+
"[#{txt}]"
|
|
195
|
+
end
|
|
196
|
+
|
|
192
197
|
def get_linkend(node)
|
|
193
|
-
link = anchor_linkend(node, docid_l10n(node["target"] ||
|
|
198
|
+
link = anchor_linkend(node, docid_l10n(node["target"] || wrap_brackets(node['citeas'])))
|
|
194
199
|
link += eref_localities(node.xpath(ns("./locality")), link)
|
|
195
200
|
contents = node.children.select { |c| c.name != "locality" }
|
|
196
201
|
return link if contents.nil? || contents.empty?
|
|
@@ -222,10 +227,13 @@ module IsoDoc
|
|
|
222
227
|
def bibliography_parse(node, out)
|
|
223
228
|
title = node&.at(ns("./title"))&.text || ""
|
|
224
229
|
out.div do |div|
|
|
225
|
-
node.parent.name == "annex"
|
|
230
|
+
unless node.parent.name == "annex"
|
|
231
|
+
anchor(node['id'], :label, false) and
|
|
232
|
+
clause_parse_title(node, div, node.at(ns("./title")), out) or
|
|
226
233
|
div.h2 title, **{ class: "Section3" }
|
|
234
|
+
end
|
|
227
235
|
node.elements.reject do |e|
|
|
228
|
-
|
|
236
|
+
%w(reference title bibitem note).include? e.name
|
|
229
237
|
end.each { |e| parse(e, div) }
|
|
230
238
|
biblio_list(node, div, true)
|
|
231
239
|
end
|