]> code.delx.au - gnu-emacs-elpa/blob - packages/html5-schema/applications.rnc
Merge commit '0cda39255827f283e7578cd469ae42daad9556a2' from js2-mode
[gnu-emacs-elpa] / packages / html5-schema / applications.rnc
1 datatypes w = "http://whattf.org/datatype-draft"
2
3 # #####################################################################
4 ## RELAX NG Schema for HTML 5: Web Application Features #
5 # #####################################################################
6
7 ## Additions to Common Attributes
8
9 common.attrs.interact &=
10 ( common.attrs.contextmenu?
11 & common.attrs.contenteditable?
12 & common.attrs.draggable?
13 & common.attrs.dropzone?
14 & common.attrs.hidden?
15 & common.attrs.spellcheck?
16 )
17
18 common.attrs.other &= common.attrs.interact
19
20 ## Context Menu: contextmenu
21
22 common.attrs.contextmenu =
23 attribute contextmenu {
24 common.data.idref
25 }
26
27 ## Editable Content: contenteditable
28
29 common.attrs.contenteditable =
30 attribute contenteditable {
31 w:string "true" | w:string "false" | w:string ""
32 }
33
34 ## Draggable Element: draggable
35
36 common.attrs.draggable =
37 attribute draggable {
38 w:string "true" | w:string "false"
39 }
40
41 ## Dropzone: dropzone
42
43 common.attrs.dropzone =
44 attribute dropzone {
45 list {
46 ( xsd:string { pattern = "[sS][tT][rR][iI][nN][gG]:.+" }
47 | xsd:string { pattern = "[fF][iI][lL][eE]:.+" }
48 )*
49 ,
50 ( w:string "copy"
51 | w:string "move"
52 | w:string "link"
53 )?
54 ,
55 ( xsd:string { pattern = "[sS][tT][rR][iI][nN][gG]:.+" }
56 | xsd:string { pattern = "[fF][iI][lL][eE]:.+" }
57 )*
58 }
59 }
60
61 ## Hidden Element: hidden
62
63 common.attrs.hidden =
64 attribute hidden {
65 w:string "hidden" | w:string ""
66 }
67
68 ## Spellchecking and grammar checking: spellcheck
69
70 common.attrs.spellcheck =
71 attribute spellcheck{
72 w:string "true" | w:string "false" | w:string ""
73 }
74
75 ## Application Cache: manifest
76
77 html.attrs.manifest =
78 attribute manifest {
79 common.data.uri.non-empty
80 }
81
82 html.attrs &= html.attrs.manifest?
83
84 ## Progess Indicator: <progress>
85
86 progress.elem =
87 element progress { progress.inner & progress.attrs }
88 progress.attrs =
89 ( common.attrs
90 & progress.attrs.value?
91 & progress.attrs.max?
92 & ( common.attrs.aria.implicit.progressbar
93 | common.attrs.aria.role.progressbar
94 )?
95 )
96 progress.attrs.value =
97 attribute value {
98 common.data.float.non-negative
99 }
100 progress.attrs.max =
101 attribute max {
102 common.data.float.positive
103 }
104 progress.inner =
105 ( common.inner.phrasing ) #Cannot enforce textContent format here
106
107 common.elem.phrasing |= progress.elem
108
109 ## Dialog box, inspector, or window: <dialog>
110 dialog.elem =
111 element dialog { dialog.inner & dialog.attrs }
112 dialog.attrs =
113 ( common.attrs
114 & dialog.attrs.open?
115 & ( common.attrs.aria.implicit.dialog
116 | common.attrs.aria.role.alert
117 | common.attrs.aria.role.alertdialog
118 | common.attrs.aria.role.contentinfo
119 | common.attrs.aria.role.dialog
120 | common.attrs.aria.role.log
121 | common.attrs.aria.role.marquee
122 | common.attrs.aria.role.region
123 | common.attrs.aria.role.status
124 | common.attrs.aria.landmark.application
125 | common.attrs.aria.landmark.document
126 | common.attrs.aria.landmark.main
127 | common.attrs.aria.landmark.search
128 )?
129 )
130 dialog.attrs.open =
131 attribute open {
132 w:string "open" | w:string ""
133 }
134 dialog.inner =
135 ( common.inner.flow )
136 common.elem.flow |= dialog.elem
137
138 ## Toolbar: <menu type=toolbar>
139
140 menu.toolbar.elem =
141 element menu { menu.toolbar.inner & menu.toolbar.attrs }
142 menu.toolbar.attrs =
143 ( common.attrs
144 & menu.toolbar.attrs.type?
145 & ( common.attrs.aria.implicit.toolbar
146 | common.attrs.aria.role.directory
147 | common.attrs.aria.role.list
148 | common.attrs.aria.role.listbox
149 | common.attrs.aria.role.menu
150 | common.attrs.aria.role.menubar
151 | common.attrs.aria.role.tablist
152 | common.attrs.aria.role.toolbar
153 | common.attrs.aria.role.tree
154 | common.attrs.aria.role.presentation
155 )?
156 )
157 menu.toolbar.attrs.type =
158 attribute type {
159 w:string "toolbar"
160 }
161 menu.toolbar.inner =
162 ( mli.elem*
163 | common.inner.flow
164 )
165 menu.elem |= menu.toolbar.elem
166
167 ## Toolbar item: <li>
168
169 mli.elem =
170 element li { mli.inner & mli.attrs }
171 mli.attrs =
172 ( common.attrs
173 & ( ( common.attrs.aria.role.listitem
174 | common.attrs.aria.role.menuitem
175 | common.attrs.aria.role.menuitemcheckbox
176 | common.attrs.aria.role.menuitemradio
177 | common.attrs.aria.role.option
178 | common.attrs.aria.role.tab
179 | common.attrs.aria.role.treeitem
180 | common.attrs.aria.role.presentation
181 )
182 )?
183 )
184 mli.inner =
185 ( common.inner.flow )
186
187 ## Popup menu: <menu type=popup>
188
189 menu.popup.elem =
190 element menu { menu.popup.inner & menu.popup.attrs }
191 menu.popup.attrs =
192 ( common.attrs
193 & menu.popup.attrs.type?
194 & menu.attrs.label?
195 & common.attrs.aria?
196 )
197 menu.popup.attrs.type =
198 attribute type {
199 w:string "popup"
200 }
201 menu.attrs.label =
202 attribute label {
203 string
204 }
205 menu.popup.inner =
206 ( menuitem.elem*
207 & hr.elem*
208 & menu.popup.elem*
209 & common.elem.script-supporting*
210 )
211 menu.elem |= menu.popup.elem
212
213 ## Ambiguous menu: <menu> (with no "type" attribute)
214 menu.ambiguous.elem =
215 element menu { menu.ambiguous.inner & menu.ambiguous.attrs }
216 menu.ambiguous.attrs =
217 ( common.attrs
218 & menu.attrs.label?
219 & common.attrs.aria?
220 )
221 menu.ambiguous.inner =
222 ( ( menuitem.elem*
223 & hr.elem*
224 & menu.ambiguous.elem*
225 & common.elem.script-supporting*
226 )
227 | ( mli.elem*
228 | common.inner.flow
229 )
230 )
231 menu.elem |= menu.ambiguous.elem
232
233 common.elem.flow |= menu.elem
234 # REVISIT allow nested menus
235
236 ## Explicit command in popup menu: <menuitem type=command>
237 menuitem.explicit.command.elem =
238 element menuitem { menuitem.inner & menuitem.explicit.command.attrs }
239 menuitem.explicit.command.attrs =
240 ( common.attrs
241 & menuitem.explicit.command.attrs.type?
242 & menuitem.attrs.label?
243 & menuitem.attrs.icon?
244 & menuitem.attrs.disabled?
245 & menuitem.attrs.default?
246 & common.attrs.aria?
247 )
248 menuitem.explicit.command.attrs.type =
249 attribute type {
250 w:string "command"
251 }
252 menuitem.attrs.label =
253 attribute label {
254 w:non-empty-string
255 }
256 menuitem.attrs.icon =
257 attribute icon {
258 common.data.uri.non-empty
259 }
260 menuitem.attrs.disabled =
261 attribute disabled {
262 w:string "" | w:string "disabled"
263 }
264 menuitem.attrs.default =
265 attribute default {
266 w:string "" | w:string "default"
267 }
268 menuitem.elem |= menuitem.explicit.command.elem
269
270 ## Checkbox in popup menu: <menuitem type=checkbox>
271 menuitem.checkbox.elem =
272 element menuitem { menuitem.inner & menuitem.checkbox.attrs }
273 menuitem.checkbox.attrs =
274 ( common.attrs
275 & menuitem.checkbox.attrs.type
276 & menuitem.attrs.label?
277 & menuitem.attrs.icon?
278 & menuitem.attrs.disabled?
279 & menuitem.attrs.checked?
280 & menuitem.attrs.radiogroup?
281 & menuitem.attrs.default?
282 & common.attrs.aria?
283 )
284 menuitem.checkbox.attrs.type =
285 attribute type {
286 w:string "checkbox"
287 }
288 menuitem.attrs.checked =
289 attribute checked {
290 w:string "checked" | w:string ""
291 }
292 menuitem.attrs.radiogroup =
293 attribute radiogroup {
294 string
295 }
296 menuitem.elem |= menuitem.checkbox.elem
297
298 ## Radio button in popup menu: <menuitem type=radio>
299 menuitem.radio.elem =
300 element menuitem { menuitem.inner & menuitem.radio.attrs }
301 menuitem.radio.attrs =
302 ( common.attrs
303 & menuitem.radio.attrs.type
304 & menuitem.attrs.label?
305 & menuitem.attrs.icon?
306 & menuitem.attrs.disabled?
307 & menuitem.attrs.checked?
308 & menuitem.attrs.radiogroup?
309 & menuitem.attrs.default?
310 & common.attrs.aria?
311 )
312 menuitem.radio.attrs.type =
313 attribute type {
314 w:string "radio"
315 }
316 menuitem.elem |= menuitem.radio.elem
317
318 ## Indirect command in popup menu: <menuitem command>
319 menuitem.indirect.command.elem =
320 element menuitem { menuitem.inner & menuitem.indirect.command.attrs }
321 menuitem.indirect.command.attrs =
322 ( common.attrs
323 & menuitem.attrs.default?
324 & menuitem.attrs.command
325 & common.attrs.aria?
326 )
327 menuitem.attrs.command =
328 attribute command {
329 common.data.idref
330 }
331 menuitem.elem |= menuitem.indirect.command.elem
332
333 menuitem.inner =
334 ( empty )
335
336 ## Canvas for Dynamic Graphics: <canvas>
337
338 canvas.elem.flow =
339 element canvas { canvas.inner.flow & canvas.attrs }
340 canvas.elem.phrasing =
341 element canvas { canvas.inner.phrasing & canvas.attrs }
342 canvas.attrs =
343 ( common.attrs
344 & canvas.attrs.height?
345 & canvas.attrs.width?
346 & common.attrs.aria?
347 )
348 canvas.attrs.height =
349 attribute height {
350 common.data.integer.non-negative
351 }
352 canvas.attrs.width =
353 attribute width {
354 common.data.integer.non-negative
355 }
356 canvas.inner.flow =
357 ( common.inner.transparent.flow )
358 canvas.inner.phrasing =
359 ( common.inner.phrasing )
360
361 common.elem.flow |= canvas.elem.flow
362 common.elem.phrasing |= canvas.elem.phrasing
363
364 ## Additional On-Demand Information: <details>
365
366 details.elem =
367 element details { details.inner & details.attrs }
368 details.attrs =
369 ( common.attrs
370 & details.attrs.open?
371 & ( common.attrs.aria.implicit.group # aria-expanded must be true if open attr present; check by assertions
372 | common.attrs.aria.role.group
373 )?
374 )
375 details.attrs.open =
376 attribute open {
377 w:string "open" | w:string ""
378 }
379 details.inner =
380 ( summary.elem
381 , common.inner.flow
382 )
383
384 common.elem.flow |= details.elem
385
386 ## Caption/summary for details element: <summary>
387
388 summary.elem =
389 element summary { summary.inner & summary.attrs }
390 summary.attrs =
391 ( common.attrs
392 & ( common.attrs.aria.implicit.button
393 | common.attrs.aria.role.button
394 )?
395 )
396 summary.inner =
397 ( common.inner.phrasing
398 | h1.elem
399 | h2.elem
400 | h3.elem
401 | h4.elem
402 | h5.elem
403 | h6.elem
404 | hgroup.elem
405 )