metanorma-ietf 1.0.10 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +3 -2
  3. data/.github/workflows/ubuntu.yml +3 -2
  4. data/.github/workflows/windows.yml +4 -3
  5. data/README.adoc +9 -0
  6. data/lib/asciidoctor/ietf/basicdoc.rng +1045 -0
  7. data/lib/asciidoctor/ietf/biblio.rng +1142 -0
  8. data/lib/asciidoctor/ietf/blocks.rb +76 -0
  9. data/lib/asciidoctor/ietf/converter.rb +211 -0
  10. data/lib/asciidoctor/ietf/front.rb +143 -0
  11. data/lib/asciidoctor/ietf/ietf.rng +882 -0
  12. data/lib/asciidoctor/ietf/isodoc.rng +514 -0
  13. data/lib/asciidoctor/ietf/isostandard.rng +860 -0
  14. data/lib/asciidoctor/ietf/reqt.rng +171 -0
  15. data/lib/asciidoctor/ietf/validate.rb +84 -0
  16. data/lib/isodoc/ietf/blocks.rb +215 -0
  17. data/lib/isodoc/ietf/cleanup.rb +220 -0
  18. data/lib/isodoc/ietf/footnotes.rb +70 -0
  19. data/lib/isodoc/ietf/front.rb +232 -0
  20. data/lib/isodoc/ietf/inline.rb +136 -0
  21. data/lib/isodoc/ietf/metadata.rb +62 -0
  22. data/lib/isodoc/ietf/references.rb +129 -0
  23. data/lib/isodoc/ietf/reqt.rb +74 -0
  24. data/lib/isodoc/ietf/rfc_convert.rb +60 -0
  25. data/lib/isodoc/ietf/section.rb +162 -0
  26. data/lib/isodoc/ietf/table.rb +43 -0
  27. data/lib/isodoc/ietf/terms.rb +65 -0
  28. data/lib/metanorma-ietf.rb +2 -1
  29. data/lib/metanorma/ietf/processor.rb +16 -37
  30. data/lib/metanorma/ietf/version.rb +1 -1
  31. data/metanorma-ietf.gemspec +3 -3
  32. metadata +36 -36
  33. data/Gemfile.lock +0 -327
  34. data/lib/asciidoctor/rfc.rb +0 -8
  35. data/lib/asciidoctor/rfc/common/base.rb +0 -544
  36. data/lib/asciidoctor/rfc/common/front.rb +0 -120
  37. data/lib/asciidoctor/rfc/common/validate.rb +0 -31
  38. data/lib/asciidoctor/rfc/v2/base.rb +0 -380
  39. data/lib/asciidoctor/rfc/v2/blocks.rb +0 -299
  40. data/lib/asciidoctor/rfc/v2/converter.rb +0 -60
  41. data/lib/asciidoctor/rfc/v2/front.rb +0 -69
  42. data/lib/asciidoctor/rfc/v2/inline_anchor.rb +0 -111
  43. data/lib/asciidoctor/rfc/v2/lists.rb +0 -135
  44. data/lib/asciidoctor/rfc/v2/table.rb +0 -116
  45. data/lib/asciidoctor/rfc/v2/validate.rng +0 -716
  46. data/lib/asciidoctor/rfc/v3/base.rb +0 -330
  47. data/lib/asciidoctor/rfc/v3/blocks.rb +0 -246
  48. data/lib/asciidoctor/rfc/v3/converter.rb +0 -62
  49. data/lib/asciidoctor/rfc/v3/front.rb +0 -122
  50. data/lib/asciidoctor/rfc/v3/inline_anchor.rb +0 -89
  51. data/lib/asciidoctor/rfc/v3/lists.rb +0 -176
  52. data/lib/asciidoctor/rfc/v3/svg.rng +0 -9081
  53. data/lib/asciidoctor/rfc/v3/table.rb +0 -65
  54. data/lib/asciidoctor/rfc/v3/validate.rng +0 -2143
