metanorma-sample 1.0.10

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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.hound.yml +3 -0
  4. data/.rubocop.yml +10 -0
  5. data/.travis.yml +16 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE +25 -0
  9. data/README.adoc +13 -0
  10. data/Rakefile +6 -0
  11. data/asciidoctor-metanorma_sample.gemspec +46 -0
  12. data/bin/console +14 -0
  13. data/bin/rspec +18 -0
  14. data/bin/setup +8 -0
  15. data/lib/asciidoctor-sample.rb +11 -0
  16. data/lib/asciidoctor/sample.rb +7 -0
  17. data/lib/asciidoctor/sample/biblio.rng +890 -0
  18. data/lib/asciidoctor/sample/converter.rb +162 -0
  19. data/lib/asciidoctor/sample/isodoc.rng +1091 -0
  20. data/lib/asciidoctor/sample/isostandard.rng +1068 -0
  21. data/lib/asciidoctor/sample/pdf.js +31 -0
  22. data/lib/asciidoctor/sample/sample.rng +196 -0
  23. data/lib/isodoc/sample/html/header.html +184 -0
  24. data/lib/isodoc/sample/html/html_sample_intro.html +8 -0
  25. data/lib/isodoc/sample/html/html_sample_titlepage.html +106 -0
  26. data/lib/isodoc/sample/html/htmlstyle.scss +1038 -0
  27. data/lib/isodoc/sample/html/logo.jpg +0 -0
  28. data/lib/isodoc/sample/html/sample.scss +644 -0
  29. data/lib/isodoc/sample/html/scripts.html +82 -0
  30. data/lib/isodoc/sample/html/scripts.pdf.html +70 -0
  31. data/lib/isodoc/sample/html/word_sample_intro.html +72 -0
  32. data/lib/isodoc/sample/html/word_sample_titlepage.html +75 -0
  33. data/lib/isodoc/sample/html/wordstyle.scss +1105 -0
  34. data/lib/isodoc/sample/html_convert.rb +120 -0
  35. data/lib/isodoc/sample/metadata.rb +74 -0
  36. data/lib/isodoc/sample/pdf_convert.rb +117 -0
  37. data/lib/isodoc/sample/word_convert.rb +98 -0
  38. data/lib/metanorma/sample.rb +7 -0
  39. data/lib/metanorma/sample/processor.rb +43 -0
  40. data/lib/metanorma/sample/version.rb +5 -0
  41. metadata +310 -0
