on master help sign in
Merge pull request #4039 from msmorgan/feature/lexer-case-insensitive

Text.Lexer: case-insensitive variants of `is` and `exact`.

commitf925538745a190d69d5c8867f9f423426afa0cab authorJan de Muijnck-Hughes <jfdm@users.noreply.github.com> dateMon 4 Sep 2017, 20:05 (9 years ago) parent891998f8c4286e
1 file changed+26−8
libs/contrib/Text/Lexer.idr+26−8
libs/contrib/Text/Lexer.idr+26−8
@@ -70,6 +70,32 @@ export
7070isNot : Char -> Lexer
7171isNot x = Pred (/=x)
7272
73+||| Recognise a character case-insensitively
74+export
75+like : Char -> Lexer
76+like x = Pred (\y => toUpper x == toUpper y)
77+
78+||| Recognise anything but the given character case-insensitively
79+export
80+notLike : Char -> Lexer
81+notLike x = Pred (\y => toUpper x /= toUpper y)
82+
83+||| Recognise a specific string
84+export
85+exact : String -> Lexer
86+exact str with (unpack str)
87+ exact str | [] = Fail -- Not allowed, Lexer has to consume
88+ exact str | (x :: xs)
89+ = foldl SeqEmpty (is x) (map is xs)
90+
91+||| Recognise a specific string case-insensitively
92+export
93+approx : String -> Lexer
94+approx str with (unpack str)
95+ approx str | [] = Fail -- Not allowed, Lexer has to consume
96+ approx str | (x :: xs)
97+ = foldl SeqEmpty (like x) (map like xs)
98+
7399||| Recognise a lexer or recognise no input. This is not guaranteed
74100||| to consume input
75101export
@@ -191,14 +217,6 @@ export
191217digits : Lexer
192218digits = some digit
193219
194−||| Recognise a specific string
195−export
196−exact : String -> Lexer
197−exact str with (unpack str)
198− exact str | [] = Fail -- Not allowed, Lexer has to consume
199− exact str | (x :: xs)
200− = foldl SeqEmpty (is x) (map is xs)
201−
202220||| Recognise a single hexidecimal digit
203221export
204222hexDigit : Lexer