metanorma-nist 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: efbc5ed91c60f75c2357b75e8e4b46aff94fbbda2e5ff42b5ae23ccdacee11b8
4
- data.tar.gz: e11867a00497daa2adde0df1a6589fa8100e3ede705e9c35aabb06083b5bee95
3
+ metadata.gz: 479ffc86d11ce177921f465e151fb8fa57f20e946234b079879523f2de275e68
4
+ data.tar.gz: 681de2826b7931bab707e701dc85fc6ed090c860c3c20e5105c86fbe57c837f0
5
5
  SHA512:
6
- metadata.gz: b22030c9411714d60f7d5a4331ebdb558801a4054844658179c82ce8df69cb7893d38ba704438df0092407e4708d3b7317ce83221aa82db768f90ba85e994a7f
7
- data.tar.gz: c8f098eec3c4b877b86425f06bfc5d82c5b4e0dbd9472a75073ce18389d0ded1936923348d1d51050df38c663f8f3689e4bf72b3be7b5fc06a64d68b6308a825
6
+ metadata.gz: 9cd443581973f965269c74a3b4b185014513cda9733135a117db5e3775b201d5ccaa146c587ff7694166f9bc09f2af59b833f650bb0d8019e9950eff84384d72
7
+ data.tar.gz: 73566c4935a4778599499eec7f88bf2d82ca4317420f6e8dc5a6b8594cd9b9103ed52bf8f1f9f75f2c25cba9438cf4d55384fe151b4bbad2b3a5330801e4d8b7
data/README.adoc CHANGED
@@ -145,8 +145,7 @@ introduced with `=`, is ignored)
145
145
 
146
146
  `:docnumber:`:: The internal identifier referring to this document.
147
147
 
148
- `:draft:`:: If present, review notes are included in the
149
- Metanorma XML output; otherwise they are suppressed. The value of
148
+ `:edition:`:: Edition (revision) of the document. The value of
150
149
  this attribute will be displayed as part of the heading, prefixed with "Revision".
151
150
 
152
151
  ////
@@ -138,7 +138,7 @@ module Asciidoctor
138
138
  result << noko { |ixml| front node, ixml }
139
139
  result << noko { |ixml| middle node, ixml }
140
140
  result << "</nist-standard>"
141
- result = textcleanup(result.flatten * "\n")
141
+ result = textcleanup(result)
142
142
  ret1 = cleanup(Nokogiri::XML(result))
143
143
  validate(ret1)
144
144
  ret1.root.add_namespace(nil, EXAMPLE_NAMESPACE)
@@ -493,6 +493,9 @@
493
493
  <attribute name="id">
494
494
  <data type="ID"/>
495
495
  </attribute>
496
+ <optional>
497
+ <attribute name="lang"/>
498
+ </optional>
496
499
  <optional>
497
500
  <ref name="tname"/>
498
501
  </optional>
@@ -21,6 +21,7 @@
21
21
  <div class="coverpage-doc-identity">
22
22
  <div class="doc-number">
23
23
  <div>{{ docnumber }}</div>
24
+ {% if edition %} <div> Revision {{ edition }}</div> {% endif %}
24
25
  <div> {{ draftinfo }}</div>
25
26
  </div>
26
27
 
