metanorma-ietf 2.0.12 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c4621a18fe484fb098aab72221f43765c0ae8e4d91ffd1d0319e8d894acd7aa
4
- data.tar.gz: 2ff2fd68a116943e119e190267372a1e243cf20253ec6fde2a9a6ea6d91d35f8
3
+ metadata.gz: ea1c57c13cc70de322dae0d520d9643b939a5835975c49cfb64de8dbadad906b
4
+ data.tar.gz: 9c34b9675c03e4c35754fa1f3e2826d1f7837521e4d82e9e76c3f0876fbd7c40
5
5
  SHA512:
6
- metadata.gz: 755749c0a269c0b018b93a02c2c502efde5781aa799ab07f2031ece79d88c87845d512801df2f1f4ae45b46e0fa0909107eaf52a74a11b69853d9e6eb6619bb4
7
- data.tar.gz: 880c92cd6b26b25a9fc40e5f2c991fd18100bd0fff7e9c10ac7ca99a0dbc1fcb6fa6fc3543863d3c0739e3c2affe4488703c0c741d6bf34b1a5f88fffa09533a
6
+ metadata.gz: 8c38a69f9cdac8106505836f5f95e76c5d03600fba62d2ba3a90021292c794d36ece9e6658a581697cb06c29aa8ebdb083e99d94cbb0155f43ae89787fac9d1f
7
+ data.tar.gz: 678ffc85d78c890e304475f9e0e387287399131e1259d7f034980840157dc488f2de0687291faf0b02de3c617098d7f0f0ed616e95f7fe28b77f95d50c4f2bfc
@@ -36,7 +36,6 @@ jobs:
36
36
  uses: actions/setup-ruby@v1
37
37
  with:
38
38
  ruby-version: ${{ matrix.ruby }}
39
- architecture: 'x64'
40
39
  - name: Update gems
41
40
  run: |
42
41
  sudo gem install bundler --force
@@ -35,7 +35,6 @@ jobs:
35
35
  uses: actions/setup-ruby@v1
36
36
  with:
37
37
  ruby-version: ${{ matrix.ruby }}
38
- architecture: 'x64'
39
38
  - name: Update gems
40
39
  run: |
41
40
  gem install bundler
@@ -36,7 +36,6 @@ jobs:
36
36
  uses: actions/setup-ruby@v1
37
37
  with:
38
38
  ruby-version: ${{ matrix.ruby }}
39
- architecture: 'x64'
40
39
  - name: Update gems
41
40
  shell: pwsh
42
41
  run: |
@@ -532,7 +532,7 @@
532
532
  </define>
533
533
  <define name="LocalityType">
534
534
  <data type="string">
535
- <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>
536
536
  </data>
537
537
  </define>
538
538
  <define name="referenceFrom">
@@ -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>
@@ -64,6 +64,85 @@
64
64
  <text/>
65
65
  </element>
66
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>
67
146
  <define name="example">
68
147
  <element name="example">
69
148
  <attribute name="id">
@@ -77,6 +156,19 @@
77
156
  <optional>
78
157
  <attribute name="subsequence"/>
79
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>
80
172
  <optional>
81
173
  <ref name="tname"/>
82
174
  </optional>
@@ -97,6 +189,296 @@
97
189
  </zeroOrMore>
98
190
  </element>
99
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>
100
482
  <define name="BibDataExtensionType">
101
483
  <ref name="doctype"/>
102
484
  <optional>
@@ -165,6 +547,30 @@
165
547
  <attribute name="id">
166
548
  <data type="ID"/>
167
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>
168
574
  <oneOrMore>
169
575
  <choice>
170
576
  <ref name="paragraph"/>
@@ -910,6 +1316,27 @@
910
1316
  <attribute name="id">
911
1317
  <data type="ID"/>
912
1318
  </attribute>
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>
913
1340
  <oneOrMore>
914
1341
  <choice>
915
1342
  <ref name="paragraph"/>
@@ -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,23 +56,25 @@ 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
72
72
  end
73
73
 
74
74
  def note_label(node)
75
- l10n("#{super}: ")
75
+ n = @xrefs.get[node["id"]]
76
+ return l10n("#{@note_lbl}: ") if n.nil? || n[:label].nil? || n[:label].empty?
77
+ l10n("#{@note_lbl} #{n[:label]}: ")
76
78
  end
77
79
 
78
80
  def note_parse(node, out)
@@ -94,7 +96,7 @@ module IsoDoc::Ietf
94
96
  end
95
97
 
96
98
  def example_label(node, div, name)
97
- n = get_anchors[node["id"]]
99
+ n = @xrefs.get[node["id"]]
98
100
  div.t **attr_code(anchor: node["id"], keepWithNext: "true") do |p|
99
101
  lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
100
102
  l10n("#{@example_lbl} #{n[:label]}")
@@ -112,8 +114,8 @@ module IsoDoc::Ietf
112
114
  div.sourcecode **attr_code(type: node["lang"], name: node["filename"],
113
115
  markers: node["markers"],
114
116
  src: node["src"]) do |s|
