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