@@ -590,7 +590,7 @@ ul > li:first-child {
590
590
  .rule {
591
591
  width: 100%;
592
592
  height: 1px;
593
- background-color: #000000;
593
+ background-color: #2677ea;
594
594
  margin: 2em 0;
595
595
  }
596
596
 
@@ -688,6 +688,10 @@ span.nistvariable {
688
688
  margin-left:-1.5em;
689
689
  }
690
690
 
691
+ .example .Sourcecode {
692
+ background: none;
693
+ }
694
+
691
695
  .pseudocode {
692
696
  background-color: #dddddd;
693
697
  padding: 1.2em;
@@ -1001,7 +1005,7 @@ h2 p {
1001
1005
  }
1002
1006
 
1003
1007
 
1004
- /* .copyright .name, .copyright .address {color: #485094;} */
1008
+ /* .copyright .name, .copyright .address {color: #2e81c2;} */
1005
1009
 
1006
1010
 
1007
1011
 
@@ -1,4 +1,5 @@
1
1
  <p class="ReportNumber"><span lang="EN-US">{{ docnumber_long }}
2
+ {% if edition %} <br/> Revision {{ edition }} {% endif %}
2
3
  {% if draftinfo %}
3
4
  <br/>{{ draftinfo }}
4
5
  {% endif %}
@@ -348,7 +348,7 @@ h1
348
348
  mso-ansi-language:EN-GB;
349
349
  mso-fareast-language:JA;
350
350
  mso-bidi-font-weight:normal;}
351
- .h1Preface
351
+ .h1Preface, .h1Annex
352
352
  {mso-style-priority:1;
353
353
  mso-style-unhide:no;
354
354
  mso-style-qformat:yes;
@@ -448,7 +448,7 @@ h2
448
448
  font-family:$headerfont;
449
449
  mso-font-kerning:14.0pt;
450
450
  mso-fareast-font-family:$headerfont;
451
- color:#000000;
451
+ color:#000000;
452
452
  mso-ansi-language:EN-GB;
453
453
  mso-fareast-language:JA;
454
454
  font-weight:bold;
@@ -477,12 +477,42 @@ h3
477
477
  mso-bidi-font-size:10.0pt;
478
478
  font-family:$headerfont;
479
479
  mso-font-kerning:14.0pt;
480
- color:#000000;
480
+ color:#000000;
481
481
  mso-fareast-font-family:$headerfont;
482
482
  mso-ansi-language:EN-GB;
483
483
  mso-fareast-language:JA;
484
484
  font-weight:bold;
485
485
  mso-bidi-font-weight:normal;}
486
+ .h3Annex
487
+ {mso-style-priority:3;
488
+ mso-style-unhide:no;
489
+ mso-style-qformat:yes;
490
+ mso-style-parent:"Heading 1";
491
+ mso-style-link:"Heading 3 Char";
492
+ mso-style-next:Normal;
493
+ mso-margin-top-alt:auto;
494
+ margin-right:0in;
495
+ margin-bottom:12.0pt;
496
+ margin-left:0in;
497
+ text-align:left;
498
+ text-indent:0in;
499
+ mso-pagination:none;
500
+ page-break-after:avoid;
501
+ mso-outline-level:3;
502
+ mso-hyphenate:none;
503
+ tab-stops:.5in;
504
+ mso-layout-grid-align:none;
505
+ font-size:11.0pt;
506
+ mso-bidi-font-size:10.0pt;
507
+ font-family:$headerfont;
508
+ mso-font-kerning:14.0pt;
509
+ color:#000000;
510
+ mso-fareast-font-family:$headerfont;
511
+ mso-ansi-language:EN-GB;
512
+ mso-fareast-language:JA;
513
+ font-weight:bold;
514
+ mso-bidi-font-weight:normal;}
515
+
486
516
  h4
487
517
  {mso-style-priority:4;
488
518
  mso-style-unhide:no;
@@ -507,12 +537,42 @@ h4
507
537
  mso-bidi-font-size:10.0pt;
508
538
  mso-font-kerning:14.0pt;
509
539
  font-family:$headerfont;
510
- color:#000000;
540
+ color:#000000;
511
541
  mso-fareast-font-family:$headerfont;
512
542
  mso-ansi-language:EN-GB;
513
543
  mso-fareast-language:JA;
514
544
  font-weight:bold;
515
545
  mso-bidi-font-weight:normal;}
546
+ .h4Annex
547
+ {mso-style-priority:4;
548
+ mso-style-unhide:no;
549
+ mso-style-qformat:yes;
550
+ mso-style-parent:"Heading 3";
551
+ mso-style-link:"Heading 4 Char";
552
+ mso-style-next:Normal;
553
+ mso-margin-top-alt:auto;
554
+ margin-right:0in;
555
+ margin-bottom:12.0pt;
556
+ margin-left:.6in;
557
+ text-align:left;
558
+ text-indent:-.6in;
559
+ mso-pagination:widow-orphan;
560
+ page-break-after:avoid;
561
+ mso-outline-level:4;
562
+ mso-hyphenate:none;
563
+ tab-stops:list .6in left .75in;
564
+ mso-layout-grid-align:auto;
565
+ font-size:11.0pt;
566
+ mso-bidi-font-size:10.0pt;
567
+ mso-font-kerning:14.0pt;
568
+ font-family:$headerfont;
569
+ color:#000000;
570
+ mso-fareast-font-family:$headerfont;
571
+ mso-ansi-language:EN-GB;
572
+ mso-fareast-language:JA;
573
+ font-weight:bold;
574
+ mso-bidi-font-weight:normal;}
575
+
516
576
  h5
517
577
  {mso-style-priority:5;
518
578
  mso-style-unhide:no;
@@ -543,6 +603,37 @@ h5
543
603
  mso-font-kerning:14.0pt;
544
604
  font-weight:bold;
545
605
  mso-bidi-font-weight:normal;}
606
+ .h5Annex
607
+ {mso-style-priority:5;
608
+ mso-style-unhide:no;
609
+ mso-style-qformat:yes;
610
+ mso-style-parent:"Heading 4";
611
+ mso-style-link:"Heading 5 Char";
612
+ mso-style-next:Normal;
613
+ mso-margin-top-alt:auto;
614
+ margin-right:0in;
615
+ margin-bottom:12.0pt;
616
+ margin-left:.7in;
617
+ text-align:left;
618
+ text-indent:-.7in;
619
+ mso-pagination:widow-orphan;
620
+ page-break-after:avoid;
621
+ mso-outline-level:5;
622
+ mso-list:l78 level5 lfo4;
623
+ mso-hyphenate:none;
624
+ tab-stops:list .7in left .75in;
625
+ mso-layout-grid-align:auto;
626
+ font-size:11.0pt;
627
+ mso-bidi-font-size:10.0pt;
628
+ font-family:$headerfont;
629
+ mso-fareast-font-family:$headerfont;
630
+ color:#000000;
631
+ mso-ansi-language:EN-GB;
632
+ mso-fareast-language:JA;
633
+ mso-font-kerning:14.0pt;
634
+ font-weight:bold;
635
+ mso-bidi-font-weight:normal;}
636
+
546
637
  h6
547
638
  {mso-style-priority:6;
548
639
  mso-style-unhide:no;
@@ -569,13 +660,46 @@ h6
569
660
  mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt;
570
661
  font-size:11.0pt;
571
662
  mso-bidi-font-size:10.0pt;
572
- color:white;
663
+ color:#000000;
573
664
  font-weight:bold;
574
665
  font-family:$headerfont;
575
666
  mso-fareast-font-family:$headerfont;
576
667
  mso-ansi-language:EN-GB;
577
668
  mso-fareast-language:JA;
578
669
  mso-bidi-font-weight:normal;}
670
+ .h6Annex
671
+ {mso-style-priority:6;
672
+ mso-style-unhide:no;
673
+ mso-style-qformat:yes;
674
+ mso-style-parent:"Heading 5";
675
+ mso-style-link:"Heading 6 Char";
676
+ mso-style-next:Normal;
677
+ margin-top:0in;
678
+ margin-right:0in;
679
+ margin-bottom:12.0pt;
680
+ margin-left:116.1pt;
681
+ text-align:justify;
682
+ text-indent:-.8in;
683
+ mso-pagination:none;
684
+ page-break-after:avoid;
685
+ mso-outline-level:6;
686
+ mso-list:l78 level6 lfo4;
687
+ mso-hyphenate:none;
688
+ background:black;
689
+ mso-layout-grid-align:none;
690
+ border:none;
691
+ mso-border-alt:solid windowtext .5pt;
692
+ padding:0in;
693
+ mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt;
694
+ font-size:11.0pt;
695
+ mso-bidi-font-size:10.0pt;
696
+ color:#000000;
697
+ font-weight:bold;
698
+ font-family:$headerfont;
699
+ mso-fareast-font-family:$headerfont;
700
+ mso-ansi-language:EN-GB;
701
+ mso-fareast-language:JA;
702
+ mso-bidi-font-weight:normal;}
579
703
 
580
704
  p.TOCTitle, li.TOCTitle, div.TOCTitle
581
705
  {mso-style-name:"TOC Title";
@@ -1142,6 +1266,107 @@ p.Tablebody, li.Tablebody, div.Tablebody
1142
1266
  margin-left:162.0pt;
1143
1267
  text-indent:-18.0pt;}
1144
1268
 
1269
+ p.ListContLevel1, li.ListContLevel1, div.ListContLevel1
1270
+ {mso-style-priority:34;
1271
+ margin-top:0cm;
1272
+ margin-left:18.0pt;
1273
+ margin-right:0cm;
1274
+ margin-bottom:12.0pt;
1275
+ mso-pagination:widow-orphan;
1276
+ font-size:11.0pt;
1277
+ font-family:$bodyfont;
1278
+ mso-ansi-language:EN-AU;
1279
+ mso-fareast-language:EN-US;}
1280
+ p.ListContLevel2, li.ListContLevel2, div.ListContLevel2
1281
+ {mso-style-priority:34;
1282
+ margin-top:0cm;
1283
+ margin-left:36.0pt;
1284
+ margin-right:0cm;
1285
+ margin-bottom:12.0pt;
1286
+ mso-pagination:widow-orphan;
1287
+ font-size:11.0pt;
1288
+ font-family:$bodyfont;
1289
+ mso-ansi-language:EN-AU;
1290
+ mso-fareast-language:EN-US;}
1291
+ p.ListContLevel3, li.ListContLevel3, div.ListContLevel3
1292
+ {mso-style-priority:34;
1293
+ margin-top:0cm;
1294
+ margin-left:54.0pt;
1295
+ margin-right:0cm;
1296
+ margin-bottom:12.0pt;
1297
+ mso-pagination:widow-orphan;
1298
+ font-size:11.0pt;
1299
+ font-family:$bodyfont;
1300
+ mso-ansi-language:EN-AU;
1301
+ mso-fareast-language:EN-US;}
1302
+ p.ListContLevel4, li.ListContLevel4, div.ListContLevel4
1303
+ {mso-style-priority:34;
1304
+ margin-top:0cm;
1305
+ margin-left:72.0pt;
1306
+ margin-right:0cm;
1307
+ margin-bottom:12.0pt;
1308
+ mso-pagination:widow-orphan;
1309
+ font-size:11.0pt;
1310
+ font-family:$bodyfont;
1311
+ mso-ansi-language:EN-AU;
1312
+ mso-fareast-language:EN-US;}
1313
+ p.ListContLevel5, li.ListContLevel5, div.ListContLevel5
1314
+ {mso-style-priority:34;
1315
+ margin-top:0cm;
1316
+ margin-left:90.0pt;
1317
+ margin-right:0cm;
1318
+ margin-bottom:12.0pt;
1319
+ mso-pagination:widow-orphan;
1320
+ font-size:11.0pt;
1321
+ font-family:$bodyfont;
1322
+ mso-ansi-language:EN-AU;
1323
+ mso-fareast-language:EN-US;}
1324
+ p.ListContLevel6, li.ListContLevel6, div.ListContLevel6
1325
+ {mso-style-priority:34;
1326
+ margin-top:0cm;
1327
+ margin-left:108.0pt;
1328
+ margin-right:0cm;
1329
+ margin-bottom:12.0pt;
1330
+ mso-pagination:widow-orphan;
1331
+ font-size:11.0pt;
1332
+ font-family:$bodyfont;
1333
+ mso-ansi-language:EN-AU;
1334
+ mso-fareast-language:EN-US;}
1335
+ p.ListContLevel7, li.ListContLevel7, div.ListContLevel7
1336
+ {mso-style-priority:34;
1337
+ margin-top:0cm;
1338
+ margin-left:126.0pt;
1339
+ margin-right:0cm;
1340
+ margin-bottom:12.0pt;
1341
+ mso-pagination:widow-orphan;
1342
+ font-size:11.0pt;
1343
+ font-family:$bodyfont;
1344
+ mso-ansi-language:EN-AU;
1345
+ mso-fareast-language:EN-US;}
1346
+ p.ListContLevel8, li.ListContLevel8, div.ListContLevel8
1347
+ {mso-style-priority:34;
1348
+ margin-top:0cm;
1349
+ margin-left:144.0pt;
1350
+ margin-right:0cm;
1351
+ margin-bottom:12.0pt;
1352
+ mso-pagination:widow-orphan;
1353
+ font-size:11.0pt;
1354
+ font-family:$bodyfont;
1355
+ mso-ansi-language:EN-AU;
1356
+ mso-fareast-language:EN-US;}
1357
+ p.ListContLevel9, li.ListContLevel9, div.ListContLevel9
1358
+ {mso-style-priority:34;
1359
+ margin-top:0cm;
1360
+ margin-left:162.0pt;
1361
+ margin-right:0cm;
1362
+ margin-bottom:12.0pt;
1363
+ mso-pagination:widow-orphan;
1364
+ font-size:11.0pt;
1365
+ font-family:$bodyfont;
1366
+ mso-ansi-language:EN-AU;
1367
+ mso-fareast-language:EN-US;}
1368
+
1369
+
1145
1370
  table.MsoNormalTable
1146
1371
  {mso-style-name:"Table Normal";
1147
1372
  mso-tstyle-rowband-size:0;
@@ -91,6 +91,24 @@ module IsoDoc
91
91
  end
92
92
  end
93
93
 
94
+ def bibliography(isoxml, out)
95
+ f = isoxml.at(ns("//bibliography/clause | //bibliography/references")) || return
96
+ page_break(out)
97
+ isoxml.xpath(ns("//bibliography/clause | //bibliography/references")).each do |f|
98
+ out.div do |div|
99
+ div.h1 **{ class: "Section3" } do |h1|
100
+ f&.at(ns("./title"))&.children.each { |n| parse(n, h1) }
101
+ end
102
+ f.elements.reject do |e|
103
+ ["reference", "title", "bibitem"].include? e.name
104
+ end.each { |e| parse(e, div) }
105
+ biblio_list(f, div, false)
106
+ end
107
+ end
108
+ end
109
+
110
+ # common from here on
111
+
94
112
  def abstract(isoxml, out)
95
113
  f = isoxml.at(ns("//preface/abstract")) || return
96
114
  page_break(out)
@@ -158,7 +176,8 @@ module IsoDoc
158
176
  end
159
177
 
160
178
  def requirement_cleanup(docxml)
161
- docxml.xpath("//div[@class = 'recommend'][title]").each do |d|
179
+ docxml.xpath("//div[@class = 'recommend' or @class = 'require' "\
180
+ "or @class = 'permission'][title]").each do |d|
162
181
  title = d.at("./title")
163
182
  title.name = "b"
164
183
  n = title.next_element
@@ -234,7 +253,7 @@ module IsoDoc
234
253
 
235
254
  def requirement_parse(node, out)
236
255
  name = node["type"]
237
- out.div **{ class: "recommend" } do |t|
256
+ out.div **{ class: "require" } do |t|
238
257
  t.title { |b| b << "Requirement #{get_anchors[node['id']][:label]}:" }
239
258
  node.children.each do |n|
240
259
  parse(n, t)
@@ -244,7 +263,7 @@ module IsoDoc
244
263
 
245
264
  def permission_parse(node, out)
246
265
  name = node["type"]
247
- out.div **{ class: "recommend" } do |t|
266
+ out.div **{ class: "permission" } do |t|
248
267
  t.title { |b| b << "Permission #{get_anchors[node['id']][:label]}:" }
249
268
  node.children.each do |n|
250
269
  parse(n, t)
@@ -299,22 +318,6 @@ module IsoDoc
299
318
  bibliography isoxml, out
300
319
  end
301
320
 
302
- def bibliography(isoxml, out)
303
- f = isoxml.at(ns("//bibliography/clause | //bibliography/references")) || return
304
- page_break(out)
305
- isoxml.xpath(ns("//bibliography/clause | //bibliography/references")).each do |f|
306
- out.div do |div|
307
- div.h1 **{ class: "Section3" } do |h1|
308
- f&.at(ns("./title"))&.children.each { |n| parse(n, h1) }
309
- end
310
- f.elements.reject do |e|
311
- ["reference", "title", "bibitem"].include? e.name
312
- end.each { |e| parse(e, div) }
313
- biblio_list(f, div, false)
314
- end
315
- end
316
- end
317
-
318
321
  def info(isoxml, out)
319
322
  @meta.keywords isoxml, out
320
323
  super
@@ -349,7 +352,6 @@ module IsoDoc
349
352
  end
350
353
  end
351
354
 
352
-
353
355
  def prefaceprefix(nodes)
354
356
  i = 0
355
357
  nodes.each do |n|
@@ -1,3 +1,2 @@
1
1
  clause: Section
2
2
  annex: Appendix
3
- draft_label: Revision
@@ -157,7 +157,8 @@ module IsoDoc
157
157
  end
158
158
 
159
159
  def requirement_cleanup(docxml)
160
- docxml.xpath("//div[@class = 'recommend'][title]").each do |d|
160
+ docxml.xpath("//div[@class = 'recommend' or @class = 'require' or "\
161
+ "@class = 'permission'][title]").each do |d|
161
162
  title = d.at("./title")
162
163
  title.name = "b"
163
164
  n = title.next_element
@@ -233,7 +234,7 @@ module IsoDoc
233
234
 
234
235
  def requirement_parse(node, out)
235
236
  name = node["type"]
236
- out.div **{ class: "recommend" } do |t|
237
+ out.div **{ class: "require" } do |t|
237
238
  t.title { |b| b << "Requirement #{get_anchors[node['id']][:label]}:" }
238
239
  node.children.each do |n|
239
240
  parse(n, t)
@@ -243,7 +244,7 @@ module IsoDoc
243
244
 
244
245
  def permission_parse(node, out)
245
246
  name = node["type"]
246
- out.div **{ class: "recommend" } do |t|
247
+ out.div **{ class: "permission" } do |t|
247
248
  t.title { |b| b << "Permission #{get_anchors[node['id']][:label]}:" }
248
249
  node.children.each do |n|
249
250
  parse(n, t)
@@ -15,14 +15,17 @@ module IsoDoc
15
15
 
16
16
  def convert1(docxml, filename, dir)
17
17
  FileUtils.cp html_doc_path("logo.png"), "#{@localdir}/logo.png"
18
- FileUtils.cp html_doc_path("deptofcommerce.png"), "#{@localdir}/deptofcommerce.png"
18
+ FileUtils.cp html_doc_path("deptofcommerce.png"),
19
+ "#{@localdir}/deptofcommerce.png"
19
20
  super
20
21
  end
21
22
 
22
23
  def default_fonts(options)
23
24
  {
24
- bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' : '"Times New Roman",serif'),
25
- headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Arial",sans-serif'),
25
+ bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' :
26
+ '"Times New Roman",serif'),
27
+ headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' :
28
+ '"Arial",sans-serif'),
26
29
  monospacefont: '"Courier New",monospace'
27
30
  }
