(*--------------------------------------------------------------------------- Copyright (c) 2025 Anil Madhavapeddy . All rights reserved. SPDX-License-Identifier: MIT ---------------------------------------------------------------------------*) (* html5rw.parser - HTML5 parser with bytesrw-only API *) module Dom = Dom module Tokenizer = Tokenizer module Encoding = Encoding module Parse_error_code = Parse_error_code module Constants = Parser_constants module Insertion_mode = Parser_insertion_mode module Tree_builder = Parser_tree_builder type parse_error = Parser_impl.parse_error type fragment_context = Parser_impl.fragment_context type t = Parser_impl.t (* parse_error accessors *) let error_code (e : parse_error) = e.Parser_tree_builder.code let error_line (e : parse_error) = e.Parser_tree_builder.line let error_column (e : parse_error) = e.Parser_tree_builder.column (* fragment_context constructor and accessors *) let make_fragment_context ~tag_name ?(namespace=None) () : fragment_context = { Parser_tree_builder.tag_name; namespace } let fragment_context_tag (ctx : fragment_context) = ctx.Parser_tree_builder.tag_name let fragment_context_namespace (ctx : fragment_context) = ctx.Parser_tree_builder.namespace let parse = Parser_impl.parse let parse_bytes = Parser_impl.parse_bytes let query = Parser_impl.query let to_writer = Parser_impl.to_writer let to_string = Parser_impl.to_string let to_text = Parser_impl.to_text let to_test_format = Parser_impl.to_test_format let root t = t.Parser_impl.root let errors t = t.Parser_impl.errors let encoding t = t.Parser_impl.encoding (* Pretty printers *) let pp_parse_error fmt (e : parse_error) = Format.fprintf fmt "(%d,%d): %a" e.line e.column Parse_error_code.pp e.code let pp_fragment_context fmt (ctx : fragment_context) = Format.fprintf fmt "<%s%s>" ctx.tag_name (match ctx.namespace with Some ns -> " xmlns=" ^ ns | None -> "") let pp fmt t = Format.fprintf fmt "{root=%a; errors=%d; encoding=%a}" Dom.pp t.Parser_impl.root (List.length t.Parser_impl.errors) (Format.pp_print_option Encoding.pp) t.Parser_impl.encoding