OCaml HTML5 parser/serialiser based on Python's JustHTML
1open Content_category
2open Content_model
3
4let a =
5 Element_spec.make ~name:"a"
6 ~categories:[Flow; Phrasing; Interactive; Palpable]
7 ~content_model:(Except (Transparent, [Interactive]))
8 ~attrs:[
9 Attr_spec.make "href" ~datatype:"url" ();
10 Attr_spec.make "target" ~datatype:"target" ();
11 Attr_spec.make "download" ~datatype:"string" ();
12 Attr_spec.make "ping" ~datatype:"string" ();
13 Attr_spec.make "referrerpolicy" ~datatype:"referrerpolicy" ();
14 Attr_spec.make "rel" ~datatype:"relationship" ();
15 Attr_spec.make "hreflang" ~datatype:"string" ();
16 Attr_spec.make "type" ~datatype:"mimetype" ();
17 ]
18 ~implicit_aria_role:"link"
19 ()
20
21let em =
22 Element_spec.make ~name:"em"
23 ~categories:[Flow; Phrasing; Palpable]
24 ~content_model:(Categories [Phrasing])
25 ()
26
27let strong =
28 Element_spec.make ~name:"strong"
29 ~categories:[Flow; Phrasing; Palpable]
30 ~content_model:(Categories [Phrasing])
31 ()
32
33let small =
34 Element_spec.make ~name:"small"
35 ~categories:[Flow; Phrasing; Palpable]
36 ~content_model:(Categories [Phrasing])
37 ()
38
39let s =
40 Element_spec.make ~name:"s"
41 ~categories:[Flow; Phrasing; Palpable]
42 ~content_model:(Categories [Phrasing])
43 ()
44
45let cite =
46 Element_spec.make ~name:"cite"
47 ~categories:[Flow; Phrasing; Palpable]
48 ~content_model:(Categories [Phrasing])
49 ()
50
51let q =
52 Element_spec.make ~name:"q"
53 ~categories:[Flow; Phrasing; Palpable]
54 ~content_model:(Categories [Phrasing])
55 ~attrs:[
56 Attr_spec.make "cite" ~datatype:"url" ();
57 ]
58 ()
59
60let dfn =
61 Element_spec.make ~name:"dfn"
62 ~categories:[Flow; Phrasing; Palpable]
63 ~content_model:(Except (Categories [Phrasing], []))
64 ~prohibited_ancestors:["dfn"]
65 ()
66
67let abbr =
68 Element_spec.make ~name:"abbr"
69 ~categories:[Flow; Phrasing; Palpable]
70 ~content_model:(Categories [Phrasing])
71 ()
72
73let ruby =
74 Element_spec.make ~name:"ruby"
75 ~categories:[Flow; Phrasing; Palpable]
76 ~content_model:(Categories [Phrasing])
77 ()
78
79let rt =
80 Element_spec.make ~name:"rt"
81 ~categories:[Phrasing]
82 ~content_model:(Categories [Phrasing])
83 ~permitted_parents:["ruby"; "rtc"]
84 ()
85
86let rp =
87 Element_spec.make ~name:"rp"
88 ~categories:[]
89 ~content_model:Text
90 ~permitted_parents:["ruby"; "rtc"]
91 ()
92
93let data =
94 Element_spec.make ~name:"data"
95 ~categories:[Flow; Phrasing; Palpable]
96 ~content_model:(Categories [Phrasing])
97 ~attrs:[
98 Attr_spec.make "value" ~required:true ~datatype:"string" ();
99 ]
100 ()
101
102let time =
103 Element_spec.make ~name:"time"
104 ~categories:[Flow; Phrasing; Palpable]
105 ~content_model:(Categories [Phrasing])
106 ~attrs:[
107 Attr_spec.make "datetime" ~datatype:"datetime" ();
108 ]
109 ~prohibited_ancestors:["time"]
110 ()
111
112let code =
113 Element_spec.make ~name:"code"
114 ~categories:[Flow; Phrasing; Palpable]
115 ~content_model:(Categories [Phrasing])
116 ()
117
118let var =
119 Element_spec.make ~name:"var"
120 ~categories:[Flow; Phrasing; Palpable]
121 ~content_model:(Categories [Phrasing])
122 ()
123
124let samp =
125 Element_spec.make ~name:"samp"
126 ~categories:[Flow; Phrasing; Palpable]
127 ~content_model:(Categories [Phrasing])
128 ()
129
130let kbd =
131 Element_spec.make ~name:"kbd"
132 ~categories:[Flow; Phrasing; Palpable]
133 ~content_model:(Categories [Phrasing])
134 ()
135
136let sub =
137 Element_spec.make ~name:"sub"
138 ~categories:[Flow; Phrasing; Palpable]
139 ~content_model:(Categories [Phrasing])
140 ()
141
142let sup =
143 Element_spec.make ~name:"sup"
144 ~categories:[Flow; Phrasing; Palpable]
145 ~content_model:(Categories [Phrasing])
146 ()
147
148let i =
149 Element_spec.make ~name:"i"
150 ~categories:[Flow; Phrasing; Palpable]
151 ~content_model:(Categories [Phrasing])
152 ()
153
154let b =
155 Element_spec.make ~name:"b"
156 ~categories:[Flow; Phrasing; Palpable]
157 ~content_model:(Categories [Phrasing])
158 ()
159
160let u =
161 Element_spec.make ~name:"u"
162 ~categories:[Flow; Phrasing; Palpable]
163 ~content_model:(Categories [Phrasing])
164 ()
165
166let mark =
167 Element_spec.make ~name:"mark"
168 ~categories:[Flow; Phrasing; Palpable]
169 ~content_model:(Categories [Phrasing])
170 ()
171
172let bdi =
173 Element_spec.make ~name:"bdi"
174 ~categories:[Flow; Phrasing; Palpable]
175 ~content_model:(Categories [Phrasing])
176 ()
177
178let bdo =
179 Element_spec.make ~name:"bdo"
180 ~categories:[Flow; Phrasing; Palpable]
181 ~content_model:(Categories [Phrasing])
182 ~attrs:[
183 Attr_spec.make "dir" ~required:true ~datatype:"dir" ();
184 ]
185 ()
186
187let span =
188 Element_spec.make ~name:"span"
189 ~categories:[Flow; Phrasing; Palpable]
190 ~content_model:(Categories [Phrasing])
191 ()
192
193let br =
194 Element_spec.make ~name:"br"
195 ~void:true
196 ~categories:[Flow; Phrasing]
197 ~content_model:Nothing
198 ()
199
200let wbr =
201 Element_spec.make ~name:"wbr"
202 ~void:true
203 ~categories:[Flow; Phrasing]
204 ~content_model:Nothing
205 ()
206
207let ins =
208 Element_spec.make ~name:"ins"
209 ~categories:[Flow; Phrasing; Palpable]
210 ~content_model:Transparent
211 ~attrs:[
212 Attr_spec.make "cite" ~datatype:"url" ();
213 Attr_spec.make "datetime" ~datatype:"datetime" ();
214 ]
215 ()
216
217let del =
218 Element_spec.make ~name:"del"
219 ~categories:[Flow; Phrasing]
220 ~content_model:Transparent
221 ~attrs:[
222 Attr_spec.make "cite" ~datatype:"url" ();
223 Attr_spec.make "datetime" ~datatype:"datetime" ();
224 ]
225 ()
226
227let all = [
228 a; em; strong; small; s; cite; q; dfn; abbr; ruby; rt; rp;
229 data; time; code; var; samp; kbd; sub; sup; i; b; u; mark;
230 bdi; bdo; span; br; wbr; ins; del
231]