28
31
  end
@@ -69,6 +72,7 @@ module IsoDoc
69
72
  term_cleanup(docxml)
70
73
  requirement_cleanup(docxml)
71
74
  h1_cleanup(docxml)
75
+ word_annex_cleanup(docxml) # need it earlier
72
76
  toc_insert(docxml)
73
77
  end
74
78
 
@@ -79,14 +83,109 @@ module IsoDoc
79
83
  end
80
84
  end
81
85
 
86
+ def word_annex_cleanup(docxml)
87
+ super
88
+ docxml.xpath("//h1[ancestor::*[@class = 'Section3']]").each do |h2|
89
+ h2.name = "p"
90
+ h2["class"] = "h1Annex"
91
+ end
92
+ docxml.xpath("//h3[ancestor::*[@class = 'Section3']]").each do |h2|
93
+ h2.name = "p"
94
+ h2["class"] = "h3Annex"
95
+ end
96
+ docxml.xpath("//h4[ancestor::*[@class = 'Section3']]").each do |h2|
97
+ h2.name = "p"
98
+ h2["class"] = "h4Annex"
99
+ end
100
+ docxml.xpath("//h5[ancestor::*[@class = 'Section3']]").each do |h2|
101
+ h2.name = "p"
102
+ h2["class"] = "h5Annex"
103
+ end
104
+ docxml.xpath("//h6[ancestor::*[@class = 'Section3']]").each do |h2|
105
+ h2.name = "p"
106
+ h2["class"] = "h6Annex"
107
+ end
108
+ end
109
+
82
110
  def toc_insert(docxml)