115
- node.children.each { |x| parse(x, s) unless x.name == "name" }
116
- end
117
+ node.children.each { |x| parse(x, s) unless x.name == "name" }
118
+ end
117
119
  end
118
120
  end
119
121
 
@@ -144,12 +146,21 @@ module IsoDoc::Ietf
144
146
  def formula_parse1(node, out)
145
147
  out.t **attr_code(anchor: node["id"]) do |p|
146
148
  parse(node.at(ns("./stem")), p)
147
- lbl = anchor(node['id'], :label, false)
149
+ lbl = @xrefs.anchor(node['id'], :label, false)
148
150
  lbl.nil? or
149
151
  p << " (#{lbl})"
150
152
  end
151
153
  end
152
154
 
155
+ def formula_parse(node, out)
156
+ formula_parse1(node, out)
157
+ formula_where(node.at(ns("./dl")), out)
158
+ node.children.each do |n|
159
+ next if %w(stem dl).include? n.name
160
+ parse(n, out)
161
+ end
162
+ end
163
+
153
164
  def quote_attribution(node)
154
165
  author = node&.at(ns("./author"))&.text
155
166
  source = node&.at(ns("./source/@uri"))&.text
@@ -157,7 +157,8 @@ module IsoDoc::Ietf
157
157
  s.children = s.children.to_xml.gsub(%r{<br/>\n}, "\n").
158
158
  gsub(%r{\s+(<t[ >])}, "\\1").gsub(%r{</t>\s+}, "</t>")
159
159
  sourcecode_remove_markup(s)
160
- s.children = "<![CDATA[#{s.children.to_xml.sub(/\A\n+/, "")}]]>"
160
+ text = HTMLEntities.new.decode(s.children.to_xml.sub(/\A\n+/, ""))
161
+ s.children = "<![CDATA[#{text}]]>"
161
162
  end
162
163
  end
163
164
 
@@ -23,11 +23,16 @@ module IsoDoc::Ietf
23
23
  super
24
24
  end
25
25
 
26
+ def output_if_translit(text)
27
+ return nil if text.nil?
28
+ text.transliterate != text ? text.transliterate : nil
29
+ end
30
+
26
31
  def title(isoxml, front)
27
32
  title = @meta.get[:doctitle] or return
28
33
  front.title title, **attr_code(abbrev: @meta.get[:docabbrev],
29
- ascii: @meta.get[:docascii] ||
30
- title.transliterate)
34
+ ascii: (@meta.get[:docascii] ||
35
+ output_if_translit(title)))
31
36
  end
32
37
 
33
38
  def seriesinfo(isoxml, front)
@@ -37,7 +42,7 @@ module IsoDoc::Ietf
37
42
 
38
43
  def seriesinfo_attr(isoxml)
39
44
  attr_code(value: @meta.get[:docnumber] || "",
40
- asciiValue: @meta.get[:docnumber]&.transliterate,
45
+ asciiValue: output_if_translit(@meta.get[:docnumber]),
41
46
  status: @meta.get[:stage],
42
47
  stream: isoxml&.at(ns("//bibdata/series[@type = 'stream']/"\
43
48
  "title"))&.text)
@@ -82,9 +87,9 @@ module IsoDoc::Ietf
82
87
 
83
88
  def pers_author_attrs1(ret, full, init, c)
84
89
  full and ret.merge!(attr_code(
85
- asciiFullname: full&.transliterate,
86
- asciiInitials: init&.transliterate,
87
- asciiSurname: c&.at(ns("./surname"))&.text&.transliterate))
90
+ asciiFullname: output_if_translit(full),
91
+ asciiInitials: output_if_translit(init),
92
+ asciiSurname: output_if_translit(c&.at(ns("./surname")))))
88
93
  ret
89
94
  end
90
95
 
@@ -113,8 +118,8 @@ module IsoDoc::Ietf
113
118
  def organization(org, out, show)
114
119
  name = org.at(ns("./name"))&.text
115
120
  out.organization name, **attr_code(
116
- showOnFrontPage: show&.text, ascii: name&.transliterate,
117
- asciiAbbrev: org&.at(ns("./abbreviation"))&.transliterate,
121
+ showOnFrontPage: show&.text, ascii: output_if_translit(name),
122
+ asciiAbbrev: output_if_translit(org.at(ns("./abbreviation"))),
118
123
  abbrev: org.at(ns("./abbreviation")))
119
124
  end
120
125
 
@@ -163,7 +168,7 @@ module IsoDoc::Ietf
163
168
 
164
169
  def date(isoxml, front)
165
170
  date = @meta.get[:publisheddate] || @meta.get[:circulateddate] || return
166
- date.gsub!(/T.*$/, "")
171
+ date = date.gsub(/T.*$/, "")
167
172
  attr = date_attr(date) || return
168
173
  front.date **attr_code(attr)
169
174
  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)
@@ -1,5 +1,10 @@
1
1
  module IsoDoc::Ietf
2
2
  class RfcConvert < ::IsoDoc::Convert
