]> gitweb.factorcode.org Git - factor.git/blob - extra/globs/globs.factor
d131946ffbf18cb5e7b97273e6ef1dddd8359f23
[factor.git] / extra / globs / globs.factor
1 ! Copyright (C) 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: parser-combinators regexp lists sequences kernel
4 promises strings unicode.case ;
5 IN: globs
6
7 <PRIVATE
8
9 : 'char' [ ",*?" member? not ] satisfy ;
10
11 : 'string' 'char' <+> [ >lower token ] <@ ;
12
13 : 'escaped-char' "\\" token any-char-parser &> [ 1token ] <@ ;
14
15 : 'escaped-string' 'string' 'escaped-char' <|> ;
16
17 DEFER: 'term'
18
19 : 'glob' ( -- parser )
20     'term' <*> [ <and-parser> ] <@ ;
21
22 : 'union' ( -- parser )
23     'glob' "," token nonempty-list-of "{" "}" surrounded-by
24     [ <or-parser> ] <@ ;
25
26 LAZY: 'term'
27     'union'
28     'character-class' <|>
29     "?" token [ drop any-char-parser ] <@ <|>
30     "*" token [ drop any-char-parser <*> ] <@ <|>
31     'escaped-string' <|> ;
32
33 PRIVATE>
34
35 : <glob> 'glob' just parse-1 just ;
36
37 : glob-matches? ( input glob -- ? )
38     [ >lower ] [ <glob> ] bi* parse nil? not ;