(** Debug utility for testing individual HTML files against the validator *)
let () =
if Array.length Sys.argv < 2 then begin
Printf.printf "Usage: debug_validator \n";
exit 1
end;
let path = Sys.argv.(1) in
let ic = open_in path in
let content = really_input_string ic (in_channel_length ic) in
close_in ic;
Printf.printf "=== Checking: %s ===\n\n" path;
Printf.printf "Input (%d bytes):\n%s\n\n" (String.length content) content;
let reader = Bytesrw.Bytes.Reader.of_string content in
let result = Html5_checker.check ~collect_parse_errors:true ~system_id:path reader in
let errors = Html5_checker.errors result in
let warnings = Html5_checker.warnings result in
Printf.printf "=== Results ===\n";
Printf.printf "Errors: %d\n" (List.length errors);
List.iter (fun msg ->
Printf.printf " [ERROR] %s\n" msg.Html5_checker.Message.message;
(match msg.Html5_checker.Message.location with
| Some loc -> Printf.printf " at line %d, col %d\n" loc.line loc.column
| None -> ())
) errors;
Printf.printf "Warnings: %d\n" (List.length warnings);
List.iter (fun msg ->
Printf.printf " [WARN] %s\n" msg.Html5_checker.Message.message;
(match msg.Html5_checker.Message.location with
| Some loc -> Printf.printf " at line %d, col %d\n" loc.line loc.column
| None -> ())
) warnings;
Printf.printf "\n=== Formatted Output ===\n";
Printf.printf "%s\n" (Html5_checker.format_text result)