[bknr-cvs] edi changed trunk/thirdparty/chunga/
BKNR Commits
bknr at bknr.net
Tue Dec 1 21:58:01 UTC 2009
Revision: 4478
Author: edi
URL: http://bknr.net/trac/changeset/4478
Changes for cookie parsing
U trunk/thirdparty/chunga/CHANGELOG.txt
U trunk/thirdparty/chunga/doc/index.html
U trunk/thirdparty/chunga/packages.lisp
U trunk/thirdparty/chunga/read.lisp
U trunk/thirdparty/chunga/util.lisp
Modified: trunk/thirdparty/chunga/CHANGELOG.txt
===================================================================
--- trunk/thirdparty/chunga/CHANGELOG.txt 2009-11-30 13:24:17 UTC (rev 4477)
+++ trunk/thirdparty/chunga/CHANGELOG.txt 2009-12-01 21:58:01 UTC (rev 4478)
@@ -1,3 +1,7 @@
+Exported TOKEN-CHAR-P
+Allowed START and END keyword arguments for TRIM-WHITESPACE
+Simplified cookie value parsing
+
Version 1.0.0
2009-02-19
Switched to binary streams underneath and got rid of FLEXI-STREAMS dependency
Modified: trunk/thirdparty/chunga/doc/index.html
===================================================================
--- trunk/thirdparty/chunga/doc/index.html 2009-11-30 13:24:17 UTC (rev 4477)
+++ trunk/thirdparty/chunga/doc/index.html 2009-12-01 21:58:01 UTC (rev 4478)
@@ -85,6 +85,7 @@
<li><a href="#with-character-stream-semantics"><code>with-character-stream-semantics</code></a>
<li><a href="#read-line*"><code>read-line*</code></a>
<li><a href="#read-http-headers"><code>read-http-headers</code></a>
+ <li><a href="#token-char-p"><code>token-char-p</code></a>
<li><a href="#read-token"><code>read-token</code></a>
<li><a href="#read-name-value-pair"><code>read-name-value-pair</code></a>
<li><a href="#read-name-value-pairs"><code>read-name-value-pairs</code></a>
@@ -542,6 +543,19 @@
<!-- End of entry for READ-TOKEN -->
+<!-- Entry for TOKEN-CHAR-P -->
+
+<p><br>[Function]<br><a class=none name='token-char-p'><b>token-char-p</b> <i>char</i> => <i>generalized-boolean</i></a>
+<blockquote><br>
+
+Returns a true value if the Lisp character CHAR is a token constituent
+according to
+<a href="http://www.rfc.net/rfc2616.html">RFC 2616</a>.
+
+</blockquote>
+
+<!-- End of entry for TOKEN-CHAR-P -->
+
<!-- Entry for READ-NAME-VALUE-PAIR -->
<p><br>[Function]<br><a class=none name='read-name-value-pair'><b>read-name-value-pair</b> <i>stream <tt>&key</tt> value-required-p cookie-syntax</i> => <i>pair</i></a>
@@ -662,10 +676,10 @@
<!-- Entry for TRIM-WHITESPACE -->
-<p><br>[Function]<br><a class=none name='trim-whitespace'><b>trim-whitespace</b> <i>string</i> => <i>string'</i></a>
+<p><br>[Function]<br><a class=none name='trim-whitespace'><b>trim-whitespace</b> <i>string <tt>&key</tt> start end</i> => <i>string'</i></a>
<blockquote><br>
-Returns a version of the string <code><i>string</i></code> where spaces and tab
+Returns a version of the string <code><i>string</i></code> (between <code><i>start</i></code> and <code><i>end</i></code>) where spaces and tab
characters are trimmed from the start and the end.
</blockquote>
Modified: trunk/thirdparty/chunga/packages.lisp
===================================================================
--- trunk/thirdparty/chunga/packages.lisp 2009-11-30 13:24:17 UTC (rev 4477)
+++ trunk/thirdparty/chunga/packages.lisp 2009-12-01 21:58:01 UTC (rev 4478)
@@ -62,6 +62,7 @@
:read-token
:skip-whitespace
:syntax-error
+ :token-char-p
:trim-whitespace
:with-character-stream-semantics))
Modified: trunk/thirdparty/chunga/read.lisp
===================================================================
--- trunk/thirdparty/chunga/read.lisp 2009-11-30 13:24:17 UTC (rev 4477)
+++ trunk/thirdparty/chunga/read.lisp 2009-12-01 21:58:01 UTC (rev 4478)
@@ -120,10 +120,10 @@
(finish-output log-stream))
result))
-(defun trim-whitespace (string)
- "Returns a version of the string STRING where spaces and tab
-characters are trimmed from the start and the end. Might return
-STRING."
+(defun trim-whitespace (string &key (start 0) (end (length string)))
+ "Returns a version of the string STRING \(between START and END)
+where spaces and tab characters are trimmed from the start and the
+end. Might return STRING."
;; optimized version to replace STRING-TRIM, suggested by Jason Kantz
(declare (optimize
speed
@@ -133,18 +133,18 @@
(compilation-speed 0)
#+:lispworks (hcl:fixnum-safety 0)))
(declare (string string))
- (let* ((length (length string))
- (start (loop for i of-type fixnum from 0 below length
- while (or (char= #\space (char string i))
- (char= #\tab (char string i)))
- finally (return i)))
- (end (loop for i of-type fixnum downfrom (1- length) to 0
- while (or (char= #\space (char string i))
- (char= #\tab (char string i)))
- finally (return (1+ i)))))
- (declare (fixnum start end))
- (cond ((and (zerop start) (= end length)) string)
- (t (subseq string start end)))))
+ (let* ((start% (loop for i of-type fixnum from start below end
+ while (or (char= #\space (char string i))
+ (char= #\tab (char string i)))
+ finally (return i)))
+ (end% (loop for i of-type fixnum downfrom (1- end) to start
+ while (or (char= #\space (char string i))
+ (char= #\tab (char string i)))
+ finally (return (1+ i)))))
+ (declare (fixnum start% end%))
+ (cond ((and (zerop start%) (= end% (length string))) string)
+ ((> start% end%) "")
+ (t (subseq string start% end%)))))
(defun read-http-headers (stream &optional log-stream)
"Reads HTTP header lines from STREAM \(except for the initial
@@ -243,24 +243,14 @@
(signal-unexpected-chars stream char '(#\Space #\Tab)))))
(otherwise (write-char char out))))))
-(defun read-cookie-value (stream &key name separators)
+(defun read-cookie-value (stream &key (separators ";"))
"Reads a cookie parameter value from STREAM which is returned as a
-string. Simply reads until a comma or a semicolon is seen \(or an
-element of SEPARATORS)."
- (when (eql #\, (peek-char* stream nil))
- (return-from read-cookie-value ""))
+string. Simply reads until a semicolon is seen \(or an element of
+SEPARATORS)."
(trim-whitespace
(with-output-to-string (out)
- ;; special case for the `Expires' parameter - maybe skip the first comma
- (loop with separators% = (cond (separators)
- ((equalp name "Expires") ";")
- (t ",;"))
- for char = (peek-char* stream nil)
- until (or (null char) (find char separators% :test #'char=))
- when (and (null separators)
- (or (char= char #\,)
- (digit-char-p char)))
- do (setq separators% '(#\, #\;))
+ (loop for char = (peek-char* stream nil)
+ until (or (null char) (find char separators :test #'char=))
do (write-char (read-char* stream) out)))))
(defun read-name-value-pair (stream &key (value-required-p t) cookie-syntax)
@@ -272,7 +262,7 @@
internally."
(skip-whitespace stream)
(let ((name (if cookie-syntax
- (read-cookie-value stream :separators "=,")
+ (read-cookie-value stream :separators "=")
(read-token stream))))
(skip-whitespace stream)
(cons name
@@ -280,7 +270,7 @@
(eql (peek-char* stream nil) #\=))
(assert-char stream #\=)
(skip-whitespace stream)
- (cond (cookie-syntax (read-cookie-value stream :name name))
+ (cond (cookie-syntax (read-cookie-value stream))
((char= (peek-char* stream) #\") (read-quoted-string stream))
(t (read-token stream)))))))
Modified: trunk/thirdparty/chunga/util.lisp
===================================================================
--- trunk/thirdparty/chunga/util.lisp 2009-11-30 13:24:17 UTC (rev 4477)
+++ trunk/thirdparty/chunga/util.lisp 2009-12-01 21:58:01 UTC (rev 4478)
@@ -90,4 +90,4 @@
READ-CHAR* and friends \(see above) to simulate a character stream
although we're reading from a binary stream."
`(let ((*char-buffer* nil))
- , at body))
\ No newline at end of file
+ , at body))
More information about the Bknr-cvs
mailing list