metanorma-nist 1.3.1 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +0 -2
- data/lib/asciidoctor/nist/biblio.rng +1 -0
- data/lib/asciidoctor/nist/isodoc.rng +175 -3
- data/lib/isodoc/nist/metadata.rb +65 -43
- data/lib/isodoc/nist/nist.csts.xsl +459 -61
- data/lib/isodoc/nist/nist.cswp.xsl +459 -61
- data/lib/isodoc/nist/nist.sp.xsl +459 -61
- data/lib/metanorma/nist/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd9a240ccb58e745abb276285bf1f48004d72a8f5a15413f39611773926fc9f5
|
4
|
+
data.tar.gz: 126d8a1e178ec82888a4ddaa6d10b0a589872424981df7e49409a72882a85241
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7bd829e6baf2aaea5cfc577c8c0bc41cd8622a322a06bd551ca212467e53d768127fce8b2d12f40eeeaa7ad4d989254ee3bd555bd0e153197c04d2a63e2e0e0
|
7
|
+
data.tar.gz: 892c02adf47677f1b1133b818c235ba7d7ccee378490f3e3c6f416d7e39d9cd74b571a490e2b8cf6e77e954ce9fe3479962265bda536664b33a579c57dfb24f1
|
data/.rubocop.yml
CHANGED
@@ -876,6 +876,18 @@
|
|
876
876
|
</zeroOrMore>
|
877
877
|
</element>
|
878
878
|
</define>
|
879
|
+
<define name="pagebreak">
|
880
|
+
<element name="pagebreak">
|
881
|
+
<optional>
|
882
|
+
<attribute name="orientation">
|
883
|
+
<choice>
|
884
|
+
<value>landscape</value>
|
885
|
+
<value>portrait</value>
|
886
|
+
</choice>
|
887
|
+
</attribute>
|
888
|
+
</optional>
|
889
|
+
</element>
|
890
|
+
</define>
|
879
891
|
</include>
|
880
892
|
<!-- end overrides -->
|
881
893
|
<define name="colgroup">
|
@@ -943,8 +955,170 @@
|
|
943
955
|
<ref name="permission"/>
|
944
956
|
<ref name="imagemap"/>
|
945
957
|
<ref name="svgmap"/>
|
958
|
+
<ref name="inputform"/>
|
946
959
|
</choice>
|
947
960
|
</define>
|
961
|
+
<define name="inputform">
|
962
|
+
<element name="form">
|
963
|
+
<attribute name="id">
|
964
|
+
<data type="ID"/>
|
965
|
+
</attribute>
|
966
|
+
<attribute name="name"/>
|
967
|
+
<attribute name="action"/>
|
968
|
+
<zeroOrMore>
|
969
|
+
<choice>
|
970
|
+
<ref name="TextElement"/>
|
971
|
+
<ref name="FormInput"/>
|
972
|
+
</choice>
|
973
|
+
</zeroOrMore>
|
974
|
+
</element>
|
975
|
+
</define>
|
976
|
+
<define name="FormInput">
|
977
|
+
<choice>
|
978
|
+
<ref name="input"/>
|
979
|
+
<ref name="formlabel"/>
|
980
|
+
<ref name="select"/>
|
981
|
+
<ref name="textarea"/>
|
982
|
+
</choice>
|
983
|
+
</define>
|
984
|
+
<define name="InputType">
|
985
|
+
<choice>
|
986
|
+
<value>button</value>
|
987
|
+
<value>checkbox</value>
|
988
|
+
<value>date</value>
|
989
|
+
<value>file</value>
|
990
|
+
<value>password</value>
|
991
|
+
<value>radio</value>
|
992
|
+
<value>submit</value>
|
993
|
+
<value>text</value>
|
994
|
+
</choice>
|
995
|
+
</define>
|
996
|
+
<define name="input">
|
997
|
+
<element name="input">
|
998
|
+
<attribute name="type">
|
999
|
+
<ref name="InputType"/>
|
1000
|
+
</attribute>
|
1001
|
+
<optional>
|
1002
|
+
<attribute name="checked">
|
1003
|
+
<data type="boolean"/>
|
1004
|
+
</attribute>
|
1005
|
+
</optional>
|
1006
|
+
<optional>
|
1007
|
+
<attribute name="disabled">
|
1008
|
+
<data type="boolean"/>
|
1009
|
+
</attribute>
|
1010
|
+
</optional>
|
1011
|
+
<optional>
|
1012
|
+
<attribute name="readonly">
|
1013
|
+
<data type="boolean"/>
|
1014
|
+
</attribute>
|
1015
|
+
</optional>
|
1016
|
+
<optional>
|
1017
|
+
<attribute name="maxlength">
|
1018
|
+
<data type="int"/>
|
1019
|
+
</attribute>
|
1020
|
+
</optional>
|
1021
|
+
<optional>
|
1022
|
+
<attribute name="minlength">
|
1023
|
+
<data type="int"/>
|
1024
|
+
</attribute>
|
1025
|
+
</optional>
|
1026
|
+
<optional>
|
1027
|
+
<attribute name="name"/>
|
1028
|
+
</optional>
|
1029
|
+
<optional>
|
1030
|
+
<attribute name="value"/>
|
1031
|
+
</optional>
|
1032
|
+
<optional>
|
1033
|
+
<attribute name="id">
|
1034
|
+
<data type="ID"/>
|
1035
|
+
</attribute>
|
1036
|
+
</optional>
|
1037
|
+
</element>
|
1038
|
+
</define>
|
1039
|
+
<define name="formlabel">
|
1040
|
+
<element name="label">
|
1041
|
+
<attribute name="for">
|
1042
|
+
<data type="IDREF"/>
|
1043
|
+
</attribute>
|
1044
|
+
<zeroOrMore>
|
1045
|
+
<ref name="PureTextElement"/>
|
1046
|
+
</zeroOrMore>
|
1047
|
+
</element>
|
1048
|
+
</define>
|
1049
|
+
<define name="select">
|
1050
|
+
<element name="select">
|
1051
|
+
<optional>
|
1052
|
+
<attribute name="name"/>
|
1053
|
+
</optional>
|
1054
|
+
<optional>
|
1055
|
+
<attribute name="value"/>
|
1056
|
+
</optional>
|
1057
|
+
<optional>
|
1058
|
+
<attribute name="id">
|
1059
|
+
<data type="ID"/>
|
1060
|
+
</attribute>
|
1061
|
+
</optional>
|
1062
|
+
<optional>
|
1063
|
+
<attribute name="disabled">
|
1064
|
+
<data type="boolean"/>
|
1065
|
+
</attribute>
|
1066
|
+
</optional>
|
1067
|
+
<optional>
|
1068
|
+
<attribute name="multiple">
|
1069
|
+
<data type="boolean"/>
|
1070
|
+
</attribute>
|
1071
|
+
</optional>
|
1072
|
+
<optional>
|
1073
|
+
<attribute name="size">
|
1074
|
+
<data type="int"/>
|
1075
|
+
</attribute>
|
1076
|
+
</optional>
|
1077
|
+
<oneOrMore>
|
1078
|
+
<ref name="option"/>
|
1079
|
+
</oneOrMore>
|
1080
|
+
</element>
|
1081
|
+
</define>
|
1082
|
+
<define name="option">
|
1083
|
+
<element name="option">
|
1084
|
+
<optional>
|
1085
|
+
<attribute name="disabled">
|
1086
|
+
<data type="boolean"/>
|
1087
|
+
</attribute>
|
1088
|
+
</optional>
|
1089
|
+
<optional>
|
1090
|
+
<attribute name="value"/>
|
1091
|
+
</optional>
|
1092
|
+
<zeroOrMore>
|
1093
|
+
<ref name="PureTextElement"/>
|
1094
|
+
</zeroOrMore>
|
1095
|
+
</element>
|
1096
|
+
</define>
|
1097
|
+
<define name="textarea">
|
1098
|
+
<element name="textarea">
|
1099
|
+
<optional>
|
1100
|
+
<attribute name="name"/>
|
1101
|
+
</optional>
|
1102
|
+
<optional>
|
1103
|
+
<attribute name="value"/>
|
1104
|
+
</optional>
|
1105
|
+
<optional>
|
1106
|
+
<attribute name="id">
|
1107
|
+
<data type="ID"/>
|
1108
|
+
</attribute>
|
1109
|
+
</optional>
|
1110
|
+
<optional>
|
1111
|
+
<attribute name="rows">
|
1112
|
+
<data type="int"/>
|
1113
|
+
</attribute>
|
1114
|
+
</optional>
|
1115
|
+
<optional>
|
1116
|
+
<attribute name="cols">
|
1117
|
+
<data type="int"/>
|
1118
|
+
</attribute>
|
1119
|
+
</optional>
|
1120
|
+
</element>
|
1121
|
+
</define>
|
948
1122
|
<define name="bibliography">
|
949
1123
|
<element name="bibliography">
|
950
1124
|
<oneOrMore>
|
@@ -1017,9 +1191,7 @@
|
|
1017
1191
|
</define>
|
1018
1192
|
<define name="IsoWorkgroup">
|
1019
1193
|
<optional>
|
1020
|
-
<attribute name="number"
|
1021
|
-
<data type="int"/>
|
1022
|
-
</attribute>
|
1194
|
+
<attribute name="number"/>
|
1023
1195
|
</optional>
|
1024
1196
|
<optional>
|
1025
1197
|
<attribute name="type"/>
|
data/lib/isodoc/nist/metadata.rb
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
require "isodoc"
|
2
2
|
require "twitter_cldr"
|
3
|
-
require_relative "./metadata_id
|
3
|
+
require_relative "./metadata_id"
|
4
4
|
|
5
5
|
module IsoDoc
|
6
6
|
module NIST
|
7
7
|
class Metadata < IsoDoc::Metadata
|
8
8
|
def initialize(lang, script, labels)
|
9
9
|
super
|
10
|
-
here = File.dirname(__FILE__)
|
11
|
-
set(:logo_nist, File.expand_path(File.join(here, "
|
12
|
-
set(:logo_cswp,
|
10
|
+
here = File.join(File.dirname(__FILE__), "html")
|
11
|
+
set(:logo_nist, File.expand_path(File.join(here, "logo.png")))
|
12
|
+
set(:logo_cswp,
|
13
|
+
File.expand_path(File.join(here, "logo_cswp.png")))
|
13
14
|
set(:logo_commerce,
|
14
|
-
File.expand_path(File.join(here, "
|
15
|
+
File.expand_path(File.join(here, "commerce-logo-color.png")))
|
15
16
|
set(:logo_commerce_word,
|
16
|
-
File.expand_path(File.join(here, "
|
17
|
+
File.expand_path(File.join(here, "deptofcommerce.png")))
|
17
18
|
end
|
18
19
|
|
19
|
-
def title(ixml,
|
20
|
+
def title(ixml, _out)
|
20
21
|
main = ixml&.at(ns("//bibdata/title[@type = 'main']"))&.text
|
21
22
|
set(:doctitle, main)
|
22
23
|
short = ixml&.at(ns("//bibdata/title[@type = 'short-title']"))&.text
|
@@ -27,7 +28,7 @@ module IsoDoc
|
|
27
28
|
main = ixml&.at(ns("//bibdata/title[@type = 'subtitle']"))&.text
|
28
29
|
set(:docsubtitle, main) if main
|
29
30
|
short = ixml&.at(ns("//bibdata/title[@type = 'short-subtitle']"))&.text
|
30
|
-
set(:docsubtitle_short, short || main) if
|
31
|
+
set(:docsubtitle_short, short || main) if short || main
|
31
32
|
main = ixml&.at(ns("//bibdata/title[@type = 'document-class']"))&.text
|
32
33
|
set(:docclasstitle, main) if main
|
33
34
|
end
|
@@ -37,7 +38,7 @@ module IsoDoc
|
|
37
38
|
set(:tc, tc.text.upcase) if tc
|
38
39
|
subdiv = ixml.at(ns("//bibdata/contributor[role/@type = 'publisher']/"\
|
39
40
|
"organization/subdivision")) and
|
40
|
-
|
41
|
+
set(:nist_subdiv, subdiv.text)
|
41
42
|
super
|
42
43
|
end
|
43
44
|
|
@@ -55,6 +56,7 @@ module IsoDoc
|
|
55
56
|
ixml.xpath(ns("//bibdata/date")).each do |d|
|
56
57
|
val = Common::date_range(d)
|
57
58
|
next if val == "XXX"
|
59
|
+
|
58
60
|
set("#{d['type']}date_monthyear".to_sym, daterange_proc(val, :monthyr))
|
59
61
|
set("#{d['type']}date_mmddyyyy".to_sym, daterange_proc(val, :mmddyyyy))
|
60
62
|
set("#{d['type']}date_MMMddyyyy".to_sym, daterange_proc(val, :MMMddyyyy))
|
@@ -67,6 +69,7 @@ module IsoDoc
|
|
67
69
|
date = most_recent_date1(ixml) || return
|
68
70
|
val = Common::date_range(date)
|
69
71
|
return if val == "XXX"
|
72
|
+
|
70
73
|
set(:most_recent_date_monthyear, daterange_proc(val, :monthyr))
|
71
74
|
set(:most_recent_date_mmddyyyy, daterange_proc(val, :mmddyyyy))
|
72
75
|
set(:most_recent_date_MMMddyyyy, daterange_proc(val, :MMMddyyyy))
|
@@ -74,24 +77,27 @@ module IsoDoc
|
|
74
77
|
|
75
78
|
def most_recent_date1(ixml)
|
76
79
|
docstatus = ixml.at(ns("//bibdata/status/stage"))&.text
|
77
|
-
/^draft/.match(docstatus)
|
80
|
+
if /^draft/.match?(docstatus)
|
78
81
|
(ixml.at(ns("//bibdata/date[@type = 'circulated']")) ||
|
79
|
-
|
80
|
-
|
82
|
+
ixml.at(ns("//version/revision-date")))
|
83
|
+
else
|
84
|
+
ixml.at(ns("//bibdata/date[@type = 'issued']"))
|
85
|
+
end
|
81
86
|
end
|
82
87
|
|
83
88
|
def withdrawal_pending(ixml)
|
84
|
-
d = ixml&.at(ns("//bibdata/date[@type = 'obsoleted']"))&.text&.strip or
|
85
|
-
|
89
|
+
d = ixml&.at(ns("//bibdata/date[@type = 'obsoleted']"))&.text&.strip or
|
90
|
+
return
|
91
|
+
d += "-01" if /^\d\d\d\d-\d\d$/.match?(d)
|
86
92
|
date = Date.parse(d) or return
|
87
93
|
set(:withdrawal_pending, true) if date > Date.today
|
88
94
|
end
|
89
95
|
|
90
|
-
def daterange_proc(val,
|
91
|
-
m = /^(?<date1>[^&]+)(?<ndash
|
92
|
-
val_monthyear =
|
96
|
+
def daterange_proc(val, format)
|
97
|
+
m = /^(?<date1>[^&]+)(?<ndash>–)?(?<date2>.*)$/.match val
|
98
|
+
val_monthyear = send(format, m[:date1])
|
93
99
|
val_monthyear += "–" if m[:ndash]
|
94
|
-
val_monthyear +=
|
100
|
+
val_monthyear += send(format, m[:date2]) unless m[:date2].empty?
|
95
101
|
val_monthyear
|
96
102
|
end
|
97
103
|
|
@@ -101,7 +107,7 @@ module IsoDoc
|
|
101
107
|
set(:seriesabbr, seriesabbr) if seriesabbr
|
102
108
|
subs = ixml.at(ns("//bibdata/series[@type = 'secondary']/title"))&.text
|
103
109
|
abbr = ixml.at(ns("//bibdata/series[@type = 'secondary']/abbreviation"))&.text
|
104
|
-
if
|
110
|
+
if seriesabbr == "NIST CSTS"
|
105
111
|
subs and set(:series, subs)
|
106
112
|
abbr and set(:seriesabbr, abbr)
|
107
113
|
else
|
@@ -112,7 +118,8 @@ module IsoDoc
|
|
112
118
|
|
113
119
|
def mmddyyyy(isodate)
|
114
120
|
return nil if isodate.nil?
|
115
|
-
|
121
|
+
|
122
|
+
isodate += "-01" if /^\d\d\d\d-\d\d$/.match?(isodate)
|
116
123
|
Date.parse(isodate).strftime("%m-%d-%Y")
|
117
124
|
end
|
118
125
|
|
@@ -129,13 +136,16 @@ module IsoDoc
|
|
129
136
|
super
|
130
137
|
a = xml.at(ns("//bibdata/uri[@type = 'email']")) and set(:email, a.text)
|
131
138
|
a = xml.at(ns("//bibdata/uri[@type = 'doi']")) and set(:doi, a.text)
|
132
|
-
a = xml.at(ns("//bibdata/uri[@type = 'uri' or not(@type)]")) and
|
139
|
+
a = xml.at(ns("//bibdata/uri[@type = 'uri' or not(@type)]")) and
|
140
|
+
set(:url, a.text)
|
133
141
|
end
|
134
142
|
|
135
143
|
def relations1(ixml, type)
|
136
144
|
ret = []
|
137
|
-
ixml.xpath(ns("//bibdata/relation[@type = '#{type}']
|
138
|
-
"
|
145
|
+
ixml.xpath(ns("//bibdata/relation[@type = '#{type}']"\
|
146
|
+
"[not(xmlns:description)] | "\
|
147
|
+
"//bibdata/relation[description = '#{type}']"))
|
148
|
+
.each do |x|
|
139
149
|
id = x&.at(ns(".//docidentifier"))&.text and ret << id
|
140
150
|
end
|
141
151
|
ret
|
@@ -156,6 +166,7 @@ module IsoDoc
|
|
156
166
|
def superseding_doc(ixml)
|
157
167
|
d = ixml.at(ns("//bibdata/relation[@type = 'obsoletedBy']/bibitem"))
|
158
168
|
return unless d
|
169
|
+
|
159
170
|
set(:superseding_status, status_print(d.at(ns("./status/stage"))&.text || "final"))
|
160
171
|
superseding_iteration(d)
|
161
172
|
docid = d.at(ns("./docidentifier[@type = 'NIST']"))&.text and
|
@@ -163,27 +174,35 @@ module IsoDoc
|
|
163
174
|
docid_long = d.at(ns("./docidentifier[@type = 'nist-long']"))&.text and
|
164
175
|
set(:superseding_docidentifier_long, docid_long)
|
165
176
|
superseding_dates(d)
|
166
|
-
doi = d.at(ns("./uri[@type = 'doi']"))&.text and
|
167
|
-
|
177
|
+
doi = d.at(ns("./uri[@type = 'doi']"))&.text and
|
178
|
+
set(:superseding_doi, doi)
|
179
|
+
uri = d.at(ns("./uri[@type = 'uri']"))&.text and
|
180
|
+
set(:superseding_uri, uri)
|
168
181
|
superseding_titles(ixml, d)
|
169
182
|
authors = d.xpath(ns("./contributor[role/@type = 'author']/person"))
|
170
|
-
authors.empty? and
|
183
|
+
authors.empty? and
|
184
|
+
authors = ixml.xpath(ns("//bibdata/contributor[role/@type = 'author']/person"))
|
171
185
|
set(:superseding_authors, extract_person_names(authors))
|
172
186
|
end
|
173
187
|
|
174
|
-
def superseding_titles(ixml,
|
175
|
-
if
|
176
|
-
set(:superseding_title,
|
177
|
-
|
188
|
+
def superseding_titles(ixml, newdoc)
|
189
|
+
if newdoc.at(ns("./title[@type = 'main']"))&.text
|
190
|
+
set(:superseding_title,
|
191
|
+
newdoc.at(ns("./title[@type = 'main']"))&.text)
|
192
|
+
set(:superseding_subtitle,
|
193
|
+
newdoc.at(ns("./title[@type = 'subtitle']"))&.text)
|
178
194
|
else
|
179
|
-
set(:superseding_title,
|
180
|
-
|
195
|
+
set(:superseding_title,
|
196
|
+
ixml.at(ns("//bibdata/title[@type = 'main']"))&.text)
|
197
|
+
set(:superseding_subtitle,
|
198
|
+
ixml.at(ns("//bibdata/title[@type = 'subtitle']"))&.text)
|
181
199
|
end
|
182
200
|
end
|
183
201
|
|
184
|
-
def superseding_iteration(
|
185
|
-
return unless
|
186
|
-
|
202
|
+
def superseding_iteration(newdoc)
|
203
|
+
return unless newdoc.at(ns("./status/stage"))&.text == "draft-public"
|
204
|
+
|
205
|
+
iter = newdoc.at(ns("./status/iteration"))&.text || "1"
|
187
206
|
case iter.downcase
|
188
207
|
when "1"
|
189
208
|
set(:superseding_iteration_ordinal, "Initial")
|
@@ -192,21 +211,22 @@ module IsoDoc
|
|
192
211
|
set(:superseding_iteration_ordinal, "Final")
|
193
212
|
set(:superseding_iteration_code, "FPD")
|
194
213
|
else
|
195
|
-
set(:superseding_iteration_ordinal,
|
214
|
+
set(:superseding_iteration_ordinal,
|
215
|
+
iter.to_i.localize.to_rbnf_s("SpelloutRules", "spellout-ordinal"))
|
196
216
|
set(:superseding_iteration_code, "#{iter}PD")
|
197
217
|
end
|
198
218
|
end
|
199
219
|
|
200
|
-
def superseding_dates(
|
201
|
-
if cdate =
|
220
|
+
def superseding_dates(newdoc)
|
221
|
+
if cdate = newdoc.at(ns("./date[@type = 'circulated']/on"))&.text
|
202
222
|
set(:superseding_circulated_date, cdate)
|
203
223
|
set(:superseding_circulated_date_monthyear, monthyr(cdate))
|
204
224
|
end
|
205
|
-
if cdate =
|
225
|
+
if cdate = newdoc.at(ns("./date[@type = 'issued']/on"))&.text
|
206
226
|
set(:superseding_issued_date, cdate)
|
207
227
|
set(:superseding_issued_date_monthyear, monthyr(cdate))
|
208
228
|
end
|
209
|
-
if cdate =
|
229
|
+
if cdate = newdoc.at(ns("./date[@type = 'updated']/on"))&.text
|
210
230
|
set(:superseding_updated_date, cdate)
|
211
231
|
set(:superseding_updated_date_monthyear, monthyr(cdate))
|
212
232
|
set(:superseding_updated_date_MMMddyyyy, MMMddyyyy(cdate))
|
@@ -214,10 +234,12 @@ module IsoDoc
|
|
214
234
|
end
|
215
235
|
|
216
236
|
def note(xml, _out)
|
217
|
-
note = xml.at(ns("//bibdata/note[@type = 'additional-note']"))&.text and
|
218
|
-
|
237
|
+
note = xml.at(ns("//bibdata/note[@type = 'additional-note']"))&.text and
|
238
|
+
set(:additional_note, note)
|
239
|
+
note = xml.at(ns("//bibdata/note[@type = 'withdrawal-note']"))&.text and
|
240
|
+
set(:withdrawal_note, note)
|
219
241
|
note = xml.at(ns("//bibdata/note[@type = 'withdrawal-announcement-link']"))&.text and
|
220
|
-
|
242
|
+
set(:withdrawal_announcement_link, note)
|
221
243
|
super
|
222
244
|
end
|
223
245
|
end
|