83
- insertion = docxml.at("//div[h1 = 'Executive Summary']/preceding-sibling::div[h1][1]") ||
84
- docxml.at("//div[@class = 'WordSection2']/child::*[last()]")
111
+ insertion = docxml.at("//div[h1 = 'Executive Summary']/"\
112
+ "preceding-sibling::div[h1][1]") ||
113
+ docxml.at("//div[@class = 'WordSection2']/child::*[last()]")
114
+ if docxml.at("//p[@class = 'TableTitle']")
115
+ insertion.next = make_TableWordToC(docxml)
116
+ insertion.next = %{<p class="TOCTitle">List of Tables</p>}
117
+ end
118
+ if docxml.at("//p[@class = 'FigureTitle']")
119
+ insertion.next = make_FigureWordToC(docxml)
120
+ insertion.next = %{<p class="TOCTitle">List of Figures</p>}
121
+ end
122
+ if docxml.at("//p[@class = 'h1Annex']")
123
+ insertion.next = make_AppendixWordToC(docxml)
124
+ insertion.next = %{<p class="TOCTitle">List of Appendices</p>}
125
+ end
85
126
  insertion.next = make_WordToC(docxml)
86
- insertion.next = %{<p class="TOCTitle" style="page-break-before: always;">Table of Contents</p>}
127
+ insertion.next = %{<p class="TOCTitle" style="page-break-before:
128
+ always;">Table of Contents</p>}
87
129
  docxml
88
130
  end
89
131
 
132
+ WORD_TOC_APPENDIX_PREFACE1 = <<~TOC.freeze
133
+ <span lang="EN-GB"><span
134
+ style='mso-element:field-begin'></span><span
135
+ style='mso-spacerun:yes'>&#xA0;</span>TOC
136
+ \\h \\z \\t &quot;h1Annex,1,h2Annex,2,h3Annex,3&quot; <span
137
+ style='mso-element:field-separator'></span></span>
138
+ TOC
139
+
140
+ WORD_TOC_TABLE_PREFACE1 = <<~TOC.freeze
141
+ <span lang="EN-GB"><span
142
+ style='mso-element:field-begin'></span><span
143
+ style='mso-spacerun:yes'>&#xA0;</span>TOC
144
+ \\h \\z \\t &quot;TableTitle,1&quot; <span
145
+ style='mso-element:field-separator'></span></span>
146
+ TOC
147
+
148
+ WORD_TOC_FIGURE_PREFACE1 = <<~TOC.freeze
149
+ <span lang="EN-GB"><span
150
+ style='mso-element:field-begin'></span><span
151
+ style='mso-spacerun:yes'>&#xA0;</span>TOC
152
+ \\h \\z \\t &quot;FigureTitle,1&quot; <span
153
+ style='mso-element:field-separator'></span></span>
154
+ TOC
155
+
156
+ def header_strip(h)
157
+ h = h.to_s.gsub(/<\/?p[^>]*>/, "")
158
+ super
159
+ end
160
+
161
+ def make_TableWordToC(docxml)
162
+ toc = ""
163
+ docxml.xpath("//p[@class = 'TableTitle']").each do |h|
164
+ toc += word_toc_entry(1, header_strip(h))
165
+ end
166
+ toc.sub(/(<p class="MsoToc1">)/,
167
+ %{\\1#{WORD_TOC_TABLE_PREFACE1}}) + WORD_TOC_SUFFIX1
168
+ end
169
+
170
+ def make_FigureWordToC(docxml)
171
+ toc = ""
172
+ docxml.xpath("//p[@class = 'FigureTitle']").each do |h|
173
+ toc += word_toc_entry(1, header_strip(h))
174
+ end
175
+ toc.sub(/(<p class="MsoToc1">)/,
176
+ %{\\1#{WORD_TOC_FIGURE_PREFACE1}}) + WORD_TOC_SUFFIX1
177
+ end
178
+
179
+ def make_AppendixWordToC(docxml)
180
+ toc = ""
181
+ docxml.xpath("//p[@class = 'h1Annex'] | //p[@class = 'h2Annex'] | "\
182
+ "p[@class = 'h3Annex']").each do |h|
183
+ toc += word_toc_entry(h["class"][1].to_i, header_strip(h))
184
+ end
185
+ toc.sub(/(<p class="MsoToc1">)/,
186
+ %{\\1#{WORD_TOC_APPENDIX_PREFACE1}}) + WORD_TOC_SUFFIX1
187
+ end
188
+
90
189
  def make_WordToC(docxml)
91
190
  toc = ""
92
191
  docxml.xpath("//h1[not(ancestor::*[@class = 'WordSection2'])] |"\
@@ -100,7 +199,8 @@ module IsoDoc
100
199
  end
101
200
 
102
201
  def word_preface_cleanup(docxml)
103
- docxml.xpath("//h1[@class = 'AbstractTitle'] | //h1[@class = 'IntroTitle']").each do |h2|
202
+ docxml.xpath("//h1[@class = 'AbstractTitle'] | "\
203
+ "//h1[@class = 'IntroTitle']").each do |h2|
104
204
  h2.name = "p"
105
205
  h2["class"] = "h1Preface"
106
206
  end
@@ -112,6 +212,24 @@ module IsoDoc
112
212
  docxml
113
213
  end
114
214
 
215
+ def bibliography(isoxml, out)
216
+ f = isoxml.at(ns("//bibliography/clause | "\
217
+ "//bibliography/references")) || return
218
+ page_break(out)
219
+ isoxml.xpath(ns("//bibliography/clause | "\
220
+ "//bibliography/references")).each do |f|
221
+ out.div do |div|
222
+ div.p **{ class: "h1Annex" } do |h1|
223
+ f&.at(ns("./title"))&.children.each { |n| parse(n, h1) }
224
+ end
225
+ f.elements.reject do |e|
226
+ ["reference", "title", "bibitem"].include? e.name
227
+ end.each { |e| parse(e, div) }
228
+ biblio_list(f, div, false)
229
+ end
230
+ end
231
+ end
232
+
115
233
  # Henceforth identical to html
116
234
 
117
235
  def abstract(isoxml, out)
@@ -131,9 +249,11 @@ module IsoDoc
131
249
  end
132
250
  end
133
251
 
134
- FRONT_CLAUSE = "//*[parent::preface][not(local-name() = 'abstract')]".freeze
252
+ FRONT_CLAUSE = "//*[parent::preface]"\
253
+ "[not(local-name() = 'abstract')]".freeze
135
254
 
136
- # All "[preface]" sections should have class "IntroTitle" to prevent page breaks
255
+ # All "[preface]" sections should have class "IntroTitle" to prevent
256
+ # page breaks
137
257
  # But for the Exec Summary
138
258
  def preface(isoxml, out)
139
259
  isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
@@ -142,7 +262,8 @@ module IsoDoc
142
262
  out.div **attr_code(id: c["id"]) do |s|
143
263
  clause_name(get_anchors[c['id']][:label],
144
264
  c&.at(ns("./title"))&.content, s,
145
- class: c.name == "executivesummary" ? "NormalTitle" : "IntroTitle")
265
+ class: c.name == "executivesummary" ? "NormalTitle" :
266
+ "IntroTitle")
146
267
  c.elements.reject { |c1| c1.name == "title" }.each do |c1|
147
268
  parse(c1, s)
148
269
  end
@@ -183,7 +304,8 @@ module IsoDoc
183
304
  end
184
305
 
185
306
  def requirement_cleanup(docxml)
186
- docxml.xpath("//div[@class = 'recommend'][title]").each do |d|
307
+ docxml.xpath("//div[@class = 'recommend' or @class = 'require' or "\
308
+ "@class = 'permission'][title]").each do |d|
187
309
  title = d.at("./title")
188
310
  title.name = "b"
189
311
  n = title.next_element
@@ -254,7 +376,8 @@ module IsoDoc
254
376
  def recommendation_parse(node, out)
255
377
  name = node["type"]
256
378
  out.div **{ class: "recommend" } do |t|
257
- t.title { |b| b << "Recommendation #{get_anchors[node['id']][:label]}:" }
379
+ t.title { |b| b << "Recommendation "\
380
+ "#{get_anchors[node['id']][:label]}:" }
258
381
  node.children.each do |n|
259
382
  parse(n, t)
260
383
  end
@@ -263,7 +386,7 @@ module IsoDoc
263
386
 
264
387
  def requirement_parse(node, out)
265
388
  name = node["type"]
266
- out.div **{ class: "recommend" } do |t|
389
+ out.div **{ class: "require" } do |t|
267
390
  t.title { |b| b << "Requirement #{get_anchors[node['id']][:label]}:" }
268
391
  node.children.each do |n|
269
392
  parse(n, t)
@@ -273,7 +396,7 @@ module IsoDoc
273
396
 
274
397
  def permission_parse(node, out)
275
398
  name = node["type"]
276
- out.div **{ class: "recommend" } do |t|
399
+ out.div **{ class: "permission" } do |t|
277
400
  t.title { |b| b << "Permission #{get_anchors[node['id']][:label]}:" }
278
401
  node.children.each do |n|
279
402
  parse(n, t)
@@ -319,7 +442,8 @@ module IsoDoc
319
442
  end
320
443
  end
321
444
 
322
- MIDDLE_CLAUSE = "//clause[parent::sections]|//terms[parent::sections]".freeze
445
+ MIDDLE_CLAUSE = "//clause[parent::sections] | "\
446
+ "//terms[parent::sections]".freeze
323
447
 
324
448
  def middle(isoxml, out)
325
449
  # NIST documents don't repeat the title
@@ -329,30 +453,14 @@ module IsoDoc
329
453
  bibliography isoxml, out
330
454
  end
331
455
 
332
- def bibliography(isoxml, out)
333
- f = isoxml.at(ns("//bibliography/clause | //bibliography/references")) || return
334
- page_break(out)
335
- isoxml.xpath(ns("//bibliography/clause | //bibliography/references")).each do |f|
336
- out.div do |div|
337
- div.h1 **{ class: "Section3" } do |h1|
338
- f&.at(ns("./title"))&.children.each { |n| parse(n, h1) }
339
- end
340
- f.elements.reject do |e|
341
- ["reference", "title", "bibitem"].include? e.name
342
- end.each { |e| parse(e, div) }
343
- biblio_list(f, div, false)
344
- end
345
- end
346
- end
347
-
348
456
  def info(isoxml, out)
349
457
  @meta.keywords isoxml, out
350
458
  super
351
459
  end
352
460
 
353
461
  SECTIONS_XPATH =
354
- "//foreword | //introduction | //reviewnote | //executivesummary | //annex | "\
355
- "//sections/clause | //bibliography/references | "\
462
+ "//foreword | //introduction | //reviewnote | //executivesummary | "\
463
+ "//annex | //sections/clause | //bibliography/references | "\
356
464
  "//bibliography/clause".freeze
357
465
 
358
466
  def initial_anchor_names(d)
@@ -430,8 +538,8 @@ module IsoDoc
430
538
  def hierarchical_recommendation_names(clause, num)
431
539
  clause.xpath(ns(".//recommendation")).each_with_index do |t, i|
432
540
  next if t["id"].nil? || t["id"].empty?
433
- @anchors[t["id"]] = anchor_struct("#{num}.#{i + 1}",
434
- t, "Recommendation", "recommendation")
541
+ @anchors[t["id"]] = anchor_struct("#{num}.#{i + 1}", t,
542
+ "Recommendation", "recommendation")
435
543
  end
436
544
  end
437
545
 
@@ -443,7 +551,8 @@ module IsoDoc
443
551
  end
444
552
 
445
553
  def get_linkend(node)
446
- link = anchor_linkend(node, docid_l10n(node["target"] || "[#{node['citeas']}]"))
554
+ link = anchor_linkend(node, docid_l10n(node["target"] ||
555
+ "[#{node['citeas']}]"))
447
556
  link += eref_localities(node.xpath(ns("./locality")), link)
448
557
  contents = node.children.select { |c| c.name != "locality" }
449
558
  return link if contents.nil? || contents.empty?
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module NIST
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-nist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
11
+ date: 2019-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor