metanorma-ietf 2.3.4 → 2.4.1

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: 7a12328cf063937699b9e4713e4f02ecb83baed14af90b6cb8c05e44d68361f0
4
- data.tar.gz: e89e8c1aa57a7341298ac5a3b01c17ecdab3ed746e9fcb915730dade6a8241db
3
+ metadata.gz: def69cf551c6c50fcb28fcdf04ab02e0d3d9cf83ba3dcd81114c41f71860599f
4
+ data.tar.gz: 5afc33bb93c93fbc86565d984562a3a61ed02b700e0a1e66a70f47289ef230c9
5
5
  SHA512:
6
- metadata.gz: 3279c11e5298c25e7fd5d45d441416156bbf051791cd8883675c101a1b153455c01a3b14b62cd341f29fb3c2be0c58b2273eeb501dfa7dd5e1e56d7388941c19
7
- data.tar.gz: 6662f000dadd312542ba8e57023237bfd9036055df0c53c235fcc0dc7b7ac8b131023139fa4c029d27d5a4d0ea7929f0a2850dd3a1d747f57cd3b50cf2dbcd12
6
+ metadata.gz: 4a2c6f8d47d875c1fb896d1fffdc5d5f789c05a679ab474ae7dfbc52795b9df47eb4763164f08c2da964c0de53ad51f91233ea230a8bce9553a31986f19bf4cd
7
+ data.tar.gz: eb7fbd7913907b01e95f07bd2b28058b1d8c953f5f9b8b8a9c81a6c1638319fbb2ce8f593a3d83970b5ea748fbf34b7d0ba60b73ea5fa8f9c1a41e3076aec6ac
@@ -16,7 +16,7 @@ jobs:
16
16
  strategy:
17
17
  fail-fast: false
18
18
  matrix:
19
- ruby: [ '3.0', '2.7', '2.6', '2.5', '2.4' ]
19
+ ruby: [ '3.0', '2.7', '2.6', '2.5' ]
20
20
  os: [ ubuntu-latest, windows-latest, macos-latest ]
21
21
  experimental: [ false ]
22
22
 
@@ -0,0 +1,81 @@
1
+ module Asciidoctor
2
+ module Ietf
3
+ class Converter < ::Asciidoctor::Standoc::Converter
4
+ def cleanup(xmldoc)
5
+ bcp14_cleanup(xmldoc)
6
+ abstract_cleanup(xmldoc)
7
+ super
8
+ rfc_anchor_cleanup(xmldoc)
9
+ end
10
+
11
+ def abstract_cleanup(xmldoc)
12
+ xmldoc.xpath("//abstract[not(text())]").each do |x|
13
+ x.remove
14
+ warn "Empty abstract section removed"
15
+ end
16
+ end
17
+
18
+ def bcp14_cleanup(xmldoc)
19
+ return unless @bcp_bold
20
+
21
+ xmldoc.xpath("//strong").each do |s|
22
+ next unless BCP_KEYWORDS.include?(s.text)
23
+
24
+ s.name = "bcp14"
25
+ end
26
+ end
27
+
28
+ def rfc_anchor_cleanup(xmldoc)
29
+ map = {}
30
+ xmldoc.xpath("//bibitem[docidentifier/@type = 'rfc-anchor']").each do |b|
31
+ next if b.at("./ancestor::bibdata")
32
+
33
+ map[b["id"]] = b.at("./docidentifier[@type = 'rfc-anchor']").text
34
+ b["id"] = b.at("./docidentifier[@type = 'rfc-anchor']").text
35
+ end
36
+ xmldoc.xpath("//eref | //origin").each do |x|
37
+ map[x["bibitemid"]] and x["bibitemid"] = map[x["bibitemid"]]
38
+ end
39
+ xmldoc
40
+ end
41
+
42
+ def smartquotes_cleanup(xmldoc)
43
+ xmldoc.traverse do |n|
44
+ next unless n.text?
45
+
46
+ n.replace(HTMLEntities.new.encode(
47
+ n.text.gsub(/\u2019|\u2018|\u201a|\u201b/, "'")
48
+ .gsub(/\u201c|\u201d|\u201e|\u201f/, '"'), :basic
49
+ ))
50
+ end
51
+ xmldoc
52
+ end
53
+
54
+ def xref_to_eref(xref)
55
+ super
56
+ xref.delete("format")
57
+ end
58
+
59
+ def xref_cleanup(xmldoc)
60
+ super
61
+ xmldoc.xpath("//xref").each do |x|
62
+ x.delete("displayFormat")
63
+ x.delete("relative")
64
+ end
65
+ end
66
+
67
+ def quotesource_cleanup(xmldoc)
68
+ xmldoc.xpath("//quote/source | //terms/source").each do |x|
69
+ if x["target"]&.match?(URI::DEFAULT_PARSER.make_regexp)
70
+ x["uri"] = x["target"]
71
+ x.delete("target")
72
+ else
73
+ xref_to_eref(x)
74
+ end
75
+ end
76
+ end
77
+
78
+ def section_names_refs_cleanup(xml); end
79
+ end
80
+ end
81
+ end
@@ -4,6 +4,7 @@ require "isodoc/ietf/rfc_convert"
4
4
  require_relative "./front"
5
5
  require_relative "./blocks"
6
6
  require_relative "./validate"
7
+ require_relative "./cleanup"
7
8
 
8
9
  module Asciidoctor
9
10
  module Ietf
@@ -22,13 +23,13 @@ module Asciidoctor
22
23
  @draft = node.attributes.has_key?("draft")
23
24
  @workgroups = cache_workgroup(node)
24
25
  @bcp_bold = !node.attr?("no-rfc-bold-bcp14")
25
- @xinclude = node.attr?("use-xinclude")
26
+ @xinclude = node.attr?("use-xinclude")
26
27
  super
27
28
  end
28
29
 
29
30
  def outputs(node, ret)
30
- File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
31
- rfc_converter(node).convert(@filename + ".xml")
31
+ File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
32
+ rfc_converter(node).convert("#{@filename}.xml")
32
33
  end
33
34
 
34
35
  def doctype(node)
@@ -63,12 +64,12 @@ module Asciidoctor
63
64
  f, c = xref_text(node)
64
65
  f1, c = eref_text(node) if f.nil?
65
66
  t, rel = xref_rel(node)
67
+ attrs = { target: t, type: "inline", displayFormat: f1, format: f,
68
+ relative: rel }
66
69
  noko do |xml|
67
- xml.xref **attr_code(target: t, type: "inline",
68
- displayFormat: f1, format: f,
69
- relative: rel ) do |x|
70
- x << c
71
- end
70
+ xml.xref **attr_code(attrs) do |x|
71
+ x << c
72
+ end
72
73
  end.join
73
74
  end
74
75
 
@@ -140,7 +141,8 @@ module Asciidoctor
140
141
  def rfc_anchor_cleanup(xmldoc)
141
142
  map = {}
142
143
  xmldoc.xpath("//bibitem[docidentifier/@type = 'rfc-anchor']").each do |b|
143
- next if b.at("./ancestor::bibdata")
144
+ next if b.at("./ancestor::bibdata | ./ancestor::bibitem")
145
+
144
146
  map[b["id"]] = b.at("./docidentifier[@type = 'rfc-anchor']").text
145
147
  b["id"] = b.at("./docidentifier[@type = 'rfc-anchor']").text
146
148
  end
@@ -194,34 +196,24 @@ module Asciidoctor
194
196
  clause_parse(attrs, xml, node)
195
197
  end
196
198
 
197
- def quotesource_cleanup(xmldoc)
198
- xmldoc.xpath("//quote/source | //terms/source").each do |x|
199
- if x["target"] =~ URI::DEFAULT_PARSER.make_regexp
200
- x["uri"] = x["target"]
201
- x.delete("target")
202
- else
203
- xref_to_eref(x)
204
- end
205
- end
206
- end
207
-
208
199
  def inline_indexterm(node)
209
200
  noko do |xml|
210
201
  node.type == :visible and xml << node.text.sub(/^primary:(?=\S)/, "")
211
202
  terms = (node.attr("terms") || [node.text]).map { |x| xml_encode(x) }
212
- if /^primary:\S/.match(terms[0])
203
+ if /^primary:\S/.match?(terms[0])
213
204
  terms[0].sub!(/^primary:/, "")
214
205
  has_primary = true
215
206
  end
216
- xml.index **attr_code(primary: has_primary) do |i|
217
- i.primary { |x| x << terms[0] }
218
- a = terms.dig(1) and i.secondary { |x| x << a }
219
- a = terms.dig(2) and i.tertiary { |x| x << a }
220
- end
207
+ inline_indexterm1(has_primary, terms, xml)
221
208
  end.join
222
209
  end
223
210
 
224
- def section_names_refs_cleanup(x)
211
+ def inline_indexterm1(has_primary, terms, xml)
212
+ xml.index **attr_code(primary: has_primary) do |i|
213
+ i.primary { |x| x << terms[0] }
214
+ a = terms[1] and i.secondary { |x| x << a }
215
+ a = terms[2] and i.tertiary { |x| x << a }
216
+ end
225
217
  end
226
218
 
227
219
  def html_extract_attributes(node)
@@ -119,7 +119,7 @@ module Asciidoctor
119
119
  strict: node.attr("strict"),
120
120
  compact: node.attr("compact"),
121
121
  subcompact: node.attr("subcompact"),
122
- toc: node.attr("toc-include") == "false" ? "no" : "yes",
122
+ tocinclude: node.attr("toc-include") == "false" ? "no" : "yes",
123
123
  tocdepth: node.attr("toc-depth"),
124
124
  symrefs: node.attr("sym-refs"),
125
125
  sortrefs: node.attr("sort-refs"),
@@ -842,7 +842,7 @@
842
842
  </element>
843
843
  </optional>
844
844
  <optional>
845
- <element name="toc">
845
+ <element name="tocinclude">
846
846
  <text/>
847
847
  </element>
848
848
  </optional>
@@ -32,6 +32,18 @@
32
32
  <ref name="DocumentType"/>
33
33
  </element>
34
34
  </define>
35
+ <define name="section-title">
36
+ <element name="title">
37
+ <zeroOrMore>
38
+ <ref name="TextElement"/>
39
+ </zeroOrMore>
40
+ </element>
41
+ <zeroOrMore>
42
+ <element name="variant-title">
43
+ <ref name="TypedTitleString"/>
44
+ </element>
45
+ </zeroOrMore>
46
+ </define>
35
47
  <define name="hyperlink">
36
48
  <element name="link">
37
49
  <attribute name="target">
@@ -158,15 +170,17 @@
158
170
  <data type="boolean"/>
159
171
  </attribute>
160
172
  </optional>
161
- <attribute name="type">
162
- <choice>
163
- <value>roman</value>
164
- <value>alphabet</value>
165
- <value>arabic</value>
166
- <value>roman_upper</value>
167
- <value>alphabet_upper</value>
168
- </choice>
169
- </attribute>
173
+ <optional>
174
+ <attribute name="type">
175
+ <choice>
176
+ <value>roman</value>
177
+ <value>alphabet</value>
178
+ <value>arabic</value>
179
+ <value>roman_upper</value>
180
+ <value>alphabet_upper</value>
181
+ </choice>
182
+ </attribute>
183
+ </optional>
170
184
  <oneOrMore>
171
185
  <ref name="li"/>
172
186
  </oneOrMore>
@@ -204,6 +218,18 @@
204
218
  </zeroOrMore>
205
219
  </element>
206
220
  </define>
221
+ <define name="dt">
222
+ <element name="dt">
223
+ <optional>
224
+ <attribute name="id">
225
+ <data type="ID"/>
226
+ </attribute>
227
+ </optional>
228
+ <zeroOrMore>
229
+ <ref name="TextElement"/>
230
+ </zeroOrMore>
231
+ </element>
232
+ </define>
207
233
  <define name="example">
208
234
  <element name="example">
209
235
  <attribute name="id">
@@ -899,7 +925,7 @@
899
925
  </include>
900
926
  <!-- end overrides -->
901
927
  <define name="docsubtype">
902
- <element name="docsubtype">
928
+ <element name="subdoctype">
903
929
  <ref name="DocumentSubtype"/>
904
930
  </element>
905
931
  </define>
@@ -955,7 +981,34 @@
955
981
  <define name="concept">
956
982
  <element name="concept">
957
983
  <optional>
958
- <attribute name="term"/>
984
+ <attribute name="ital">
985
+ <data type="boolean"/>
986
+ </attribute>
987
+ </optional>
988
+ <optional>
989
+ <attribute name="ref">
990
+ <data type="boolean"/>
991
+ </attribute>
992
+ </optional>
993
+ <optional>
994
+ <element name="refterm">
995
+ <zeroOrMore>
996
+ <choice>
997
+ <ref name="PureTextElement"/>
998
+ <ref name="stem"/>
999
+ </choice>
1000
+ </zeroOrMore>
1001
+ </element>
1002
+ </optional>
1003
+ <optional>
1004
+ <element name="renderterm">
1005
+ <zeroOrMore>
1006
+ <choice>
1007
+ <ref name="PureTextElement"/>
1008
+ <ref name="stem"/>
1009
+ </choice>
1010
+ </zeroOrMore>
1011
+ </element>
959
1012
  </optional>
960
1013
  <choice>
961
1014
  <ref name="eref"/>
@@ -972,8 +1025,14 @@
972
1025
  <ref name="imagemap"/>
973
1026
  <ref name="svgmap"/>
974
1027
  <ref name="inputform"/>
1028
+ <ref name="toc"/>
975
1029
  </choice>
976
1030
  </define>
1031
+ <define name="toc">
1032
+ <element name="toc">
1033
+ <ref name="ul"/>
1034
+ </element>
1035
+ </define>
977
1036
  <define name="inputform">
978
1037
  <element name="form">
979
1038
  <attribute name="id">
@@ -981,6 +1040,9 @@
981
1040
  </attribute>
982
1041
  <attribute name="name"/>
983
1042
  <attribute name="action"/>
1043
+ <optional>
1044
+ <attribute name="class"/>
1045
+ </optional>
984
1046
  <zeroOrMore>
985
1047
  <choice>
986
1048
  <ref name="TextElement"/>
@@ -1212,6 +1274,12 @@
1212
1274
  <optional>
1213
1275
  <attribute name="type"/>
1214
1276
  </optional>
1277
+ <optional>
1278
+ <attribute name="identifier"/>
1279
+ </optional>
1280
+ <optional>
1281
+ <attribute name="prefix"/>
1282
+ </optional>
1215
1283
  <text/>
1216
1284
  </define>
1217
1285
  <define name="ics">
@@ -1473,26 +1541,26 @@
1473
1541
  <optional>
1474
1542
  <ref name="section-title"/>
1475
1543
  </optional>
1476
- <group>
1544
+ <choice>
1477
1545
  <choice>
1478
1546
  <group>
1479
- <zeroOrMore>
1547
+ <oneOrMore>
1480
1548
  <ref name="BasicBlock"/>
1481
- </zeroOrMore>
1549
+ </oneOrMore>
1482
1550
  <zeroOrMore>
1483
1551
  <ref name="note"/>
1484
1552
  </zeroOrMore>
1485
1553
  </group>
1486
1554
  <ref name="amend"/>
1487
1555
  </choice>
1488
- <zeroOrMore>
1556
+ <oneOrMore>
1489
1557
  <choice>
1490
1558
  <ref name="clause-subsection"/>
1491
1559
  <ref name="terms"/>
1492
1560
  <ref name="definitions"/>
1493
1561
  </choice>
1494
- </zeroOrMore>
1495
- </group>
1562
+ </oneOrMore>
1563
+ </choice>
1496
1564
  </define>
1497
1565
  <define name="Annex-Section">
1498
1566
  <optional>
@@ -64,9 +64,9 @@
64
64
  <optional>
65
65
  <ref name="label"/>
66
66
  </optional>
67
- <optional>
67
+ <zeroOrMore>
68
68
  <ref name="subject"/>
69
- </optional>
69
+ </zeroOrMore>
70
70
  <zeroOrMore>
71
71
  <ref name="reqinherit"/>
72
72
  </zeroOrMore>
@@ -80,6 +80,7 @@
80
80
  <ref name="verification"/>
81
81
  <ref name="import"/>
82
82
  <ref name="description"/>
83
+ <ref name="component"/>
83
84
  </choice>
84
85
  </zeroOrMore>
85
86
  <optional>
@@ -105,12 +106,16 @@
105
106
  </define>
106
107
  <define name="subject">
107
108
  <element name="subject">
108
- <text/>
109
+ <oneOrMore>
110
+ <ref name="TextElement"/>
111
+ </oneOrMore>
109
112
  </element>
110
113
  </define>
111
114
  <define name="reqinherit">
112
115
  <element name="inherit">
113
- <text/>
116
+ <oneOrMore>
117
+ <ref name="TextElement"/>
118
+ </oneOrMore>
114
119
  </element>
115
120
  </define>
116
121
  <define name="measurementtarget">
@@ -138,6 +143,12 @@
138
143
  <ref name="RequirementSubpart"/>
139
144
  </element>
140
145
  </define>
146
+ <define name="component">
147
+ <element name="component">
148
+ <attribute name="class"/>
149
+ <ref name="RequirementSubpart"/>
150
+ </element>
151
+ </define>
141
152
  <define name="reqt_references">
142
153
  <element name="references">
143
154
  <oneOrMore>