1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# Simplified Forms Module
form =
element form {
form.attlist,
# Don't use Block.model, because this gets redefined by the
# legacy module.
Block.class+
}
form.attlist =
Common.attrib,
attribute action { URI.datatype },
attribute method { "get" | "post" }?,
attribute enctype { ContentType.datatype }?
label = element label { label.attlist, Inline.model }
label.attlist =
Common.attrib,
attribute for { IDREF.datatype }?,
attribute accesskey { Character.datatype }?
input = element input { input.attlist }
input.attlist =
Common.attrib,
attribute type { InputType.class }?,
attribute name { text }?,
attribute value { text }?,
attribute checked { "checked" }?,
attribute size { text }?,
attribute maxlength { Number.datatype }?,
attribute src { URI.datatype }?,
attribute accesskey { Character.datatype }?
InputType.class =
"text"
| "password"
| "checkbox"
| "radio"
| "submit"
| "reset"
| "hidden"
select = element select { select.attlist, option+ }
select.attlist =
Common.attrib,
attribute name { text }?,
attribute size { Number.datatype }?,
attribute multiple { "multiple" }?
option =
element option {
Common.attrib,
attribute selected { "selected" }?,
attribute value { text }?,
text
}
textarea = element textarea { textarea.attlist }
textarea.attlist =
Common.attrib,
attribute name { text }?,
attribute rows { Number.datatype },
attribute cols { Number.datatype },
attribute accesskey { Character.datatype }?,
text
Form.class = form
Formctrl.class = input | label | select | textarea
Block.class |= Form.class
Inline.class |= Formctrl.class
|