nora_mark 0.2beta3 → 0.2beta4
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 +4 -4
- data/.travis.yml +5 -0
- data/Gemfile +2 -0
- data/README.md +17 -12
- data/example/nora-simple.css +52 -0
- data/example/noramark-reference-ja.nora +246 -0
- data/example/noramark-reference-ja_00001.xhtml +187 -0
- data/lib/nora_mark/html/{abstract_item_writer.rb → abstract_node_writer.rb} +3 -3
- data/lib/nora_mark/html/context.rb +3 -21
- data/lib/nora_mark/html/frontmatter_writer.rb +33 -0
- data/lib/nora_mark/html/generator.rb +122 -100
- data/lib/nora_mark/html/pages.rb +3 -9
- data/lib/nora_mark/html/paragraph_writer.rb +27 -23
- data/lib/nora_mark/html/tag_writer.rb +33 -34
- data/lib/nora_mark/html/writer_selector.rb +3 -3
- data/lib/nora_mark/node.rb +31 -0
- data/lib/nora_mark/parser.kpeg +133 -79
- data/lib/nora_mark/parser.kpeg.rb +1822 -1526
- data/lib/nora_mark/parser.rb +4 -23
- data/lib/nora_mark/version.rb +1 -1
- data/lib/nora_mark.rb +7 -2
- data/nora_mark.gemspec +1 -0
- data/spec/epub30-schemas/epub-nav-30.nvdl +16 -0
- data/spec/epub30-schemas/epub-nav-30.rnc +10 -0
- data/spec/epub30-schemas/epub-nav-30.sch +72 -0
- data/spec/epub30-schemas/epub-svg-30.nvdl +15 -0
- data/spec/epub30-schemas/epub-svg-30.rnc +15 -0
- data/spec/epub30-schemas/epub-svg-30.sch +10 -0
- data/spec/epub30-schemas/epub-xhtml-30.nvdl +15 -0
- data/spec/epub30-schemas/epub-xhtml-30.rnc +37 -0
- data/spec/epub30-schemas/epub-xhtml-30.sch +377 -0
- data/spec/epub30-schemas/epub30-catalog.xml +335 -0
- data/spec/epub30-schemas/media-overlay-30.nvdl +14 -0
- data/spec/epub30-schemas/media-overlay-30.rnc +46 -0
- data/spec/epub30-schemas/media-overlay-30.sch +9 -0
- data/spec/epub30-schemas/mod/datatypes.rnc +143 -0
- data/spec/epub30-schemas/mod/epub-mathml3-30.rnc +74 -0
- data/spec/epub30-schemas/mod/epub-prefix-attr.rnc +8 -0
- data/spec/epub30-schemas/mod/epub-ssml-attrs.rnc +11 -0
- data/spec/epub30-schemas/mod/epub-svg11-30.rnc +12 -0
- data/spec/epub30-schemas/mod/epub-svg11-re.sch +7 -0
- data/spec/epub30-schemas/mod/epub-switch.rnc +32 -0
- data/spec/epub30-schemas/mod/epub-trigger.rnc +17 -0
- data/spec/epub30-schemas/mod/epub-type-attr.rnc +7 -0
- data/spec/epub30-schemas/mod/epub-xhtml-mathml3-30.rnc +5 -0
- data/spec/epub30-schemas/mod/epub-xhtml-svg11-30.rnc +6 -0
- data/spec/epub30-schemas/mod/html5/LICENSE +23 -0
- data/spec/epub30-schemas/mod/html5/README +21 -0
- data/spec/epub30-schemas/mod/html5/html5-aria-30.rnc +105 -0
- data/spec/epub30-schemas/mod/html5/html5-attrib-30.rnc +44 -0
- data/spec/epub30-schemas/mod/html5/html5-document-30.rnc +44 -0
- data/spec/epub30-schemas/mod/html5/html5-edit-30.rnc +24 -0
- data/spec/epub30-schemas/mod/html5/html5-embed-30.rnc +155 -0
- data/spec/epub30-schemas/mod/html5/html5-forms-30.rnc +431 -0
- data/spec/epub30-schemas/mod/html5/html5-grouping-30.rnc +115 -0
- data/spec/epub30-schemas/mod/html5/html5-interactive-30.rnc +86 -0
- data/spec/epub30-schemas/mod/html5/html5-models-30.rnc +10 -0
- data/spec/epub30-schemas/mod/html5/html5-phrasing-30.rnc +134 -0
- data/spec/epub30-schemas/mod/html5/html5-script-30.rnc +164 -0
- data/spec/epub30-schemas/mod/html5/html5-sections-30.rnc +58 -0
- data/spec/epub30-schemas/mod/html5/html5-style-30.rnc +18 -0
- data/spec/epub30-schemas/mod/id-unique.sch +10 -0
- data/spec/epub30-schemas/mod/mathml/LICENSE +3 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-common.rnc +84 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-content.rnc +373 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-presentation.rnc +536 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-strict-content.rnc +60 -0
- data/spec/epub30-schemas/mod/security/LICENSE +4 -0
- data/spec/epub30-schemas/mod/security/Lenient-Encryption11-ghc.rnc +41 -0
- data/spec/epub30-schemas/mod/security/Lenient-Encryption11.rnc +39 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature-exclusiveC14N.rnc +25 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc +32 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties.rnc +30 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11.rnc +28 -0
- data/spec/epub30-schemas/mod/security/Strict-Encryption.rnc +27 -0
- data/spec/epub30-schemas/mod/security/Strict-Signature.rnc +22 -0
- data/spec/epub30-schemas/mod/security/exc-c14n.rnc +39 -0
- data/spec/epub30-schemas/mod/security/security_any.rnc +15 -0
- data/spec/epub30-schemas/mod/security/xenc-allowAnyForeign.rnc +25 -0
- data/spec/epub30-schemas/mod/security/xenc-schema-11.rnc +96 -0
- data/spec/epub30-schemas/mod/security/xenc-schema.rnc +145 -0
- data/spec/epub30-schemas/mod/security/xenc11-allowAnyForeign.rnc +19 -0
- data/spec/epub30-schemas/mod/security/xmldsig-allowAnyForeign.rnc +47 -0
- data/spec/epub30-schemas/mod/security/xmldsig-core-schema.rnc +276 -0
- data/spec/epub30-schemas/mod/security/xmldsig-filter2.rnc +16 -0
- data/spec/epub30-schemas/mod/security/xmldsig-properties-schema.rnc +34 -0
- data/spec/epub30-schemas/mod/security/xmldsig11-allowAnyForeign.rnc +18 -0
- data/spec/epub30-schemas/mod/security/xmldsig11-schema.rnc +133 -0
- data/spec/epub30-schemas/mod/security/xmlsec-ghc-allowAnyForeign.rnc +21 -0
- data/spec/epub30-schemas/mod/security/xmlsec-ghc-schema.rnc +42 -0
- data/spec/epub30-schemas/mod/svg11/LICENSE +1 -0
- data/spec/epub30-schemas/mod/svg11/README.txt +8 -0
- data/spec/epub30-schemas/mod/svg11/svg11-flat.rnc +3999 -0
- data/spec/epub30-schemas/ocf-container-30.rnc +16 -0
- data/spec/epub30-schemas/ocf-encryption-30.rnc +12 -0
- data/spec/epub30-schemas/ocf-signatures-30.rnc +8 -0
- data/spec/epub30-schemas/package-30.nvdl +14 -0
- data/spec/epub30-schemas/package-30.rnc +91 -0
- data/spec/epub30-schemas/package-30.sch +137 -0
- data/spec/jing-20091111/bin/jing.jar +0 -0
- data/spec/nora_mark_spec.rb +229 -68
- data/spec/spec_helper.rb +16 -0
- metadata +179 -6
- data/lib/nora_mark/html/header_writer.rb +0 -35
- data/spec/fixture/test_src_ja.nora +0 -50
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
html5.flow.class |= html5.forms.flow.class
|
|
5
|
+
html5.phrasing.class |= html5.forms.phrasing.class
|
|
6
|
+
|
|
7
|
+
html5.forms.flow.class |= html5.form | html5.fieldset
|
|
8
|
+
html5.forms.phrasing.class |= html5.meter | html5.input.class | html5.textarea
|
|
9
|
+
| html5.label | html5.button.class | html5.select | html5.output | html5.datalist
|
|
10
|
+
| html5.keygen
|
|
11
|
+
|
|
12
|
+
html5.input.class |= html5.input.text | html5.input.password | html5.input.checkbox
|
|
13
|
+
| html5.input.radio | html5.input.button | html5.input.submit | html5.input.reset
|
|
14
|
+
| html5.input.file | html5.input.hidden | html5.input.image | html5.input.datetime
|
|
15
|
+
| html5.input.datetime-local | html5.input.date | html5.input.month | html5.input.time
|
|
16
|
+
| html5.input.week | html5.input.number | html5.input.range | html5.input.email
|
|
17
|
+
| html5.input.url | html5.input.search | html5.input.tel | html5.input.color
|
|
18
|
+
|
|
19
|
+
html5.button.class |= html5.button.submit | html5.button.reset | html5.button.button
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
html5.form = element form { html5.form.attlist & html5.form.content }
|
|
25
|
+
html5.form.attlist &= html5.global.attrs & html5.form.action.attr?
|
|
26
|
+
& html5.form.method.attr? & html5.form.enctype.attr?
|
|
27
|
+
& html5.forms.name.attr? & html5.form.accept-charset.attr?
|
|
28
|
+
& html5.form.novalidate.attr? & html5.form.target.attr?
|
|
29
|
+
& html5.form.autocomplete.attr?
|
|
30
|
+
html5.form.action.attr = attribute action { datatype.html5.URL.spaces }
|
|
31
|
+
html5.form.method.attr = attribute method { html5.form.method.attr.value }
|
|
32
|
+
html5.form.method.attr.value = ( 'get' | 'post' )
|
|
33
|
+
html5.form.enctype.attr = attribute enctype { html5.form.enctype.attr.value }
|
|
34
|
+
html5.form.enctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain' )
|
|
35
|
+
html5.form.accept-charset.attr = attribute accept-charset { datatype.html5.forms.charsetlist}
|
|
36
|
+
html5.form.novalidate.attr = attribute novalidate { 'novalidate' | '' }
|
|
37
|
+
html5.form.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword }
|
|
38
|
+
html5.form.autocomplete.attr = attribute autocomplete { 'on' | 'off' }
|
|
39
|
+
html5.form.content = html5.flow.model
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
html5.input.text = element input { html5.input.text.attlist }
|
|
43
|
+
html5.input.text.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
44
|
+
& attribute type { 'text' }? & html5.forms.maxlength.attr?
|
|
45
|
+
& html5.forms.readonly.attr? & html5.forms.size.attr?
|
|
46
|
+
& html5.input.text.value.attr? & html5.input.autocomplete.attr?
|
|
47
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
48
|
+
& html5.forms.pattern.attr? & html5.forms.required.attr?
|
|
49
|
+
& html5.forms.placeholder.attr? & html5.input.common.attrs
|
|
50
|
+
html5.input.text.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
html5.input.password = element input { html5.input.password.attlist }
|
|
54
|
+
html5.input.password.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
55
|
+
& attribute type { 'password' } & html5.forms.maxlength.attr?
|
|
56
|
+
& html5.forms.readonly.attr? & html5.forms.size.attr?
|
|
57
|
+
& html5.input.password.value.attr? & html5.input.autocomplete.attr?
|
|
58
|
+
& html5.forms.autofocus.attr? & html5.forms.pattern.attr?
|
|
59
|
+
& html5.forms.required.attr? & html5.forms.placeholder.attr?
|
|
60
|
+
& html5.input.common.attrs
|
|
61
|
+
html5.input.password.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
html5.input.checkbox = element input { html5.input.checkbox.attlist }
|
|
65
|
+
html5.input.checkbox.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
66
|
+
& attribute type { 'checkbox' } & html5.input.checked.attr?
|
|
67
|
+
& html5.input.checkbox.value.attr? & html5.forms.autofocus.attr?
|
|
68
|
+
& html5.forms.required.attr? & html5.input.common.attrs
|
|
69
|
+
html5.input.checkbox.value.attr = attribute value { datatype.string }
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
html5.input.radio = element input { html5.input.radio.attlist }
|
|
73
|
+
html5.input.radio.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
74
|
+
& attribute type { 'radio' } & html5.input.checked.attr?
|
|
75
|
+
& html5.input.radio.value.attr? & html5.forms.autofocus.attr?
|
|
76
|
+
& html5.forms.required.attr? & html5.input.common.attrs
|
|
77
|
+
html5.input.radio.value.attr = attribute value { datatype.string }
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
html5.input.button = element input { html5.input.button.attlist }
|
|
81
|
+
html5.input.button.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
82
|
+
& attribute type { 'button' } & html5.input.button.value.attr?
|
|
83
|
+
& html5.forms.autofocus.attr? & html5.input.common.attrs
|
|
84
|
+
html5.input.button.value.attr = attribute value { datatype.string }
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
html5.input.submit = element input { html5.input.submit.attlist }
|
|
88
|
+
html5.input.submit.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
89
|
+
& attribute type { 'submit' } & html5.input.submit.value.attr?
|
|
90
|
+
& html5.forms.formaction.attr? & html5.forms.autofocus.attr?
|
|
91
|
+
& html5.forms.formenctype.attr? & html5.forms.formmethod.attr?
|
|
92
|
+
& html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr?
|
|
93
|
+
& html5.input.common.attrs
|
|
94
|
+
html5.input.submit.value.attr = attribute value { datatype.string }
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
html5.input.reset = element input { html5.input.reset.attlist }
|
|
98
|
+
html5.input.reset.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
99
|
+
& attribute type { 'reset' } & html5.input.reset.value.attr?
|
|
100
|
+
& html5.forms.autofocus.attr? & html5.input.common.attrs
|
|
101
|
+
html5.input.reset.value.attr = attribute value { datatype.string }
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
html5.input.file = element input { html5.input.file.attlist }
|
|
105
|
+
html5.input.file.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
106
|
+
& attribute type { 'file'} & html5.input.file.accept.attr?
|
|
107
|
+
& html5.forms.autofocus.attr? & html5.forms.required.attr?
|
|
108
|
+
& html5.input.multiple.attr? & html5.input.common.attrs
|
|
109
|
+
html5.input.file.accept.attr = attribute accept { datatype.html5.forms.mimetypelist }
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
html5.input.hidden = element input { html5.input.hidden.attlist }
|
|
113
|
+
html5.input.hidden.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
114
|
+
& attribute type { 'hidden' } & html5.input.hidden.value.attr?
|
|
115
|
+
& html5.input.common.attrs
|
|
116
|
+
html5.input.hidden.value.attr = attribute value { datatype.string }
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
html5.input.image = element input { html5.input.image.attlist }
|
|
120
|
+
html5.input.image.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
121
|
+
& attribute type { 'image' } & html5.alt.attr & html5.src.attr
|
|
122
|
+
& html5.forms.formaction.attr? & html5.forms.autofocus.attr?
|
|
123
|
+
& html5.forms.formenctype.attr? & html5.forms.formmethod.attr?
|
|
124
|
+
& html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr?
|
|
125
|
+
& html5.dimension.attrs? & html5.input.common.attrs
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
html5.input.datetime = element input { html5.input.datetime.attlist }
|
|
130
|
+
html5.input.datetime.attlist = html5.global.attrs
|
|
131
|
+
& html5.forms.common.attrs & attribute type { 'datetime'}
|
|
132
|
+
& html5.input.autocomplete.attr? & html5.forms.autofocus.attr?
|
|
133
|
+
& html5.input.list.attr? & html5.input.datetime.min.attr?
|
|
134
|
+
& html5.input.datetime.max.attr? & html5.input.step.float.attr?
|
|
135
|
+
& html5.forms.readonly.attr? & html5.forms.required.attr?
|
|
136
|
+
& html5.input.datetime.value.attr? & html5.input.common.attrs
|
|
137
|
+
html5.input.datetime.min.attr = attribute min { datatype.html5.datetime }
|
|
138
|
+
html5.input.datetime.max.attr = attribute max { datatype.html5.datetime }
|
|
139
|
+
html5.input.datetime.value.attr = attribute value { datatype.html5.datetime }
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
html5.input.datetime-local = element input { html5.input.datetime-local.attlist }
|
|
143
|
+
html5.input.datetime-local.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
144
|
+
& attribute type { 'datetime-local' } & html5.input.autocomplete.attr?
|
|
145
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
146
|
+
& html5.input.datetime-local.min.attr? & html5.input.datetime-local.max.attr?
|
|
147
|
+
& html5.input.step.float.attr? & html5.forms.readonly.attr?
|
|
148
|
+
& html5.forms.required.attr? & html5.input.datetime-local.value.attr?
|
|
149
|
+
& html5.input.common.attrs
|
|
150
|
+
html5.input.datetime-local.min.attr = attribute min { datatype.html5.datetime.local }
|
|
151
|
+
html5.input.datetime-local.max.attr = attribute max { datatype.html5.datetime.local }
|
|
152
|
+
html5.input.datetime-local.value.attr = attribute value { datatype.html5.datetime.local }
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
html5.input.date = element input { html5.input.date.attlist }
|
|
156
|
+
html5.input.date.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
157
|
+
& attribute type { 'date' } & html5.input.autocomplete.attr?
|
|
158
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
159
|
+
& html5.input.date.min.attr? & html5.input.date.max.attr?
|
|
160
|
+
& html5.input.step.integer.attr? & html5.forms.readonly.attr?
|
|
161
|
+
& html5.forms.required.attr? & html5.input.date.value.attr?
|
|
162
|
+
& html5.input.common.attrs
|
|
163
|
+
html5.input.date.min.attr = attribute min { datatype.html5.date }
|
|
164
|
+
html5.input.date.max.attr = attribute max { datatype.html5.date }
|
|
165
|
+
html5.input.date.value.attr = attribute value { datatype.html5.date }
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
html5.input.month = element input { html5.input.month.attlist }
|
|
169
|
+
html5.input.month.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
170
|
+
& attribute type { 'month' } & html5.input.autocomplete.attr?
|
|
171
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
172
|
+
& html5.input.month.min.attr? & html5.input.month.max.attr?
|
|
173
|
+
& html5.input.step.integer.attr? & html5.forms.readonly.attr?
|
|
174
|
+
& html5.forms.required.attr? & html5.input.month.value.attr?
|
|
175
|
+
& html5.input.common.attrs
|
|
176
|
+
html5.input.month.min.attr = attribute min { datatype.html5.month }
|
|
177
|
+
html5.input.month.max.attr = attribute max { datatype.html5.month }
|
|
178
|
+
html5.input.month.value.attr = attribute value { datatype.html5.month }
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
html5.input.time = element input { html5.input.time.attlist }
|
|
182
|
+
html5.input.time.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
183
|
+
& attribute type { 'time' } & html5.input.autocomplete.attr?
|
|
184
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
185
|
+
& html5.input.time.min.attr? & html5.input.time.max.attr?
|
|
186
|
+
& html5.input.step.float.attr? & html5.forms.readonly.attr?
|
|
187
|
+
& html5.forms.required.attr? & html5.input.time.value.attr?
|
|
188
|
+
& html5.input.common.attrs
|
|
189
|
+
html5.input.time.min.attr = attribute min { datatype.html5.time }
|
|
190
|
+
html5.input.time.max.attr = attribute max { datatype.html5.time }
|
|
191
|
+
html5.input.time.value.attr = attribute value { datatype.html5.time }
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
html5.input.week = element input { html5.input.week.attlist }
|
|
195
|
+
html5.input.week.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
196
|
+
& attribute type { 'week' } & html5.input.autocomplete.attr?
|
|
197
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
198
|
+
& html5.input.week.min.attr? & html5.input.week.max.attr?
|
|
199
|
+
& html5.input.step.integer.attr? & html5.forms.readonly.attr?
|
|
200
|
+
& html5.forms.required.attr? & html5.input.week.value.attr?
|
|
201
|
+
& html5.input.common.attrs
|
|
202
|
+
html5.input.week.min.attr = attribute min { datatype.html5.week }
|
|
203
|
+
html5.input.week.max.attr = attribute max { datatype.html5.week }
|
|
204
|
+
html5.input.week.value.attr = attribute value { datatype.html5.week }
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
html5.input.number = element input { input.number.attlist }
|
|
208
|
+
input.number.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
209
|
+
& attribute type { 'number' } & html5.input.autocomplete.attr?
|
|
210
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
211
|
+
& html5.input.number.min.attr? & html5.input.number.max.attr?
|
|
212
|
+
& html5.input.step.float.attr? & html5.forms.readonly.attr?
|
|
213
|
+
& html5.forms.required.attr? & html5.input.number.value.attr?
|
|
214
|
+
& html5.input.common.attrs
|
|
215
|
+
html5.input.number.min.attr = attribute min { datatype.float }
|
|
216
|
+
html5.input.number.max.attr = attribute max { datatype.float }
|
|
217
|
+
html5.input.number.value.attr = attribute value { datatype.float }
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
html5.input.range = element input { html5.input.range.attlist }
|
|
221
|
+
html5.input.range.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
222
|
+
& attribute type { 'range' } & html5.input.autocomplete.attr?
|
|
223
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
224
|
+
& html5.input.range.min.attr? & html5.input.range.max.attr?
|
|
225
|
+
& html5.input.step.float.attr? & html5.input.range.value.attr?
|
|
226
|
+
& html5.input.common.attrs
|
|
227
|
+
html5.input.range.min.attr = attribute min { datatype.float }
|
|
228
|
+
html5.input.range.max.attr = attribute max { datatype.float }
|
|
229
|
+
html5.input.range.value.attr = attribute value { datatype.float }
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
html5.input.email = element input { html5.input.email.attlist }
|
|
233
|
+
html5.input.email.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
234
|
+
& attribute type { 'email' } & html5.input.autocomplete.attr?
|
|
235
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
236
|
+
& html5.forms.maxlength.attr? & html5.forms.pattern.attr?
|
|
237
|
+
& html5.forms.readonly.attr? & html5.forms.required.attr?
|
|
238
|
+
& html5.forms.size.attr? & html5.forms.placeholder.attr?
|
|
239
|
+
& ((html5.input.multiple.attr & html5.input.email.value.multiple.attr?)
|
|
240
|
+
| html5.input.email.value.single.attr? )?
|
|
241
|
+
& html5.input.common.attrs
|
|
242
|
+
html5.input.email.value.single.attr = attribute value { datatype.html5.emailaddress }
|
|
243
|
+
html5.input.email.value.multiple.attr = attribute value { datatype.html5.emailaddresslist }
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
html5.input.url = element input { html5.input.url.attlist }
|
|
247
|
+
html5.input.url.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
248
|
+
& attribute type { 'url' } & html5.input.autocomplete.attr?
|
|
249
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
250
|
+
& html5.forms.maxlength.attr? & html5.forms.pattern.attr?
|
|
251
|
+
& html5.forms.readonly.attr? & html5.forms.required.attr?
|
|
252
|
+
& html5.forms.size.attr? & html5.forms.placeholder.attr?
|
|
253
|
+
& html5.input.url.value.attr? & html5.input.common.attrs
|
|
254
|
+
html5.input.url.value.attr = attribute value { '' | datatype.URI.absolute }
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
html5.input.search = element input { html5.input.search.attlist }
|
|
258
|
+
html5.input.search.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
259
|
+
& attribute type { 'search' } & html5.input.autocomplete.attr?
|
|
260
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
261
|
+
& html5.forms.maxlength.attr? & html5.forms.pattern.attr?
|
|
262
|
+
& html5.forms.readonly.attr? & html5.forms.required.attr?
|
|
263
|
+
& html5.forms.size.attr? & html5.forms.placeholder.attr?
|
|
264
|
+
& html5.input.search.value.attr? & html5.input.common.attrs
|
|
265
|
+
html5.input.search.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
html5.input.tel = element input { html5.input.tel.attlist }
|
|
269
|
+
html5.input.tel.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
270
|
+
& attribute type { 'tel' } & html5.input.autocomplete.attr?
|
|
271
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
272
|
+
& html5.forms.maxlength.attr? & html5.forms.pattern.attr?
|
|
273
|
+
& html5.forms.readonly.attr? & html5.forms.required.attr?
|
|
274
|
+
& html5.forms.size.attr? & html5.forms.placeholder.attr?
|
|
275
|
+
& html5.input.tel.value.attr? & html5.input.common.attrs
|
|
276
|
+
html5.input.tel.value.attr = attribute value { datatype.string }
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
html5.input.color = element input { html5.input.color.attlist }
|
|
280
|
+
html5.input.color.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
281
|
+
& attribute type { 'color' } & html5.input.autocomplete.attr?
|
|
282
|
+
& html5.forms.autofocus.attr? & html5.input.list.attr?
|
|
283
|
+
& html5.input.color.value.attr? & html5.input.common.attrs
|
|
284
|
+
html5.input.color.value.attr = attribute value { datatype.html5.color }
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
html5.textarea = element textarea { html5.textarea.attlist & html5.textarea.content }
|
|
288
|
+
html5.textarea.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
289
|
+
& html5.forms.readonly.attr? & html5.forms.maxlength.attr?
|
|
290
|
+
& html5.forms.autofocus.attr? & html5.forms.required.attr?
|
|
291
|
+
& html5.forms.placeholder.attr? & html5.textarea.rows.attr?
|
|
292
|
+
& ((html5.textarea.wrap.hard.attr? & html5.textarea.cols.attr)|
|
|
293
|
+
(html5.textarea.wrap.soft.attr? & html5.textarea.cols.attr?))
|
|
294
|
+
& html5.forms.dirname.attr?
|
|
295
|
+
html5.textarea.cols.attr = attribute cols { datatype.positive.integer }
|
|
296
|
+
html5.textarea.rows.attr = attribute rows { datatype.positive.integer }
|
|
297
|
+
html5.textarea.wrap.hard.attr = attribute wrap { 'hard' }
|
|
298
|
+
html5.textarea.wrap.soft.attr = attribute wrap { 'soft' }
|
|
299
|
+
html5.textarea.content = datatype.text
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
html5.option = element option { html5.option.attlist & html5.option.content }
|
|
303
|
+
html5.option.attlist = html5.global.attrs & html5.forms.disabled.attr?
|
|
304
|
+
& html5.option.selected.attr? & html5.option.label.attr?
|
|
305
|
+
& html5.option.value.attr?
|
|
306
|
+
html5.option.selected.attr = attribute selected { 'selected' | '' }
|
|
307
|
+
html5.option.label.attr = attribute label { datatype.string }
|
|
308
|
+
html5.option.value.attr = attribute value { datatype.string }
|
|
309
|
+
html5.option.content = datatype.text
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
html5.optgroup = element optgroup { html5.optgroup.attlist & html5.optgroup.content }
|
|
313
|
+
html5.optgroup.attlist = html5.global.attrs & html5.optgroup.label.attr & html5.forms.disabled.attr?
|
|
314
|
+
html5.optgroup.label.attr = attribute label { datatype.string }
|
|
315
|
+
html5.optgroup.content = html5.option*
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
html5.select = element select { html5.select.attlist & html5.select.content }
|
|
319
|
+
html5.select.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
320
|
+
& html5.select.size.attr? & html5.select.multiple.attr?
|
|
321
|
+
& html5.forms.autofocus.attr? & html5.forms.required.attr?
|
|
322
|
+
html5.select.size.attr = attribute size { datatype.positive.integer }
|
|
323
|
+
html5.select.multiple.attr = attribute multiple { 'multiple' | '' }
|
|
324
|
+
html5.select.content = html5.optgroup* & html5.option*
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
html5.button.submit = element button { html5.button.submit.attlist & html5.button.content }
|
|
328
|
+
html5.button.submit.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
329
|
+
& html5.button.submit.type.attr? & html5.button.value.attr?
|
|
330
|
+
& html5.forms.formaction.attr? & html5.forms.autofocus.attr?
|
|
331
|
+
& html5.forms.formenctype.attr? & html5.forms.formmethod.attr?
|
|
332
|
+
& html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr?
|
|
333
|
+
html5.button.submit.type.attr = attribute type { 'submit' }
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
html5.button.reset = element button { html5.button.reset.attlist & html5.button.content }
|
|
337
|
+
html5.button.reset.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
338
|
+
& html5.button.reset.type.attr & html5.button.value.attr?
|
|
339
|
+
& html5.forms.autofocus.attr?
|
|
340
|
+
html5.button.reset.type.attr = attribute type { 'reset' }
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
html5.button.button = element button { html5.button.button.attlist & html5.button.content }
|
|
344
|
+
html5.button.button.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
345
|
+
& html5.button.button.type.attr & html5.button.value.attr?
|
|
346
|
+
& html5.forms.autofocus.attr?
|
|
347
|
+
html5.button.button.type.attr = attribute type { 'button' }
|
|
348
|
+
|
|
349
|
+
html5.button.value.attr = attribute value { datatype.string }
|
|
350
|
+
html5.button.content = html5.phrasing.model
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
html5.fieldset = element fieldset { html5.fieldset.attlist & html5.fieldset.content }
|
|
354
|
+
html5.fieldset.attlist = html5.global.attrs & html5.forms.common.attrs
|
|
355
|
+
html5.fieldset.content = html5.legend?, html5.flow.model
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
html5.legend = element legend { html5.legend.attlist & html5.legend.content }
|
|
359
|
+
html5.legend.attlist = html5.global.attrs
|
|
360
|
+
html5.legend.content = html5.phrasing.model
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
html5.label = element label { html5.label.attlist & html5.label.content }
|
|
364
|
+
html5.label.attlist = html5.global.attrs & html5.label.for.attr?
|
|
365
|
+
& html5.forms.form.attr?
|
|
366
|
+
html5.label.for.attr = attribute for { datatype.IDREF }
|
|
367
|
+
html5.label.content = html5.phrasing.model
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
html5.meter = element meter { html5.meter.attlist & html5.meter.content }
|
|
371
|
+
html5.meter.attlist = html5.global.attrs & html5.meter.value.attr & html5.meter.min.attr?
|
|
372
|
+
& html5.meter.low.attr? & html5.meter.high.attr? & html5.meter.max.attr? & html5.meter.optimum.attr?
|
|
373
|
+
html5.meter.value.attr = attribute value { datatype.float }
|
|
374
|
+
html5.meter.min.attr = attribute min { datatype.float }
|
|
375
|
+
html5.meter.low.attr = attribute low { datatype.float }
|
|
376
|
+
html5.meter.high.attr = attribute high { datatype.float }
|
|
377
|
+
html5.meter.max.attr = attribute max { datatype.float }
|
|
378
|
+
html5.meter.optimum.attr = attribute optimum { datatype.float }
|
|
379
|
+
html5.meter.content = html5.phrasing.model
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
html5.output = element output { html5.output.attlist & html5.output.content }
|
|
383
|
+
html5.output.attlist = html5.global.attrs & html5.forms.name.attr?
|
|
384
|
+
& html5.forms.form.attr? & html5.output.for.attr?
|
|
385
|
+
html5.output.for.attr = attribute for { datatype.IDREFS }
|
|
386
|
+
html5.output.content = html5.phrasing.model
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
html5.datalist = element datalist { html5.datalist.attlist & html5.datalist.content }
|
|
390
|
+
html5.datalist.attlist = html5.global.attrs
|
|
391
|
+
html5.datalist.content = html5.option* & html5.phrasing.model
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
html5.keygen = element keygen { html5.keygen.attlist }
|
|
395
|
+
html5.keygen.attlist = html5.global.attrs & html5.keygen.challenge.attr?
|
|
396
|
+
& html5.keygen.keytype.attr? & html5.forms.autofocus.attr?
|
|
397
|
+
& html5.forms.common.attrs?
|
|
398
|
+
html5.keygen.challenge.attr = attribute challenge { datatype.string }
|
|
399
|
+
html5.keygen.keytype.attr = attribute keytype { 'rsa' }
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
html5.input.common.attrs = html5.forms.dirname.attr?
|
|
403
|
+
html5.input.checked.attr = attribute checked { 'checked' | '' }
|
|
404
|
+
html5.input.autocomplete.attr = attribute autocomplete { 'on' | 'off'}
|
|
405
|
+
html5.input.list.attr = attribute list { datatype.IDREF }
|
|
406
|
+
html5.input.step.float.attr = attribute step { 'any' | datatype.float.positive }
|
|
407
|
+
html5.input.step.integer.attr = attribute step { 'any' | datatype.positive.integer }
|
|
408
|
+
html5.input.multiple.attr = attribute multiple { 'multiple' | '' }
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
html5.forms.common.attrs = html5.forms.name.attr? & html5.forms.disabled.attr? & html5.forms.form.attr?
|
|
412
|
+
|
|
413
|
+
html5.forms.name.attr = attribute name { datatype.string }
|
|
414
|
+
html5.forms.disabled.attr = attribute disabled { 'disabled' | '' }
|
|
415
|
+
html5.forms.form.attr = attribute form { datatype.IDREF }
|
|
416
|
+
html5.forms.readonly.attr = attribute readonly { 'readonly' | '' }
|
|
417
|
+
html5.forms.maxlength.attr = attribute maxlength { datatype.non-negative.integer }
|
|
418
|
+
html5.forms.size.attr = attribute size { datatype.positive.integer }
|
|
419
|
+
html5.forms.formaction.attr = attribute formaction { datatype.html5.URL.spaces }
|
|
420
|
+
html5.forms.formenctype.attr = attribute formenctype { html5.forms.formenctype.attr.value }
|
|
421
|
+
html5.forms.formenctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data'| 'text/plain' )
|
|
422
|
+
html5.forms.formmethod.attr = attribute formmethod { html5.forms.formmethod.attr.value }
|
|
423
|
+
html5.forms.formmethod.attr.value = ( 'get'| 'post')
|
|
424
|
+
html5.forms.formtarget.attr = attribute formtarget { datatype.html5.browsing.context.name.or.keyword }
|
|
425
|
+
html5.forms.formnovalidate.attr = attribute formnovalidate { 'formnovalidate' | '' }
|
|
426
|
+
html5.forms.autofocus.attr = attribute autofocus { 'autofocus' | '' }
|
|
427
|
+
html5.forms.pattern.attr = attribute pattern { datatype.html5.forms.pattern }
|
|
428
|
+
html5.forms.template.attr = attribute template { datatype.IDREF }
|
|
429
|
+
html5.forms.required.attr = attribute required { 'required' | '' }
|
|
430
|
+
html5.forms.placeholder.attr = attribute placeholder { datatype.html5.forms.string.nolinebreaks }
|
|
431
|
+
html5.forms.dirname.attr = attribute dirname { datatype.string }
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
html5.flow.class |= html5.grouping.class
|
|
4
|
+
html5.grouping.class |= html5.p | html5.hr | html5.pre | html5.blockquote | html5.ul | html5.ol | html5.dl | html5.div | html5.figure | html5.table
|
|
5
|
+
|
|
6
|
+
html5.grouping.attrs &= html5.global.attrs
|
|
7
|
+
|
|
8
|
+
html5.p = element p { html5.p.attlist & html5.p.content }
|
|
9
|
+
html5.p.attlist &= html5.grouping.attrs
|
|
10
|
+
html5.p.content = html5.phrasing.model
|
|
11
|
+
|
|
12
|
+
html5.hr = element hr { html5.hr.attlist }
|
|
13
|
+
html5.hr.attlist = html5.grouping.attrs
|
|
14
|
+
|
|
15
|
+
html5.pre = element pre { html5.pre.attlist & html5.pre.content }
|
|
16
|
+
html5.pre.attlist = html5.grouping.attrs
|
|
17
|
+
html5.pre.content = html5.phrasing.model
|
|
18
|
+
|
|
19
|
+
html5.blockquote = element blockquote { html5.blockquote.attlist & html5.blockquote.content }
|
|
20
|
+
html5.blockquote.attlist = html5.grouping.attrs & html5.cite.attr?
|
|
21
|
+
html5.blockquote.content = html5.flow.model
|
|
22
|
+
|
|
23
|
+
html5.ul = element ul { html5.ul.attlist & html5.ul.content }
|
|
24
|
+
html5.ul.attlist = html5.grouping.attrs
|
|
25
|
+
html5.ul.content = html5.li*
|
|
26
|
+
|
|
27
|
+
html5.li = element li { html5.li.attlist & html5.li.content }
|
|
28
|
+
html5.li.attlist = html5.global.attrs
|
|
29
|
+
html5.li.content = html5.flow.model
|
|
30
|
+
|
|
31
|
+
html5.ol = element ol { html5.ol.attlist & html5.ol.content }
|
|
32
|
+
html5.ol.attlist = html5.grouping.attrs & html5.ol.start.attr? & html5.ol.reversed.attr? & ol.type.attr?
|
|
33
|
+
html5.ol.start.attr = attribute start { datatype.integer }
|
|
34
|
+
html5.ol.reversed.attr = attribute reversed { 'reversed' | '' }
|
|
35
|
+
ol.type.attr = attribute type {'1' | 'a' | 'A' | 'i' | 'I' }
|
|
36
|
+
html5.ol.content = html5.oli*
|
|
37
|
+
|
|
38
|
+
html5.oli = element li { html5.oli.attlist & html5.oli.content }
|
|
39
|
+
html5.oli.attlist = html5.global.attrs & html5.oli.attrs.value?
|
|
40
|
+
html5.oli.attrs.value = attribute value { datatype.integer }
|
|
41
|
+
html5.oli.content = html5.flow.model
|
|
42
|
+
|
|
43
|
+
html5.dl = element dl { html5.dl.attlist & html5.dl.content }
|
|
44
|
+
html5.dl.attlist = html5.grouping.attrs
|
|
45
|
+
html5.dl.content = (html5.dt+ , html5.dd+)*
|
|
46
|
+
|
|
47
|
+
html5.dt = element dt { html5.dt.attlist & html5.dt.content }
|
|
48
|
+
html5.dt.attlist = html5.global.attrs
|
|
49
|
+
html5.dt.content = html5.phrasing.model
|
|
50
|
+
|
|
51
|
+
html5.dd = element dd { html5.dd.attlist & html5.dd.content }
|
|
52
|
+
html5.dd.phrasing = element dd { html5.dd.phrasing.content & html5.dd.attlist }
|
|
53
|
+
html5.dd.attlist = html5.global.attrs
|
|
54
|
+
html5.dd.content = html5.flow.model
|
|
55
|
+
html5.dd.phrasing.content = html5.phrasing.model
|
|
56
|
+
|
|
57
|
+
html5.div = element div { html5.div.attlist & html5.div.content }
|
|
58
|
+
html5.div.attlist = html5.grouping.attrs
|
|
59
|
+
html5.div.content = html5.flow.model
|
|
60
|
+
|
|
61
|
+
html5.figure = element figure { html5.figure.attlist & html5.figure.content }
|
|
62
|
+
html5.figure.attlist = html5.grouping.attrs
|
|
63
|
+
html5.figure.content = ( html5.figcaption, html5.flow.model ) | ( html5.flow.model, html5.figcaption? )
|
|
64
|
+
|
|
65
|
+
html5.figcaption = element figcaption { html5.figcaption.attlist & html5.figcaption.content }
|
|
66
|
+
html5.figcaption.attlist = html5.global.attrs
|
|
67
|
+
html5.figcaption.content = html5.flow.model
|
|
68
|
+
|
|
69
|
+
html5.table = element table { table.attlist & table.content }
|
|
70
|
+
table.attlist &= html5.grouping.attrs & html5.table.border.attr?
|
|
71
|
+
html5.table.border.attr = attribute border { '1' | '' }
|
|
72
|
+
table.content = (html5.caption?, html5.colgroup*, html5.thead?,
|
|
73
|
+
((html5.tfoot, ( html5.tbody* | html5.tr+ ))|(( html5.tbody* | html5.tr+ ), html5.tfoot?)))
|
|
74
|
+
|
|
75
|
+
html5.caption = element caption { html5.caption.attlist & html5.caption.content }
|
|
76
|
+
html5.caption.attlist &= html5.global.attrs
|
|
77
|
+
html5.caption.content = html5.flow.model
|
|
78
|
+
|
|
79
|
+
html5.colgroup = element colgroup { html5.colgroup.attlist & html5.colgroup.content }
|
|
80
|
+
html5.colgroup.attlist &= html5.global.attrs
|
|
81
|
+
html5.colgroup.content = html5.col* | html5.colspan.col.span.attr?
|
|
82
|
+
|
|
83
|
+
html5.col = element col { html5.col.attlist }
|
|
84
|
+
html5.col.attlist &= html5.global.attrs & html5.colspan.col.span.attr?
|
|
85
|
+
|
|
86
|
+
html5.thead = element thead { html5.thead.attlist & html5.thead.content }
|
|
87
|
+
html5.thead.attlist &= html5.grouping.attrs
|
|
88
|
+
html5.thead.content = html5.tr*
|
|
89
|
+
|
|
90
|
+
html5.tfoot = element tfoot { html5.tfoot.attlist & html5.tfoot.content }
|
|
91
|
+
html5.tfoot.attlist &= ( html5.grouping.attrs )
|
|
92
|
+
html5.tfoot.content = ( html5.tr* )
|
|
93
|
+
|
|
94
|
+
html5.tbody = element tbody { html5.tbody.attlist & html5.tbody.content }
|
|
95
|
+
html5.tbody.attlist &= ( html5.grouping.attrs )
|
|
96
|
+
html5.tbody.content = ( html5.tr* )
|
|
97
|
+
|
|
98
|
+
html5.tr = element tr { html5.tr.attlist & html5.tr.content }
|
|
99
|
+
html5.tr.attlist &= html5.grouping.attrs
|
|
100
|
+
html5.tr.content = ( html5.td | html5.th )*
|
|
101
|
+
|
|
102
|
+
html5.td = element td { html5.td.attlist & html5.td.content }
|
|
103
|
+
html5.td.attlist &= html5.global.attrs & html5.table.colspan.attr? & html5.table.rowspan.attr? & html5.table.headers.attr?
|
|
104
|
+
html5.td.content = ( html5.flow.model )
|
|
105
|
+
|
|
106
|
+
html5.th = element th { html5.th.content & html5.th.attlist }
|
|
107
|
+
html5.th.attlist &= html5.global.attrs & html5.table.colspan.attr? & html5.table.rowspan.attr? & html5.table.scope.attr? & html5.table.headers.attr?
|
|
108
|
+
html5.th.content = html5.phrasing.model
|
|
109
|
+
|
|
110
|
+
html5.colspan.col.span.attr = attribute span { datatype.positive.integer }
|
|
111
|
+
html5.table.colspan.attr = attribute colspan { datatype.positive.integer }
|
|
112
|
+
html5.table.rowspan.attr = attribute rowspan { datatype.non-negative.integer }
|
|
113
|
+
html5.table.headers.attr = attribute headers { datatype.IDREFS }
|
|
114
|
+
html5.table.scope.attr = attribute scope { 'row' | 'col' | 'rowgroup' | 'colgroup' }
|
|
115
|
+
html5.table.abbr.attr = attribute abbr { string }
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
html5.flow.class |= html5.interactive.flow.class
|
|
4
|
+
html5.phrasing.class |= html5.interactive.phrasing.class
|
|
5
|
+
html5.metadata.class |= html5.interactive.metadata.class
|
|
6
|
+
|
|
7
|
+
html5.interactive.phrasing.class |= html5.command.class | html5.progress
|
|
8
|
+
html5.interactive.flow.class |= html5.menu | html5.details
|
|
9
|
+
html5.interactive.metadata.class |= html5.command.class
|
|
10
|
+
|
|
11
|
+
html5.command.class |= html5.command.command | html5.command.radio | html5.command.checkbox
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
html5.html.attlist &= html5.interactive.manifest.attr?
|
|
15
|
+
html5.global.attrs &= html5.interactive.global.attrs
|
|
16
|
+
|
|
17
|
+
html5.interactive.global.attrs &= html5.interactive.contextmenu.attr?
|
|
18
|
+
& html5.interactive.contenteditable.attr? & html5.interactive.draggable.attr?
|
|
19
|
+
& html5.interactive.hidden.attr? & html5.interactive.spellcheck.attr?
|
|
20
|
+
& html5.interactive.accesskey.attr? & html5.interactive.tabindex.attr? & html5.interactive.dropzone.attr?
|
|
21
|
+
|
|
22
|
+
html5.progress = element progress { html5.progress.attlist & html5.progress.content }
|
|
23
|
+
html5.progress.attlist &= html5.phrasing.attrs & html5.progress.value.attr? & html5.progress.max.attr?
|
|
24
|
+
html5.progress.value.attr = attribute value { datatype.float.non-negative }
|
|
25
|
+
html5.progress.max.attr = attribute max { datatype.float.positive }
|
|
26
|
+
html5.progress.content = html5.phrasing.model
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
html5.command.command = element command { html5.command.command.attlist }
|
|
30
|
+
html5.command.command.attlist &= html5.phrasing.attrs & html5.command.command.type.attr? & html5.common-command.attrs
|
|
31
|
+
html5.command.command.type.attr = attribute type { 'command' }
|
|
32
|
+
|
|
33
|
+
html5.command.checked.attr = attribute checked { 'checked' | '' }
|
|
34
|
+
|
|
35
|
+
html5.command.radio = element command { html5.command.radio.attlist }
|
|
36
|
+
html5.command.radio.attlist &= html5.phrasing.attrs & ( html5.command.radio.type.attr & html5.command.radio.radiogroup.attr & html5.command.checked.attr? ) & html5.common-command.attrs
|
|
37
|
+
html5.command.radio.type.attr = attribute type { 'radio' }
|
|
38
|
+
html5.command.radio.radiogroup.attr = attribute radiogroup { datatype.string }
|
|
39
|
+
|
|
40
|
+
html5.command.checkbox = element command { html5.command.checkbox.attlist }
|
|
41
|
+
html5.command.checkbox.attlist = html5.phrasing.attrs & ( html5.command.checkbox.type.attr & html5.command.checked.attr? ) & html5.common-command.attrs
|
|
42
|
+
html5.command.checkbox.type.attr = attribute type { 'checkbox' }
|
|
43
|
+
|
|
44
|
+
html5.common-command.attrs &= html5.command.label.attr? & html5.command.icon.attr? & html5.command.disabled.attr?
|
|
45
|
+
html5.command.label.attr = attribute label { string }
|
|
46
|
+
html5.command.icon.attr = attribute icon { datatype.html5.URL.spaces }
|
|
47
|
+
html5.command.disabled.attr = attribute disabled { 'disabled' |'' }
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
html5.menu = element menu { html5.menu.attlist & html5.menu.content }
|
|
51
|
+
html5.menu.attlist &= html5.global.attrs & html5.menu.type.attr? & html5.menu.label.attr?
|
|
52
|
+
html5.menu.type.attr = attribute type { 'toolbar' | 'context' }
|
|
53
|
+
html5.menu.label.attr = attribute label { string }
|
|
54
|
+
html5.menu.content = ( html5.mli* | html5.flow.model )
|
|
55
|
+
|
|
56
|
+
html5.mli = element li { html5.mli.attlist & html5.mli.content }
|
|
57
|
+
html5.mli.attlist &= html5.global.attrs
|
|
58
|
+
html5.mli.content = html5.flow.model
|
|
59
|
+
|
|
60
|
+
html5.details = element details { html5.details.attlist & html5.details.content }
|
|
61
|
+
html5.details.attlist &= html5.global.attrs & html5.details.open.attr?
|
|
62
|
+
html5.details.open.attr = attribute open { 'open' | '' }
|
|
63
|
+
html5.details.content = html5.summary?, html5.flow.model
|
|
64
|
+
|
|
65
|
+
html5.summary = element summary { html5.summary.attlist & html5.summary.content }
|
|
66
|
+
html5.summary.attlist &= html5.global.attrs
|
|
67
|
+
html5.summary.content = html5.phrasing.model
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
html5.interactive.manifest.attr = attribute manifest { datatype.html5.URL.spaces }
|
|
71
|
+
|
|
72
|
+
html5.interactive.contextmenu.attr = attribute contextmenu { datatype.IDREF }
|
|
73
|
+
html5.interactive.contenteditable.attr = attribute contenteditable { 'true' | 'false' | '' }
|
|
74
|
+
html5.interactive.draggable.attr = attribute draggable { 'true' | 'false' }
|
|
75
|
+
html5.interactive.hidden.attr = attribute hidden { 'hidden' | '' }
|
|
76
|
+
html5.interactive.spellcheck.attr = attribute spellcheck { 'true' | 'false' | '' }
|
|
77
|
+
html5.interactive.accesskey.attr = attribute accesskey { datatype.html5.accesskey }
|
|
78
|
+
html5.interactive.tabindex.attr = attribute tabindex { datatype.integer }
|
|
79
|
+
html5.interactive.dropzone.attr = attribute dropzone { list {
|
|
80
|
+
( xsd:string { pattern = "[sS]:.+" } | xsd:string { pattern = "[fF]:.+" })*,
|
|
81
|
+
( 'copy' | 'move' | 'link' )?,
|
|
82
|
+
( xsd:string { pattern = "[sS]:.+" } | xsd:string { pattern = "[fF]:.+" })*
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
html5.flow.model = html5.flow.model.html5
|
|
4
|
+
html5.flow.model.html5 = html5.flow.class*
|
|
5
|
+
|
|
6
|
+
html5.grouping.model = html5.grouping.class+
|
|
7
|
+
html5.phrasing.model = html5.phrasing.class+
|
|
8
|
+
|
|
9
|
+
html5.section.model = html5.section.model.html5
|
|
10
|
+
html5.section.model.html5 = html5.flow.model
|