OCaml HTML5 parser/serialiser based on Python's JustHTML
1(** Registry for HTML5 conformance checkers. *) 2 3type t = (string, Checker.t) Hashtbl.t 4 5let create () = Hashtbl.create 16 6 7let default () = 8 let reg = create () in 9 (* Register built-in checkers that align with Nu validator behavior. 10 Some checkers are disabled because they produce messages that don't 11 match Nu validator's expected output or have too many false positives: 12 - content: has bugs with phrasing content text detection 13 - heading: generates warnings Nu validator doesn't produce 14 - language: generates warnings Nu validator doesn't produce 15 - microdata: Nu validator has different microdata rules 16 - table: produces different messages than Nu validator 17 *) 18 Hashtbl.replace reg "nesting" Nesting_checker.checker; 19 Hashtbl.replace reg "obsolete" Obsolete_checker.checker; 20 Hashtbl.replace reg "id" Id_checker.checker; 21 Hashtbl.replace reg "required-attrs" Required_attr_checker.checker; 22 Hashtbl.replace reg "form" Form_checker.checker; 23 Hashtbl.replace reg "aria" Aria_checker.checker; 24 Hashtbl.replace reg "url" Url_checker.checker; 25 Hashtbl.replace reg "picture" Picture_checker.checker; 26 Hashtbl.replace reg "dl" Dl_checker.checker; 27 Hashtbl.replace reg "attr-restrictions" Attr_restrictions_checker.checker; 28 Hashtbl.replace reg "base" Base_checker.checker; 29 Hashtbl.replace reg "datetime" Datetime_checker.checker; 30 Hashtbl.replace reg "title" Title_checker.checker; 31 Hashtbl.replace reg "source" Source_checker.checker; 32 Hashtbl.replace reg "label" Label_checker.checker; 33 Hashtbl.replace reg "ruby" Ruby_checker.checker; 34 Hashtbl.replace reg "h1" H1_checker.checker; 35 Hashtbl.replace reg "srcset-sizes" Srcset_sizes_checker.checker; 36 Hashtbl.replace reg "autofocus" Autofocus_checker.checker; 37 Hashtbl.replace reg "option" Option_checker.checker; 38 Hashtbl.replace reg "language" Language_checker.checker; 39 Hashtbl.replace reg "microdata" Microdata_checker.checker; 40 Hashtbl.replace reg "importmap" Importmap_checker.checker; 41 Hashtbl.replace reg "table" Table_checker.checker; 42 Hashtbl.replace reg "mime-type" Mime_type_checker.checker; 43 Hashtbl.replace reg "normalization" Normalization_checker.checker; 44 Hashtbl.replace reg "svg" Svg_checker.checker; 45 Hashtbl.replace reg "xhtml-content" Xhtml_content_checker.checker; 46 Hashtbl.replace reg "lang-detecting" Lang_detecting_checker.checker; 47 (* Hashtbl.replace reg "heading" Heading_checker.checker; *) 48 (* Hashtbl.replace reg "content" Content_checker.checker; *) 49 reg 50 51let register registry name checker = Hashtbl.replace registry name checker 52 53let unregister registry name = Hashtbl.remove registry name 54 55let get registry name = Hashtbl.find_opt registry name 56 57let list_names registry = 58 Hashtbl.to_seq_keys registry |> List.of_seq 59 60let all registry = 61 Hashtbl.to_seq_values registry |> List.of_seq