OCaml HTML5 parser/serialiser based on Python's JustHTML
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 289 lines 8.5 kB view raw
1(** Document structure elements *) 2 3let html = 4 Element_spec.make ~name:"html" 5 ~content_model: 6 (Content_model.Sequence 7 [ 8 Content_model.Optional (Content_model.Elements [ "head" ]); 9 Content_model.Optional (Content_model.Elements [ "body" ]); 10 ]) 11 ~implicit_aria_role:"document" () 12 13let head = 14 Element_spec.make ~name:"head" ~categories:[] 15 ~content_model: 16 (Content_model.Zero_or_more (Content_model.Categories [ Metadata ])) 17 () 18 19let body = 20 Element_spec.make ~name:"body" ~categories:[ Sectioning ] 21 ~content_model:(Content_model.Categories [ Flow ]) () 22 23let title = 24 Element_spec.make ~name:"title" ~categories:[ Metadata ] 25 ~content_model:Content_model.Text () 26 27let base = 28 Element_spec.make ~name:"base" ~void:true ~categories:[ Metadata ] 29 ~content_model:Content_model.Nothing () 30 31let link = 32 Element_spec.make ~name:"link" ~void:true ~categories:[ Metadata ] 33 ~content_model:Content_model.Nothing () 34 35let meta = 36 Element_spec.make ~name:"meta" ~void:true ~categories:[ Metadata ] 37 ~content_model:Content_model.Nothing () 38 39let style = 40 Element_spec.make ~name:"style" ~categories:[ Metadata ] 41 ~content_model:Content_model.Text () 42 43(** Sectioning elements *) 44 45let article = 46 Element_spec.make ~name:"article" ~categories:[ Flow; Sectioning; Palpable ] 47 ~content_model:(Content_model.Categories [ Flow ]) () 48 49let section = 50 Element_spec.make ~name:"section" ~categories:[ Flow; Sectioning; Palpable ] 51 ~content_model:(Content_model.Categories [ Flow ]) () 52 53let nav = 54 Element_spec.make ~name:"nav" ~categories:[ Flow; Sectioning; Palpable ] 55 ~content_model:(Content_model.Categories [ Flow ]) 56 ~implicit_aria_role:"navigation" () 57 58let aside = 59 Element_spec.make ~name:"aside" ~categories:[ Flow; Sectioning; Palpable ] 60 ~content_model:(Content_model.Categories [ Flow ]) 61 ~implicit_aria_role:"complementary" () 62 63let h1 = 64 Element_spec.make ~name:"h1" ~categories:[ Flow; Heading; Palpable ] 65 ~content_model:(Content_model.Categories [ Phrasing ]) 66 ~implicit_aria_role:"heading" () 67 68let h2 = 69 Element_spec.make ~name:"h2" ~categories:[ Flow; Heading; Palpable ] 70 ~content_model:(Content_model.Categories [ Phrasing ]) 71 ~implicit_aria_role:"heading" () 72 73let h3 = 74 Element_spec.make ~name:"h3" ~categories:[ Flow; Heading; Palpable ] 75 ~content_model:(Content_model.Categories [ Phrasing ]) 76 ~implicit_aria_role:"heading" () 77 78let h4 = 79 Element_spec.make ~name:"h4" ~categories:[ Flow; Heading; Palpable ] 80 ~content_model:(Content_model.Categories [ Phrasing ]) 81 ~implicit_aria_role:"heading" () 82 83let h5 = 84 Element_spec.make ~name:"h5" ~categories:[ Flow; Heading; Palpable ] 85 ~content_model:(Content_model.Categories [ Phrasing ]) 86 ~implicit_aria_role:"heading" () 87 88let h6 = 89 Element_spec.make ~name:"h6" ~categories:[ Flow; Heading; Palpable ] 90 ~content_model:(Content_model.Categories [ Phrasing ]) 91 ~implicit_aria_role:"heading" () 92 93let hgroup = 94 Element_spec.make ~name:"hgroup" ~categories:[ Flow; Heading; Palpable ] 95 ~content_model: 96 (Content_model.Sequence 97 [ 98 Content_model.Zero_or_more 99 (Content_model.Choice 100 [ 101 Content_model.Elements [ "p" ]; 102 Content_model.Categories [ Heading ]; 103 ]); 104 ]) 105 ~implicit_aria_role:"group" () 106 107let header = 108 Element_spec.make ~name:"header" ~categories:[ Flow; Palpable ] 109 ~content_model: 110 (Content_model.Except 111 ( Content_model.Categories [ Flow ], 112 [] (* no header/footer descendants *) )) 113 ~prohibited_ancestors:[ "header"; "footer" ] ~implicit_aria_role:"banner" () 114 115let footer = 116 Element_spec.make ~name:"footer" ~categories:[ Flow; Palpable ] 117 ~content_model: 118 (Content_model.Except 119 ( Content_model.Categories [ Flow ], 120 [] (* no header/footer descendants *) )) 121 ~prohibited_ancestors:[ "header"; "footer" ] 122 ~implicit_aria_role:"contentinfo" () 123 124let address = 125 Element_spec.make ~name:"address" ~categories:[ Flow; Palpable ] 126 ~content_model: 127 (Content_model.Except 128 ( Content_model.Categories [ Flow ], 129 [ Heading; Sectioning ] (* no heading/sectioning content *) )) 130 ~prohibited_ancestors:[ "address" ] () 131 132let main = 133 Element_spec.make ~name:"main" ~categories:[ Flow; Palpable ] 134 ~content_model:(Content_model.Categories [ Flow ]) 135 ~implicit_aria_role:"main" () 136 137(** Grouping elements *) 138 139let p = 140 Element_spec.make ~name:"p" ~categories:[ Flow; Palpable ] 141 ~content_model:(Content_model.Categories [ Phrasing ]) () 142 143let hr = 144 Element_spec.make ~name:"hr" ~void:true ~categories:[ Flow ] 145 ~content_model:Content_model.Nothing ~implicit_aria_role:"separator" () 146 147let pre = 148 Element_spec.make ~name:"pre" ~categories:[ Flow; Palpable ] 149 ~content_model:(Content_model.Categories [ Phrasing ]) () 150 151let blockquote = 152 Element_spec.make ~name:"blockquote" ~categories:[ Flow; Palpable ] 153 ~content_model:(Content_model.Categories [ Flow ]) () 154 155let ol = 156 Element_spec.make ~name:"ol" ~categories:[ Flow; Palpable ] 157 ~content_model:(Content_model.Zero_or_more (Content_model.Elements [ "li" ])) 158 ~implicit_aria_role:"list" () 159 160let ul = 161 Element_spec.make ~name:"ul" ~categories:[ Flow; Palpable ] 162 ~content_model:(Content_model.Zero_or_more (Content_model.Elements [ "li" ])) 163 ~implicit_aria_role:"list" () 164 165let menu = 166 Element_spec.make ~name:"menu" ~categories:[ Flow; Palpable ] 167 ~content_model: 168 (Content_model.Zero_or_more 169 (Content_model.Choice 170 [ 171 Content_model.Elements [ "li" ]; 172 Content_model.Elements [ "script" ]; 173 Content_model.Elements [ "template" ]; 174 ])) 175 ~implicit_aria_role:"list" () 176 177let li = 178 Element_spec.make ~name:"li" ~categories:[] 179 ~content_model:(Content_model.Categories [ Flow ]) 180 ~permitted_parents:[ "ol"; "ul"; "menu" ] ~implicit_aria_role:"listitem" () 181 182let dl = 183 Element_spec.make ~name:"dl" ~categories:[ Flow; Palpable ] 184 ~content_model: 185 (Content_model.Choice 186 [ 187 Content_model.Zero_or_more 188 (Content_model.Sequence 189 [ 190 Content_model.One_or_more (Content_model.Elements [ "dt" ]); 191 Content_model.One_or_more (Content_model.Elements [ "dd" ]); 192 ]); 193 Content_model.Zero_or_more 194 (Content_model.Choice 195 [ 196 Content_model.Elements [ "div" ]; 197 Content_model.Elements [ "script" ]; 198 Content_model.Elements [ "template" ]; 199 ]); 200 ]) 201 () 202 203let dt = 204 Element_spec.make ~name:"dt" ~categories:[] 205 ~content_model: 206 (Content_model.Except 207 ( Content_model.Categories [ Flow ], 208 [ Heading; Sectioning ] (* no heading/sectioning *) )) 209 ~permitted_parents:[ "dl"; "div" ] () 210 211let dd = 212 Element_spec.make ~name:"dd" ~categories:[] 213 ~content_model:(Content_model.Categories [ Flow ]) 214 ~permitted_parents:[ "dl"; "div" ] () 215 216let figure = 217 Element_spec.make ~name:"figure" ~categories:[ Flow; Palpable ] 218 ~content_model: 219 (Content_model.Choice 220 [ 221 Content_model.Sequence 222 [ 223 Content_model.Optional 224 (Content_model.Elements [ "figcaption" ]); 225 Content_model.Categories [ Flow ]; 226 ]; 227 Content_model.Sequence 228 [ 229 Content_model.Categories [ Flow ]; 230 Content_model.Optional 231 (Content_model.Elements [ "figcaption" ]); 232 ]; 233 ]) 234 ~implicit_aria_role:"figure" () 235 236let figcaption = 237 Element_spec.make ~name:"figcaption" ~categories:[] 238 ~content_model:(Content_model.Categories [ Flow ]) 239 ~permitted_parents:[ "figure" ] () 240 241let div = 242 Element_spec.make ~name:"div" ~categories:[ Flow; Palpable ] 243 ~content_model:(Content_model.Categories [ Flow ]) () 244 245(** Element registry *) 246 247let all = 248 [ 249 (* Document structure *) 250 html; 251 head; 252 body; 253 title; 254 base; 255 link; 256 meta; 257 style; 258 (* Sectioning *) 259 article; 260 section; 261 nav; 262 aside; 263 h1; 264 h2; 265 h3; 266 h4; 267 h5; 268 h6; 269 hgroup; 270 header; 271 footer; 272 address; 273 main; 274 (* Grouping *) 275 p; 276 hr; 277 pre; 278 blockquote; 279 ol; 280 ul; 281 menu; 282 li; 283 dl; 284 dt; 285 dd; 286 figure; 287 figcaption; 288 div; 289 ]