! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: combinators.short-circuit math math.order math.parser
-kernel sequences sequences.deep peg peg.parsers assocs arrays
-hashtables strings namespaces make ascii ;
+USING: arrays ascii combinators.short-circuit kernel make
+math.parser peg peg.parsers sequences sequences.deep strings ;
IN: http.parsers
: except ( quot -- parser )
: except-these ( quots -- parser )
[ 1|| ] curry except ; inline
+: cookie-key-disallow? ( ch -- ? )
+ " \t,;=" member? ;
+
: tspecial? ( ch -- ? )
"()<>@,;:\\\"/[]?={} \t" member? ;
+: cookie-key-parser ( -- parser )
+ { [ control? ] [ cookie-key-disallow? ] } except-these repeat1 ;
+
: token-parser ( -- parser )
{ [ control? ] [ tspecial? ] } except-these repeat1 ;
[ token ] map choice ;
: http-method-parser ( -- parser )
- { "OPTIONS" "GET" "HEAD" "POST" "PUT" "DELETE" "TRACE" "CONNECT" } one-of ;
+ { "OPTIONS" "GET" "HEAD" "POST" "PUT" "DELETE" "TRACE" "CONNECT" "PATCH" } one-of ;
: url-parser ( -- parser )
[ " \t\r\n" member? ] except repeat1 case-sensitive ;
[ " \t" member? ] satisfy repeat1 ;
: qdtext-parser ( -- parser )
- { [ CHAR: " = ] [ control? ] } except-these ;
+ { [ CHAR: \" = ] [ control? ] } except-these ;
: quoted-char-parser ( -- parser )
"\\" token hide any-char 2seq ;
2choice case-sensitive ;
: attr-parser ( -- parser )
- token-parser case-sensitive ;
+ cookie-key-parser case-sensitive ;
: av-pair-parser ( -- parser )
[