OCaml HTML5 parser/serialiser based on Python's JustHTML
1(** Message collector for accumulating validation messages. *)
2
3type t = {
4 mutable messages : Message.t list;
5 mutable current_location : Message.location option;
6}
7
8let create () = { messages = []; current_location = None }
9
10let set_current_location t location = t.current_location <- location
11let clear_current_location t = t.current_location <- None
12let get_current_location t = t.current_location
13
14let add t msg = t.messages <- msg :: t.messages
15
16(** Add a message from a typed conformance error code *)
17let add_typed t ?location ?element ?attribute ?extract error_code =
18 (* Use provided location, or fall back to current_location *)
19 let loc = match location with
20 | Some _ -> location
21 | None -> t.current_location
22 in
23 let msg = Message.of_conformance_error ?location:loc ?element ?attribute ?extract error_code in
24 add t msg
25
26let messages t = List.rev t.messages
27
28let errors t =
29 List.filter (fun msg -> msg.Message.severity = Message.Error) (messages t)
30
31let warnings t =
32 List.filter (fun msg -> msg.Message.severity = Message.Warning) (messages t)
33
34let infos t =
35 List.filter (fun msg -> msg.Message.severity = Message.Info) (messages t)
36
37let has_errors t =
38 List.exists (fun msg -> msg.Message.severity = Message.Error) t.messages
39
40let count t = List.length t.messages
41
42let error_count t =
43 List.fold_left
44 (fun acc msg ->
45 if msg.Message.severity = Message.Error then acc + 1 else acc)
46 0 t.messages
47
48let clear t = t.messages <- []