1 ! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: sequences kernel regexp.combinators regexp.matchers strings unicode.case
4 peg.ebnf regexp arrays ;
9 Character = "\\" .:c => [[ c 1string <literal> ]]
10 | !(","|"}") . => [[ 1string <literal> ]]
12 RangeCharacter = !("]") .
14 Range = RangeCharacter:a "-" RangeCharacter:b => [[ a b <char-range> ]]
15 | RangeCharacter => [[ 1string <literal> ]]
17 StartRange = .:a "-" RangeCharacter:b => [[ a b <char-range> ]]
18 | . => [[ 1string <literal> ]]
20 Ranges = StartRange:s Range*:r => [[ r s prefix ]]
22 CharClass = "^"?:n Ranges:e => [[ e <or> n [ <not> ] when ]]
24 AlternationBody = Concatenation:c "," AlternationBody:a => [[ a c prefix ]]
25 | Concatenation => [[ 1array ]]
27 Element = "*" => [[ R/ .*/ ]]
29 | "[" CharClass:c "]" => [[ c ]]
30 | "{" AlternationBody:b "}" => [[ b <or> ]]
33 Concatenation = Element* => [[ <sequence> ]]
37 Main = Concatenation End
41 : glob-matches? ( input glob -- ? )
42 [ >case-fold ] bi@ <glob> matches? ;