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 9c420b4676d1731182b39c03cd3d95ab05b008d1 220 lines 6.4 kB view raw
1open Content_category 2open Content_model 3open Attr_spec 4 5let picture = 6 Element_spec.make ~name:"picture" 7 ~categories:[ Flow; Phrasing; Embedded; Palpable ] 8 ~content_model: 9 (Sequence 10 [ 11 Zero_or_more (Elements [ "source" ]); 12 Elements [ "img" ]; 13 Zero_or_more (Elements [ "script"; "template" ]); 14 ]) 15 ~attrs:[] () 16 17let source = 18 Element_spec.make ~name:"source" ~void:true 19 ~categories:[] 20 ~content_model:Nothing 21 ~attrs: 22 [ 23 make "type" ~datatype:"mime" (); 24 make "media" ~datatype:"media_query" (); 25 make "src" ~datatype:"url" (); 26 make "srcset" ~datatype:"srcset" (); 27 make "sizes" (); 28 make "width" ~datatype:"integer" (); 29 make "height" ~datatype:"integer" (); 30 ] 31 () 32 33let img = 34 Element_spec.make ~name:"img" ~void:true 35 ~categories:[ Flow; Phrasing; Embedded; Palpable; Interactive ] 36 ~content_model:Nothing 37 ~attrs: 38 [ 39 make "src" ~required:true ~datatype:"url" (); 40 make "alt" (); 41 make "srcset" ~datatype:"srcset" (); 42 make "sizes" (); 43 make "crossorigin" ~datatype:"crossorigin" (); 44 make "usemap" ~datatype:"hash" (); 45 make "ismap" ~datatype:"boolean" (); 46 make "width" ~datatype:"integer" (); 47 make "height" ~datatype:"integer" (); 48 make "referrerpolicy" ~datatype:"referrer" (); 49 make "decoding" ~datatype:"decoding" (); 50 make "loading" ~datatype:"loading" (); 51 make "fetchpriority" ~datatype:"fetchpriority" (); 52 ] 53 ~implicit_aria_role:"img" () 54 55let iframe = 56 Element_spec.make ~name:"iframe" 57 ~categories:[ Flow; Phrasing; Embedded; Interactive; Palpable ] 58 ~content_model:Nothing 59 ~attrs: 60 [ 61 make "src" ~datatype:"url" (); 62 make "srcdoc" (); 63 make "name" ~datatype:"target" (); 64 make "sandbox" ~datatype:"sandbox" (); 65 make "allow" (); 66 make "allowfullscreen" ~datatype:"boolean" (); 67 make "width" ~datatype:"integer" (); 68 make "height" ~datatype:"integer" (); 69 make "referrerpolicy" ~datatype:"referrer" (); 70 make "loading" ~datatype:"loading" (); 71 ] 72 () 73 74let embed = 75 Element_spec.make ~name:"embed" ~void:true 76 ~categories:[ Flow; Phrasing; Embedded; Interactive; Palpable ] 77 ~content_model:Nothing 78 ~attrs: 79 [ 80 make "src" ~required:true ~datatype:"url" (); 81 make "type" ~datatype:"mime" (); 82 make "width" ~datatype:"integer" (); 83 make "height" ~datatype:"integer" (); 84 ] 85 () 86 87let object_ = 88 Element_spec.make ~name:"object" 89 ~categories:[ Flow; Phrasing; Embedded; Palpable; Interactive ] 90 ~content_model:(Mixed [ Flow ]) 91 ~attrs: 92 [ 93 make "data" ~datatype:"url" (); 94 make "type" ~datatype:"mime" (); 95 make "name" ~datatype:"target" (); 96 make "form" ~datatype:"id" (); 97 make "width" ~datatype:"integer" (); 98 make "height" ~datatype:"integer" (); 99 ] 100 () 101 102let param = 103 Element_spec.make ~name:"param" ~void:true 104 ~categories:[] 105 ~content_model:Nothing 106 ~attrs:[ make "name" ~required:true (); make "value" ~required:true () ] 107 () 108 109let video = 110 Element_spec.make ~name:"video" 111 ~categories:[ Flow; Phrasing; Embedded; Palpable; Interactive ] 112 ~content_model: 113 (Choice 114 [ 115 Sequence 116 [ 117 Zero_or_more (Elements [ "source" ]); 118 Zero_or_more (Elements [ "track" ]); 119 Zero_or_more Transparent; 120 ]; 121 Sequence [ Zero_or_more Transparent; Zero_or_more (Elements [ "track" ]) ]; 122 ]) 123 ~prohibited_ancestors:[ "audio"; "video" ] 124 ~attrs: 125 [ 126 make "src" ~datatype:"url" (); 127 make "crossorigin" ~datatype:"crossorigin" (); 128 make "poster" ~datatype:"url" (); 129 make "preload" ~datatype:"preload" (); 130 make "autoplay" ~datatype:"boolean" (); 131 make "playsinline" ~datatype:"boolean" (); 132 make "loop" ~datatype:"boolean" (); 133 make "muted" ~datatype:"boolean" (); 134 make "controls" ~datatype:"boolean" (); 135 make "width" ~datatype:"integer" (); 136 make "height" ~datatype:"integer" (); 137 ] 138 () 139 140let audio = 141 Element_spec.make ~name:"audio" 142 ~categories:[ Flow; Phrasing; Embedded; Palpable; Interactive ] 143 ~content_model: 144 (Choice 145 [ 146 Sequence 147 [ 148 Zero_or_more (Elements [ "source" ]); 149 Zero_or_more (Elements [ "track" ]); 150 Zero_or_more Transparent; 151 ]; 152 Sequence [ Zero_or_more Transparent; Zero_or_more (Elements [ "track" ]) ]; 153 ]) 154 ~prohibited_ancestors:[ "audio"; "video" ] 155 ~attrs: 156 [ 157 make "src" ~datatype:"url" (); 158 make "crossorigin" ~datatype:"crossorigin" (); 159 make "preload" ~datatype:"preload" (); 160 make "autoplay" ~datatype:"boolean" (); 161 make "loop" ~datatype:"boolean" (); 162 make "muted" ~datatype:"boolean" (); 163 make "controls" ~datatype:"boolean" (); 164 ] 165 () 166 167let track = 168 Element_spec.make ~name:"track" ~void:true 169 ~categories:[] 170 ~content_model:Nothing 171 ~permitted_parents:[ "audio"; "video" ] 172 ~attrs: 173 [ 174 make "kind" ~datatype:"kind" (); 175 make "src" ~required:true ~datatype:"url" (); 176 make "srclang" ~datatype:"language" (); 177 make "label" (); 178 make "default" ~datatype:"boolean" (); 179 ] 180 () 181 182let map = 183 Element_spec.make ~name:"map" 184 ~categories:[ Flow; Phrasing; Palpable ] 185 ~content_model:Transparent 186 ~attrs:[ make "name" ~required:true () ] () 187 188let area = 189 Element_spec.make ~name:"area" ~void:true 190 ~categories:[ Flow; Phrasing ] 191 ~content_model:Nothing 192 ~attrs: 193 [ 194 make "alt" (); 195 make "coords" ~datatype:"coords" (); 196 make "shape" ~datatype:"shape" (); 197 make "href" ~datatype:"url" (); 198 make "target" ~datatype:"target" (); 199 make "download" (); 200 make "ping" (); 201 make "rel" ~datatype:"link_type" (); 202 make "referrerpolicy" ~datatype:"referrer" (); 203 ] 204 ~implicit_aria_role:"link" () 205 206let all = 207 [ 208 picture; 209 source; 210 img; 211 iframe; 212 embed; 213 object_; 214 param; 215 video; 216 audio; 217 track; 218 map; 219 area; 220 ]