@@ -0,0 +1,162 @@
1
+ require "asciidoctor"
2
+ require "asciidoctor/sample"
3
+ require "asciidoctor/standoc/converter"
4
+ require "isodoc/sample/html_convert"
5
+ require "isodoc/sample/word_convert"
6
+ require "fileutils"
7
+
8
+ module Asciidoctor
9
+ module Sample
10
+
11
+ # A {Converter} implementation that generates RSD output, and a document
12
+ # schema encapsulation of the document for validation
13
+ #
14
+ class Converter < Standoc::Converter
15
+
16
+ register_for "sample"
17
+
18
+ def metadata_author(node, xml)
19
+ xml.contributor do |c|
20
+ c.role **{ type: "author" }
21
+ c.organization do |a|
22
+ a.name "Acme"
23
+ end
24
+ end
25
+ end
26
+
27
+ def metadata_publisher(node, xml)
28
+ xml.contributor do |c|
29
+ c.role **{ type: "publisher" }
30
+ c.organization do |a|
31
+ a.name "Acme"
32
+ end
33
+ end
34
+ end
35
+
36
+ def metadata_committee(node, xml)
37
+ xml.editorialgroup do |a|
38
+ a.committee node.attr("committee"),
39
+ **attr_code(type: node.attr("committee-type"))
40
+ i = 2
41
+ while node.attr("committee_#{i}") do
42
+ a.committee node.attr("committee_#{i}"),
43
+ **attr_code(type: node.attr("committee-type_#{i}"))
44
+ i += 1
45
+ end
46
+ end
47
+ end
48
+
49
+ def metadata_status(node, xml)
50
+ xml.status(**{ format: "plain" }) { |s| s << node.attr("status") }
51
+ end
52
+
53
+ def metadata_id(node, xml)
54
+ docstatus = node.attr("status")
55
+ dn = node.attr("docnumber")
56
+ if docstatus
57
+ abbr = IsoDoc::Sample::Metadata.new("en", "Latn", {}).
58
+ status_abbr(docstatus)
59
+ dn = "#{dn}(#{abbr})" unless abbr.empty?
60
+ end
61
+ node.attr("copyright-year") and dn += ":#{node.attr("copyright-year")}"
62
+ xml.docidentifier dn, **{type: "acme"}
63
+ xml.docnumber { |i| i << node.attr("docnumber") }
64
+ end
65
+
66
+ def metadata_copyright(node, xml)
67
+ from = node.attr("copyright-year") || Date.today.year
68
+ xml.copyright do |c|
69
+ c.from from
70
+ c.owner do |owner|
71
+ owner.organization do |o|
72
+ o.name "Acme"
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ def metadata_security(node, xml)
79
+ security = node.attr("security") || return
80
+ xml.security security
81
+ end
82
+
83
+ def metadata(node, xml)
84
+ super
85
+ metadata_security(node, xml)
86
+ end
87
+
88
+ def title_validate(root)
89
+ nil
90
+ end
91
+
92
+ def makexml(node)
93
+ result = ["<?xml version='1.0' encoding='UTF-8'?>\n<sample-standard>"]
94
+ @draft = node.attributes.has_key?("draft")
95
+ result << noko { |ixml| front node, ixml }
96
+ result << noko { |ixml| middle node, ixml }
97
+ result << "</sample-standard>"
98
+ result = textcleanup(result.flatten * "\n")
99
+ ret1 = cleanup(Nokogiri::XML(result))
100
+ validate(ret1)
101
+ ret1.root.add_namespace(nil, EXAMPLE_NAMESPACE)
102
+ ret1
103
+ end
104
+
105
+ def doctype(node)
106
+ d = node.attr("doctype")
107
+ unless %w{policy-and-procedures best-practices
108
+ supporting-document report legal directives proposal
109
+ standard}.include? d
110
+ warn "#{d} is not a legal document type: reverting to 'standard'"
111
+ d = "standard"
112
+ end
113
+ d
114
+ end
115
+
116
+ def document(node)
117
+ init(node)
118
+ ret1 = makexml(node)
119
+ ret = ret1.to_xml(indent: 2)
120
+ unless node.attr("nodoc") || !node.attr("docfile")
121
+ filename = node.attr("docfile").gsub(/\.adoc/, ".xml").
122
+ gsub(%r{^.*/}, "")
123
+ File.open(filename, "w") { |f| f.write(ret) }
124
+ html_converter(node).convert filename unless node.attr("nodoc")
125
+ word_converter(node).convert filename unless node.attr("nodoc")
126
+ pdf_converter(node).convert filename unless node.attr("nodoc")
127
+ end
128
+ @files_to_delete.each { |f| FileUtils.rm f }
129
+ ret
130
+ end
131
+
132
+ def validate(doc)
133
+ content_validate(doc)
134
+ schema_validate(formattedstr_strip(doc.dup),
135
+ File.join(File.dirname(__FILE__), "sample.rng"))
136
+ end
137
+
138
+ def sections_cleanup(x)
139
+ super
140
+ x.xpath("//*[@inline-header]").each do |h|
141
+ h.delete("inline-header")
142
+ end
143
+ end
144
+
145
+ def style(n, t)
146
+ return
147
+ end
148
+
149
+ def html_converter(node)
150
+ IsoDoc::Sample::HtmlConvert.new(html_extract_attributes(node))
151
+ end
152
+
153
+ def word_converter(node)
154
+ IsoDoc::Sample::WordConvert.new(doc_extract_attributes(node))
155
+ end
156
+
157
+ def pdf_converter(node)
158
+ IsoDoc::Sample::PdfConvert.new(html_extract_attributes(node))
159
+ end
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,1091 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ instantiations of this grammar may replace leaf strings
4
+ with more elaborated types; e.g. title (text) replaced with
5
+ title-main, title-intro, title-part; type replaced with
6
+ enum.
7
+
8
+ some renaming at leaf nodes is permissible
9
+
10
+ obligations can change both from optional to mandatory,
11
+ and from mandatory to optional; optional elements may
12
+ be omitted; freely positioned alternatives may be replaced
13
+ with strict ordering
14
+
15
+ DO NOT introduce a namespace here. We do not want a distinct namespace
16
+ for these elements, and a distinct namespace for any grammar inheriting
17
+ these elements; we just want one namespace for any child grammars
18
+ of this.
19
+ -->
20
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
21
+ <include href="biblio.rng">
22
+ <define name="status">
23
+ <element name="status">
24
+ <choice>
25
+ <value>proposal</value>
26
+ <value>working_draft</value>
27
+ <value>committee_draft</value>
28
+ <value>draft_standard</value>
29
+ <value>final_draft</value>
30
+ <value>published</value>
31
+ <value>withdrawn</value>
32
+ </choice>
33
+ </element>
34
+ </define>
35
+ </include>
36
+ <start>
37
+ <ref name="standard-document"/>
38
+ </start>
39
+ <define name="standard-document">
40
+ <element name="standard-document">
41
+ <ref name="bibdata"/>
42
+ <optional>
43
+ <ref name="version"/>
44
+ </optional>
45
+ <optional>
46
+ <ref name="preface"/>
47
+ </optional>
48
+ <ref name="sections"/>
49
+ <zeroOrMore>
50
+ <ref name="annex"/>
51
+ </zeroOrMore>
52
+ <zeroOrMore>
53
+ <ref name="references"/>
54
+ </zeroOrMore>
55
+ </element>
56
+ </define>
57
+ <define name="bibdata">
58
+ <element name="bibdata">
59
+ <ref name="BibData"/>
60
+ </element>
61
+ </define>
62
+ <define name="version">
63
+ <element name="version">
64
+ <optional>
65
+ <ref name="vedition"/>
66
+ </optional>
67
+ <optional>
68
+ <ref name="revision-date"/>
69
+ </optional>
70
+ <zeroOrMore>
71
+ <ref name="draft"/>
72
+ </zeroOrMore>
73
+ </element>
74
+ </define>
75
+ <define name="vedition">
76
+ <element name="edition">
77
+ <data type="int"/>
78
+ </element>
79
+ </define>
80
+ <define name="revision-date">
81
+ <element name="revision-date">
82
+ <data type="date"/>
83
+ </element>
84
+ </define>
85
+ <define name="draft">
86
+ <element name="draft">
87
+ <text/>
88
+ </element>
89
+ </define>
90
+ <define name="preface">
91
+ <element name="preface">
92
+ <oneOrMore>
93
+ <ref name="content"/>
94
+ </oneOrMore>
95
+ </element>
96
+ </define>
97
+ <define name="sections">
98
+ <element name="sections">
99
+ <oneOrMore>
100
+ <choice>
101
+ <ref name="content"/>
102
+ <ref name="clause"/>
103
+ <ref name="terms"/>
104
+ <ref name="definitions"/>
105
+ </choice>
106
+ </oneOrMore>
107
+ </element>
108
+ </define>
109
+ <define name="definitions">
110
+ <element name="definitions">
111
+ <optional>
112
+ <attribute name="id">
113
+ <data type="ID"/>
114
+ </attribute>
115
+ </optional>
116
+ <optional>
117
+ <ref name="section-title"/>
118
+ </optional>
119
+ <ref name="dl"/>
120
+ </element>
121
+ </define>
122
+ <define name="section-title">
123
+ <element name="title">
124
+ <zeroOrMore>
125
+ <ref name="TextElement"/>
126
+ </zeroOrMore>
127
+ </element>
128
+ </define>
129
+ <define name="content">
130
+ <element name="content">
131
+ <ref name="Content-Section"/>
132
+ </element>
133
+ </define>
134
+ <define name="content-subsection">
135
+ <element name="clause">
136
+ <ref name="Content-Section"/>
137
+ </element>
138
+ </define>
139
+ <define name="Basic-Section">
140
+ <optional>
141
+ <attribute name="id">
142
+ <data type="ID"/>
143
+ </attribute>
144
+ </optional>
145
+ <optional>
146
+ <ref name="section-title"/>
147
+ </optional>
148
+ <oneOrMore>
149
+ <ref name="BasicBlock"/>
150
+ </oneOrMore>
151
+ <zeroOrMore>
152
+ <ref name="note"/>
153
+ </zeroOrMore>
154
+ </define>
155
+ <define name="Content-Section">
156
+ <optional>
157
+ <attribute name="id">
158
+ <data type="ID"/>
159
+ </attribute>
160
+ </optional>
161
+ <optional>
162
+ <ref name="section-title"/>
163
+ </optional>
164
+ <choice>
165
+ <group>
166
+ <oneOrMore>
167
+ <ref name="BasicBlock"/>
168
+ </oneOrMore>
169
+ <zeroOrMore>
170
+ <ref name="note"/>
171
+ </zeroOrMore>
172
+ </group>
173
+ <oneOrMore>
174
+ <ref name="content-subsection"/>
175
+ </oneOrMore>
176
+ </choice>
177
+ </define>
178
+ <define name="clause">
179
+ <element name="clause">
180
+ <ref name="Clause-Section"/>
181
+ </element>
182
+ </define>
183
+ <define name="Clause-Section">
184
+ <optional>
185
+ <attribute name="id">
186
+ <data type="ID"/>
187
+ </attribute>
188
+ </optional>
189
+ <optional>
190
+ <ref name="section-title"/>
191
+ </optional>
192
+ <choice>
193
+ <group>
194
+ <oneOrMore>
195
+ <ref name="BasicBlock"/>
196
+ </oneOrMore>
197
+ <zeroOrMore>
198
+ <ref name="note"/>
199
+ </zeroOrMore>
200
+ </group>
201
+ <oneOrMore>
202
+ <ref name="clause-subsection"/>
203
+ </oneOrMore>
204
+ </choice>
205
+ </define>
206
+ <define name="clause-subsection">
207
+ <element name="clause">
208
+ <ref name="Clause-Section"/>
209
+ </element>
210
+ </define>
211
+ <define name="annex">
212
+ <element name="annex">
213
+ <optional>
214
+ <attribute name="id">
215
+ <data type="ID"/>
216
+ </attribute>
217
+ </optional>
218
+ <attribute name="obligation">
219
+ <choice>
220
+ <value>normative</value>
221
+ <value>informative</value>
222
+ </choice>
223
+ </attribute>
224
+ <optional>
225
+ <ref name="section-title"/>
226
+ </optional>
227
+ <choice>
228
+ <group>
229
+ <oneOrMore>
230
+ <ref name="BasicBlock"/>
231
+ </oneOrMore>
232
+ <zeroOrMore>
233
+ <ref name="note"/>
234
+ </zeroOrMore>
235
+ </group>
236
+ <oneOrMore>
237
+ <ref name="clause-subsection"/>
238
+ </oneOrMore>
239
+ </choice>
240
+ </element>
241
+ </define>
242
+ <define name="references">
243
+ <element name="references">
244
+ <optional>
245
+ <attribute name="id">
246
+ <data type="ID"/>
247
+ </attribute>
248
+ </optional>
249
+ <optional>
250
+ <ref name="section-title"/>
251
+ </optional>
252
+ <zeroOrMore>
253
+ <ref name="bibitem"/>
254
+ </zeroOrMore>
255
+ </element>
256
+ </define>
257
+ <define name="terms">
258
+ <element name="terms">
259
+ <optional>
260
+ <attribute name="id">
261
+ <data type="ID"/>
262
+ </attribute>
263
+ </optional>
264
+ <oneOrMore>
265
+ <ref name="term"/>
266
+ </oneOrMore>
267
+ </element>
268
+ </define>
269
+ <define name="term">
270
+ <element name="term">
271
+ <optional>
272
+ <attribute name="id">
273
+ <data type="ID"/>
274
+ </attribute>
275
+ </optional>
276
+ <oneOrMore>
277
+ <ref name="preferred"/>
278
+ </oneOrMore>
279
+ <zeroOrMore>
280
+ <ref name="admitted"/>
281
+ </zeroOrMore>
282
+ <zeroOrMore>
283
+ <ref name="deprecates"/>
284
+ </zeroOrMore>
285
+ <optional>
286
+ <ref name="termdomain"/>
287
+ </optional>
288
+ <ref name="definition"/>
289
+ <zeroOrMore>
290
+ <ref name="termnote"/>
291
+ </zeroOrMore>
292
+ <zeroOrMore>
293
+ <ref name="termexample"/>
294
+ </zeroOrMore>
295
+ <zeroOrMore>
296
+ <ref name="termsource"/>
297
+ </zeroOrMore>
298
+ </element>
299
+ </define>
300
+ <define name="preferred">
301
+ <element name="preferred">
302
+ <oneOrMore>
303
+ <ref name="TextElement"/>
304
+ </oneOrMore>
305
+ </element>
306
+ </define>
307
+ <define name="admitted">
308
+ <element name="admitted">
309
+ <oneOrMore>
310
+ <ref name="TextElement"/>
311
+ </oneOrMore>
312
+ </element>
313
+ </define>
314
+ <define name="deprecates">
315
+ <element name="deprecates">
316
+ <oneOrMore>
317
+ <ref name="TextElement"/>
318
+ </oneOrMore>
319
+ </element>
320
+ </define>
321
+ <define name="termdomain">
322
+ <element name="domain">
323
+ <oneOrMore>
324
+ <ref name="TextElement"/>
325
+ </oneOrMore>
326
+ </element>
327
+ </define>
328
+ <define name="definition">
329
+ <element name="definition">
330
+ <ref name="paragraph"/>
331
+ </element>
332
+ </define>
333
+ <define name="termnote">
334
+ <element name="termnote">
335
+ <attribute name="id">
336
+ <data type="ID"/>
337
+ </attribute>
338
+ <ref name="paragraph"/>
339
+ </element>
340
+ </define>
341
+ <define name="termexample">
342
+ <element name="termexample">
343
+ <attribute name="id">
344
+ <data type="ID"/>
345
+ </attribute>
346
+ <ref name="paragraph"/>
347
+ </element>
348
+ </define>
349
+ <define name="termsource">
350
+ <element name="termsource">
351
+ <attribute name="status">
352
+ <choice>
353
+ <value>identical</value>
354
+ <value>modified</value>
355
+ </choice>
356
+ </attribute>
357
+ <ref name="origin"/>
358
+ <optional>
359
+ <ref name="modification"/>
360
+ </optional>
361
+ </element>
362
+ </define>
363
+ <define name="origin">
364
+ <element name="origin">
365
+ <ref name="erefType"/>
366
+ </element>
367
+ </define>
368
+ <define name="modification">
369
+ <element name="modification">
370
+ <ref name="paragraph"/>
371
+ </element>
372
+ </define>
373
+ <define name="BasicBlock">
374
+ <choice>
375
+ <ref name="paragraph-with-footnote"/>
376
+ <ref name="table"/>
377
+ <ref name="formula"/>
378
+ <ref name="admonition"/>
379
+ <ref name="ol"/>
380
+ <ref name="ul"/>
381
+ <ref name="dl"/>
382
+ <ref name="figure"/>
383
+ <ref name="quote"/>
384
+ <ref name="sourcecode"/>
385
+ <ref name="example"/>
386
+ <ref name="review"/>
387
+ <ref name="pre"/>
388
+ </choice>
389
+ </define>
390
+ <define name="paragraph">
391
+ <element name="p">
392
+ <ref name="ParagraphType"/>
393
+ </element>
394
+ </define>
395
+ <define name="Alignments">
396
+ <choice>
397
+ <value>left</value>
398
+ <value>right</value>
399
+ <value>center</value>
400
+ <value>justified</value>
401
+ </choice>
402
+ </define>
403
+ <define name="ParagraphType">
404
+ <attribute name="id">
405
+ <data type="ID"/>
406
+ </attribute>
407
+ <optional>
408
+ <attribute name="align">
409
+ <ref name="Alignments"/>
410
+ </attribute>
411
+ </optional>
412
+ <zeroOrMore>
413
+ <ref name="TextElement"/>
414
+ </zeroOrMore>
415
+ <zeroOrMore>
416
+ <ref name="note"/>
417
+ </zeroOrMore>
418
+ </define>
419
+ <define name="paragraph-with-footnote">
420
+ <element name="p">
421
+ <attribute name="id">
422
+ <data type="ID"/>
423
+ </attribute>
424
+ <optional>
425
+ <attribute name="align">
426
+ <ref name="Alignments"/>
427
+ </attribute>
428
+ </optional>
429
+ <zeroOrMore>
430
+ <choice>
431
+ <ref name="TextElement"/>
432
+ <ref name="fn"/>
433
+ </choice>
434
+ </zeroOrMore>
435
+ <zeroOrMore>
436
+ <ref name="note"/>
437
+ </zeroOrMore>
438
+ </element>
439
+ </define>
440
+ <define name="note">
441
+ <element name="note">
442
+ <attribute name="id">
443
+ <data type="ID"/>
444
+ </attribute>
445
+ <oneOrMore>
446
+ <ref name="paragraph"/>
447
+ </oneOrMore>
448
+ </element>
449
+ </define>
450
+ <define name="review">
451
+ <element name="review">
452
+ <attribute name="id">
453
+ <data type="ID"/>
454
+ </attribute>
455
+ <attribute name="reviewer"/>
456
+ <optional>
457
+ <attribute name="date">
458
+ <data type="dateTime"/>
459
+ </attribute>
460
+ </optional>
461
+ <attribute name="from">
462
+ <data type="IDREF"/>
463
+ </attribute>
464
+ <optional>
465
+ <attribute name="to">
466
+ <data type="IDREF"/>
467
+ </attribute>
468
+ </optional>
469
+ <oneOrMore>
470
+ <ref name="paragraph"/>
471
+ </oneOrMore>
472
+ </element>
473
+ </define>
474
+ <define name="formula">
475
+ <element name="formula">
476
+ <attribute name="id">
477
+ <data type="ID"/>
478
+ </attribute>
479
+ <ref name="stem"/>
480
+ <optional>
481
+ <ref name="dl"/>
482
+ </optional>
483
+ <zeroOrMore>
484
+ <ref name="note"/>
485
+ </zeroOrMore>
486
+ </element>
487
+ </define>
488
+ <define name="quote">
489
+ <element name="quote">
490
+ <attribute name="id">
491
+ <data type="ID"/>
492
+ </attribute>
493
+ <optional>
494
+ <attribute name="alignment">
495
+ <ref name="Alignments"/>
496
+ </attribute>
497
+ </optional>
498
+ <optional>
499
+ <ref name="quote-source"/>
500
+ </optional>
501
+ <optional>
502
+ <ref name="quote-author"/>
503
+ </optional>
504
+ <oneOrMore>
505
+ <ref name="paragraph-with-footnote"/>
506
+ </oneOrMore>
507
+ <zeroOrMore>
508
+ <ref name="note"/>
509
+ </zeroOrMore>
510
+ </element>
511
+ </define>
512
+ <define name="quote-source">
513
+ <element name="source">
514
+ <ref name="erefType"/>
515
+ </element>
516
+ </define>
517
+ <define name="quote-author">
518
+ <element name="author">
519
+ <text/>
520
+ </element>
521
+ </define>
522
+ <define name="sourcecode">
523
+ <element name="sourcecode">
524
+ <attribute name="id">
525
+ <data type="ID"/>
526
+ </attribute>
527
+ <optional>
528
+ <ref name="tname"/>
529
+ </optional>
530
+ <oneOrMore>
531
+ <choice>
532
+ <text/>
533
+ <ref name="callout"/>
534
+ </choice>
535
+ </oneOrMore>
536
+ <zeroOrMore>
537
+ <ref name="annotation"/>
538
+ </zeroOrMore>
539
+ <zeroOrMore>
540
+ <ref name="note"/>
541
+ </zeroOrMore>
542
+ </element>
543
+ </define>
544
+ <define name="pre">
545
+ <element name="pre">
546
+ <attribute name="id">
547
+ <data type="ID"/>
548
+ </attribute>
549
+ <optional>
550
+ <ref name="tname"/>
551
+ </optional>
552
+ <text/>
553
+ <zeroOrMore>
554
+ <ref name="note"/>
555
+ </zeroOrMore>
556
+ </element>
557
+ </define>
558
+ <define name="table">
559
+ <element name="table">
560
+ <attribute name="id">
561
+ <data type="ID"/>
562
+ </attribute>
563
+ <optional>
564
+ <ref name="tname"/>
565
+ </optional>
566
+ <optional>
567
+ <ref name="thead"/>
568
+ </optional>
569
+ <ref name="tbody"/>
570
+ <optional>
571
+ <ref name="tfoot"/>
572
+ </optional>
573
+ <zeroOrMore>
574
+ <ref name="table-note"/>
575
+ </zeroOrMore>
576
+ <optional>
577
+ <ref name="dl"/>
578
+ </optional>
579
+ </element>
580
+ </define>
581
+ <define name="tname">
582
+ <element name="name">
583
+ <text/>
584
+ </element>
585
+ </define>
586
+ <define name="thead">
587
+ <element name="thead">
588
+ <ref name="tr"/>
589
+ </element>
590
+ </define>
591
+ <define name="tfoot">
592
+ <element name="tfoot">
593
+ <ref name="tr"/>
594
+ </element>
595
+ </define>
596
+ <define name="tbody">
597
+ <element name="tbody">
598
+ <oneOrMore>
599
+ <ref name="tr"/>
600
+ </oneOrMore>
601
+ </element>
602
+ </define>
603
+ <define name="table-note">
604
+ <element name="note">
605
+ <ref name="paragraph"/>
606
+ </element>
607
+ </define>
608
+ <define name="tr">
609
+ <element name="tr">
610
+ <oneOrMore>
611
+ <choice>
612
+ <ref name="td"/>
613
+ <ref name="th"/>
614
+ </choice>
615
+ </oneOrMore>
616
+ </element>
617
+ </define>
618
+ <define name="td">
619
+ <element name="td">
620
+ <optional>
621
+ <attribute name="colspan"/>
622
+ </optional>
623
+ <optional>
624
+ <attribute name="rowspan"/>
625
+ </optional>
626
+ <optional>
627
+ <attribute name="align">
628
+ <choice>
629
+ <value>left</value>
630
+ <value>right</value>
631
+ <value>center</value>
632
+ </choice>
633
+ </attribute>
634
+ </optional>
635
+ <choice>
636
+ <zeroOrMore>
637
+ <ref name="TextElement"/>
638
+ </zeroOrMore>
639
+ <oneOrMore>
640
+ <ref name="paragraph-with-footnote"/>
641
+ </oneOrMore>
642
+ </choice>
643
+ </element>
644
+ </define>
645
+ <define name="th">
646
+ <element name="th">
647
+ <optional>
648
+ <attribute name="colspan"/>
649
+ </optional>
650
+ <optional>
651
+ <attribute name="rowspan"/>
652
+ </optional>
653
+ <optional>
654
+ <attribute name="align">
655
+ <choice>
656
+ <value>left</value>
657
+ <value>right</value>
658
+ <value>center</value>
659
+ </choice>
660
+ </attribute>
661
+ </optional>
662
+ <choice>
663
+ <zeroOrMore>
664
+ <ref name="TextElement"/>
665
+ </zeroOrMore>
666
+ <oneOrMore>
667
+ <ref name="paragraph-with-footnote"/>
668
+ </oneOrMore>
669
+ </choice>
670
+ </element>
671
+ </define>
672
+ <define name="example">
673
+ <element name="example">
674
+ <attribute name="id">
675
+ <data type="ID"/>
676
+ </attribute>
677
+ <oneOrMore>
678
+ <choice>
679
+ <ref name="formula"/>
680
+ <ref name="ul"/>
681
+ <ref name="ol"/>
682
+ <ref name="dl"/>
683
+ <ref name="quote"/>
684
+ <ref name="sourcecode"/>
685
+ <ref name="paragraph-with-footnote"/>
686
+ </choice>
687
+ </oneOrMore>
688
+ <zeroOrMore>
689
+ <ref name="note"/>
690
+ </zeroOrMore>
691
+ </element>
692
+ </define>
693
+ <define name="admonition">
694
+ <element name="admonition">
695
+ <attribute name="type">
696
+ <choice>
697
+ <value>warning</value>
698
+ <value>note</value>
699
+ <value>tip</value>
700
+ <value>important</value>
701
+ <value>caution</value>
702
+ </choice>
703
+ </attribute>
704
+ <attribute name="id">
705
+ <data type="ID"/>
706
+ </attribute>
707
+ <zeroOrMore>
708
+ <ref name="paragraph-with-footnote"/>
709
+ </zeroOrMore>
710
+ <zeroOrMore>
711
+ <ref name="note"/>
712
+ </zeroOrMore>
713
+ </element>
714
+ </define>
715
+ <define name="figure">
716
+ <element name="figure">
717
+ <attribute name="id">
718
+ <data type="ID"/>
719
+ </attribute>
720
+ <optional>
721
+ <ref name="source"/>
722
+ </optional>
723
+ <optional>
724
+ <ref name="tname"/>
725
+ </optional>
726
+ <choice>
727
+ <ref name="image"/>
728
+ <ref name="pre"/>
729
+ <zeroOrMore>
730
+ <ref name="figure"/>
731
+ </zeroOrMore>
732
+ </choice>
733
+ <zeroOrMore>
734
+ <ref name="fn"/>
735
+ </zeroOrMore>
736
+ <optional>
737
+ <ref name="dl"/>
738
+ </optional>
739
+ <zeroOrMore>
740
+ <ref name="note"/>
741
+ </zeroOrMore>
742
+ </element>
743
+ </define>
744
+ <define name="TextElement">
745
+ <choice>
746
+ <text/>
747
+ <ref name="em"/>
748
+ <ref name="eref"/>
749
+ <ref name="strong"/>
750
+ <ref name="stem"/>
751
+ <ref name="sub"/>
752
+ <ref name="sup"/>
753
+ <ref name="tt"/>
754
+ <ref name="keyword"/>
755
+ <ref name="strike"/>
756
+ <ref name="smallcap"/>
757
+ <ref name="xref"/>
758
+ <ref name="br"/>
759
+ <ref name="hyperlink"/>
760
+ <ref name="hr"/>
761
+ <ref name="pagebreak"/>
762
+ <ref name="bookmark"/>
763
+ </choice>
764
+ </define>
765
+ <define name="source">
766
+ <element name="source">
767
+ <ref name="TypedUri"/>
768
+ </element>
769
+ </define>
770
+ <define name="em">
771
+ <element name="em">
772
+ <text/>
773
+ </element>
774
+ </define>
775
+ <define name="strong">
776
+ <element name="strong">
777
+ <text/>
778
+ </element>
779
+ </define>
780
+ <define name="tt">
781
+ <element name="tt">
782
+ <text/>
783
+ </element>
784
+ </define>
785
+ <define name="keyword">
786
+ <element name="keyword">
787
+ <text/>
788
+ </element>
789
+ </define>
790
+ <define name="sub">
791
+ <element name="sub">
792
+ <text/>
793
+ </element>
794
+ </define>
795
+ <define name="sup">
796
+ <element name="sup">
797
+ <text/>
798
+ </element>
799
+ </define>
800
+ <define name="strike">
801
+ <element name="strike">
802
+ <text/>
803
+ </element>
804
+ </define>
805
+ <define name="smallcap">
806
+ <element name="smallcap">
807
+ <text/>
808
+ </element>
809
+ </define>
810
+ <define name="br">
811
+ <element name="br">
812
+ <empty/>
813
+ </element>
814
+ </define>
815
+ <define name="hr">
816
+ <element name="hr">
817
+ <empty/>
818
+ </element>
819
+ </define>
820
+ <define name="pagebreak">
821
+ <element name="pagebreak">
822
+ <empty/>
823
+ </element>
824
+ </define>
825
+ <!-- bare ID element, used for referencing arbitrary spans of text -->
826
+ <define name="bookmark">
827
+ <element name="bookmark">
828
+ <attribute name="id">
829
+ <data type="ID"/>
830
+ </attribute>
831
+ <empty/>
832
+ </element>
833
+ </define>
834
+ <define name="ReferenceFormat">
835
+ <choice>
836
+ <value>external</value>
837
+ <value>inline</value>
838
+ <value>footnote</value>
839
+ <value>callout</value>
840
+ </choice>
841
+ </define>
842
+ <define name="eref">
843
+ <element name="eref">
844
+ <ref name="erefType"/>
845
+ </element>
846
+ </define>
847
+ <define name="erefType">
848
+ <optional>
849
+ <attribute name="normative">
850
+ <data type="boolean"/>
851
+ </attribute>
852
+ </optional>
853
+ <attribute name="citeas"/>
854
+ <attribute name="type">
855
+ <ref name="ReferenceFormat"/>
856
+ </attribute>
857
+ <ref name="CitationType"/>
858
+ <text/>
859
+ </define>
860
+ <define name="hyperlink">
861
+ <element name="link">
862
+ <attribute name="target">
863
+ <data type="anyURI"/>
864
+ </attribute>
865
+ <attribute name="type">
866
+ <ref name="ReferenceFormat"/>
867
+ </attribute>
868
+ <text/>
869
+ </element>
870
+ </define>
871
+ <define name="xref">
872
+ <element name="xref">
873
+ <attribute name="target">
874
+ <data type="IDREF"/>
875
+ </attribute>
876
+ <attribute name="type">
877
+ <ref name="ReferenceFormat"/>
878
+ </attribute>
879
+ <text/>
880
+ </element>
881
+ </define>
882
+ <define name="fn">
883
+ <element name="fn">
884
+ <attribute name="reference"/>
885
+ <oneOrMore>
886
+ <ref name="paragraph"/>
887
+ </oneOrMore>
888
+ </element>
889
+ </define>
890
+ <!--
891
+ This is xref with fixed @type="footnote", and @target built in as paragraph+
892
+ @reference replaces ReferenceElement/text
893
+ so <fn reference="2"><p>This is a footnote</p></fn>
894
+ corresponds to
895
+ <eref type="footnote" target="fn2">2</xref> <p id="fn2">This is a footnote</p>
896
+ -->
897
+ <define name="callout">
898
+ <element name="callout">
899
+ <attribute name="target">
900
+ <data type="IDREF"/>
901
+ </attribute>
902
+ <text/>
903
+ </element>
904
+ </define>
905
+ <!--
906
+ This is xref with fixed @type="callout"; the target by convention is in an annotation in the same source code snippet
907
+ so <callout target="xyz">1</callout>
908
+ corresponds to <xref type="callout" target="xyz">1</xref>
909
+ -->
910
+ <define name="image">
911
+ <element name="image">
912
+ <attribute name="id">
913
+ <data type="ID"/>
914
+ </attribute>
915
+ <optional>
916
+ <attribute name="src">
917
+ <data type="anyURI"/>
918
+ </attribute>
919
+ </optional>
920
+ <attribute name="imagetype">
921
+ <choice>
922
+ <value>SVG</value>
923
+ <value>JPEG</value>
924
+ <value>GIF</value>
925
+ <value>PNG</value>
926
+ <value>PDF</value>
927
+ </choice>
928
+ </attribute>
929
+ <optional>
930
+ <attribute name="width">
931
+ <choice>
932
+ <data type="int"/>
933
+ <value>auto</value>
934
+ </choice>
935
+ </attribute>
936
+ </optional>
937
+ <optional>
938
+ <attribute name="height">
939
+ <choice>
940
+ <data type="int"/>
941
+ <value>auto</value>
942
+ </choice>
943
+ </attribute>
944
+ </optional>
945
+ </element>
946
+ </define>
947
+ <define name="stem">
948
+ <element name="stem">
949
+ <attribute name="type">
950
+ <choice>
951
+ <value>MathML</value>
952
+ <value>AsciiMath</value>
953
+ </choice>
954
+ </attribute>
955
+ <text/>
956
+ </element>
957
+ </define>
958
+ <define name="annotation">
959
+ <element name="annotation">
960
+ <attribute name="id">
961
+ <data type="ID"/>
962
+ </attribute>
963
+ <ref name="paragraph"/>
964
+ </element>
965
+ </define>
966
+ <define name="ul">
967
+ <element name="ul">
968
+ <attribute name="id">
969
+ <data type="ID"/>
970
+ </attribute>
971
+ <oneOrMore>
972
+ <ref name="li"/>
973
+ </oneOrMore>
974
+ <zeroOrMore>
975
+ <ref name="note"/>
976
+ </zeroOrMore>
977
+ </element>
978
+ </define>
979
+ <define name="li">
980
+ <element name="li">
981
+ <optional>
982
+ <attribute name="id">
983
+ <data type="ID"/>
984
+ </attribute>
985
+ </optional>
986
+ <oneOrMore>
987
+ <ref name="paragraph-with-footnote"/>
988
+ </oneOrMore>
989
+ </element>
990
+ </define>
991
+ <define name="ol">
992
+ <element name="ol">
993
+ <attribute name="id">
994
+ <data type="ID"/>
995
+ </attribute>
996
+ <attribute name="type">
997
+ <choice>
998
+ <value>roman</value>
999
+ <value>alphabet</value>
1000
+ <value>arabic</value>
1001
+ <value>roman_upper</value>
1002
+ <value>alphabet_upper</value>
1003
+ </choice>
1004
+ </attribute>
1005
+ <oneOrMore>
1006
+ <ref name="li"/>
1007
+ </oneOrMore>
1008
+ <zeroOrMore>
1009
+ <ref name="note"/>
1010
+ </zeroOrMore>
1011
+ </element>
1012
+ </define>
1013
+ <define name="dl">
1014
+ <element name="dl">
1015
+ <attribute name="id">
1016
+ <data type="ID"/>
1017
+ </attribute>
1018
+ <oneOrMore>
1019
+ <ref name="dt"/>
1020
+ <ref name="dd"/>
1021
+ </oneOrMore>
1022
+ <zeroOrMore>
1023
+ <ref name="note"/>
1024
+ </zeroOrMore>
1025
+ </element>
1026
+ </define>
1027
+ <define name="dt">
1028
+ <element name="dt">
1029
+ <zeroOrMore>
1030
+ <ref name="TextElement"/>
1031
+ </zeroOrMore>
1032
+ </element>
1033
+ </define>
1034
+ <define name="dd">
1035
+ <element name="dd">
1036
+ <zeroOrMore>
1037
+ <ref name="paragraph-with-footnote"/>
1038
+ </zeroOrMore>
1039
+ </element>
1040
+ </define>
1041
+ <define name="BibData">
1042
+ <optional>
1043
+ <attribute name="type">
1044
+ <ref name="BibItemType"/>
1045
+ </attribute>
1046
+ </optional>
1047
+ <oneOrMore>
1048
+ <ref name="btitle"/>
1049
+ </oneOrMore>
1050
+ <optional>
1051
+ <ref name="formattedref"/>
1052
+ </optional>
1053
+ <zeroOrMore>
1054
+ <ref name="bsource"/>
1055
+ </zeroOrMore>
1056
+ <zeroOrMore>
1057
+ <ref name="docidentifier"/>
1058
+ </zeroOrMore>
1059
+ <optional>
1060
+ <ref name="docnumber"/>
1061
+ </optional>
1062
+ <zeroOrMore>
1063
+ <ref name="bdate"/>
1064
+ </zeroOrMore>
1065
+ <zeroOrMore>
1066
+ <ref name="contributor"/>
1067
+ </zeroOrMore>
1068
+ <optional>
1069
+ <ref name="edition"/>
1070
+ </optional>
1071
+ <zeroOrMore>
1072
+ <ref name="biblionote"/>
1073
+ </zeroOrMore>
1074
+ <zeroOrMore>
1075
+ <ref name="language"/>
1076
+ </zeroOrMore>
1077
+ <zeroOrMore>
1078
+ <ref name="script"/>
1079
+ </zeroOrMore>
1080
+ <optional>
1081
+ <ref name="abstract"/>
1082
+ </optional>
1083
+ <optional>
1084
+ <ref name="status"/>
1085
+ </optional>
1086
+ <ref name="copyright"/>
1087
+ <zeroOrMore>
1088
+ <ref name="docrelation"/>
1089
+ </zeroOrMore>
1090
+ </define>
1091
+ </grammar>