11use regex:: { Regex , RegexSet } ;
22
33use parse_error:: { ParseError , ParseErrorEnum } ;
4- use validators:: Validator ;
4+ use validators:: Filter ;
55use { Options } ;
66
77
@@ -21,6 +21,7 @@ pub enum Syntax {
2121pub enum Token {
2222 Syntax ,
2323 Validate ,
24+ Filter ,
2425 Comment ,
2526}
2627
@@ -32,6 +33,8 @@ impl Preparser {
3233 ( r"^##\s*syntax:\s*(\w+)(?:\n|$)" , Syntax ) ,
3334 ( r"^##\s*validate\s+(\w+):[ \t]*(.*)\s*(?:\n|$)" ,
3435 Validate ) ,
36+ ( r"^##\s*filter\s+(\w+):[ \t]*(.*)\s*(?:\n|$)" ,
37+ Filter ) ,
3538 ( r"^#.*(?:\n|$)" , Comment ) ,
3639 ( r"^###.*(?:\n|$)" , Comment ) ,
3740 ( r"^\s*\n" , Comment ) ,
@@ -99,11 +102,22 @@ impl Preparser {
99102 . map_err ( |e| ParseErrorEnum :: BadRegexValidator (
100103 regex. to_string ( ) , e) ) ?;
101104 if name == "default" {
102- options. default_validator =
103- Validator :: Regex ( regex) ;
105+ options. default_filter =
106+ Filter :: Validate ( regex) ;
104107 } else {
105- options. validators . insert (
106- name. to_string ( ) , Validator :: Regex ( regex) ) ;
108+ options. filters . insert (
109+ name. to_string ( ) , Filter :: Validate ( regex) ) ;
110+ }
111+ }
112+ Token :: Filter => {
113+ let name = m. get ( 1 ) . unwrap ( ) . as_str ( ) ;
114+ let filter = m. get ( 2 ) . unwrap ( ) . as_str ( ) . parse ( ) ?;
115+ if name == "default" {
116+ options. default_filter =
117+ Filter :: Escape ( filter) ;
118+ } else {
119+ options. filters . insert ( name. to_string ( ) ,
120+ Filter :: Escape ( filter) ) ;
107121 }
108122 }
109123 Token :: Comment => {
@@ -120,7 +134,7 @@ impl Preparser {
120134
121135#[ cfg( test) ]
122136mod test {
123- use validators:: Validator ;
137+ use validators:: Filter ;
124138 use super :: { Preparser , Syntax } ;
125139 use { Options } ;
126140
@@ -129,17 +143,17 @@ mod test {
129143 let opt = Preparser :: new ( ) . scan ( "## syntax: indent\n " ,
130144 Options :: new ( ) . clone ( ) ) . unwrap ( ) ;
131145 assert_eq ! ( opt. syntax, Syntax :: Indent ) ;
132- assert ! ( matches!( opt. default_validator , Validator :: Anything ) ) ;
133- assert_eq ! ( opt. validators . len( ) , 0 ) ;
146+ assert ! ( matches!( opt. default_filter , Filter :: NoFilter ) ) ;
147+ assert_eq ! ( opt. filters . len( ) , 0 ) ;
134148 }
135149
136150 #[ test]
137151 fn oneline ( ) {
138152 let opt = Preparser :: new ( ) . scan ( "## syntax: oneline\n " ,
139153 Options :: new ( ) . clone ( ) ) . unwrap ( ) ;
140154 assert_eq ! ( opt. syntax, Syntax :: Oneline ) ;
141- assert ! ( matches!( opt. default_validator , Validator :: Anything ) ) ;
142- assert_eq ! ( opt. validators . len( ) , 0 ) ;
155+ assert ! ( matches!( opt. default_filter , Filter :: NoFilter ) ) ;
156+ assert_eq ! ( opt. filters . len( ) , 0 ) ;
143157 }
144158
145159 #[ test]
0 commit comments