metanorma-ietf 2.0.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92a8d58a02cc6332c80b36992ae11a45d2e02dfcb91e0860bdb32b9c8e6dbee6
4
- data.tar.gz: d28dd2d10743ffa9ae288233baaefd67177949d42cb0f2e0c7e1acfd661d67c8
3
+ metadata.gz: 47adf288717bcbd4914d1a3d43fb8eeea4d18fbb6f9675846c9ec37a9664f142
4
+ data.tar.gz: f0486d16c7a457465cce21790e3c76cb3422b0508d5ae57a150e15bf4e1059a7
5
5
  SHA512:
6
- metadata.gz: ec16d52d328daf9f8d25850d38e27f49660bf75e6e120227dc8f23f3bf97e0aea962640a95fa2a99f994460298d32dabbe54845e49e30b37a2fa4788a22e225e
7
- data.tar.gz: d726f6e9828215b0ad1b6a22b7d9b663995f875d6210077fa4f86140b9e7e26000f031eba5f61cf029e99cb4df01417825904f3f5dce17c689bd7c28fa39fd4f
6
+ metadata.gz: e22190786fb20f67dd85cc5e0bd3e831e32b5ee54c0de91d08780106a624e902c11108672469afdcf80451489fddc11472f0ee73910592c947550b3f243b4c0b
7
+ data.tar.gz: 85c7688efec6428a459a6d6f7d182c092ad68a5ed6a6e971e379fab3d6c6c46f5e77e083aa11be20d7570691505d3b61da50e217c93643451d215387e747d486
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/ubuntu.yml
11
+ - .github/workflows/windows.yml
9
12
 
10
13
  jobs:
11
14
  test-macos:
12
15
  name: Test on Ruby ${{ matrix.ruby }} macOS
13
16
  runs-on: macos-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Cache xml2rfc
@@ -6,15 +6,22 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
-
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/windows.yml
10
12
  jobs:
11
13
  test-linux:
12
14
  name: Test on Ruby ${{ matrix.ruby }} Ubuntu
13
15
  runs-on: ubuntu-latest
16
+ continue-on-error: ${{ matrix.experimental }}
14
17
  strategy:
15
18
  fail-fast: false
16
19
  matrix:
17
20
  ruby: [ '2.6', '2.5', '2.4' ]
21
+ experimental: [false]
22
+ include:
23
+ - ruby: '2.7'
24
+ experimental: true
18
25
  steps:
19
26
  - uses: actions/checkout@master
20
27
  - name: Cache xml2rfc
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/ubuntu.yml
9
12
 
10
13
  jobs:
11
14
  test-windows:
12
15
  name: Test on Ruby ${{ matrix.ruby }} Windows
13
16
  runs-on: windows-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Cache xml2rfc
data/Gemfile CHANGED
@@ -10,4 +10,4 @@ if File.exist? 'Gemfile.devel'
10
10
  eval File.read('Gemfile.devel'), nil, 'Gemfile.devel' # rubocop:disable Security/Eval
11
11
  end
12
12
 
13
- gem "metanorma-cli"
13
+ #gem "metanorma-cli"
@@ -88,7 +88,7 @@
88
88
  <text/>
89
89
  </element>
90
90
  </define>
91
- <define name="LocalizedString">
91
+ <define name="LocalizedString1">
92
92
  <optional>
93
93
  <!-- multiple languages and scripts possible: comma delimit them if so -->
94
94
  <attribute name="language"/>
@@ -98,6 +98,16 @@
98
98
  </optional>
99
99
  <text/>
100
100
  </define>
101
+ <define name="LocalizedString">
102
+ <choice>
103
+ <ref name="LocalizedString1"/>
104
+ <oneOrMore>
105
+ <element name="variant">
106
+ <ref name="LocalizedString1"/>
107
+ </element>
108
+ </oneOrMore>
109
+ </choice>
110
+ </define>
101
111
  <!--
102
112
  Unlike UML, change type to format: type is overloaded
103
113
  Would be need if plain were default value and could omit the attribute
@@ -121,7 +131,7 @@
121
131
  </optional>
122
132
  <ref name="LocalizedStringOrXsAny"/>
123
133
  </define>
124
- <define name="LocalizedStringOrXsAny">
134
+ <define name="LocalizedStringOrXsAny1">
125
135
  <optional>
126
136
  <!-- multiple languages and scripts possible: comma delimit them if so -->
127
137
  <attribute name="language"/>
@@ -136,6 +146,16 @@
136
146
  </choice>
137
147
  </oneOrMore>
138
148
  </define>
149
+ <define name="LocalizedStringOrXsAny">
150
+ <choice>
151
+ <ref name="LocalizedStringOrXsAny1"/>
152
+ <oneOrMore>
153
+ <element name="variant">
154
+ <ref name="LocalizedStringOrXsAny1"/>
155
+ </element>
156
+ </oneOrMore>
157
+ </choice>
158
+ </define>
139
159
  <define name="contributor">
140
160
  <element name="contributor">
141
161
  <zeroOrMore>
@@ -512,7 +532,7 @@
512
532
  </define>
513
533
  <define name="LocalityType">
514
534
  <data type="string">
515
- <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|locality:[a-zA-Z0-9_]+</param>
535
+ <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
516
536
  </data>
517
537
  </define>
518
538
  <define name="referenceFrom">
@@ -641,9 +661,9 @@
641
661
  <optional>
642
662
  <ref name="status"/>
643
663
  </optional>
644
- <optional>
664
+ <zeroOrMore>
645
665
  <ref name="copyright"/>
