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 <- []