]> code.delx.au - gnu-emacs-elpa/blob - phrase.rnc
Refine some ARIA checking to sync w/ current spec
[gnu-emacs-elpa] / phrase.rnc
1 datatypes w = "http://whattf.org/datatype-draft"
2
3 # #####################################################################
4 ## RELAX NG Schema for HTML 5: Phrase Markup #
5 # #####################################################################
6
7 ## Contextual Hyperlink: <a>
8
9 a.elem.phrasing =
10 element a { a.inner.phrasing & a.attrs }
11 a.elem.flow =
12 element a { a.inner.flow & a.attrs }
13 a.attrs =
14 ( common.attrs.basic
15 & common.attrs.i18n
16 & common.attrs.present
17 & common.attrs.other
18 & a.attrs.name?
19 & shared-hyperlink.attrs.download?
20 & shared-hyperlink.attrs.href?
21 & shared-hyperlink.attrs.target?
22 & shared-hyperlink.attrs.rel?
23 & shared-hyperlink.attrs.hreflang?
24 & shared-hyperlink.attrs.type?
25 & shared-hyperlink.attrs.ping?
26 & ( common.attrs.aria.implicit.link
27 | common.attrs.aria.role.button
28 | common.attrs.aria.role.checkbox
29 | common.attrs.aria.role.link
30 | common.attrs.aria.role.menuitem
31 | common.attrs.aria.role.menuitemcheckbox
32 | common.attrs.aria.role.menuitemradio
33 | common.attrs.aria.role.tab
34 | common.attrs.aria.role.treeitem
35 )?
36 )
37 a.attrs.name =
38 attribute name {
39 common.data.id # XXX not what the spec says
40 }
41 a.inner.phrasing =
42 ( common.inner.phrasing )
43 a.inner.flow =
44 ( common.inner.transparent.flow )
45
46 common.elem.phrasing |= a.elem.phrasing
47 common.elem.flow |= a.elem.flow
48
49 ## Shared hyperlink attributes
50
51 shared-hyperlink.attrs.download =
52 attribute download {
53 string
54 }
55 shared-hyperlink.attrs.href =
56 attribute href {
57 common.data.uri
58 }
59 shared-hyperlink.attrs.target =
60 attribute target {
61 common.data.browsing-context-or-keyword
62 }
63 shared-hyperlink.attrs.rel =
64 attribute rel {
65 w:a-rel
66 }
67 shared-hyperlink.attrs.hreflang =
68 attribute hreflang {
69 common.data.langcode
70 }
71 shared-hyperlink.attrs.media =
72 attribute media {
73 common.data.mediaquery
74 }
75 shared-hyperlink.attrs.type =
76 attribute type {
77 common.data.mimetype
78 }
79 shared-hyperlink.attrs.ping =
80 attribute ping {
81 common.data.uris
82 } & v5only
83
84 ## Emphatic Stress: <em>
85
86 em.elem =
87 element em { em.inner & em.attrs }
88 em.attrs =
89 ( common.attrs
90 & common.attrs.aria?
91 )
92 em.inner =
93 ( common.inner.phrasing )
94
95 common.elem.phrasing |= em.elem
96
97 ## Strong Importance: <strong>
98
99 strong.elem =
100 element strong { strong.inner & strong.attrs }
101 strong.attrs =
102 ( common.attrs
103 & common.attrs.aria?
104 )
105 strong.inner =
106 ( common.inner.phrasing )
107
108 common.elem.phrasing |= strong.elem
109
110 ## Small Print and Side Comments: <small>
111
112 small.elem =
113 element small { small.inner & small.attrs }
114 small.attrs =
115 ( common.attrs
116 & common.attrs.aria?
117 )
118 small.inner =
119 ( common.inner.phrasing )
120
121 common.elem.phrasing |= small.elem
122
123 ## Marked (Highlighted) Text: <mark>
124
125 mark.elem =
126 element mark { mark.inner & mark.attrs }
127 & v5only
128 mark.attrs =
129 ( common.attrs
130 & ( common.attrs.aria.role.presentation
131 | common.attrs.aria.role.menuitem
132 )?
133 )
134 mark.inner =
135 ( common.inner.phrasing )
136
137 common.elem.phrasing |= mark.elem
138
139 ## Abbreviation: <abbr>
140
141 abbr.elem =
142 element abbr { abbr.inner & abbr.attrs }
143 abbr.attrs =
144 ( common.attrs
145 # abbr.attrs.title included in common.attrs
146 & common.attrs.aria?
147 )
148 abbr.inner =
149 ( common.inner.phrasing )
150
151 common.elem.phrasing |= abbr.elem
152
153 ## Defining Instance: <dfn>
154
155 dfn.elem =
156 element dfn { dfn.inner & dfn.attrs }
157 dfn.attrs =
158 ( common.attrs
159 # dfn.attrs.title included in common.attrs
160 & common.attrs.aria?
161 )
162 dfn.inner =
163 ( common.inner.phrasing )
164
165 common.elem.phrasing |= dfn.elem
166
167 ## Italic: <i>
168
169 i.elem =
170 element i { i.inner & i.attrs }
171 i.attrs =
172 ( common.attrs
173 & common.attrs.aria?
174 )
175 i.inner =
176 ( common.inner.phrasing )
177
178 common.elem.phrasing |= i.elem
179
180 ## Bold: <b>
181
182 b.elem =
183 element b { b.inner & b.attrs }
184 b.attrs =
185 ( common.attrs
186 & common.attrs.aria?
187 )
188 b.inner =
189 ( common.inner.phrasing )
190
191 common.elem.phrasing |= b.elem
192
193 ## Struck Text: <s>
194
195 s.elem =
196 element s { s.inner & s.attrs }
197 s.attrs =
198 ( common.attrs
199 & common.attrs.aria?
200 )
201 s.inner =
202 ( common.inner.phrasing )
203
204 common.elem.phrasing |= s.elem
205
206 ## Underline: <u>
207
208 u.elem =
209 element u { u.inner & u.attrs }
210 u.attrs =
211 ( common.attrs
212 & common.attrs.aria?
213 )
214 u.inner =
215 ( common.inner.phrasing )
216
217 common.elem.phrasing |= u.elem
218
219 ## Code Fragment: <code>
220
221 code.elem =
222 element code { code.inner & code.attrs }
223 code.attrs =
224 ( common.attrs
225 & common.attrs.aria?
226 )
227 code.inner =
228 ( common.inner.phrasing )
229
230 common.elem.phrasing |= code.elem
231
232 ## Variable or Placeholder: <var>
233
234 var.elem =
235 element var { var.inner & var.attrs }
236 var.attrs =
237 ( common.attrs
238 & common.attrs.aria?
239 )
240 var.inner =
241 ( common.inner.phrasing )
242
243 common.elem.phrasing |= var.elem
244
245 ## (Sample) Output: <samp>
246
247 samp.elem =
248 element samp { samp.inner & samp.attrs }
249 samp.attrs =
250 ( common.attrs
251 & common.attrs.aria?
252 )
253 samp.inner =
254 ( common.inner.phrasing )
255
256 common.elem.phrasing |= samp.elem
257
258 ## User Input: <kbd>
259
260 kbd.elem =
261 element kbd { kbd.inner & kbd.attrs }
262 kbd.attrs =
263 ( common.attrs
264 & common.attrs.aria?
265 )
266 kbd.inner =
267 ( common.inner.phrasing )
268
269 common.elem.phrasing |= kbd.elem
270
271 ## Superscript: <sup>
272
273 sup.elem =
274 element sup { sup.inner & sup.attrs }
275 sup.attrs =
276 ( common.attrs
277 & common.attrs.aria?
278 )
279 sup.inner =
280 ( common.inner.phrasing )
281
282 common.elem.phrasing |= sup.elem
283
284 ## Subscript: <sub>
285
286 sub.elem =
287 element sub { sub.inner & sub.attrs }
288 sub.attrs =
289 ( common.attrs
290 & common.attrs.aria?
291 )
292 sub.inner =
293 ( common.inner.phrasing )
294
295 common.elem.phrasing |= sub.elem
296
297 ## Quotation: <q>
298
299 q.elem =
300 element q { q.inner & q.attrs }
301 q.attrs =
302 ( common.attrs
303 & q.attrs.cite?
304 & common.attrs.aria?
305 )
306 q.attrs.cite =
307 attribute cite {
308 common.data.uri
309 }
310 q.inner =
311 ( common.inner.phrasing )
312
313 common.elem.phrasing |= q.elem
314
315 ## Title of Work: <cite>
316
317 cite.elem =
318 element cite { cite.inner & cite.attrs }
319 cite.attrs =
320 ( common.attrs
321 & common.attrs.aria?
322 )
323 cite.inner =
324 ( common.inner.phrasing )
325
326 common.elem.phrasing |= cite.elem
327
328 ## Generic Span: <span>
329
330 span.elem =
331 element span { span.inner & span.attrs }
332 span.attrs =
333 ( common.attrs
334 & common.attrs.aria?
335 )
336 span.inner =
337 ( common.inner.phrasing ) # REVISIT allow ol and ul?
338
339 common.elem.phrasing |= span.elem
340
341 ## Bidirectional Override: <bdo>
342
343 bdo.elem =
344 element bdo { bdo.inner & bdo.attrs }
345 bdo.attrs =
346 ( common.attrs # dir required in Schematron
347 & ( common.attrs.aria.role.presentation
348 | common.attrs.aria.role.menuitem
349 )?
350 )
351 bdo.inner =
352 ( common.inner.phrasing )
353
354 common.elem.phrasing |= bdo.elem
355
356 ## Bidirectional Isolate: <bdi>
357
358 bdi.elem =
359 element bdi { bdi.inner & bdi.attrs }
360 bdi.attrs =
361 ( common.attrs
362 & ( common.attrs.aria.role.presentation
363 | common.attrs.aria.role.menuitem
364 )?
365 )
366 bdi.inner =
367 ( common.inner.phrasing )
368
369 common.elem.phrasing |= bdi.elem
370
371 ## Line Break: <br>
372
373 br.elem =
374 element br { br.inner & br.attrs }
375 br.attrs =
376 ( common.attrs
377 & ( common.attrs.aria.role.presentation
378 | common.attrs.aria.role.menuitem
379 )?
380 )
381 br.inner =
382 ( empty )
383
384 common.elem.phrasing |= br.elem
385
386 ## Line-break opportunity: <wbr>
387
388 wbr.elem =
389 element wbr { wbr.inner & wbr.attrs }
390 wbr.attrs =
391 ( common.attrs
392 & ( common.attrs.aria.role.presentation
393 | common.attrs.aria.role.menuitem
394 )?
395 )
396 wbr.inner =
397 ( empty )
398
399 common.elem.phrasing |= wbr.elem