metanorma-nist 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,155 +0,0 @@
1
- <h1 class="AbstractTitle">Authority</h1>
2
-
3
- <p class=MsoNormal align=left style='margin-bottom:12.0pt;text-align:left;
4
- mso-pagination:widow-orphan;mso-hyphenate:auto;mso-layout-grid-align:auto;
5
- mso-vertical-align-alt:auto'><span lang=EN-US style='mso-bidi-font-size:11.0pt;
6
- mso-bidi-font-family:Arial'>This publication has been developed by NIST in
7
- accordance with its statutory responsibilities under the Federal Information
8
- Security Modernization Act (FISMA) of 2014, 44 <span class=SpellE>U.S.C</span>.
9
- § 3551 <i style='mso-bidi-font-style:normal'>et seq.</i>, Public Law (<span
10
- class=SpellE>P.L</span>.) 113-283. NIST is responsible for developing
11
- information security standards and guidelines, including minimum requirements
12
- for federal information systems, but such standards and guidelines shall not
13
- apply to national security systems without the express approval of appropriate federal
14
- officials exercising policy authority over such systems. This guideline is
15
- consistent with the requirements of the Office of Management and Budget (OMB)
16
- Circular A-130.<o:p></o:p></span></p>
17
-
18
- <p class=MsoNormal align=left style='margin-bottom:12.0pt;text-align:left;
19
- mso-pagination:widow-orphan;mso-hyphenate:auto;mso-layout-grid-align:auto;
20
- mso-vertical-align-alt:auto'><span lang=EN-US style='mso-bidi-font-size:11.0pt;
21
- mso-bidi-font-family:Arial'>Nothing in this publication should be taken to
22
- contradict the standards and guidelines made mandatory and binding on federal
23
- agencies by the Secretary of Commerce under statutory authority. Nor should
24
- these guidelines be interpreted as altering or superseding the existing
25
- authorities of the Secretary of Commerce, Director of the OMB, or any other federal
26
- official.<span style='mso-spacerun:yes'>  </span>This publication may be used
27
- by nongovernmental organizations on a voluntary basis and is not subject to
28
- copyright in the United States. Attribution would, however, be appreciated by
29
- NIST.</span><span lang=EN-US style='mso-bidi-font-size:11.0pt;font-family:"Arial",sans-serif'><o:p></o:p></span></p>
30
-
31
- <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center;
32
- line-height:90%'><span lang=EN-US style='font-size:11.0pt;line-height:
33
- 90%;font-family:"Arial",sans-serif'>National Institute of Standards and
34
- Technology {{ docnumber }}<br></span>
35
- <span lang=EN-US style='font-size:10.0pt;line-height:90%;font-family:
36
- "Arial",sans-serif;mso-bidi-font-weight:bold'>Natl. Inst. Stand. Technol.
37
- {{ docnumber }}, <!--[if supportFields]><span
38
- lang=EN-AU style='font-size:10.0pt;mso-ansi-language:EN-AU'><span
39
- style='mso-element:field-begin'></span><span style='mso-spacerun:yes'> </span>NUMPAGES<span
40
- style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
41
- style='mso-no-proof:yes'>26</span><!--[if supportFields]><span
42
- lang=EN-AU style='font-size:10.0pt;mso-ansi-language:EN-AU'><span
43
- style='mso-element:field-end'></span></span><![endif]--> pages ({{ revdate_monthyear }})<br>
44
- <span class=SpellE><span style='color:black'>CODEN</span></span><span
45
- style='color:black'>: NSPUE2<o:p></o:p></span></span></p>
46
-
47
- {% if url %}
48
- <p class=MsoHeader align=center style='text-align:center;line-height:90%;
49
- tab-stops:36.0pt'><span lang=EN-US style='font-size:10.0pt;line-height:90%;
50
- font-family:"Arial",sans-serif;color:black;mso-themecolor:text1'>This
51
- publication is available free of charge from:<br>
52
- </span><span lang=EN-US style='font-size:10.0pt;line-height:90%;font-family:
53
- "Arial",sans-serif'>{{ url }}</span><b><span lang=EN-US
54
- style='mso-bidi-font-size:11.0pt;line-height:90%;font-family:"Arial",sans-serif;
55
- color:black;mso-themecolor:text1'><o:p></o:p></span></b></p>
56
- {% endif %}
57
- <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center;
58
- line-height:90%'><span lang=EN-US style='font-size:10.0pt;line-height:90%;
59
- font-family:"Arial",sans-serif;color:black'><o:p>&nbsp;</o:p></span></p>
60
-
61
- <div style='mso-element:para-border-div;border:solid black 1.0pt;padding:8.0pt 8.0pt 8.0pt 8.0pt;
62
- background:#D9D9D9'>
63
-
64
- <p class=MsoNormal align=left style='margin-top:6.0pt;margin-right:0cm;
65
- margin-bottom:6.0pt;margin-left:0cm;text-align:left;mso-pagination:widow-orphan;
66
- mso-hyphenate:auto;background:#D9D9D9;mso-layout-grid-align:auto;mso-vertical-align-alt:
67
- auto;border:none;mso-border-alt:solid black 1.0pt;padding:0cm;mso-padding-alt:
68
- 8.0pt 8.0pt 8.0pt 8.0pt'><span lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:
69
- 12.0pt;mso-bidi-font-family:Arial'>Certain commercial entities, equipment, or
70
- materials may be identified in this document in order to describe an
71
- experimental procedure or concept adequately. Such identification is not
72
- intended to imply recommendation or endorsement by NIST, nor is it intended to
73
- imply that the entities, materials, or equipment are necessarily the best
74
- available for the purpose. <o:p></o:p></span></p>
75
-
76
- <p class=MsoNormal align=left style='margin-top:6.0pt;margin-right:0cm;
77
- margin-bottom:6.0pt;margin-left:0cm;text-align:left;mso-pagination:widow-orphan;
78
- mso-hyphenate:auto;background:#D9D9D9;mso-layout-grid-align:auto;mso-vertical-align-alt:
79
- auto;border:none;mso-border-alt:solid black 1.0pt;padding:0cm;mso-padding-alt:
80
- 8.0pt 8.0pt 8.0pt 8.0pt'><span lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:
81
- 12.0pt;mso-bidi-font-family:Arial'>There may be references in this publication
82
- to other publications currently under development by NIST in accordance with
83
- its assigned statutory responsibilities. The information in this publication,
84
- including concepts and methodologies, may be used by federal agencies even
85
- before the completion of such companion publications. Thus, until each
86
- publication is completed, current requirements, guideline<span
87
- style='color:black'>s, a</span>nd procedures, where they exist, remain
88
- operative. For planning and transition purposes, federal agencies may wish to
89
- closely follow the development of these new publications by NIST.<span
90
- style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
91
-
92
- <p class=MsoNormal align=left style='margin-bottom:12.0pt;text-align:left;
93
- line-height:90%;background:#D9D9D9;border:none;mso-border-alt:solid black 1.0pt;
94
- padding:0cm;mso-padding-alt:8.0pt 8.0pt 8.0pt 8.0pt'><span lang=EN-US
95
- style='font-size:10.0pt;mso-bidi-font-size:12.0pt;line-height:90%'>Organizations
96
- are encouraged to review all draft publications during public comment periods
97
- and provide feedback to NIST. Many NIST cybersecurity publications<span
98
- style='color:black'>, ot</span>her than the ones noted above, are available at <u><span
99
- style='color:blue'><a href="https://csrc.nist.gov/publications"
100
- title="NIST Computer Security Division publications">https://csrc.nist.gov/publications</a></span></u>.</span><b><span
101
- lang=EN-US style='font-size:12.0pt;mso-bidi-font-size:11.0pt;line-height:90%;
102
- font-family:"Arial",sans-serif;color:black'><o:p></o:p></span></b></p>
103
-
104
- </div>
105
-
106
- {% if comment_extended %}
107
- <p class=MsoNormal align="center">[{{ comment_extended}}: Comment period extended]</p>
108
- {% endif %}
109
-
110
- {% if comment_from and comment_to %}
111
- <p class=MsoNormal align="center"><b>Public comment period: <i>{{ comment_from }}</i> through <i>{{comment_to}}</i></b></p>
112
- {% else %}
113
- {% if comment_from %}
114
- <p class=MsoNormal align="center"><b>Public comment period: from <i>{{ comment_from }}</i></b></p>
115
- {% endif %}
116
- {% endif %}
117
-
118
-
119
- <p class=MsoNormal align=center style='margin-bottom:6.0pt;text-align:center'><b><span
120
- lang=EN-US style='font-size:11.0pt;font-family:"Arial",sans-serif'>Comments
121
- on this publication may be submitted to:</span></b><b style='mso-bidi-font-weight:
122
- normal'><span lang=EN-US style='mso-bidi-font-size:11.0pt;font-family:"Arial",sans-serif'><o:p></o:p></span></b></p>
123
-
124
- <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span
125
- lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif'>National
126
- Institute of Standards and Technology<br>
127
- Attn: Computer Security Division, Information Technology Laboratory<br>
128
- 100 Bureau Drive (Mail Stop 8930) Gaithersburg, MD 20899-8930<br>
129
- Email: <span class=MsoHyperlink><a href="mailto:{{ email }}">{{ email }}</a></span><o:p></o:p></span></p>
130
-
131
- <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span
132
- lang=EN-US style='font-size:11.0pt;font-family:"Arial",sans-serif'>All
133
- comments are subject to release under the Freedom of Information Act (FOIA).<o:p></o:p></span></p>
134
-
135
- <p><span lang=EN-US style='font-size:11.0pt;mso-bidi-font-size:11.0pt;font-family:
136
- "Times New Roman",serif;mso-fareast-font-family:"Times New Roman";mso-ansi-language:
137
- EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always;'></span></p>
138
-
139
- <h1 class="IntroTitle">Reports on Computer Systems Technology</h1>
140
-
141
- <p class=MsoNormal align=left style='margin-bottom:12.0pt;text-align:left'><span
142
- lang=EN-US style='font-size:12.0pt'>The Information Technology Laboratory (<span
143
- class=SpellE>ITL</span>) at the National Institute of Standards and Technology
144
- (NIST) promotes the U.S. economy and public welfare by providing technical
145
- leadership for the Nation’s measurement and standards infrastructure. <span
146
- class=SpellE>ITL</span> develops tests, test methods, reference data, proof of
147
- concept implementations, and technical analyses to advance the development and
148
- productive use of information technology. <span class=SpellE>ITL’s</span>
149
- responsibilities include the development of management, administrative,
150
- technical, and physical standards and guidelines for the cost-effective
151
- security and privacy of other than national security-related information in federal
152
- information systems. The Special Publication 800-series reports on <span
153
- class=SpellE>ITL’s</span> research, guidelines, and outreach efforts in
154
- information system security, and its collaborative activities with industry,
155
- government, and academic organizations.<o:p></o:p></span></p>
@@ -1,4 +1,4 @@
1
- <p class="ReportNumber"><span lang="EN-US">{{ docnumber_long }}
1
+ <p class="ReportNumber"><span lang="EN-US">{{ draft_prefix }} {{ docidentifier_long }}
2
2
  {% if edition %} <br/> Revision {{ edition }} {% endif %}
