]> gitweb.factorcode.org Git - factor.git/commitdiff
Rewrite username validation in todo example to workaround current bug in
authorChris Double <chris.double@double.co.nz>
Tue, 2 Nov 2004 01:10:35 +0000 (01:10 +0000)
committerChris Double <chris.double@double.co.nz>
Tue, 2 Nov 2004 01:10:35 +0000 (01:10 +0000)
parser combinator library.

contrib/cont-responder/todo-example.factor

index f43d86e51acdaff64cf838debed8ca35a1e5f7b7..5d02acb8f08969e23168080a922925c019240016 100644 (file)
@@ -191,16 +191,29 @@ USE: parser-combinators
     "Register" login-form
   ] simple-page ;
 
-: username-parser ( -- parser )
-  #! Return a parser which parses a valid todo username.
-  #! That is, it contains only lowercase, uppercase and digits.
-  [ letter? ] satisfy 
-  [ LETTER? ] satisfy <|> 
-  [ digit? ] satisfy <|> <!+> just ;
-
-: is-valid-username? ( password -- bool )
+: valid-username-char ( ch -- b ) 
+  #! Return true if the character is valid to appear in a username.
+  [ 
+    [ letter? ] [ drop t ] 
+    [ LETTER? ] [ drop t ] 
+    [ digit?  ] [ drop t ] 
+    [         ] [ drop f ] 
+  ] cond ;
+
+: replace-invalid-username-chars ( str -- str ) 
+  #! Return a string with invalid username characters mapped to underscores.
+  [ 
+    dup valid-username-char [ 
+    ] [ 
+      drop CHAR: _ 
+    ] ifte 
+  ] str-map ;
+
+: testx ( string -- b ) dup replace-invalid-username-chars = ;
+
+: is-valid-username? ( username -- bool )
   #! Return true if the username parses correctly
-  username-parser call ;
+  dup replace-invalid-username-chars = ;
 
 : login-details-valid? ( name password -- )
   #! Ensure that a valid username and password were