]> code.delx.au - gnu-emacs-elpa/blob - packages/html5-schema/media.rnc
Merge commit '0cda39255827f283e7578cd469ae42daad9556a2' from js2-mode
[gnu-emacs-elpa] / packages / html5-schema / media.rnc
1 datatypes w = "http://whattf.org/datatype-draft"
2
3 # #####################################################################
4 ## RELAX NG Schema for HTML 5: Advanced Embedded Content #
5 # #####################################################################
6
7 ## Attributes Common to Media Elements
8
9 # src not included
10 media.attrs =
11 ( media.attrs.autoplay?
12 & media.attrs.preload?
13 & media.attrs.controls?
14 & media.attrs.loop?
15 & media.attrs.mediagroup?
16 & media.attrs.muted?
17 & embedded.content.attrs.crossorigin?
18 )
19 media.attrs.autoplay =
20 attribute autoplay {
21 w:string "autoplay" | w:string ""
22 }
23 media.attrs.preload =
24 attribute preload {
25 w:string "none" | w:string "metadata" | w:string "auto" | w:string ""
26 }
27 media.attrs.controls =
28 attribute controls {
29 w:string "controls" | w:string ""
30 }
31 media.attrs.loop =
32 attribute loop {
33 w:string "loop" | w:string ""
34 }
35 media.attrs.mediagroup =
36 attribute mediagroup {
37 string
38 }
39 media.attrs.muted =
40 attribute muted {
41 w:string "muted" | w:string ""
42 }
43
44 ## Source: <source>
45
46 source.elem =
47 element source { source.inner & source.attrs }
48 source.attrs =
49 ( common.attrs
50 & source.attrs.src
51 & source.attrs.type?
52 & ( common.attrs.aria.role.presentation
53 | common.attrs.aria.role.menuitem
54 )?
55 )
56 source.attrs.src =
57 attribute src {
58 common.data.uri.non-empty
59 }
60 source.attrs.type =
61 attribute type {
62 common.data.mimetype
63 }
64 source.inner =
65 ( empty )
66
67 ## Media Source
68
69 media.source =
70 ( media.attrs.src
71 | source.elem*
72 )
73
74 media.attrs.src =
75 attribute src {
76 common.data.uri.non-empty
77 }
78
79 ## Video: <video>
80
81 video.elem.flow =
82 element video { video.inner.flow & video.attrs }
83 video.elem.phrasing =
84 element video { video.inner.phrasing & video.attrs }
85 video.attrs =
86 ( common.attrs
87 & media.attrs
88 & video.attrs.poster?
89 & video.attrs.height?
90 & video.attrs.width?
91 & common.attrs.aria.landmark.application?
92 )
93 video.attrs.poster =
94 attribute poster {
95 common.data.uri.non-empty
96 }
97 video.attrs.height =
98 attribute height {
99 common.data.integer.non-negative
100 }
101 video.attrs.width =
102 attribute width {
103 common.data.integer.non-negative
104 }
105 video.inner.flow =
106 ( media.source
107 , track.elem*
108 , common.inner.transparent.flow
109 )
110 video.inner.phrasing =
111 ( media.source
112 , track.elem*
113 , common.inner.phrasing
114 )
115
116 common.elem.flow |= video.elem.flow
117 common.elem.phrasing |= video.elem.phrasing
118
119 ## Audio: <audio>
120
121 audio.elem.flow =
122 element audio { audio.inner.flow & audio.attrs }
123 audio.elem.phrasing =
124 element audio { audio.inner.phrasing & audio.attrs }
125 audio.attrs =
126 ( common.attrs
127 & media.attrs
128 & common.attrs.aria.landmark.application?
129 )
130 audio.inner.flow =
131 ( media.source
132 , track.elem*
133 , common.inner.transparent.flow
134 )
135 audio.inner.phrasing =
136 ( media.source
137 , track.elem*
138 , common.inner.phrasing
139 )
140
141 common.elem.flow |= audio.elem.flow
142 common.elem.phrasing |= audio.elem.phrasing
143
144 ## supplementary media track: <track>
145 #
146 track.elem =
147 element track { track.inner & track.attrs }
148
149 track.attrs =
150 ( common.attrs
151 & track.attrs.kind?
152 & track.attrs.src
153 & track.attrs.srclang?
154 & track.attrs.label?
155 & track.attrs.default?
156 & ( common.attrs.aria.role.presentation
157 | common.attrs.aria.role.menuitem
158 )?
159 )
160 track.attrs.kind =
161 attribute kind {
162 w:string "subtitles" | w:string "captions" | w:string "descriptions" | w:string "chapters" | w:string "metadata"
163 }
164 track.attrs.src =
165 attribute src {
166 common.data.uri.non-empty
167 }
168 track.attrs.srclang =
169 attribute srclang {
170 common.data.langcode
171 }
172 track.attrs.label =
173 attribute label {
174 string # must be non-empty value; check is in assertions code
175 }
176 track.attrs.default =
177 attribute default {
178 w:string "default" | w:string ""
179 }
180
181 track.inner =
182 ( empty )
183
184 ## Captioned Content: <figure>
185
186 figure.elem =
187 element figure { figure.inner & figure.attrs }
188 figure.attrs =
189 ( common.attrs
190 & common.attrs.aria?
191 )
192 figure.inner =
193 ( ( figcaption.elem?, common.inner.flow )
194 | ( common.inner.flow, figcaption.elem? )
195 )
196
197 common.elem.flow |= figure.elem
198
199 ## Figure caption: <figcaption>
200
201 figcaption.elem =
202 element figcaption { figcaption.inner & figcaption.attrs }
203 figcaption.attrs =
204 ( common.attrs
205 & ( common.attrs.aria.role.presentation
206 | common.attrs.aria.role.menuitem
207 )?
208 )
209 figcaption.inner =
210 ( common.inner.flow )