rng 0.1.2 → 0.3.4

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 (180) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +63 -0
  3. data/.github/workflows/release.yml +8 -3
  4. data/.gitignore +11 -0
  5. data/.rubocop.yml +10 -7
  6. data/.rubocop_todo.yml +229 -23
  7. data/CHANGELOG.md +317 -0
  8. data/CLAUDE.md +139 -0
  9. data/Gemfile +11 -12
  10. data/README.adoc +1538 -11
  11. data/Rakefile +11 -3
  12. data/docs/Gemfile +8 -0
  13. data/docs/_config.yml +23 -0
  14. data/docs/getting-started/index.adoc +75 -0
  15. data/docs/guides/error-handling.adoc +137 -0
  16. data/docs/guides/external-references.adoc +128 -0
  17. data/docs/guides/index.adoc +24 -0
  18. data/docs/guides/parsing-rnc.adoc +141 -0
  19. data/docs/guides/parsing-rng-xml.adoc +81 -0
  20. data/docs/guides/rng-to-rnc.adoc +101 -0
  21. data/docs/guides/validation.adoc +85 -0
  22. data/docs/index.adoc +52 -0
  23. data/docs/reference/api.adoc +126 -0
  24. data/docs/reference/cli.adoc +182 -0
  25. data/docs/understanding/architecture.adoc +58 -0
  26. data/docs/understanding/rng-vs-rnc.adoc +118 -0
  27. data/exe/rng +5 -0
  28. data/lib/rng/any_name.rb +10 -8
  29. data/lib/rng/attribute.rb +28 -26
  30. data/lib/rng/choice.rb +24 -24
  31. data/lib/rng/cli.rb +607 -0
  32. data/lib/rng/data.rb +10 -10
  33. data/lib/rng/datatype_declaration.rb +26 -0
  34. data/lib/rng/define.rb +44 -41
  35. data/lib/rng/div.rb +36 -0
  36. data/lib/rng/documentation.rb +9 -0
  37. data/lib/rng/element.rb +39 -37
  38. data/lib/rng/empty.rb +7 -7
  39. data/lib/rng/except.rb +25 -25
  40. data/lib/rng/external_ref.rb +8 -8
  41. data/lib/rng/external_ref_resolver.rb +602 -0
  42. data/lib/rng/foreign_attribute.rb +26 -0
  43. data/lib/rng/foreign_element.rb +33 -0
  44. data/lib/rng/grammar.rb +14 -12
  45. data/lib/rng/group.rb +26 -24
  46. data/lib/rng/include.rb +5 -6
  47. data/lib/rng/include_processor.rb +461 -0
  48. data/lib/rng/interleave.rb +23 -23
  49. data/lib/rng/list.rb +22 -22
  50. data/lib/rng/mixed.rb +23 -23
  51. data/lib/rng/name.rb +6 -7
  52. data/lib/rng/namespace_declaration.rb +47 -0
  53. data/lib/rng/namespaces.rb +15 -0
  54. data/lib/rng/not_allowed.rb +7 -7
  55. data/lib/rng/ns_name.rb +9 -9
  56. data/lib/rng/one_or_more.rb +23 -23
  57. data/lib/rng/optional.rb +23 -23
  58. data/lib/rng/param.rb +7 -8
  59. data/lib/rng/parent_ref.rb +8 -8
  60. data/lib/rng/parse_tree_processor.rb +695 -0
  61. data/lib/rng/pattern.rb +7 -7
  62. data/lib/rng/ref.rb +8 -8
  63. data/lib/rng/rnc_builder.rb +927 -0
  64. data/lib/rng/rnc_parser.rb +605 -305
  65. data/lib/rng/rnc_to_rng_converter.rb +1408 -0
  66. data/lib/rng/schema_preamble.rb +73 -0
  67. data/lib/rng/schema_validator.rb +1622 -0
  68. data/lib/rng/start.rb +27 -25
  69. data/lib/rng/test_suite_parser.rb +168 -0
  70. data/lib/rng/text.rb +11 -8
  71. data/lib/rng/to_rnc.rb +4 -35
  72. data/lib/rng/value.rb +6 -7
  73. data/lib/rng/version.rb +1 -1
  74. data/lib/rng/zero_or_more.rb +23 -23
  75. data/lib/rng.rb +68 -17
  76. data/rng.gemspec +18 -19
  77. data/scripts/extract_spectest_resources.rb +96 -0
  78. data/spec/fixtures/compacttest.xml +2511 -0
  79. data/spec/fixtures/external/circular_a.rng +7 -0
  80. data/spec/fixtures/external/circular_b.rng +7 -0
  81. data/spec/fixtures/external/circular_main.rng +7 -0
  82. data/spec/fixtures/external/external_ref_lib.rng +7 -0
  83. data/spec/fixtures/external/external_ref_main.rng +7 -0
  84. data/spec/fixtures/external/include_lib.rng +7 -0
  85. data/spec/fixtures/external/include_main.rng +3 -0
  86. data/spec/fixtures/external/nested_chain.rng +6 -0
  87. data/spec/fixtures/external/nested_leaf.rng +7 -0
  88. data/spec/fixtures/external/nested_mid.rng +8 -0
  89. data/spec/fixtures/metanorma/3gpp.rnc +35 -0
  90. data/spec/fixtures/metanorma/3gpp.rng +105 -0
  91. data/spec/fixtures/metanorma/basicdoc.rnc +11 -0
  92. data/spec/fixtures/metanorma/bipm.rnc +148 -0
  93. data/spec/fixtures/metanorma/bipm.rng +376 -0
  94. data/spec/fixtures/metanorma/bsi.rnc +104 -0
  95. data/spec/fixtures/metanorma/bsi.rng +332 -0
  96. data/spec/fixtures/metanorma/csa.rnc +45 -0
  97. data/spec/fixtures/metanorma/csa.rng +131 -0
  98. data/spec/fixtures/metanorma/csd.rnc +43 -0
  99. data/spec/fixtures/metanorma/csd.rng +132 -0
  100. data/spec/fixtures/metanorma/gbstandard.rnc +99 -0
  101. data/spec/fixtures/metanorma/gbstandard.rng +316 -0
  102. data/spec/fixtures/metanorma/iec.rnc +49 -0
  103. data/spec/fixtures/metanorma/iec.rng +193 -0
  104. data/spec/fixtures/metanorma/ietf.rnc +275 -0
  105. data/spec/fixtures/metanorma/ietf.rng +925 -0
  106. data/spec/fixtures/metanorma/iho.rnc +58 -0
  107. data/spec/fixtures/metanorma/iho.rng +179 -0
  108. data/spec/fixtures/metanorma/isodoc.rnc +873 -0
  109. data/spec/fixtures/metanorma/isodoc.rng +2704 -0
  110. data/spec/fixtures/metanorma/isostandard-amd.rnc +43 -0
  111. data/spec/fixtures/metanorma/isostandard-amd.rng +108 -0
  112. data/spec/fixtures/metanorma/isostandard.rnc +166 -0
  113. data/spec/fixtures/metanorma/isostandard.rng +494 -0
  114. data/spec/fixtures/metanorma/itu.rnc +122 -0
  115. data/spec/fixtures/metanorma/itu.rng +377 -0
  116. data/spec/fixtures/metanorma/m3d.rnc +41 -0
  117. data/spec/fixtures/metanorma/m3d.rng +122 -0
  118. data/spec/fixtures/metanorma/mpfd.rnc +36 -0
  119. data/spec/fixtures/metanorma/mpfd.rng +95 -0
  120. data/spec/fixtures/metanorma/nist.rnc +77 -0
  121. data/spec/fixtures/metanorma/nist.rng +216 -0
  122. data/spec/fixtures/metanorma/ogc.rnc +51 -0
  123. data/spec/fixtures/metanorma/ogc.rng +151 -0
  124. data/spec/fixtures/metanorma/reqt.rnc +6 -0
  125. data/spec/fixtures/metanorma/rsd.rnc +36 -0
  126. data/spec/fixtures/metanorma/rsd.rng +95 -0
  127. data/spec/fixtures/metanorma/un.rnc +103 -0
  128. data/spec/fixtures/metanorma/un.rng +367 -0
  129. data/spec/fixtures/rnc/base.rnc +4 -0
  130. data/spec/fixtures/rnc/grammar_with_trailing.rnc +8 -0
  131. data/spec/fixtures/rnc/main_include_trailing.rnc +3 -0
  132. data/spec/fixtures/rnc/main_with_include.rnc +5 -0
  133. data/spec/fixtures/rnc/test_augment.rnc +10 -0
  134. data/spec/fixtures/rnc/test_isodoc_simple.rnc +9 -0
  135. data/spec/fixtures/rnc/top_level_include.rnc +8 -0
  136. data/spec/fixtures/spectest_external/case_10_4.7/x +3 -0
  137. data/spec/fixtures/spectest_external/case_10_4.7/y +7 -0
  138. data/spec/fixtures/spectest_external/case_11_4.7/x +3 -0
  139. data/spec/fixtures/spectest_external/case_12_4.7/x +3 -0
  140. data/spec/fixtures/spectest_external/case_13_4.7/x +3 -0
  141. data/spec/fixtures/spectest_external/case_13_4.7/y +3 -0
  142. data/spec/fixtures/spectest_external/case_14_4.7/x +7 -0
  143. data/spec/fixtures/spectest_external/case_15_4.7/x +7 -0
  144. data/spec/fixtures/spectest_external/case_16_4.7/x +5 -0
  145. data/spec/fixtures/spectest_external/case_17_4.7/x +5 -0
  146. data/spec/fixtures/spectest_external/case_18_4.7/x +7 -0
  147. data/spec/fixtures/spectest_external/case_19_4.7/level1.rng +9 -0
  148. data/spec/fixtures/spectest_external/case_19_4.7/level2.rng +7 -0
  149. data/spec/fixtures/spectest_external/case_1_4.5/sub1/x +3 -0
  150. data/spec/fixtures/spectest_external/case_1_4.5/sub3/x +3 -0
  151. data/spec/fixtures/spectest_external/case_1_4.5/x +3 -0
  152. data/spec/fixtures/spectest_external/case_20_4.6/x +3 -0
  153. data/spec/fixtures/spectest_external/case_2_4.5/x +3 -0
  154. data/spec/fixtures/spectest_external/case_3_4.6/x +3 -0
  155. data/spec/fixtures/spectest_external/case_4_4.6/x +3 -0
  156. data/spec/fixtures/spectest_external/case_5_4.6/x +1 -0
  157. data/spec/fixtures/spectest_external/case_6_4.6/x +5 -0
  158. data/spec/fixtures/spectest_external/case_7_4.6/x +1 -0
  159. data/spec/fixtures/spectest_external/case_7_4.6/y +1 -0
  160. data/spec/fixtures/spectest_external/case_8_4.7/x +7 -0
  161. data/spec/fixtures/spectest_external/case_9_4.7/x +7 -0
  162. data/spec/fixtures/spectest_external/resources.json +149 -0
  163. data/spec/rng/advanced_rnc_spec.rb +101 -0
  164. data/spec/rng/compacttest_spec.rb +197 -0
  165. data/spec/rng/datatype_declaration_spec.rb +28 -0
  166. data/spec/rng/div_spec.rb +207 -0
  167. data/spec/rng/external_ref_resolver_spec.rb +122 -0
  168. data/spec/rng/metanorma_conversion_spec.rb +159 -0
  169. data/spec/rng/namespace_declaration_spec.rb +60 -0
  170. data/spec/rng/namespace_support_spec.rb +199 -0
  171. data/spec/rng/rnc_parser_spec.rb +498 -22
  172. data/spec/rng/rnc_roundtrip_spec.rb +96 -82
  173. data/spec/rng/rng_generation_spec.rb +288 -0
  174. data/spec/rng/roundtrip_spec.rb +342 -0
  175. data/spec/rng/schema_preamble_spec.rb +145 -0
  176. data/spec/rng/schema_spec.rb +68 -64
  177. data/spec/rng/spectest_spec.rb +168 -90
  178. data/spec/rng_spec.rb +2 -2
  179. data/spec/spec_helper.rb +7 -42
  180. metadata +141 -8
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <element name="a">
4
+ <empty/>
5
+ </element>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <element name="b">
4
+ <empty/>
5
+ </element>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <group>
4
+ <externalRef href="circular_b.rng"/>
5
+ </group>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <element name="bar">
4
+ <empty/>
5
+ </element>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <group>
4
+ <externalRef href="external_ref_lib.rng"/>
5
+ </group>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <element name="foo">
4
+ <empty/>
5
+ </element>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,3 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <include href="include_lib.rng"/>
3
+ </grammar>
@@ -0,0 +1,6 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <include href="nested_mid.rng"/>
3
+ <start>
4
+ <ref name="middle"/>
5
+ </start>
6
+ </grammar>
@@ -0,0 +1,7 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <start>
3
+ <element name="z">
4
+ <empty/>
5
+ </element>
6
+ </start>
7
+ </grammar>
@@ -0,0 +1,8 @@
1
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
2
+ <include href="nested_leaf.rng"/>
3
+ <define name="middle">
4
+ <element name="y">
5
+ <empty/>
6
+ </element>
7
+ </define>
8
+ </grammar>
@@ -0,0 +1,35 @@
1
+ include "isodoc.rnc" {
2
+
3
+ start = iso-standard
4
+
5
+ DocumentType = "TR" | "TS"
6
+
7
+ DocumentSubtype = "spec" | "release"
8
+
9
+ BibDataExtensionType =
10
+ doctype, docsubtype?, editorialgroup, ics*, radiotechnology?, common-ims-spec?, internal?, release?
11
+
12
+ }
13
+
14
+ RadioTechnologyType = "2G" | "3G" | "LTE" | "5G"
15
+
16
+ radiotechnology = element radiotechnology { RadioTechnologyType }
17
+
18
+ common-ims-spec = element common-ims-spec { xsd:boolean }
19
+
20
+ internal = element internal { xsd:boolean }
21
+
22
+ release = element release {
23
+ element version2G { text },
24
+ element version3G { text },
25
+ element defunct { xsd:boolean },
26
+ element wpm-code-2G { text },
27
+ element wpm-code-3G { text },
28
+ element freeze-meeting { text },
29
+ element freeze-stage1-meeting { text },
30
+ element freeze-stage2-meeting { text },
31
+ element freeze-stage3-meeting { text },
32
+ element close-meeting { text },
33
+ element project-start { xsd:date },
34
+ element project-end { xsd:date }
35
+ }
@@ -0,0 +1,105 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
+ <include href="isodoc.rng">
4
+ <start>
5
+ <ref name="iso-standard"/>
6
+ </start>
7
+ <define name="DocumentType">
8
+ <choice>
9
+ <value>TR</value>
10
+ <value>TS</value>
11
+ </choice>
12
+ </define>
13
+ <define name="DocumentSubtype">
14
+ <choice>
15
+ <value>spec</value>
16
+ <value>release</value>
17
+ </choice>
18
+ </define>
19
+ <define name="BibDataExtensionType">
20
+ <ref name="doctype"/>
21
+ <optional>
22
+ <ref name="docsubtype"/>
23
+ </optional>
24
+ <ref name="editorialgroup"/>
25
+ <zeroOrMore>
26
+ <ref name="ics"/>
27
+ </zeroOrMore>
28
+ <optional>
29
+ <ref name="radiotechnology"/>
30
+ </optional>
31
+ <optional>
32
+ <ref name="common-ims-spec"/>
33
+ </optional>
34
+ <optional>
35
+ <ref name="internal"/>
36
+ </optional>
37
+ <optional>
38
+ <ref name="release"/>
39
+ </optional>
40
+ </define>
41
+ </include>
42
+ <define name="RadioTechnologyType">
43
+ <choice>
44
+ <value>2G</value>
45
+ <value>3G</value>
46
+ <value>LTE</value>
47
+ <value>5G</value>
48
+ </choice>
49
+ </define>
50
+ <define name="radiotechnology">
51
+ <element name="radiotechnology">
52
+ <ref name="RadioTechnologyType"/>
53
+ </element>
54
+ </define>
55
+ <define name="common-ims-spec">
56
+ <element name="common-ims-spec">
57
+ <data type="boolean"/>
58
+ </element>
59
+ </define>
60
+ <define name="internal">
61
+ <element name="internal">
62
+ <data type="boolean"/>
63
+ </element>
64
+ </define>
65
+ <define name="release">
66
+ <element name="release">
67
+ <element name="version2G">
68
+ <text/>
69
+ </element>
70
+ <element name="version3G">
71
+ <text/>
72
+ </element>
73
+ <element name="defunct">
74
+ <data type="boolean"/>
75
+ </element>
76
+ <element name="wpm-code-2G">
77
+ <text/>
78
+ </element>
79
+ <element name="wpm-code-3G">
80
+ <text/>
81
+ </element>
82
+ <element name="freeze-meeting">
83
+ <text/>
84
+ </element>
85
+ <element name="freeze-stage1-meeting">
86
+ <text/>
87
+ </element>
88
+ <element name="freeze-stage2-meeting">
89
+ <text/>
90
+ </element>
91
+ <element name="freeze-stage3-meeting">
92
+ <text/>
93
+ </element>
94
+ <element name="close-meeting">
95
+ <text/>
96
+ </element>
97
+ <element name="project-start">
98
+ <data type="date"/>
99
+ </element>
100
+ <element name="project-end">
101
+ <data type="date"/>
102
+ </element>
103
+ </element>
104
+ </define>
105
+ </grammar>
@@ -0,0 +1,11 @@
1
+ # Stub file for basicdoc.rnc - minimal implementation for testing
2
+ default namespace = "http://example.org"
3
+
4
+ start = element doc { text }
5
+ DocumentType = text
6
+ TextElement = text | strong | em
7
+ PureTextElement = text
8
+ BasicBlock = paragraph
9
+ paragraph = element p { text }
10
+ strong = element strong { text }
11
+ em = element em { text }
@@ -0,0 +1,148 @@
1
+ # Currently we inherit from a namespaced grammar, isostandard. Until we inherit from isodoc,
2
+ # we cannot have a new default namespace: we will end up with a grammar with two different
3
+ # namespaces, one for isostandard and one for csand additions. And we do not want that.
4
+
5
+ include "isodoc.rnc" {
6
+
7
+ start = bipm-standard
8
+
9
+ xref =
10
+ element xref {
11
+ attribute target { xsd:string { pattern = "\i\c*|\c+#\c+" }},
12
+ attribute to { xsd:string { pattern = "\i\c*|\c+#\c+" }}?,
13
+ attribute type { ReferenceFormat }?,
14
+ attribute alt { text }?,
15
+ attribute case { "capital" | "lowercase" }?,
16
+ attribute droploc { xsd:boolean }?,
17
+ attribute pagenumber { xsd:boolean }?,
18
+ attribute nosee { xsd:boolean }?,
19
+ attribute nopage { xsd:boolean }?,
20
+ XrefBody
21
+ }
22
+
23
+ Clause-Section =
24
+ attribute id { xsd:ID }?,
25
+ attribute language { text }?,
26
+ attribute script { text }?,
27
+ attribute inline-header { xsd:boolean }?,
28
+ attribute obligation { "normative" | "informative" }?,
29
+ attribute type { text }?,
30
+ attribute unnumbered { xsd:boolean }?,
31
+ section-title?,
32
+ (
33
+ ( ( BasicBlock* ) | amend ),
34
+ (clause-subsection | terms | definitions | floating-title )*
35
+ )
36
+
37
+ Annex-Section =
38
+ attribute id { xsd:ID }?,
39
+ attribute language { text }?,
40
+ attribute script { text }?,
41
+ attribute inline-header { xsd:boolean }?,
42
+ attribute obligation { "normative" | "informative" }?,
43
+ attribute unnumbered { xsd:boolean }?,
44
+ section-title?,
45
+ (
46
+ ( BasicBlock* ),
47
+ (annex-subsection | terms | definitions | references | floating-title )*
48
+ )
49
+
50
+ ol =
51
+ element ol {
52
+ attribute id { xsd:ID },
53
+ attribute keep-with-next { xsd:boolean }?,
54
+ attribute keep-lines-together { xsd:boolean }?,
55
+ attribute tag { text }?,
56
+ attribute multilingual-rendering { MultilingualRenderingType }?,
57
+ attribute type { ( "roman" | "alphabet" | "arabic" |
58
+ "roman_upper" | "alphabet_upper" ) },
59
+ attribute start { text }?,
60
+ li+, note*
61
+ }
62
+
63
+ DocumentType =
64
+ "brochure" |
65
+ "mise-en-pratique" |
66
+ "rapport" |
67
+ "monographie" |
68
+ "guide" |
69
+ "meeting-report" |
70
+ "technical-report" |
71
+ "working-party-note" |
72
+ "strategy" |
73
+ "cipm-mra" |
74
+ "resolution"
75
+
76
+ editorialgroup = element editorialgroup {
77
+ committee+,
78
+ workgroup*
79
+ }
80
+
81
+ structuredidentifier = element structuredidentifier {
82
+ element docnumber { text },
83
+ element part { text }?,
84
+ element appendix { text }?
85
+ }
86
+
87
+ BibDataExtensionType =
88
+ doctype?, docsubtype?, editorialgroup, comment-period?, si-aspect?, meeting-note?, structuredidentifier
89
+ }
90
+
91
+ comment-period = element comment-period {
92
+ element from { ISO8601Date },
93
+ element to { ISO8601Date }
94
+ }
95
+
96
+ si-aspect = element si-aspect {
97
+ "A_e_deltanu" |
98
+ "A_e" |
99
+ "cd_Kcd_h_deltanu" |
100
+ "cd_Kcd" |
101
+ "full" |
102
+ "K_k_deltanu" |
103
+ "K_k" |
104
+ "kg_h_c_deltanu" |
105
+ "kg_h" |
106
+ "m_c_deltanu" |
107
+ "m_c" |
108
+ "mol_NA" |
109
+ "s_deltanu"
110
+ }
111
+
112
+ committee = element committee {
113
+ attribute acronym {
114
+ "CGPM" |
115
+ "CIPM" |
116
+ "BIPM" |
117
+ "CCAUV" |
118
+ "CCEM" |
119
+ "CCL" |
120
+ "CCM" |
121
+ "CCPR" |
122
+ "CCQM" |
123
+ "CCRI" |
124
+ "CCT" |
125
+ "CCTF" |
126
+ "CCU" |
127
+ "CCL-CCTF-WGFS" |
128
+ "JCGM" |
129
+ "JCRB" |
130
+ "JCTLM" |
131
+ "INetQI" },
132
+ LocalizedString
133
+ }
134
+
135
+ workgroup = element workgroup {
136
+ attribute acronym { text }?,
137
+ text
138
+ }
139
+
140
+ meeting-note = element meeting-note { text }
141
+
142
+ bipm-standard =
143
+ element bipm-standard {
144
+ attribute version { text },
145
+ attribute type { "semantic" | "presentation" },
146
+ bibdata, termdocsource*, misccontainer?, boilerplate?, preface?, sections+, annex*, bibliography?, indexsect*
147
+ }
148
+