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