(*--------------------------------------------------------------------------- Copyright (c) 2025 Anil Madhavapeddy . All rights reserved. SPDX-License-Identifier: MIT ---------------------------------------------------------------------------*) (** CSS selector parse error codes. These represent all possible errors that can occur when parsing CSS selectors. *) type t = | Empty_selector | Unterminated_string | Unterminated_escape | Expected_identifier_after_hash | Expected_identifier_after_dot | Expected_attribute_name | Expected_closing_bracket | Expected_equals_after_operator of char | Unexpected_character_in_attribute_selector | Expected_pseudo_class_name | Expected_closing_paren | Unexpected_character of char | Expected_attribute_value | Expected_closing_bracket_or_operator | Expected_selector_after_combinator | Unexpected_token | Expected_end_of_selector let to_string = function | Empty_selector -> "empty-selector" | Unterminated_string -> "unterminated-string" | Unterminated_escape -> "unterminated-escape" | Expected_identifier_after_hash -> "expected-identifier-after-hash" | Expected_identifier_after_dot -> "expected-identifier-after-dot" | Expected_attribute_name -> "expected-attribute-name" | Expected_closing_bracket -> "expected-closing-bracket" | Expected_equals_after_operator c -> Printf.sprintf "expected-equals-after-%c" c | Unexpected_character_in_attribute_selector -> "unexpected-character-in-attribute-selector" | Expected_pseudo_class_name -> "expected-pseudo-class-name" | Expected_closing_paren -> "expected-closing-paren" | Unexpected_character c -> Printf.sprintf "unexpected-character-%c" c | Expected_attribute_value -> "expected-attribute-value" | Expected_closing_bracket_or_operator -> "expected-closing-bracket-or-operator" | Expected_selector_after_combinator -> "expected-selector-after-combinator" | Unexpected_token -> "unexpected-token" | Expected_end_of_selector -> "expected-end-of-selector" let to_human_string = function | Empty_selector -> "Empty selector" | Unterminated_string -> "Unterminated string" | Unterminated_escape -> "Unterminated escape" | Expected_identifier_after_hash -> "Expected identifier after #" | Expected_identifier_after_dot -> "Expected identifier after ." | Expected_attribute_name -> "Expected attribute name" | Expected_closing_bracket -> "Expected ]" | Expected_equals_after_operator c -> Printf.sprintf "Expected = after %c" c | Unexpected_character_in_attribute_selector -> "Unexpected character in attribute selector" | Expected_pseudo_class_name -> "Expected pseudo-class name" | Expected_closing_paren -> "Expected )" | Unexpected_character c -> Printf.sprintf "Unexpected character: %c" c | Expected_attribute_value -> "Expected attribute value" | Expected_closing_bracket_or_operator -> "Expected ] or attribute operator" | Expected_selector_after_combinator -> "Expected selector after combinator" | Unexpected_token -> "Unexpected token" | Expected_end_of_selector -> "Expected end of selector" let pp fmt t = Format.pp_print_string fmt (to_string t)