3
+ def recommendation_labels(node)
4
+ [node.at(ns("./label")), node.at(ns("./title")),
5
+ @xrefs.anchor(node['id'], :label, false)]
6
+ end
7
+
3
8
  def recommendation_name(node, out, type)
4
9
  label, title, lbl = recommendation_labels(node)
5
10
  out.t **{ keepWithNext: "true" } do |b|
@@ -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 = "$$"
@@ -58,7 +63,7 @@ module IsoDoc::Ietf
58
63
  result = from_xhtml(cleanup(to_xhtml(textcleanup(result)))).
59
64
  sub(/<!DOCTYPE[^>]+>\n/, "").
60
65
  sub(/(<rfc[^<]+? )lang="[^"]+"/, "\\1")
61
- File.open("#{filename}.rfc.xml", "w:UTF-8") { |f| f.write(result) }
66
+ File.open(filename, "w:UTF-8") { |f| f.write(result) }
62
67
  @files_to_delete.each { |f| FileUtils.rm_rf f }
63
68
  end
64
69
 
@@ -71,6 +76,7 @@ module IsoDoc::Ietf
71
76
  super
72
77
  @xinclude = options[:use_xinclude] == "true"
73
78
  @format = :rfc
79
+ @suffix = "rfc.xml"
74
80
  end
75
81
  end
76
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", "std" then "std"
85
+ when "informational", "info" then "info"
86
+ when "experimental", "exp" then "exp"
87
+ when "bcp" then "bcp"
88
+ when "fyi", "info" 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
@@ -26,11 +26,6 @@ module Metanorma
26
26
  "Metanorma::Ietf #{::Metanorma::Ietf::VERSION}"
27
27
  end
28
28
 
29
- def input_to_isodoc(file, filename)
30
- # This is XML RFC v3 output in text
31
- Metanorma::Input::Asciidoc.new.process(file, filename, @asciidoctor_backend)
32
- end
33
-
34
29
  def extract_options(isodocxml)
35
30
  {}
36
31
  end
@@ -48,14 +43,19 @@ module Metanorma
48
43
  nil
49
44
  end
50
45
 
46
+ def use_presentation_xml(ext)
47
+ false
48
+ end
49
+
51
50
  def xml2rfc_present?
52
51
  !which("xml2rfc").nil?
53
52
  end
54
53
 
55
- def output(isodoc_node, outname, format, options={})
54
+ def output(isodoc_node, inname, outname, format, options={})
56
55
  case format
57
56
  when :rfc
58
- IsoDoc::Ietf::RfcConvert.new(options).convert(outname, isodoc_node)
57
+ outname ||= inname.sub(/\.xml$/, ".rfc.xml")
58
+ IsoDoc::Ietf::RfcConvert.new(options).convert(inname, isodoc_node, nil, outname)
59
59
  @done_rfc = true
60
60
 
61
61
  when :txt
@@ -64,9 +64,10 @@ module Metanorma
64
64
  return
65
65
  end
66
66
 
67
- rfcname = outname.sub(/\.txt$/, ".rfc.xml")
68
- output(isodoc_node, outname, :rfc, options) unless @done_rfc
67
+ rfcname = inname.sub(/\.xml$/, ".rfc.xml")
68
+ output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
69
69
 
70
+ outname ||= inname.sub(/\.xml$/, ".txt")
70
71
  system("xml2rfc --text #{rfcname} -o #{outname}")
71
72
 
72
73
  when :pdf
@@ -75,9 +76,10 @@ module Metanorma
75
76
  return
76
77
  end
77
78
 
78
- rfcname = outname.sub(/\.pdf$/, ".rfc.xml")
79
- output(isodoc_node, outname, :rfc, options) unless @done_rfc
79
+ rfcname = inname.sub(/\.xml$/, ".rfc.xml")
80
+ output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
80
81
 
82
+ outname ||= inname.sub(/\.xml$/, ".pdf")
81
83
  system("xml2rfc --pdf #{rfcname} -o #{outname}")
82
84
 
83
85
  when :html
@@ -86,9 +88,10 @@ module Metanorma
86
88
  return
87
89
  end
88
90
 
89
- rfcname = outname.sub(/\.html$/, ".rfc.xml")
90
- output(isodoc_node, outname, :rfc, options) unless @done_rfc
91
+ rfcname = inname.sub(/\.xml$/, ".rfc.xml")
92
+ output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
91
93
 
94
+ outname ||= inname.sub(/\.xml$/, ".html")
92
95
  system("xml2rfc --html #{rfcname} -o #{outname}")
93
96
 
94
97
  else
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Ietf
3
- VERSION = "2.0.12".freeze
3
+ VERSION = "2.1.3".freeze
4
4
  end
5
5
  end
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
37
37
 
38
38
  spec.add_dependency "metanorma-standoc", "~> 1.4.0"
39
- spec.add_dependency "isodoc", "~> 1.0.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.12
4
+ version: 2.1.3
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-06-08 00:00:00.000000000 Z
11
+ date: 2020-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-standoc
@@ -30,14 +30,14 @@ dependencies:
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.