646
- </optional>
666
+ </zeroOrMore>
647
667
  <zeroOrMore>
648
668
  <ref name="docrelation"/>
649
669
  </zeroOrMore>
@@ -1001,7 +1021,17 @@
1001
1021
  <optional>
1002
1022
  <ref name="to"/>
1003
1023
  </optional>
1004
- <ref name="owner"/>
1024
+ <oneOrMore>
1025
+ <ref name="owner"/>
1026
+ </oneOrMore>
1027
+ <optional>
1028
+ <ref name="copyright_scope"/>
1029
+ </optional>
1030
+ </element>
1031
+ </define>
1032
+ <define name="copyright_scope">
1033
+ <element name="scope">
1034
+ <text/>
1005
1035
  </element>
1006
1036
  </define>
1007
1037
  <define name="from">
@@ -2,18 +2,20 @@ module Asciidoctor
2
2
  module Ietf
3
3
  class Converter < ::Asciidoctor::Standoc::Converter
4
4
  def para_attrs(node)
5
- attr_code( keepWithNext: node.attr("keepWithNext"),
6
- keepWithPrevious: node.attr("keepWithPrevious"),
5
+ attr_code( "keep-with-next": node.attr("keepWithNext") ||
6
+ node.attr("keep-with-next"),
7
+ "keep-with-previous": node.attr("keepWithPrevious") ||
8
+ node.attr("keep-with-previous"),
7
9
  id: ::Asciidoctor::Standoc::Utils::anchor_or_uuid(node))
8
10
  end
9
11
 
10
- def ul_attr(node)
12
+ def ul_attrs(node)
11
13
  attr_code(id: ::Asciidoctor::Standoc::Utils::anchor_or_uuid(node),
12
14
  nobullet: node.attr("nobullet"),
13
15
  spacing: node.attr("spacing"))
14
16
  end
15
17
 
16
- def ol_attr(node)
18
+ def ol_attrs(node)
17
19
  attr_code(id: ::Asciidoctor::Standoc::Utils::anchor_or_uuid(node),
18
20
  type: node.attr("format") || olist_style(node.style),
19
21
  group: node.attr("group"),
@@ -21,7 +23,7 @@ module Asciidoctor
21
23
  start: node.attr("start"))
22
24
  end
23
25
 
24
- def dl_attr(node)
26
+ def dl_attrs(node)
25
27
  attr_code(id: ::Asciidoctor::Standoc::Utils::anchor_or_uuid(node),
26
28
  newline: node.attr("newline"),
27
29
  indent: node.attr("indent"),
@@ -26,19 +26,9 @@ module Asciidoctor
26
26
  super
27
27
  end
28
28
 
29
- def document(node)
30
- init(node)
31
- ret1 = makexml(node)
32
- ret = ret1.to_xml(indent: 2)
33
- unless node.attr("nodoc") || !node.attr("docfile")
34
- filename = node.attr("docfile").gsub(/\.adoc/, ".xml").
35
- gsub(%r{^.*/}, "")
36
- File.open(filename, "w") { |f| f.write(ret) }
37
- rfc_converter(node).convert filename unless node.attr("nodoc")
38
- end
39
- @log.write(@localdir + @filename + ".err") unless @novalid
40
- @files_to_delete.each { |f| FileUtils.rm f }
41
- ret
29
+ def outputs(node, ret)
30
+ File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
31
+ rfc_converter(node).convert(@filename + ".xml")
42
32
  end
43
33
 
44
34
  def doctype(node)
@@ -69,12 +69,12 @@
69
69
  </attribute>
70
70
  </optional>
71
71
  <optional>
72
- <attribute name="keepWithNext">
72
+ <attribute name="keep-with-next">
73
73
  <data type="boolean"/>
74
74
  </attribute>
75
75
  </optional>
76
76
  <optional>
77
- <attribute name="keepWithPrevious">
77
+ <attribute name="keep-with-previous">
78
78
  <data type="boolean"/>
79
79
  </attribute>
80
80
  </optional>
@@ -297,6 +297,9 @@
297
297
  <data type="boolean"/>
298
298
  </attribute>
299
299
  </optional>
300
+ <optional>
301
+ <attribute name="number"/>
302
+ </optional>
300
303
  <optional>
301
304
  <attribute name="subsequence"/>
302
305
  </optional>
@@ -379,6 +382,9 @@
379
382
  <data type="boolean"/>
380
383
  </attribute>
381
384
  </optional>
385
+ <optional>
386
+ <attribute name="number"/>
387
+ </optional>
382
388
  <optional>
383
389
  <attribute name="subsequence"/>
384
390
  </optional>
@@ -53,9 +53,96 @@
53
53
  <optional>
54
54
  <attribute name="alt"/>
55
55
  </optional>
56
+ <optional>
57
+ <attribute name="case">
58
+ <choice>
59
+ <value>capital</value>
60
+ <value>lowercase</value>
61
+ </choice>
62
+ </attribute>
63
+ </optional>
56
64
  <text/>
57
65
  </element>
58
66
  </define>
67
+ <define name="ul">
68
+ <element name="ul">
69
+ <attribute name="id">
70
+ <data type="ID"/>
71
+ </attribute>
72
+ <optional>
73
+ <attribute name="keep-with-next">
74
+ <data type="boolean"/>
75
+ </attribute>
76
+ </optional>
77
+ <optional>
78
+ <attribute name="keep-lines-together">
79
+ <data type="boolean"/>
80
+ </attribute>
81
+ </optional>
82
+ <oneOrMore>
83
+ <ref name="li"/>
84
+ </oneOrMore>
85
+ <zeroOrMore>
86
+ <ref name="note"/>
87
+ </zeroOrMore>
88
+ </element>
89
+ </define>
90
+ <define name="ol">
91
+ <element name="ol">
92
+ <attribute name="id">
93
+ <data type="ID"/>
94
+ </attribute>
95
+ <optional>
96
+ <attribute name="keep-with-next">
97
+ <data type="boolean"/>
98
+ </attribute>
99
+ </optional>
100
+ <optional>
101
+ <attribute name="keep-lines-together">
102
+ <data type="boolean"/>
103
+ </attribute>
104
+ </optional>
105
+ <attribute name="type">
106
+ <choice>
107
+ <value>roman</value>
108
+ <value>alphabet</value>
109
+ <value>arabic</value>
110
+ <value>roman_upper</value>
111
+ <value>alphabet_upper</value>
112
+ </choice>
113
+ </attribute>
114
+ <oneOrMore>
115
+ <ref name="li"/>
116
+ </oneOrMore>
117
+ <zeroOrMore>
118
+ <ref name="note"/>
119
+ </zeroOrMore>
120
+ </element>
121
+ </define>
122
+ <define name="dl">
123
+ <element name="dl">
124
+ <attribute name="id">
125
+ <data type="ID"/>
126
+ </attribute>
127
+ <optional>
128
+ <attribute name="keep-with-next">
129
+ <data type="boolean"/>
130
+ </attribute>
131
+ </optional>
132
+ <optional>
133
+ <attribute name="keep-lines-together">
134
+ <data type="boolean"/>
135
+ </attribute>
136
+ </optional>
137
+ <oneOrMore>
138
+ <ref name="dt"/>
139
+ <ref name="dd"/>
140
+ </oneOrMore>
141
+ <zeroOrMore>
142
+ <ref name="note"/>
143
+ </zeroOrMore>
144
+ </element>
145
+ </define>
59
146
  <define name="example">
60
147
  <element name="example">
61
148
  <attribute name="id">
@@ -69,6 +156,19 @@
69
156
  <optional>
70
157
  <attribute name="subsequence"/>
71
158
  </optional>
159
+ <optional>
160
+ <attribute name="number"/>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="keep-with-next">
164
+ <data type="boolean"/>
165
+ </attribute>
166
+ </optional>
167
+ <optional>
168
+ <attribute name="keep-lines-together">
169
+ <data type="boolean"/>
170
+ </attribute>
171
+ </optional>
72
172
  <optional>
73
173
  <ref name="tname"/>
74
174
  </optional>
@@ -89,6 +189,296 @@
89
189
  </zeroOrMore>
90
190
  </element>
91
191
  </define>
192
+ <define name="table">
193
+ <element name="table">
194
+ <attribute name="id">
195
+ <data type="ID"/>
196
+ </attribute>
197
+ <optional>
198
+ <attribute name="unnumbered">
199
+ <data type="boolean"/>
200
+ </attribute>
201
+ </optional>
202
+ <optional>
203
+ <attribute name="number"/>
204
+ </optional>
205
+ <optional>
206
+ <attribute name="subsequence"/>
207
+ </optional>
208
+ <optional>
209
+ <attribute name="alt"/>
210
+ </optional>
211
+ <optional>
212
+ <attribute name="summary"/>
213
+ </optional>
214
+ <optional>
215
+ <attribute name="uri">
216
+ <data type="anyURI"/>
217
+ </attribute>
218
+ </optional>
219
+ <optional>
220
+ <attribute name="keep-with-next">
221
+ <data type="boolean"/>
222
+ </attribute>
223
+ </optional>
224
+ <optional>
225
+ <attribute name="keep-lines-together">
226
+ <data type="boolean"/>
227
+ </attribute>
228
+ </optional>
229
+ <optional>
230
+ <ref name="tname"/>
231
+ </optional>
232
+ <optional>
233
+ <ref name="thead"/>
234
+ </optional>
235
+ <ref name="tbody"/>
236
+ <optional>
237
+ <ref name="tfoot"/>
238
+ </optional>
239
+ <zeroOrMore>
240
+ <ref name="table-note"/>
241
+ </zeroOrMore>
242
+ <optional>
243
+ <ref name="dl"/>
244
+ </optional>
245
+ </element>
246
+ </define>
247
+ <define name="figure">
248
+ <element name="figure">
249
+ <attribute name="id">
250
+ <data type="ID"/>
251
+ </attribute>
252
+ <optional>
253
+ <attribute name="unnumbered">
254
+ <data type="boolean"/>
255
+ </attribute>
256
+ </optional>
257
+ <optional>
258
+ <attribute name="number"/>
259
+ </optional>
260
+ <optional>
261
+ <attribute name="subsequence"/>
262
+ </optional>
263
+ <optional>
264
+ <attribute name="keep-with-next">
265
+ <data type="boolean"/>
266
+ </attribute>
267
+ </optional>
268
+ <optional>
269
+ <attribute name="keep-lines-together">
270
+ <data type="boolean"/>
271
+ </attribute>
272
+ </optional>
273
+ <optional>
274
+ <attribute name="class"/>
275
+ </optional>
276
+ <optional>
277
+ <ref name="source"/>
278
+ </optional>
279
+ <optional>
280
+ <ref name="tname"/>
281
+ </optional>
282
+ <choice>
283
+ <ref name="image"/>
284
+ <ref name="video"/>
285
+ <ref name="audio"/>
286
+ <ref name="pre"/>
287
+ <oneOrMore>
288
+ <ref name="paragraph-with-footnote"/>
289
+ </oneOrMore>
290
+ <zeroOrMore>
291
+ <ref name="figure"/>
292
+ </zeroOrMore>
293
+ </choice>
294
+ <zeroOrMore>
295
+ <ref name="fn"/>
296
+ </zeroOrMore>
297
+ <optional>
298
+ <ref name="dl"/>
299
+ </optional>
300
+ <zeroOrMore>
301
+ <ref name="note"/>
302
+ </zeroOrMore>
303
+ </element>
304
+ </define>
305
+ <define name="sourcecode">
306
+ <element name="sourcecode">
307
+ <attribute name="id">
308
+ <data type="ID"/>
309
+ </attribute>
310
+ <optional>
311
+ <attribute name="unnumbered">
312
+ <data type="boolean"/>
313
+ </attribute>
314
+ </optional>
315
+ <optional>
316
+ <attribute name="number"/>
317
+ </optional>
318
+ <optional>
319
+ <attribute name="subsequence"/>
320
+ </optional>
321
+ <optional>
322
+ <attribute name="keep-with-next">
323
+ <data type="boolean"/>
324
+ </attribute>
325
+ </optional>
326
+ <optional>
327
+ <attribute name="keep-lines-together">
328
+ <data type="boolean"/>
329
+ </attribute>
330
+ </optional>
331
+ <optional>
332
+ <attribute name="lang"/>
333
+ </optional>
334
+ <optional>
335
+ <ref name="tname"/>
336
+ </optional>
337
+ <oneOrMore>
338
+ <choice>
339
+ <text/>
340
+ <ref name="callout"/>
341
+ </choice>
342
+ </oneOrMore>
343
+ <zeroOrMore>
344
+ <ref name="annotation"/>
345
+ </zeroOrMore>
346
+ <zeroOrMore>
347
+ <ref name="note"/>
348
+ </zeroOrMore>
349
+ </element>
350
+ </define>
351
+ <define name="formula">
352
+ <element name="formula">
353
+ <attribute name="id">
354
+ <data type="ID"/>
355
+ </attribute>
356
+ <optional>
357
+ <attribute name="unnumbered">
358
+ <data type="boolean"/>
359
+ </attribute>
360
+ </optional>
361
+ <optional>
362
+ <attribute name="number"/>
363
+ </optional>
364
+ <optional>
365
+ <attribute name="subsequence"/>
366
+ </optional>
367
+ <optional>
368
+ <attribute name="keep-with-next">
369
+ <data type="boolean"/>
370
+ </attribute>
371
+ </optional>
372
+ <optional>
373
+ <attribute name="keep-lines-together">
374
+ <data type="boolean"/>
375
+ </attribute>
376
+ </optional>
377
+ <optional>
378
+ <attribute name="inequality">
379
+ <data type="boolean"/>
380
+ </attribute>
381
+ </optional>
382
+ <ref name="stem"/>
383
+ <optional>
384
+ <ref name="dl"/>
385
+ </optional>
386
+ <zeroOrMore>
387
+ <ref name="note"/>
388
+ </zeroOrMore>
389
+ </element>
390
+ </define>
391
+ <define name="ParagraphType">
392
+ <attribute name="id">
393
+ <data type="ID"/>
394
+ </attribute>
395
+ <optional>
396
+ <attribute name="align">
397
+ <ref name="Alignments"/>
398
+ </attribute>
399
+ </optional>
400
+ <optional>
401
+ <attribute name="keep-with-next">
402
+ <data type="boolean"/>
403
+ </attribute>
404
+ </optional>
405
+ <optional>
406
+ <attribute name="keep-lines-together">
407
+ <data type="boolean"/>
408
+ </attribute>
409
+ </optional>
410
+ <zeroOrMore>
411
+ <ref name="TextElement"/>
412
+ </zeroOrMore>
413
+ <zeroOrMore>
414
+ <ref name="note"/>
415
+ </zeroOrMore>
416
+ </define>
417
+ <define name="paragraph-with-footnote">
418
+ <element name="p">
419
+ <attribute name="id">
420
+ <data type="ID"/>
421
+ </attribute>
422
+ <optional>
423
+ <attribute name="align">
424
+ <ref name="Alignments"/>
425
+ </attribute>
426
+ </optional>
427
+ <optional>
428
+ <attribute name="keep-with-next">
429
+ <data type="boolean"/>
430
+ </attribute>
431
+ </optional>
432
+ <optional>
433
+ <attribute name="keep-lines-together">
434
+ <data type="boolean"/>
435
+ </attribute>
436
+ </optional>
437
+ <zeroOrMore>
438
+ <choice>
439
+ <ref name="TextElement"/>
440
+ <ref name="fn"/>
441
+ </choice>
442
+ </zeroOrMore>
443
+ <zeroOrMore>
444
+ <ref name="note"/>
445
+ </zeroOrMore>
446
+ </element>
447
+ </define>
448
+ <define name="quote">
449
+ <element name="quote">
450
+ <attribute name="id">
451
+ <data type="ID"/>
452
+ </attribute>
453
+ <optional>
454
+ <attribute name="alignment">
455
+ <ref name="Alignments"/>
456
+ </attribute>
457
+ </optional>
458
+ <optional>
459
+ <attribute name="keep-with-next">
460
+ <data type="boolean"/>
461
+ </attribute>
462
+ </optional>
463
+ <optional>
464
+ <attribute name="keep-lines-together">
465
+ <data type="boolean"/>
466
+ </attribute>
467
+ </optional>
468
+ <optional>
469
+ <ref name="quote-source"/>
470
+ </optional>
471
+ <optional>
472
+ <ref name="quote-author"/>
473
+ </optional>
474
+ <oneOrMore>
475
+ <ref name="paragraph-with-footnote"/>
476
+ </oneOrMore>
477
+ <zeroOrMore>
478
+ <ref name="note"/>
479
+ </zeroOrMore>
480
+ </element>
481
+ </define>
92
482
  <define name="BibDataExtensionType">
93
483
  <ref name="doctype"/>
94
484
  <optional>
@@ -129,6 +519,9 @@
129
519
  </choice>
130
520
  </attribute>
131
521
  </optional>
522
+ <attribute name="normative">
523
+ <data type="boolean"/>
524
+ </attribute>
132
525
  <optional>
133
526
  <ref name="section-title"/>
134
527
  </optional>
@@ -154,6 +547,30 @@
154
547
  <attribute name="id">
155
548
  <data type="ID"/>
156
549
  </attribute>
550
+ <optional>
551
+ <attribute name="unnumbered">
552
+ <data type="boolean"/>
553
+ </attribute>
554
+ </optional>
555
+ <optional>
556
+ <attribute name="number"/>
557
+ </optional>
558
+ <optional>
559
+ <attribute name="subsequence"/>
560
+ </optional>
561
+ <optional>
562
+ <attribute name="keep-with-next">
563
+ <data type="boolean"/>
564
+ </attribute>
565
+ </optional>
566
+ <optional>
567
+ <attribute name="keep-lines-together">
568
+ <data type="boolean"/>
569
+ </attribute>
570
+ </optional>
571
+ <optional>
572
+ <attribute name="type"/>
573
+ </optional>
157
574
  <oneOrMore>
158
575
  <choice>
159
576
  <ref name="paragraph"/>
@@ -303,11 +720,11 @@
303
720
  <ref name="paragraph"/>
304
721
  </element>
305
722
  </define>
306
- <define name="TextElement" combine="choice">
307
- <ref name="concept"/>
308
- </define>
309
723
  </include>
310
724
  <!-- end overrides -->
725
+ <define name="TextElement" combine="choice">
726
+ <ref name="concept"/>
727
+ </define>
311
728
  <define name="concept">
312
729
  <element name="concept">
313
730
  <optional>
@@ -899,7 +1316,36 @@
899
1316
  <attribute name="id">
900
1317
  <data type="ID"/>
901
1318
  </attribute>
902
- <ref name="paragraph"/>
1319
+ <optional>
1320
+ <attribute name="unnumbered">
1321
+ <data type="boolean"/>
1322
+ </attribute>
1323
+ </optional>
1324
+ <optional>
1325
+ <attribute name="number"/>
1326
+ </optional>
1327
+ <optional>
1328
+ <attribute name="subsequence"/>
1329
+ </optional>
1330
+ <optional>
1331
+ <attribute name="keep-with-next">
1332
+ <data type="boolean"/>
1333
+ </attribute>
1334
+ </optional>
1335
+ <optional>
1336
+ <attribute name="keep-lines-together">
1337
+ <data type="boolean"/>
1338
+ </attribute>
1339
+ </optional>
1340
+ <oneOrMore>
1341
+ <choice>
1342
+ <ref name="paragraph"/>
1343
+ <ref name="ul"/>
1344
+ <ref name="ol"/>
1345
+ <ref name="dl"/>
1346
+ <ref name="formula"/>
1347
+ </choice>
1348
+ </oneOrMore>
903
1349
  </element>
904
1350
  </define>
905
1351
  <define name="termexample">
@@ -30,9 +30,22 @@
30
30
  <data type="boolean"/>
31
31
  </attribute>
32
32
  </optional>
33
+ <optional>
34
+ <attribute name="number"/>
35
+ </optional>
33
36
  <optional>
34
37
  <attribute name="subsequence"/>
35
38
  </optional>
39
+ <optional>
40
+ <attribute name="keep-with-next">
41
+ <data type="boolean"/>
42
+ </attribute>
43
+ </optional>
44
+ <optional>
45
+ <attribute name="keep-lines-together">
46
+ <data type="boolean"/>
47
+ </attribute>
48
+ </optional>
36
49
  <attribute name="id">
37
50
  <data type="ID"/>
38
51
  </attribute>
@@ -141,6 +154,16 @@
141
154
  <data type="boolean"/>
142
155
  </attribute>
143
156
  </optional>
157
+ <optional>
158
+ <attribute name="keep-with-next">
159
+ <data type="boolean"/>
160
+ </attribute>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="keep-lines-together">
164
+ <data type="boolean"/>
165
+ </attribute>
166
+ </optional>
144
167
  <oneOrMore>
145
168
  <ref name="BasicBlock"/>
146
169
  </oneOrMore>
@@ -1,8 +1,8 @@
1
1
  module IsoDoc::Ietf
2
2
  class RfcConvert < ::IsoDoc::Convert
3
3
  def para_attrs(node)
4
- { keepWithNext: node["keepWithNext"],
5
- keepWithPrevious: node["keepWithPrevious"],
4
+ { keepWithNext: node["keep-with-next"],
5
+ keepWithPrevious: node["keep-with-previous"],
6
6
  anchor: node["id"] }
7
7
  end
8
8
 
@@ -56,16 +56,16 @@ module IsoDoc::Ietf
56
56
  end
57
57
  end
58
58
 
59
- def dl_attr(node)
59
+ def dl_attrs(node)
60
60
  attr_code(anchor: node["id"],
61
61
  newline: node["newline"],
62
62
  indent: node["indent"],
63
63
  spacing: node["spacing"])
64
64
  end
65
65
 
66
- def dt_parse(dt, term)
66
+ def dt_parse(dt, term)
67
67
  if dt.elements.empty?
68
- term << dt.text
68
+ term << dt.text
69
69
  else
70
70
  dt.children.each { |n| parse(n, term) }
71
71
  end
@@ -94,7 +94,7 @@ module IsoDoc::Ietf
94
94
  end
95
95
 
96
96
  def example_label(node, div, name)
97
- n = get_anchors[node["id"]]
97
+ n = @xrefs.get[node["id"]]
98
98
  div.t **attr_code(anchor: node["id"], keepWithNext: "true") do |p|
99
99
  lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
100
100
  l10n("#{@example_lbl} #{n[:label]}")
@@ -112,8 +112,8 @@ module IsoDoc::Ietf
112
112
  div.sourcecode **attr_code(type: node["lang"], name: node["filename"],
113
113
  markers: node["markers"],
114
114
  src: node["src"]) do |s|
115
- node.children.each { |x| parse(x, s) unless x.name == "name" }
116
- end
115
+ node.children.each { |x| parse(x, s) unless x.name == "name" }
116
+ end
117
117
  end
118
118
  end
119
119
 
@@ -144,12 +144,21 @@ module IsoDoc::Ietf
144
144
  def formula_parse1(node, out)
145
145
  out.t **attr_code(anchor: node["id"]) do |p|
146
146
  parse(node.at(ns("./stem")), p)
147
- lbl = anchor(node['id'], :label, false)
147
+ lbl = @xrefs.anchor(node['id'], :label, false)
148
148
  lbl.nil? or
149
149
  p << " (#{lbl})"
150
150
  end
151
151
  end
152
152
 
153
+ def formula_parse(node, out)
154
+ formula_parse1(node, out)
155
+ formula_where(node.at(ns("./dl")), out)
156
+ node.children.each do |n|
157
+ next if %w(stem dl).include? n.name
158
+ parse(n, out)
159
+ end
160
+ end
161
+
153
162
  def quote_attribution(node)
154
163
  author = node&.at(ns("./author"))&.text
155
164
  source = node&.at(ns("./source/@uri"))&.text
@@ -19,7 +19,6 @@ module IsoDoc::Ietf
19
19
  end
20
20
 
21
21
  def info(isoxml, out)
22
- @meta.keywords isoxml, out
23
22
  @meta.areas isoxml, out
24
23
  super
25
24
  end
@@ -120,11 +120,15 @@ module IsoDoc::Ietf
120
120
 
121
121
  def eref_parse(node, out)
122
122
  linkend = node.children.reject { |c| %w{locality localityStack}.include? c.name }
123
+ relative = node["relative"] ||
124
+ node.at(ns(".//locality[@type = 'anchor']/referenceFrom"))&.text || ""
123
125
  section = eref_clause(node.xpath(ns("./locality | ./localityStack")), nil) || ""
126
+ section = "" if relative.empty?
124
127
  out.relref **attr_code(target: node["bibitemid"], section: section,
128
+ relative: relative,
125
129
  displayFormat: node["displayFormat"]) do |l|
126
- linkend.each { |n| parse(n, l) }
127
- end
130
+ linkend.each { |n| parse(n, l) }
131
+ end
128
132
  end
129
133
 
130
134
  def eref_clause(refs, target)
@@ -19,14 +19,6 @@ module IsoDoc
19
19
  # = item describedby convertedfrom alternate
20
20
  end
21
21
 
22
- def keywords(isoxml, _out)
23
- ret = []
24
- isoxml.xpath(ns("//bibdata/keyword")).each do |kw|
25
- ret << kw.text
26
- end
27
- set(:keywords, ret)
28
- end
29
-
30
22
  def areas(isoxml, _out)
31
23
  ret = []
32
24
  isoxml.xpath(ns("//bibdata/ext/area")).each do |kw|
@@ -45,18 +37,18 @@ module IsoDoc
45
37
  wg(xml)
46
38
  end
47
39
 
48
- def wg(xml)
49
- workgroups = []
50
- xml.xpath(ns("//bibdata/ext/editorialgroup/workgroup")).each do |wg|
51
- workgroups << wg.text
40
+ def wg(xml)
41
+ workgroups = []
42
+ xml.xpath(ns("//bibdata/ext/editorialgroup/workgroup")).each do |wg|
43
+ workgroups << wg.text
52
44
  end
53
- set(:wg, workgroups)
45
+ set(:wg, workgroups)
54
46
  end
55
47
 
56
- def doctype(isoxml, _out)
57
- super
58
- set(:doctype, "Rfc") if get[:doctype].nil?
59
- end
48
+ def doctype(isoxml, _out)
49
+ super
50
+ set(:doctype, "Rfc") if get[:doctype].nil?
51
+ end
60
52
  end
61
53
  end
62
54
  end
@@ -50,8 +50,9 @@ module IsoDoc::Ietf
50
50
  r.format nil, **attr_code(target: u.text, type: u["type"])
51
51
  end
52
52
  docidentifiers = b.xpath(ns("./docidentifier"))
53
- id = bibitem_ref_code(b) and id.text != "(NO ID)" and
54
- r.refcontent render_identifier(id)
53
+ id = render_identifier(bibitem_ref_code(b))
54
+ !id[1].nil? and id[1] != "(NO ID)" and
55
+ r.refcontent id[1]
55
56
  docidentifiers&.each do |u|
56
57
  if %w(DOI IETF).include? u["type"]
57
58
  r.seriesInfo nil, **attr_code(value: u.text, name: u["type"])
@@ -67,15 +68,6 @@ module IsoDoc::Ietf
67
68
  end
68
69
  end
69
70
 
70
- def bibitem_ref_code(b)
71
- id = b.at(ns("./docidentifier[not(@type = 'DOI' or @type = 'metanorma' "\
72
- "or @type = 'ISSN' or @type = 'ISBN' or @type = 'IETF')]"))
73
- return id if id
74
- id = Nokogiri::XML::Node.new("docidentifier", b.document)
75
- id << "(NO ID)"
76
- id
77
- end
78
-
79
71
  def relaton_to_author(b, f)
80
72
  auths = b.xpath(ns("./contributor[xmlns:role/@type = 'author' or "\
81
73
  "xmlns:role/@type = 'editor']"))
@@ -9,11 +9,12 @@ require_relative "./cleanup"
9
9
  require_relative "./footnotes"
10
10
  require_relative "./references"
11
11
  require_relative "./section"
12
+ require_relative "./xref"
12
13
 
13
14
  module IsoDoc::Ietf
14
15
  class RfcConvert < ::IsoDoc::Convert
15
16
  def convert1(docxml, filename, dir)
16
- anchor_names docxml
17
+ @xrefs.parse docxml
17
18
  info docxml, nil
18
19
  xml = noko do |xml|
19
20
  xml.rfc **attr_code(rfc_attributes(docxml)) do |html|
@@ -30,6 +31,10 @@ module IsoDoc::Ietf
30
31
  @meta = Metadata.new(lang, script, labels)
31
32
  end
32
33
 
34
+ def xref_init(lang, script, klass, labels, options)
35
+ @xrefs = Xref.new(lang, script, klass, labels, options)
36
+ end
37
+
33
38
  def extract_delims(text)
34
39
  @openmathdelim = "$$"
35
40
  @closemathdelim = "$$"
@@ -50,10 +55,15 @@ module IsoDoc::Ietf
50
55
  end
51
56
  end
52
57
 
58
+ def textcleanup(docxml)
59
+ passthrough_cleanup(docxml)
60
+ end
61
+
53
62
  def postprocess(result, filename, dir)
54
- result = from_xhtml(cleanup(to_xhtml(result))).sub(/<!DOCTYPE[^>]+>\n/, "").
63
+ result = from_xhtml(cleanup(to_xhtml(textcleanup(result)))).
64
+ sub(/<!DOCTYPE[^>]+>\n/, "").
55
65
  sub(/(<rfc[^<]+? )lang="[^"]+"/, "\\1")
56
- File.open("#{filename}.rfc.xml", "w:UTF-8") { |f| f.write(result) }
66
+ File.open(filename, "w:UTF-8") { |f| f.write(result) }
57
67
  @files_to_delete.each { |f| FileUtils.rm_rf f }
58
68
  end
59
69
 
@@ -65,6 +75,8 @@ module IsoDoc::Ietf
65
75
  def initialize(options)
66
76
  super
67
77
  @xinclude = options[:use_xinclude] == "true"
78
+ @format = :rfc
79
+ @suffix = "rfc.xml"
68
80
  end
69
81
  end
70
82
  end
@@ -60,7 +60,8 @@ module IsoDoc::Ietf
60
60
  {
61
61
  docName: @meta.get[:doctype] == "Internet Draft" ? @meta.get[:docnumber] : nil,
62
62
  number: @meta.get[:doctype].casecmp?("rfc") ? @meta.get[:docnumber] : nil,
63
- category: docxml&.at(ns("//bibdata/series[@type = 'intended']/title"))&.text || "std",
63
+ category: series2category(
64
+ docxml&.at(ns("//bibdata/series[@type = 'intended']/title"))&.text),
64
65
  ipr: docxml&.at(ns("//bibdata/ext/ipr"))&.text,
65
66
  obsoletes: obs,
66
67
  updates: upd,
@@ -78,6 +79,20 @@ module IsoDoc::Ietf
78
79
  }
79
80
  end
80
81
 
82
+ def series2category(series)
83
+ case series&.downcase
84
+ when "standard" then "std"
85
+ when "informational" then "info"
86
+ when "experimental" then "exp"
87
+ when "bcp" then "bcp"
88
+ when "fyi" then "info"
89
+ when "full-standard" then "std"
90
+ when "historic" then "historic"
91
+ else
92
+ "std"
93
+ end
94
+ end
95
+
81
96
  def xpath_comma(xpath)
82
97
  return nil if xpath.empty?
83
98
  xpath.map { |x| x.text }.join(", ")
@@ -1,12 +1,12 @@
1
1
  module IsoDoc::Ietf
2
2
  class RfcConvert < ::IsoDoc::Convert
3
- def make_table_attr(node)
3
+ def table_attrs(node)
4
4
  attr_code(anchor: node["id"], align: node["align"])
5
5
  end
6
6
 
7
7
  def table_parse(node, out)
8
8
  @in_table = true
9
- out.table **make_table_attr(node) do |t|
9
+ out.table **table_attrs(node) do |t|
10
10
  table_title_parse(node, out)
11
11
  thead_parse(node, t)
12
12
  tbody_parse(node, t)
@@ -48,18 +48,5 @@ module IsoDoc::Ietf
48
48
 
49
49
  def termdocsource_parse(_node, _out)
50
50
  end
51
-
52
- def termnote_anchor_names(docxml)
53
- docxml.xpath(ns("//term[descendant::termnote]")).each do |t|
54
- c = Counter.new
55
- notes = t.xpath(ns(".//termnote"))
56
- notes.each do |n|
57
- next if n["id"].nil? || n["id"].empty?
58
- idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
59
- @anchors[n["id"]] =
60
- anchor_struct(idx, n, @note_xref_lbl, "note", false)
61
- end
62
- end
63
- end
64
51
  end
65
52
  end
@@ -0,0 +1,20 @@
1
+ require "isodoc"
2
+
3
+ module IsoDoc
4
+ module Ietf
5
+ class Xref < IsoDoc::Xref
6
+ def termnote_anchor_names(docxml)
7
+ docxml.xpath(ns("//term[descendant::termnote]")).each do |t|
8
+ c = IsoDoc::XrefGen::Counter.new
9
+ notes = t.xpath(ns(".//termnote"))
10
+ notes.each do |n|
11
+ next if n["id"].nil? || n["id"].empty?
12
+ idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
13
+ @anchors[n["id"]] =
14
+ anchor_struct(idx, n, @labels["note_xref"], "note", false)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -52,10 +52,11 @@ module Metanorma
52
52
  !which("xml2rfc").nil?
53
53
  end
54
54
 
55
- def output(isodoc_node, outname, format, options={})
55
+ def output(isodoc_node, inname, outname, format, options={})
56
56
  case format
57
57
  when :rfc
58
- IsoDoc::Ietf::RfcConvert.new(options).convert(outname, isodoc_node)
58
+ outname ||= inname.sub(/\.xml$/, ".rfc.xml")
59
+ IsoDoc::Ietf::RfcConvert.new(options).convert(inname, isodoc_node, nil, outname)
59
60
  @done_rfc = true
60
61
 
61
62
  when :txt
@@ -64,9 +65,10 @@ module Metanorma
64
65
  return
65
66
  end
66
67
 
67
- rfcname = outname.sub(/\.txt$/, ".rfc.xml")
68
- output(isodoc_node, outname, :rfc, options) unless @done_rfc
68
+ rfcname = inname.sub(/\.xml$/, ".rfc.xml")
69
+ output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
69
70
 
71
+ outname ||= inname.sub(/\.xml$/, ".txt")
70
72
  system("xml2rfc --text #{rfcname} -o #{outname}")
71
73
 
72
74
  when :pdf
@@ -75,9 +77,10 @@ module Metanorma
75
77
  return
76
78
  end
77
79
 
78
- rfcname = outname.sub(/\.pdf$/, ".rfc.xml")
79
- output(isodoc_node, outname, :rfc, options) unless @done_rfc
80
+ rfcname = inname.sub(/\.xml$/, ".rfc.xml")
81
+ output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
80
82
 
83
+ outname ||= inname.sub(/\.xml$/, ".pdf")
81
84
  system("xml2rfc --pdf #{rfcname} -o #{outname}")
82
85
 
83
86
  when :html
@@ -86,9 +89,10 @@ module Metanorma
86
89
  return
87
90
  end
88
91
 
89
- rfcname = outname.sub(/\.html$/, ".rfc.xml")
90
- output(isodoc_node, outname, :rfc, options) unless @done_rfc
92
+ rfcname = inname.sub(/\.xml$/, ".rfc.xml")
93
+ output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
91
94
 
95
+ outname ||= inname.sub(/\.xml$/, ".html")
92
96
  system("xml2rfc --html #{rfcname} -o #{outname}")
93
97
 
94
98
  else
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Ietf
3
- VERSION = "2.0.9".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
@@ -35,8 +35,8 @@ Gem::Specification.new do |spec|
35
35
  spec.require_paths = ["lib"]
36
36
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
37
37
 
38
- spec.add_dependency "metanorma-standoc", "~> 1.3.0"
39
- spec.add_dependency "isodoc", "~> 1.0.0"
38
+ spec.add_dependency "metanorma-standoc", "~> 1.4.0"
39
+ spec.add_dependency "isodoc", "~> 1.1.0"
40
40
  spec.add_dependency "mathml2asciimath"
41
41
 
42
42
  spec.add_development_dependency "byebug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-ietf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.9
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-01 00:00:00.000000000 Z
11
+ date: 2020-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-standoc
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3.0
19
+ version: 1.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3.0
26
+ version: 1.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: isodoc
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0
33
+ version: 1.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0
40
+ version: 1.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mathml2asciimath
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -269,6 +269,7 @@ files:
269
269
  - lib/isodoc/ietf/section.rb
270
270
  - lib/isodoc/ietf/table.rb
271
271
  - lib/isodoc/ietf/terms.rb
272
+ - lib/isodoc/ietf/xref.rb
272
273
  - lib/metanorma-ietf.rb
273
274
  - lib/metanorma/ietf.rb
274
275
  - lib/metanorma/ietf/processor.rb
@@ -281,7 +282,7 @@ homepage: https://github.com/metanorma/metanorma-ietf
281
282
  licenses:
282
283
  - BSD-2-Clause
283
284
  metadata: {}
284
- post_install_message:
285
+ post_install_message:
285
286
  rdoc_options: []
286
287
  require_paths:
287
288
  - lib
@@ -296,9 +297,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
297
  - !ruby/object:Gem::Version
297
298
  version: '0'
298
299
  requirements: []
299
- rubyforge_project:
300
- rubygems_version: 2.7.6
301
- signing_key:
300
+ rubygems_version: 3.0.3
301
+ signing_key:
302
302
  specification_version: 4
303
303
  summary: metanorma-ietf lets you write IETF documents, such as Internet-Drafts and
304
304
  RFCs, in AsciiDoc.