3
3
  {% if draftinfo %}
4
4
  <br/>{{ draftinfo }}
@@ -39,15 +39,14 @@ mso-hyphenate:auto;text-autospace:none;mso-vertical-align-alt:auto;margin-bottom
39
39
  lang="EN-US" style='font-size:14.0pt;color:black'>&#xa0;<o:p></o:p></span></p>
40
40
 
41
41
 
42
- {% if url %}
42
+ {% if doi %}
43
43
  <p class="MsoNormal" align="right" style='text-align:right;mso-pagination:widow-orphan;
44
44
  mso-hyphenate:auto;text-autospace:none;mso-vertical-align-alt:auto;margin-bottom:0.0pt'><span
45
45
  lang="EN-US" style='font-size:14.0pt;color:black'>This publication is available
46
46
  free of charge from:<o:p></o:p></span></p>
47
47
  <p class="MsoNormal" align="right" style='text-align:right;mso-pagination:widow-orphan;
48
48
  mso-hyphenate:auto;text-autospace:none;mso-vertical-align-alt:auto;margin-bottom:0.0pt'><span
49
- lang="EN-US" style='font-size:14.0pt;color:black'>{{ url }}<o:p></o:p></span></p>
50
-
49
+ lang="EN-US" style='font-size:14.0pt;color:black'>{{ doi }}<o:p></o:p></span></p>
51
50
  {% endif %}
