summaryrefslogtreecommitdiff
path: root/gemini/parseCommon.ml
diff options
context:
space:
mode:
Diffstat (limited to 'gemini/parseCommon.ml')
-rw-r--r--gemini/parseCommon.ml43
1 files changed, 43 insertions, 0 deletions
diff --git a/gemini/parseCommon.ml b/gemini/parseCommon.ml
new file mode 100644
index 0000000..999cd83
--- /dev/null
+++ b/gemini/parseCommon.ml
@@ -0,0 +1,43 @@
+module type PARSE_COMMON =
+sig
+ val is_letter : char -> bool
+
+ val is_digit : char -> bool
+
+ val is_whitespace : char -> bool
+
+ val is_cr : char -> bool
+
+ val lift_or : ('a -> bool) -> ('a -> bool) -> 'a -> bool
+
+ val skip_spaces : unit Angstrom.t
+
+ val take_till_cr : string Angstrom.t
+end
+
+module ParseCommon : PARSE_COMMON =
+struct
+ open Angstrom
+
+ let is_letter = function
+ | 'a' .. 'z' | 'A' .. 'Z' -> true
+ | _ -> false
+
+ let is_digit = function
+ | '0' .. '9' -> true
+ | _ -> false
+
+ let is_whitespace = function
+ | ' ' | '\t' -> true
+ | _ -> false
+
+ let is_cr = function
+ | '\r' -> true
+ | _ -> false
+
+ let lift_or p q b = p b || q b
+
+ let skip_spaces = skip_while is_whitespace
+
+ let take_till_cr = take_till is_cr <* string "\r\n"
+end