@@ -1,135 +0,0 @@
1
- module Asciidoctor
2
- module Rfc::V2
3
- module Lists
4
- # Syntax:
5
- # * A
6
- # * B
7
- def ulist(node)
8
- noko { |xml| wrap_list :ulist_naked, node, xml }
9
- end
10
-
11
- OLIST_TYPES = Hash.new("numbers").merge(
12
- arabic: "numbers",
13
- # decimal: "1", # not supported
14
- loweralpha: "letters",
15
- # lowergreek: "lower-greek", # not supported
16
- lowerroman: "format %i.",
17
- upperalpha: "format %C.",
18
- upperroman: "format %I.",
19
- ).freeze
20
-
21
- # Syntax:
22
- # [counter=token] (optional)
23
- # . A
24
- # . B
25
- def olist(node)
26
- noko { |xml| wrap_list :olist_naked, node, xml }
27
- end
28
-
29
- # Syntax:
30
- # [hangIndent=n] (optional)
31
- # A:: B
32
- # C:: D
33
- def dlist(node)
34
- noko { |xml| wrap_list :dlist_naked, node, xml }
35
- end
36
-
37
- private
38
-
39
- def wrap_list(method_name, node, xml)
40
- if node.parent.context !~ /paragraph|list_item/
41
- xml.t do |xml_t|
42
- send method_name, node, xml_t
43
- end
44
- else
45
- send method_name, node, xml
46
- end
47
- end
48
-
49
- def ulist_naked(node, xml)
50
- style = "symbols"
51
- style = "empty" if node.attr("style") == "empty"
52
- style = "empty" if node.option?("empty")
53
- list_attributes = {
54
- style: style,
55
- hangIndent: node.attr("hang-indent"),
56
- }
57
-
58
- xml.list **attr_code(list_attributes) do |xml_list|
59
- node.items.each do |item|
60
- t_attributes = {
61
- anchor: nil,
62
- }
63
-
64
- xml_list.t **attr_code(t_attributes) do |xml_t|
65
- xml_t << item.text
66
- xml_t << para_to_vspace(item.content) if item.blocks?
67
- end
68
- end
69
- end
70
- end
71
-
72
- def olist_naked(node, xml)
73
- style = OLIST_TYPES[node.style.to_sym]
74
- style = "empty" if node.attr("style") == "empty"
75
- style = "format #{node.attr('format')}" unless node.attr("format").nil?
76
- list_attributes = {
77
- hangIndent: node.attr("hang-indent"),
78
- counter: node.attr("counter"),
79
- style: style,
80
- }
81
-
82
- xml.list **attr_code(list_attributes) do |xml_list|
83
- node.items.each do |item|
84
- t_attributes = {
85
- anchor: item.id,
86
- }
87
-
88
- xml_list.t **attr_code(t_attributes) do |xml_t|
89
- xml_t << item.text
90
- xml_t << para_to_vspace(item.content) if item.blocks?
91
- end
92
- end
93
- end
94
- end
95
-
96
- def dlist_naked(node, xml)
97
- style = "hanging"
98
- style = "empty" if node.attr("style") == "empty"
99
- list_attributes = {
100
- hangIndent: node.attr("hang-indent"),
101
- style: style,
102
- }
103
-
104
- xml.list **attr_code(list_attributes) do |xml_list|
105
- node.items.each do |terms, dd|
106
- # all but last term have empty dd
107
- terms.each_with_index do |term, idx|
108
- t_attributes = {
109
- hangText: flatten_rawtext(term.text).join(" "),
110
- }
111
-
112
- if idx < terms.size - 1
113
- xml_list.t **attr_code(t_attributes)
114
- else
115
- xml_list.t **attr_code(t_attributes) do |xml_t|
116
- if !dd.nil? && dd.text?
117
- # This vspace element is extraneous to the RFC XML spec,
118
- # but is required by IDNITS
119
- xml_t.vspace(blankLines: "1") unless $inline_definition_lists
120
- xml_t << dd.text
121
- end
122
- if !dd.nil? && dd.blocks?
123
- # v2 does not support multi paragraph list items;
124
- # vspace is used to emulate them
125
- xml_t << para_to_vspace(dd.content)
126
- end
127
- end
128
- end
129
- end
130
- end
131
- end
132
- end
133
- end
134
- end
135
- end
@@ -1,116 +0,0 @@
1
- module Asciidoctor
2
- module Rfc::V2
3
- module Table
4
- # Syntax:
5
- # [[id]]
6
- # .Title
7
- # [suppress-title,align,style]
8
- # |===
9
- # |col | col
10
- # |===
11
- def table(node)
12
- has_body = false
13
- has_head = false
14
- style_value = case node.attr "grid"
15
- when "all"
16
- "all"
17
- when "rows"
18
- "headers"
19
- when "cols"
20
- "full"
21
- when "none"
22
- "none"
23
- else
24
- "full"
25
- end
26
- warn "asciidoctor: WARNING (#{current_location(node)}): grid=rows attribute is not supported on tables" if node.attr("grid") == "rows"
27
- texttable_attributes = {
28
- anchor: node.id,
29
- title: node.title,
30
- 'suppress-title': node.attr("supress-title") ? true : false,
31
- align: node.attr("align"),
32
- style: style_value,
33
- }
34
-
35
- noko do |xml|
36
- xml.texttable **attr_code(texttable_attributes) do |xml_texttable|
37
- [:head, :body, :foot].reject { |tblsec| node.rows[tblsec].empty? }.each do |tblsec|
38
- has_body = true if tblsec == :body
39
- has_head = true if tblsec == :head
40
- end
41
- warn "asciidoctor: WARNING (#{current_location(node)}): tables must have at least one body row" unless has_body
42
- warn "asciidoctor: WARNING (#{current_location(node)}): tables must have at least one head row" unless has_head
43
-
44
- # preamble, postamble elements not supported
45
- table_head node, xml_texttable
46
- table_body_and_foot node, xml_texttable
47
- end
48
- end
49
- end
50
-
51
- private
52
-
53
- def table_head(node, xml)
54
- [:head].reject { |tblsec| node.rows[tblsec].empty? }.each do |tblsec|
55
- warn "asciidoctor: WARNING (#{current_location(node)}): RFC XML v2 tables only support a single header row" if node.rows[tblsec].size > 1
56
- widths = table_widths(node)
57
- node.rows[tblsec].each do |row|
58
- rowlength = 0
59
- row.each_with_index do |cell, i|
60
- warn "asciidoctor: WARNING (#{current_location(node)}): RFC XML v2 tables do not support colspan attribute" unless cell.colspan.nil?
61
- warn "asciidoctor: WARNING (#{current_location(node)}): RFC XML v2 tables do not support rowspan attribute" unless cell.rowspan.nil?
62
- width = if node.option?("autowidth") || i >= widths[:percentage].size || !widths[:named]
63
- nil
64
- else
65
- "#{widths[:percentage][i]}%"
66
- end
67
- ttcol_attributes = {
68
- # NOTE: anchor (ttcol.id) not supported
69
- align: cell.attr("halign"),
70
- width: width,
71
- }
72
-
73
- rowlength += cell.text.size
74
- xml.ttcol **attr_code(ttcol_attributes) do |ttcol|
75
- #ttcol << cell.text
76
- # NOT cell.content: v2 does not permit blocks in cells
77
- ttcol << Array(cell.content).join("").gsub(%r{<t>}, "").gsub(%r{</t>}, "")
78
- end
79
- end
80
- warn "asciidoctor: WARNING (#{current_location(node)}): header row of table is longer than 72 ascii characters" if rowlength > 72
81
- end
82
- end
83
- end
84
-
85
- def table_widths(node)
86
- percentage_widths = []
87
- named_widths = false
88
- node.columns.each do |col|
89
- percentage_widths << col.attr("colpcwidth").to_f.round
90
- named_widths = true if col.attr("width") != 1
91
- # 1 is the default set value if no width has been given for the column
92
- # if a columns widths have been set as [1,1,1,1,...], they will be ignored
93
- end
94
- { percentage: percentage_widths, named: named_widths }
95
- end
96
-
97
- def table_body_and_foot(node, xml)
98
- [:body, :foot].reject { |tblsec| node.rows[tblsec].empty? }.each do |tblsec|
99
- # NOTE: anchor (tblsec.id) not supported
100
- node.rows[tblsec].each_with_index do |row, i|
101
- rowlength = 0
102
- row.each do |cell|
103
- rowlength += cell.text.size
104
- xml.c do |c|
105
- #c << cell.text
106
- # NOT cell.content: v2 does not permit blocks in cells
107
- c << Array(cell.content).join("").gsub(%r{<t>}, "").gsub(%r{</t>}, "")
108
- end
109
- end
110
- warn "asciidoctor: WARNING (#{current_location(node)}): row #{i} of table is longer than 72 ascii characters" if rowlength > 72
111
- end
112
- end
113
- end
114
- end
115
- end
116
- end
@@ -1,716 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
- <define name="rfc">
4
- <element name="rfc">
5
- <optional>
6
- <attribute name="number"/>
7
- </optional>
8
- <optional>
9
- <attribute name="obsoletes" a:defaultValue=""/>
10
- </optional>
11
- <optional>
12
- <attribute name="updates" a:defaultValue=""/>
13
- </optional>
14
- <optional>
15
- <attribute name="category">
16
- <choice>
17
- <value>std</value>
18
- <value>bcp</value>
19
- <value>info</value>
20
- <value>exp</value>
21
- <value>historic</value>
22
- </choice>
23
- </attribute>
24
- </optional>
25
- <optional>
26
- <attribute name="consensus">
27
- <choice>
28
- <value>no</value>
29
- <value>yes</value>
30
- </choice>
31
- </attribute>
32
- </optional>
33
- <optional>
34
- <attribute name="seriesNo"/>
35
- </optional>
36
- <optional>
37
- <attribute name="ipr">
38
- <choice>
39
- <value>full2026</value>
40
- <value>noDerivativeWorks2026</value>
41
- <value>none</value>
42
- <value>full3667</value>
43
- <value>noModification3667</value>
44
- <value>noDerivatives3667</value>
45
- <value>full3978</value>
46
- <value>noModification3978</value>
47
- <value>noDerivatives3978</value>
48
- <value>trust200811</value>
49
- <value>noModificationTrust200811</value>
50
- <value>noDerivativesTrust200811</value>
51
- <value>trust200902</value>
52
- <value>noModificationTrust200902</value>
53
- <value>noDerivativesTrust200902</value>
54
- <value>pre5378Trust200902</value>
55
- </choice>
56
- </attribute>
57
- </optional>
58
- <optional>
59
- <attribute name="iprExtract">
60
- <data type="IDREF"/>
61
- </attribute>
62
- </optional>
63
- <optional>
64
- <attribute name="submissionType" a:defaultValue="IETF">
65
- <choice>
66
- <value>IETF</value>
67
- <value>IAB</value>
68
- <value>IRTF</value>
69
- <value>independent</value>
70
- </choice>
71
- </attribute>
72
- </optional>
73
- <optional>
74
- <attribute name="docName"/>
75
- </optional>
76
- <optional>
77
- <attribute name="xml:lang" a:defaultValue="en"/>
78
- </optional>
79
- <ref name="front"/>
80
- <ref name="middle"/>
81
- <optional>
82
- <ref name="back"/>
83
- </optional>
84
- </element>
85
- </define>
86
- <define name="front">
87
- <element name="front">
88
- <ref name="title"/>
89
- <oneOrMore>
90
- <ref name="author"/>
91
- </oneOrMore>
92
- <ref name="date"/>
93
- <zeroOrMore>
94
- <ref name="area"/>
95
- </zeroOrMore>
96
- <zeroOrMore>
97
- <ref name="workgroup"/>
98
- </zeroOrMore>
99
- <zeroOrMore>
100
- <ref name="keyword"/>
101
- </zeroOrMore>
102
- <optional>
103
- <ref name="abstract"/>
104
- </optional>
105
- <zeroOrMore>
106
- <ref name="note"/>
107
- </zeroOrMore>
108
- </element>
109
- </define>
110
- <define name="title">
111
- <element name="title">
112
- <optional>
113
- <attribute name="abbrev"/>
114
- </optional>
115
- <text/>
116
- </element>
117
- </define>
118
- <define name="author">
119
- <element name="author">
120
- <optional>
121
- <attribute name="initials"/>
122
- </optional>
123
- <optional>
124
- <attribute name="surname"/>
125
- </optional>
126
- <optional>
127
- <attribute name="fullname"/>
128
- </optional>
129
- <optional>
130
- <attribute name="role">
131
- <value>editor</value>
132
- </attribute>
133
- </optional>
134
- <optional>
135
- <ref name="organization"/>
136
- </optional>
137
- <optional>
138
- <ref name="address"/>
139
- </optional>
140
- </element>
141
- </define>
142
- <define name="organization">
143
- <element name="organization">
144
- <optional>
145
- <attribute name="abbrev"/>
146
- </optional>
147
- <text/>
148
- </element>
149
- </define>
150
- <define name="address">
151
- <element name="address">
152
- <optional>
153
- <ref name="postal"/>
154
- </optional>
155
- <optional>
156
- <ref name="phone"/>
157
- </optional>
158
- <optional>
159
- <ref name="facsimile"/>
160
- </optional>
161
- <optional>
162
- <ref name="email"/>
163
- </optional>
164
- <optional>
165
- <ref name="uri"/>
166
- </optional>
167
- </element>
168
- </define>
169
- <define name="postal">
170
- <element name="postal">
171
- <oneOrMore>
172
- <ref name="street"/>
173
- </oneOrMore>
174
- <zeroOrMore>
175
- <choice>
176
- <ref name="city"/>
177
- <ref name="region"/>
178
- <ref name="code"/>
179
- <ref name="country"/>
180
- </choice>
181
- </zeroOrMore>
182
- </element>
183
- </define>
184
- <define name="street">
185
- <element name="street">
186
- <text/>
187
- </element>
188
- </define>
189
- <define name="city">
190
- <element name="city">
191
- <text/>
192
- </element>
193
- </define>
194
- <define name="region">
195
- <element name="region">
196
- <text/>
197
- </element>
198
- </define>
199
- <define name="code">
200
- <element name="code">
201
- <text/>
202
- </element>
203
- </define>
204
- <define name="country">
205
- <element name="country">
206
- <text/>
207
- </element>
208
- </define>
209
- <define name="phone">
210
- <element name="phone">
211
- <text/>
212
- </element>
213
- </define>
214
- <define name="facsimile">
215
- <element name="facsimile">
216
- <text/>
217
- </element>
218
- </define>
219
- <define name="email">
220
- <element name="email">
221
- <text/>
222
- </element>
223
- </define>
224
- <define name="uri">
225
- <element name="uri">
226
- <text/>
227
- </element>
228
- </define>
229
- <define name="date">
230
- <element name="date">
231
- <optional>
232
- <attribute name="day"/>
233
- </optional>
234
- <optional>
235
- <attribute name="month"/>
236
- </optional>
237
- <optional>
238
- <attribute name="year"/>
239
- </optional>
240
- <empty/>
241
- </element>
242
- </define>
243
- <define name="area">
244
- <element name="area">
245
- <text/>
246
- </element>
247
- </define>
248
- <define name="workgroup">
249
- <element name="workgroup">
250
- <text/>
251
- </element>
252
- </define>
253
- <define name="keyword">
254
- <element name="keyword">
255
- <text/>
256
- </element>
257
- </define>
258
- <define name="abstract">
259
- <element name="abstract">
260
- <oneOrMore>
261
- <ref name="t"/>
262
- </oneOrMore>
263
- </element>
264
- </define>
265
- <define name="note">
266
- <element name="note">
267
- <attribute name="title"/>
268
- <oneOrMore>
269
- <ref name="t"/>
270
- </oneOrMore>
271
- </element>
272
- </define>
273
- <define name="middle">
274
- <element name="middle">
275
- <oneOrMore>
276
- <ref name="section"/>
277
- </oneOrMore>
278
- </element>
279
- </define>
280
- <define name="section">
281
- <element name="section">
282
- <optional>
283
- <attribute name="anchor">
284
- <data type="ID"/>
285
- </attribute>
286
- </optional>
287
- <attribute name="title"/>
288
- <optional>
289
- <attribute name="toc" a:defaultValue="default">
290
- <choice>
291
- <value>include</value>
292
- <value>exclude</value>
293
- <value>default</value>
294
- </choice>
295
- </attribute>
296
- </optional>
297
- <zeroOrMore>
298
- <choice>
299
- <ref name="t"/>
300
- <ref name="figure"/>
301
- <ref name="texttable"/>
302
- <ref name="iref"/>
303
- </choice>
304
- </zeroOrMore>
305
- <zeroOrMore>
306
- <ref name="section"/>
307
- </zeroOrMore>
308
- </element>
309
- </define>
310
- <define name="t">
311
- <element name="t">
312
- <optional>
313
- <attribute name="anchor">
314
- <data type="ID"/>
315
- </attribute>
316
- </optional>
317
- <optional>
318
- <attribute name="hangText"/>
319
- </optional>
320
- <zeroOrMore>
321
- <choice>
322
- <text/>
323
- <ref name="list"/>
324
- <ref name="figure"/>
325
- <ref name="xref"/>
326
- <ref name="eref"/>
327
- <ref name="iref"/>
328
- <ref name="cref"/>
329
- <ref name="spanx"/>
330
- <ref name="vspace"/>
331
- </choice>
332
- </zeroOrMore>
333
- </element>
334
- </define>
335
- <define name="list">
336
- <element name="list">
337
- <optional>
338
- <attribute name="style"/>
339
- </optional>
340
- <optional>
341
- <attribute name="hangIndent"/>
342
- </optional>
343
- <optional>
344
- <attribute name="counter"/>
345
- </optional>
346
- <oneOrMore>
347
- <ref name="t"/>
348
- </oneOrMore>
349
- </element>
350
- </define>
351
- <define name="xref">
352
- <element name="xref">
353
- <attribute name="target">
354
- <data type="IDREF"/>
355
- </attribute>
356
- <optional>
357
- <attribute name="pageno" a:defaultValue="false">
358
- <choice>
359
- <value>true</value>
360
- <value>false</value>
361
- </choice>
362
- </attribute>
363
- </optional>
364
- <optional>
365
- <attribute name="format" a:defaultValue="default">
366
- <choice>
367
- <value>counter</value>
368
- <value>title</value>
369
- <value>none</value>
370
- <value>default</value>
371
- </choice>
372
- </attribute>
373
- </optional>
374
- <text/>
375
- </element>
376
- </define>
377
- <define name="eref">
378
- <element name="eref">
379
- <attribute name="target"/>
380
- <text/>
381
- </element>
382
- </define>
383
- <define name="iref">
384
- <element name="iref">
385
- <attribute name="item"/>
386
- <optional>
387
- <attribute name="subitem" a:defaultValue=""/>
388
- </optional>
389
- <optional>
390
- <attribute name="primary" a:defaultValue="false">
391
- <choice>
392
- <value>true</value>
393
- <value>false</value>
394
- </choice>
395
- </attribute>
396
- </optional>
397
- <empty/>
398
- </element>
399
- </define>
400
- <define name="cref">
401
- <element name="cref">
402
- <optional>
403
- <attribute name="anchor">
404
- <data type="ID"/>
405
- </attribute>
406
- </optional>
407
- <optional>
408
- <attribute name="source"/>
409
- </optional>
410
- <text/>
411
- </element>
412
- </define>
413
- <define name="spanx">
414
- <element name="spanx">
415
- <optional>
416
- <attribute name="xml:space" a:defaultValue="preserve">
417
- <choice>
418
- <value>default</value>
419
- <value>preserve</value>
420
- </choice>
421
- </attribute>
422
- </optional>
423
- <optional>
424
- <attribute name="style" a:defaultValue="emph"/>
425
- </optional>
426
- <text/>
427
- </element>
428
- </define>
429
- <define name="vspace">
430
- <element name="vspace">
431
- <optional>
432
- <attribute name="blankLines" a:defaultValue="0"/>
433
- </optional>
434
- <empty/>
435
- </element>
436
- </define>
437
- <define name="figure">
438
- <element name="figure">
439
- <optional>
440
- <attribute name="anchor">
441
- <data type="ID"/>
442
- </attribute>
443
- </optional>
444
- <optional>
445
- <attribute name="title" a:defaultValue=""/>
446
- </optional>
447
- <optional>
448
- <attribute name="suppress-title" a:defaultValue="false">
449
- <choice>
450
- <value>true</value>
451
- <value>false</value>
452
- </choice>
453
- </attribute>
454
- </optional>
455
- <optional>
456
- <attribute name="src"/>
457
- </optional>
458
- <optional>
459
- <attribute name="align" a:defaultValue="left">
460
- <choice>
461
- <value>left</value>
462
- <value>center</value>
463
- <value>right</value>
464
- </choice>
465
- </attribute>
466
- </optional>
467
- <optional>
468
- <attribute name="alt" a:defaultValue=""/>
469
- </optional>
470
- <optional>
471
- <attribute name="width" a:defaultValue=""/>
472
- </optional>
473
- <optional>
474
- <attribute name="height" a:defaultValue=""/>
475
- </optional>
476
- <zeroOrMore>
477
- <ref name="iref"/>
478
- </zeroOrMore>
479
- <optional>
480
- <ref name="preamble"/>
481
- </optional>
482
- <ref name="artwork"/>
483
- <optional>
484
- <ref name="postamble"/>
485
- </optional>
486
- </element>
487
- </define>
488
- <define name="preamble">
489
- <element name="preamble">
490
- <zeroOrMore>
491
- <choice>
492
- <text/>
493
- <ref name="xref"/>
494
- <ref name="eref"/>
495
- <ref name="iref"/>
496
- <ref name="cref"/>
497
- <ref name="spanx"/>
498
- </choice>
499
- </zeroOrMore>
500
- </element>
501
- </define>
502
- <define name="artwork">
503
- <element name="artwork">
504
- <optional>
505
- <attribute name="xml:space" a:defaultValue="preserve">
506
- <choice>
507
- <value>default</value>
508
- <value>preserve</value>
509
- </choice>
510
- </attribute>
511
- </optional>
512
- <optional>
513
- <attribute name="name" a:defaultValue=""/>
514
- </optional>
515
- <optional>
516
- <attribute name="type" a:defaultValue=""/>
517
- </optional>
518
- <optional>
519
- <attribute name="src"/>
520
- </optional>
521
- <optional>
522
- <attribute name="align" a:defaultValue="left">
523
- <choice>
524
- <value>left</value>
525
- <value>center</value>
526
- <value>right</value>
527
- </choice>
528
- </attribute>
529
- </optional>
530
- <optional>
531
- <attribute name="alt" a:defaultValue=""/>
532
- </optional>
533
- <optional>
534
- <attribute name="width" a:defaultValue=""/>
535
- </optional>
536
- <optional>
537
- <attribute name="height" a:defaultValue=""/>
538
- </optional>
539
- <zeroOrMore>
540
- <text/>
541
- </zeroOrMore>
542
- </element>
543
- </define>
544
- <define name="postamble">
545
- <element name="postamble">
546
- <zeroOrMore>
547
- <choice>
548
- <text/>
549
- <ref name="xref"/>
550
- <ref name="eref"/>
551
- <ref name="iref"/>
552
- <ref name="cref"/>
553
- <ref name="spanx"/>
554
- </choice>
555
- </zeroOrMore>
556
- </element>
557
- </define>
558
- <define name="texttable">
559
- <element name="texttable">
560
- <optional>
561
- <attribute name="anchor">
562
- <data type="ID"/>
563
- </attribute>
564
- </optional>
565
- <optional>
566
- <attribute name="title" a:defaultValue=""/>
567
- </optional>
568
- <optional>
569
- <attribute name="suppress-title" a:defaultValue="false">
570
- <choice>
571
- <value>true</value>
572
- <value>false</value>
573
- </choice>
574
- </attribute>
575
- </optional>
576
- <optional>
577
- <attribute name="align" a:defaultValue="center">
578
- <choice>
579
- <value>left</value>
580
- <value>center</value>
581
- <value>right</value>
582
- </choice>
583
- </attribute>
584
- </optional>
585
- <optional>
586
- <attribute name="style" a:defaultValue="full">
587
- <choice>
588
- <value>all</value>
589
- <value>none</value>
590
- <value>headers</value>
591
- <value>full</value>
592
- </choice>
593
- </attribute>
594
- </optional>
595
- <optional>
596
- <ref name="preamble"/>
597
- </optional>
598
- <oneOrMore>
599
- <ref name="ttcol"/>
600
- </oneOrMore>
601
- <zeroOrMore>
602
- <ref name="c"/>
603
- </zeroOrMore>
604
- <optional>
605
- <ref name="postamble"/>
606
- </optional>
607
- </element>
608
- </define>
609
- <define name="ttcol">
610
- <element name="ttcol">
611
- <optional>
612
- <attribute name="width"/>
613
- </optional>
614
- <optional>
615
- <attribute name="align" a:defaultValue="left">
616
- <choice>
617
- <value>left</value>
618
- <value>center</value>
619
- <value>right</value>
620
- </choice>
621
- </attribute>
622
- </optional>
623
- <text/>
624
- </element>
625
- </define>
626
- <define name="c">
627
- <element name="c">
628
- <zeroOrMore>
629
- <choice>
630
- <text/>
631
- <ref name="xref"/>
632
- <ref name="eref"/>
633
- <ref name="iref"/>
634
- <ref name="cref"/>
635
- <ref name="spanx"/>
636
- </choice>
637
- </zeroOrMore>
638
- </element>
639
- </define>
640
- <define name="back">
641
- <element name="back">
642
- <zeroOrMore>
643
- <ref name="references"/>
644
- </zeroOrMore>
645
- <zeroOrMore>
646
- <ref name="section"/>
647
- </zeroOrMore>
648
- </element>
649
- </define>
650
- <define name="references">
651
- <element name="references">
652
- <optional>
653
- <attribute name="title" a:defaultValue="References"/>
654
- </optional>
655
- <oneOrMore>
656
- <ref name="reference"/>
657
- </oneOrMore>
658
- </element>
659
- </define>
660
- <define name="reference">
661
- <element name="reference">
662
- <attribute name="anchor">
663
- <data type="ID"/>
664
- </attribute>
665
- <optional>
666
- <attribute name="target"/>
667
- </optional>
668
- <ref name="front"/>
669
- <zeroOrMore>
670
- <ref name="seriesInfo"/>
671
- </zeroOrMore>
672
- <zeroOrMore>
673
- <ref name="format"/>
674
- </zeroOrMore>
675
- <zeroOrMore>
676
- <ref name="annotation"/>
677
- </zeroOrMore>
678
- </element>
679
- </define>
680
- <define name="seriesInfo">
681
- <element name="seriesInfo">
682
- <attribute name="name"/>
683
- <attribute name="value"/>
684
- <empty/>
685
- </element>
686
- </define>
687
- <define name="format">
688
- <element name="format">
689
- <optional>
690
- <attribute name="target"/>
691
- </optional>
692
- <attribute name="type"/>
693
- <optional>
694
- <attribute name="octets"/>
695
- </optional>
696
- <empty/>
697
- </element>
698
- </define>
699
- <define name="annotation">
700
- <element name="annotation">
701
- <zeroOrMore>
702
- <choice>
703
- <text/>
704
- <ref name="xref"/>
705
- <ref name="eref"/>
706
- <ref name="iref"/>
707
- <ref name="cref"/>
708
- <ref name="spanx"/>
709
- </choice>
710
- </zeroOrMore>
711
- </element>
712
- </define>
713
- <start>
714
- <ref name="rfc"/>
715
- </start>
716
- </grammar>