52
51
 
53
52
  <p class="MsoNormal" align="right" style='text-align:right;mso-pagination:widow-orphan;
@@ -68,7 +67,8 @@ padding:1.0pt 0cm 1.0pt 0cm'>
68
67
  <p class="MsoNormal" align="center" style='text-align:center;border:none;
69
68
  mso-border-top-alt:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;
70
69
  padding:0cm;mso-padding-alt:1.0pt 0cm 1.0pt 0cm'><span lang="EN-US"
71
- style='font-size:16.0pt;font-family:"Arial",sans-serif;mso-ansi-language:EN-US;letter-spacing:10.0pt'>{{ subseries }}<o:p></o:p></span></p>
70
+ style='font-size:16.0pt;font-family:"Arial",sans-serif;mso-ansi-language:EN-US;letter-spacing:10.0pt'>{{ docclasstitle }}<o:p></o:p></span></p>
71
+
72
72
 
73
73
  </div>
74
74
 
@@ -126,7 +126,7 @@ EN-US;mso-bidi-language:AR-SA'><br clear="all" style='page-break-before:always;'
126
126
  mso-pagination:widow-orphan;mso-hyphenate:auto;mso-layout-grid-align:auto;
127
127
  mso-vertical-align-alt:auto'><b style='mso-bidi-font-weight:normal'><span
