Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
types.ml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61(** {2 Toml tables} *) module Table = struct module Key : sig type t val compare : t -> t -> int val of_string : string -> t val to_string : t -> string end = struct type t = string (** Bare keys only allow [A-Za-z0-9_-]. *) let is_bare t = let valid_so_far = ref true in let i = ref 0 in while !valid_so_far && !i < String.length t do match String.unsafe_get t !i with | 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' -> incr i | _c -> valid_so_far := false done; !valid_so_far let of_string t = t (* This function needs to go to more effort to escape non-bare strings. The current implementation does not conform to the spec as it will not escape, e.g., question marks. *) let to_string t = if is_bare t then t else "\"" ^ t ^ "\"" let compare = String.compare end include Map.Make (Key) let of_key_values key_values = List.fold_left (fun tbl (key, value) -> add key value tbl) empty key_values end type array = | NodeEmpty | NodeBool of bool list | NodeInt of int list | NodeFloat of float list | NodeString of string list | NodeDate of float list | NodeArray of array list (* this can have any type *) | NodeTable of table list and value = | TBool of bool | TInt of int | TFloat of float | TString of string | TDate of float | TArray of array | TTable of table and table = value Table.t