Pure OCaml Yaml 1.2 reader and writer using Bytesrw
1(*---------------------------------------------------------------------------
2 Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved.
3 SPDX-License-Identifier: ISC
4 ---------------------------------------------------------------------------*)
5
6(** Character classification for YAML parsing *)
7
8(** Line break characters *)
9let is_break c = c = '\n' || c = '\r'
10
11(** Blank (space or tab) *)
12let is_blank c = c = ' ' || c = '\t'
13
14(** Whitespace (break or blank) *)
15let is_whitespace c = is_break c || is_blank c
16
17(** Decimal digit *)
18let is_digit c = c >= '0' && c <= '9'
19
20(** Hexadecimal digit *)
21let is_hex c =
22 (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')
23
24(** Alphabetic character *)
25let is_alpha c = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
26
27(** Alphanumeric character *)
28let is_alnum c = is_alpha c || is_digit c
29
30(** YAML indicator characters *)
31let is_indicator c =
32 match c with
33 | '-' | '?' | ':' | ',' | '[' | ']' | '{' | '}' | '#' | '&' | '*' | '!' | '|'
34 | '>' | '\'' | '"' | '%' | '@' | '`' ->
35 true
36 | _ -> false
37
38(** Flow context indicator characters *)
39let is_flow_indicator c =
40 match c with ',' | '[' | ']' | '{' | '}' -> true | _ -> false