128
128
  lang="EN-US" style='font-size:20.0pt;mso-bidi-font-size:12.0pt;line-height:90%'>
129
- {{ docnumber_long }}
129
+ {{ draft_prefix }} {{ docidentifier_long }}
130
130
  {% if draftinfo %}
131
131
  <br/>{{ draftinfo }}
132
132
  {% endif %}
@@ -396,7 +396,7 @@ h1.NormalTitle {
396
396
 
397
397
  h1.Annex {
398
398
  }
399
- .h2Annex
399
+ .h2Annex, .h2Preface
400
400
  {mso-style-priority:2;
401
401
  mso-style-unhide:no;
402
402
  mso-style-qformat:yes;
@@ -42,23 +42,11 @@ module IsoDoc
42
42
  @meta = Metadata.new(lang, script, labels)
43
43
  end
44
44
 
45
- def html_head
45
+ def googlefonts
46
46
  <<~HEAD.freeze
47
- <title>{{ doctitle }}</title>
48
- <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
49
-
50
- <!--TOC script import-->
51
- <script type="text/javascript" src="https://cdn.rawgit.com/jgallen23/toc/0.3.2/dist/toc.min.js"></script>
52
-
53
- <!--Google fonts-->
54
47
  <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,600,600i" rel="stylesheet">
55
48
  <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i|Space+Mono:400,700" rel="stylesheet" />
56
49
  <link href="https://fonts.googleapis.com/css?family=Libre+Baskerville:400,400i,700,700i" rel="stylesheet">
57
-
58
- <!--Font awesome import for the link icon-->
59
- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
60
- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/fontawesome.css" integrity="sha384-q3jl8XQu1OpdLgGFvNRnPdj5VIlCvgsDQTQB6owSOHWlAurxul7f+JpUOVdAiJ5P" crossorigin="anonymous">
61
- <style class="anchorjs"></style>
62
50
  HEAD
63
51
  end
64
52
 
@@ -75,12 +63,24 @@ module IsoDoc
75
63
  docxml
76
64
  end
77
65
 
66
+ def authority_cleanup(docxml)
67
+ dest = docxml.at("//div[@id = 'authority']") || return
68
+ auth = docxml.at("//div[@class = 'authority']") || return
69
+ dest.replace(auth.remove)
70
+ end
71
+
78
72
  def cleanup(docxml)
79
73
  super
80
74
  term_cleanup(docxml)
81
75
  requirement_cleanup(docxml)
82
76
  end
83
77
 
78
+ def html_preface(docxml)
79
+ super
80
+ authority_cleanup(docxml)
81
+ docxml
82
+ end
83
+
84
84
  def make_body3(body, docxml)
85
85
  body.div **{ class: "main-section" } do |div3|
86
86
  abstract docxml, div3
@@ -137,6 +137,7 @@ module IsoDoc
137
137
  def preface(isoxml, out)
138
138
  isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
139
139
  foreword(isoxml, out) and next if c.name == "foreword"
140
+ authority_parse(c, out) and next if c.name == "authority"
140
141
  next if skip_render(c, isoxml)
141
142
  out.div **attr_code(id: c["id"]) do |s|
142
143
  clause_name(get_anchors[c['id']][:label],
@@ -226,11 +227,45 @@ module IsoDoc
226
227
  when "requirement" then requirement_parse(node, out)
227
228
  when "permission" then permission_parse(node, out)
228
229
  when "errata" then errata_parse(node, out)
230
+ when "authority" then authority_parse(node, out)
231
+ when "authority1" then authority1_parse(node, out, "authority1")
232
+ when "authority2" then authority1_parse(node, out, "authority2")
233
+ when "authority3" then authority1_parse(node, out, "authority3")
234
+ when "authority4" then authority1_parse(node, out, "authority4")
235
+ when "authority5" then authority1_parse(node, out, "authority5")
229
236
  else
230
237
  super
231
238
  end
232
239
  end
233
240
 
241
+ def authority_parse(node, out)
242
+ out.div **{class: "authority"} do |s|
243
+ node.children.each do |n|
244
+ if n.name == "title"
245
+ s.h1 do |h|
246
+ n.children.each { |nn| parse(nn, h) }
247
+ end
248
+ else
249
+ parse(n, s)
250
+ end
251
+ end
252
+ end
253
+ end
254
+
255
+ def authority1_parse(node, out, classname)
256
+ out.div **{class: classname} do |s|
257
+ node.children.each do |n|
258
+ if n.name == "title"
259
+ s.h2 do |h|
260
+ n.children.each { |nn| parse(nn, h) }
261
+ end
262
+ else
263
+ parse(n, s)
264
+ end
265
+ end
266
+ end
267
+ end
268
+
234
269
  def nistvariable_parse(node, out)
235
270
  out.span **{class: "nistvariable"} do |s|
236
271
  node.children.each { |n| parse(n, s) }
@@ -318,6 +353,7 @@ module IsoDoc
318
353
  @meta.keywords isoxml, out
319
354
  @meta.series isoxml, out
320
355
  @meta.commentperiod isoxml, out
356
+ @meta.commentperiod isoxml, out
321
357
  super
322
358
  end
323
359
 
@@ -11,13 +11,15 @@ module IsoDoc
11
11
  end
12
12
 
13
13
  def title(isoxml, out)
14
- main = isoxml&.at(ns("//bibdata/title/title-main"))&.text
14
+ main = isoxml&.at(ns("//bibdata/title[@type = 'main']"))&.text
15
15
  set(:doctitle, main)
16
16
  end
17
17
 
18
18
  def subtitle(isoxml, _out)
19
- main = isoxml&.at(ns("//bibdata/title/title-sub"))&.text or return
20
- set(:docsubtitle, main)
19
+ main = isoxml&.at(ns("//bibdata/title[@type = 'subtitle']"))&.text
20
+ set(:docsubtitle, main) if main
21
+ main = isoxml&.at(ns("//bibdata/title[@type = 'document-class']"))&.text
22
+ set(:docclasstitle, main) if main
21
23
  end
22
24
 
23
25
  def author(isoxml, _out)
@@ -32,20 +34,21 @@ module IsoDoc
32
34
  "[@type = 'nist-long']"))&.text
33
35
  docnumber = isoxml.at(ns("//bibdata/docnumber"))&.text
34
36
  set(:docidentifier, docid)
35
- set(:docidentifier_long, draft_prefix(docid_long, isoxml))
37
+ set(:docidentifier_long, docid_long)
38
+ d = draft_prefix(isoxml) and set(:draft_prefix, d)
36
39
  set(:docnumber, docnumber)
37
40
  end
38
41
 
39
- def draft_prefix(docidentifier_long, isoxml)
40
- return nil if docidentifier_long.nil?
42
+ def draft_prefix(isoxml)
41
43
  docstatus = isoxml.at(ns("//bibdata/status/stage"))&.text
42
- return docidentifier_long unless docstatus && docstatus != "final"
44
+ return nil unless docstatus &&
45
+ !%w(final withdrawn).include?(docstatus)
43
46
  iter = isoxml.at(ns("//bibdata/status/iteration"))&.text
44
47
  prefix = "DRAFT "
45
48
  /^\d+$/.match iter and
46
49
  iter = iter.to_i.localize.to_rbnf_s("OrdinalRules", "digits-ordinal")
47
50
  prefix += "(#{iter}) " if iter
48
- prefix + docidentifier_long
51
+ prefix
49
52
  end
50
53
 
51
54
  def draftinfo(draft, revdate)
@@ -67,7 +70,7 @@ module IsoDoc
67
70
  end
68
71
 
69
72
  def adjust_docstatus(status, iter)
70
- return unless iter and status
73
+ return status unless iter and status
71
74
  status = "initial-public-draft" if status == "public-draft" &&
72
75
  (iter == "1" || iter == "initial")
73
76
  status = "final-public-draft" if status == "public-draft" &&
@@ -76,6 +79,7 @@ module IsoDoc
76
79
  end
77
80
 
78
81
  def version(isoxml, _out)
82
+ #require "byebug"; byebug
79
83
  super
80
84
  revdate = get[:revdate]
81
85
  set(:revdate_monthyear, monthyr(revdate))
@@ -134,6 +138,25 @@ module IsoDoc
134
138
  a = xml.at(ns("//bibdata/uri[@type = 'uri' or not(@type)]")) and
135
139
  set(:url, a.text)
136
140
  end
141
+
142
+ def relations1(isoxml, type)
143
+ ret = []
144
+ isoxml.xpath(ns("//bibdata/relation[@type = '#{type}']")).each do |x|
145
+ ret << x.at(ns(".//docidentifier")).text if x.at(ns(".//docidentifier"))
146
+ end
147
+ ret
148
+ end
149
+
150
+ def relations(isoxml, _out)
151
+ ret = relations1(isoxml, "obsoletes")
152
+ set(:obsoletes, ret) unless ret.empty?
153
+ ret = relations1(isoxml, "obsoletedBy")
154
+ set(:obsoletedby, ret) unless ret.empty?
155
+ ret = relations1(isoxml, "supersedes")
156
+ set(:supersedes, ret) unless ret.empty?
157
+ ret = relations1(isoxml, "supersededBy")
158
+ set(:supersededby, ret) unless ret.empty?
159
+ end
137
160
  end
138
161
  end
139
162
  end
@@ -49,6 +49,11 @@ module IsoDoc
49
49
 
50
50
  <!--TOC script import-->
51
51
  <script type="text/javascript" src="https://cdn.rawgit.com/jgallen23/toc/0.3.2/dist/toc.min.js"></script>
52
+ <script type="text/javascript">
53
+ function toclevel() { var i; var text = "";
54
+ for(i = 1; i <= #{@htmlToClevels}; i++) {
55
+ if (i > 1) { text += ","; } text += "h" + i + ":not(.TermNum)"; } }
56
+ </script>
52
57
 
53
58
  <!--Google fonts-->
54
59
  <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,600,600i" rel="stylesheet">
@@ -109,6 +114,7 @@ module IsoDoc
109
114
  def preface(isoxml, out)
110
115
  isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
111
116
  foreword(isoxml, out) and next if c.name == "foreword"
117
+ authority_parse(isoxml, out) and next if c.name == "authority"
112
118
  next if skip_render(c, isoxml)
113
119
  out.div **attr_code(id: c["id"]) do |s|
114
120
  clause_name(get_anchors[c['id']][:label],
@@ -143,12 +149,24 @@ module IsoDoc
143
149
  File.join(File.dirname(__FILE__), loc)
144
150
  end
145
151
 
152
+ def authority_cleanup(docxml)
153
+ dest = docxml.at("//div[@id = 'authority']") || return
154
+ auth = docxml.at("//div[@class = 'authority']") || return
155
+ dest.replace(auth.remove)
156
+ end
157
+
146
158
  def cleanup(docxml)
147
159
  super
148
160
  term_cleanup(docxml)
149
161
  requirement_cleanup(docxml)
150
162
  end
151
163
 
164
+ def html_preface(docxml)
165
+ super
166
+ authority_cleanup(docxml)
167
+ docxml
168
+ end
169
+
152
170
  def term_cleanup(docxml)
153
171
  docxml.xpath("//p[@class = 'Terms']").each do |d|
154
172
  h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
@@ -213,11 +231,44 @@ module IsoDoc
213
231
  when "requirement" then requirement_parse(node, out)
214
232
  when "permission" then permission_parse(node, out)
215
233
  when "errata" then errata_parse(node, out)
234
+ when "authority" then authority_parse(node, out)
235
+ when "authority1" then authority1_parse(node, out, "authority1")
236
+ when "authority2" then authority1_parse(node, out, "authority2")
237
+ when "authority3" then authority1_parse(node, out, "authority3")
238
+ when "authority4" then authority1_parse(node, out, "authority4")
239
+ when "authority5" then authority1_parse(node, out, "authority5")
216
240
  else
217
241
  super
218
242
  end
219
243
  end
220
244
 
245
+ def authority_parse(node, out)
246
+ out.div **{class: "authority"} do |s|
247
+ node.children.each do |n|
248
+ if n.name == "title"
249
+ s.h1 do |h|
250
+ n.children.each { |nn| parse(nn, h) }
251
+ end
252
+ else
253
+ parse(n, s)
254
+ end
255
+ end
256
+ end
257
+ end
258
+ def authority1_parse(node, out, classname)
259
+ out.div **{class: classname} do |s|
260
+ node.children.each do |n|
261
+ if n.name == "title"
262
+ s.h2 do |h|
263
+ n.children.each { |nn| parse(nn, h) }
264
+ end
265
+ else
266
+ parse(n, s)
267
+ end
268
+ end
269
+ end
270
+ end
271
+
221
272
  def nistvariable_parse(node, out)
222
273
  out.span **{class: "nistvariable"} do |s|
223
274
  node.children.each { |n| parse(n, s) }
@@ -1,6 +1,7 @@
1
1
  require "isodoc"
2
2
  require_relative "metadata"
3
3
  require "fileutils"
4
+ require "sassc"
4
5
 
5
6
  module IsoDoc
6
7
  module NIST
@@ -68,13 +69,19 @@ module IsoDoc
68
69
  section_break(body)
69
70
  end
70
71
 
72
+ def authority_cleanup(docxml)
73
+ insert = docxml.at("//div[@class = 'WordSection2']")
74
+ auth = docxml&.at("//div[@class = 'authority']")&.remove || return
75
+ insert.children.first.add_previous_sibling(auth)
76
+ end
77
+
71
78
  def cleanup(docxml)
72
79
  super
73
80
  term_cleanup(docxml)
74
81
  requirement_cleanup(docxml)
75
82
  h1_cleanup(docxml)
76
83
  word_annex_cleanup(docxml) # need it earlier
77
- toc_insert(docxml)
84
+ toc_insert(docxml, @wordToClevels)
78
85
  end
79
86
 
80
87
  # create fallback h1 class to deal with page breaks
@@ -84,31 +91,22 @@ module IsoDoc
84
91
  end
85
92
  end
86
93
 
87
- def word_annex_cleanup(docxml)
88
- super
89
- docxml.xpath("//h1[ancestor::*[@class = 'Section3']]").each do |h2|
90
- h2.name = "p"
91
- h2["class"] = "h1Annex"
92
- end
93
- docxml.xpath("//h3[ancestor::*[@class = 'Section3']]").each do |h2|
94
- h2.name = "p"
95
- h2["class"] = "h3Annex"
96
- end
97
- docxml.xpath("//h4[ancestor::*[@class = 'Section3']]").each do |h2|
98
- h2.name = "p"
99
- h2["class"] = "h4Annex"
100
- end
101
- docxml.xpath("//h5[ancestor::*[@class = 'Section3']]").each do |h2|
102
- h2.name = "p"
103
- h2["class"] = "h5Annex"
104
- end
105
- docxml.xpath("//h6[ancestor::*[@class = 'Section3']]").each do |h2|
94
+ def word_annex_cleanup1(docxml, i)
95
+ docxml.xpath("//h#{i}[ancestor::*[@class = 'Section3']]").each do |h2|
106
96
  h2.name = "p"
107
- h2["class"] = "h6Annex"
97
+ h2["class"] = "h#{i}Annex"
108
98
  end
109
99
  end
110
100
 
111
- def toc_insert(docxml)
101
+ def word_annex_cleanup(docxml)
102
+ word_annex_cleanup1(docxml, 2)
103
+ word_annex_cleanup1(docxml, 3)
104
+ word_annex_cleanup1(docxml, 4)
105
+ word_annex_cleanup1(docxml, 5)
106
+ word_annex_cleanup1(docxml, 6)
107
+ end
108
+
109
+ def toc_insert(docxml, level)
112
110
  insertion = docxml.at("//div[h1 = 'Executive Summary']/"\
113
111
  "preceding-sibling::div[h1][1]") ||
114
112
  docxml.at("//div[@class = 'WordSection2']/child::*[last()]")
@@ -124,7 +122,7 @@ module IsoDoc
124
122
  insertion.next = make_AppendixWordToC(docxml)
125
123
  insertion.next = %{<p class="TOCTitle">List of Appendices</p>}
126
124
  end
127
- insertion.next = make_WordToC(docxml)
125
+ insertion.next = make_WordToC(docxml, level)
128
126
  insertion.next = %{<p class="TOCTitle" style="page-break-before:
129
127
  always;">Table of Contents</p>}
130
128
  docxml
@@ -187,18 +185,6 @@ module IsoDoc
187
185
  %{\\1#{WORD_TOC_APPENDIX_PREFACE1}}) + WORD_TOC_SUFFIX1
188
186
  end
189
187
 
190
- def make_WordToC(docxml)
191
- toc = ""
192
- docxml.xpath("//h1[not(ancestor::*[@class = 'WordSection2'])] |"\
193
- "//h1[contains(., 'Executive Summary')] |"\
194
- "//h2[not(ancestor::*[@class = 'WordSection2'])] |"\
195
- "//h3[not(ancestor::*[@class = 'WordSection2'])]").each do |h|
196
- toc += word_toc_entry(h.name[1].to_i, header_strip(h))
197
- end
198
- toc.sub(/(<p class="MsoToc1">)/,
199
- %{\\1#{WORD_TOC_PREFACE1}}) + WORD_TOC_SUFFIX1
200
- end
201
-
202
188
  def word_preface_cleanup(docxml)
203
189
  docxml.xpath("//h1[@class = 'AbstractTitle'] | "\
204
190
  "//h1[@class = 'IntroTitle']").each do |h2|
@@ -210,6 +196,7 @@ module IsoDoc
210
196
  def word_cleanup(docxml)
211
197
  super
212
198
  word_preface_cleanup(docxml)
199
+ authority_cleanup(docxml)
213
200
  docxml
214
201
  end
215
202
 
@@ -265,6 +252,7 @@ module IsoDoc
265
252
  def preface(isoxml, out)
266
253
  isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
267
254
  foreword(isoxml, out) and next if c.name == "foreword"
255
+ authority_parse(c, out) and next if c.name == "authority"
268
256
  next if skip_render(c, isoxml)
269
257
  title = c&.at(ns("./title"))
270
258
  patent = ["Call for Patent Claims", "Patent Disclosure Notice"].include? title&.text
@@ -371,11 +359,44 @@ module IsoDoc
371
359
  when "requirement" then requirement_parse(node, out)
372
360
  when "permission" then permission_parse(node, out)
373
361
  when "errata" then errata_parse(node, out)
362
+ when "authority" then authority_parse(node, out)
363
+ when "authority1" then authority1_parse(node, out, "authority1")
364
+ when "authority2" then authority1_parse(node, out, "authority2")
365
+ when "authority3" then authority1_parse(node, out, "authority3")
366
+ when "authority4" then authority1_parse(node, out, "authority4")
367
+ when "authority5" then authority1_parse(node, out, "authority5")
374
368
  else
375
369
  super
376
370
  end
377
371
  end
378
372
 
373
+ def authority_parse(node, out)
374
+ out.div **{class: "authority"} do |s|
375
+ node.children.each do |n|
376
+ if n.name == "title"
377
+ s.p **{class: "h1Preface"} do |h|
378
+ n.children.each { |nn| parse(nn, h) }
379
+ end
380
+ else
381
+ parse(n, s)
382
+ end
383
+ end
384
+ end
385
+ end
386
+ def authority1_parse(node, out, classname)
387
+ out.div **{class: classname} do |s|
388
+ node.children.each do |n|
389
+ if n.name == "title"
390
+ s.p **{class: "h2Preface"} do |h|
391
+ n.children.each { |nn| parse(nn, h) }
392
+ end
393
+ else
394
+ parse(n, s)
395
+ end
396
+ end
397
+ end
398
+ end
399
+
379
400
  def nistvariable_parse(node, out)
380
401
  out.span **{class: "nistvariable"} do |s|
381
402
  node.children.each { |n| parse(n, s) }
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module NIST
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end