Revision: 4235
Author: edi
URL: http://bknr.net/trac/changeset/4235
Checkpoint
U trunk/thirdparty/hunchentoot/acceptor.lisp
U trunk/thirdparty/hunchentoot/connection-dispatcher.lisp
U trunk/thirdparty/hunchentoot/packages.lisp
U trunk/thirdparty/hunchentoot/request.lisp
U trunk/thirdparty/hunchentoot/util.lisp
Change set too large, please see URL above
Revision: 4234
Author: hans
URL: http://bknr.net/trac/changeset/4234
Implement automatic test suite.
U trunk/thirdparty/hunchentoot/hunchentoot-test.asd
A trunk/thirdparty/hunchentoot/test/script-engine.lisp
A trunk/thirdparty/hunchentoot/test/script.lisp
A trunk/thirdparty/hunchentoot/test/test-handlers.lisp
D trunk/thirdparty/hunchentoot/test/test.lisp
Change set too large, please see URL above
Revision: 4233
Author: hans
URL: http://bknr.net/trac/changeset/4233
die sprachpolizei, tatue!
U trunk/thirdparty/drakma/doc/index.html
Modified: trunk/thirdparty/drakma/doc/index.html
===================================================================
--- trunk/thirdparty/drakma/doc/index.html 2009-02-10 16:21:06 UTC (rev 4232)
+++ trunk/thirdparty/drakma/doc/index.html 2009-02-10 16:22:10 UTC (rev 4233)
@@ -805,7 +805,7 @@
the <code><i>parameters</i></code> alist can also be pathnames, unary
functions, open binary input streams, or lists where the first element
is of one of the former types. These values denote files which should
-be sent as part of the request body, i.e. if such file designators are
+be sent as part of the request body. If such file designators are
present in <code><i>parameters</i></code>, the content type of the
request is <em>always</em> <code>multipart/form-data</code>. If the
value denoting a file is a list, the part of the list behind the first
Revision: 4232
Author: hans
URL: http://bknr.net/trac/changeset/4232
die sprachpolizei, tatue!
U trunk/thirdparty/drakma/request.lisp
Modified: trunk/thirdparty/drakma/request.lisp
===================================================================
--- trunk/thirdparty/drakma/request.lisp 2009-02-10 14:50:32 UTC (rev 4231)
+++ trunk/thirdparty/drakma/request.lisp 2009-02-10 16:21:06 UTC (rev 4232)
@@ -245,11 +245,11 @@
PARAMETERS alist can also be pathnames, open binary input streams,
unary functions, or lists where the first element is of one of the
former types. These values denote files which should be sent as part
-of the request body, i.e. if files are present in PARAMETERS, the
-content type of the request is always `multipart/form-data'. If the
-value is a list, the part of the list behind the first element is
-treated as a plist which can be used to specify a content type and/or
-a filename for the file, i.e. such a value could look like, e.g.,
+of the request body. If files are present in PARAMETERS, the content
+type of the request is always `multipart/form-data'. If the value is
+a list, the part of the list behind the first element is treated as a
+plist which can be used to specify a content type and/or a filename
+for the file, i.e. such a value could look like, e.g.,
\(#p\"/tmp/my_file.doc\" :content-type \"application/msword\"
:filename \"upload.doc\").
Revision: 4231
Author: hans
URL: http://bknr.net/trac/changeset/4231
Fix cookie parsing.
U trunk/thirdparty/chunga/doc/index.html
U trunk/thirdparty/chunga/packages.lisp
U trunk/thirdparty/drakma/cookies.lisp
U trunk/thirdparty/drakma/read.lisp
U trunk/thirdparty/drakma/util.lisp
Modified: trunk/thirdparty/chunga/doc/index.html
===================================================================
--- trunk/thirdparty/chunga/doc/index.html 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/chunga/doc/index.html 2009-02-10 14:50:32 UTC (rev 4231)
@@ -91,6 +91,7 @@
<li><a href="#assert-char"><code>assert-char</code></a>
<li><a href="#skip-whitespace"><code>skip-whitespace</code></a>
<li><a href="#read-char*"><code>read-char*</code></a>
+ <li><a href="#peek-char*"><code>peek-char*</code></a>
<li><a href="#trim-whitespace"><code>trim-whitespace</code></a>
<li><a href="#*current-error-message*"><code>*current-error-message*</code></a>
<li><a href="#*accept-bogus-eols*"><code>*accept-bogus-eols*</code></a>
@@ -640,6 +641,25 @@
<!-- End of entry for READ-CHAR* -->
+<!-- Entry for PEEK-CHAR* -->
+
+<p><br>[Function]<br><a class=none name='peek-char*'><b>peek-char*</b> <i>stream <tt>&optional</tt> eof-error-p eof-value</i> => <i>boolean</i></a>
+<blockquote><br>
+
+Returns a true value if a character can be read from the binary
+stream <code><i>stream</i></code>. If <code><i>eof-error-p</i></code>
+has a true value, an error is signalled if no character remains to be
+read. <code><i>eof-value</i></code> specifies the value to return
+if <code><i>eof-error-p</i></code> is false and the end of the file
+has been reached.
+<p>
+See <a href="#with-character-stream-semantics"><code>WITH-CHARACTER-STREAM-SEMANTICS</code></a>.
+
+</blockquote>
+
+<!-- End of entry for PEEK-CHAR* -->
+
+
<!-- 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>
Modified: trunk/thirdparty/chunga/packages.lisp
===================================================================
--- trunk/thirdparty/chunga/packages.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/chunga/packages.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -54,6 +54,7 @@
:input-chunking-unexpected-end-of-file
:make-chunked-stream
:read-http-headers
+ :peek-char*
:read-char*
:read-line*
:read-name-value-pair
Modified: trunk/thirdparty/drakma/cookies.lisp
===================================================================
--- trunk/thirdparty/drakma/cookies.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/drakma/cookies.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -249,7 +249,7 @@
of three-element lists where each one contains the name of the
cookie, the value of the cookie, and an attribute/value list for
the optional cookie parameters."
- (with-input-from-string (stream string)
+ (with-sequence-from-string (stream string)
(loop with *current-error-message* = (format nil "While parsing cookie header ~S:" string)
for first = t then nil
for next = (and (skip-whitespace stream)
Modified: trunk/thirdparty/drakma/read.lisp
===================================================================
--- trunk/thirdparty/drakma/read.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/drakma/read.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -60,7 +60,7 @@
HTTP-REQUEST. Returns NIL if there is no such header amongst
HEADERS."
(when-let (content-type (header-value :content-type headers))
- (with-input-from-sequence (stream (map 'list 'char-code content-type))
+ (with-sequence-from-string (stream content-type)
(let* ((*current-error-message* "Corrupted Content-Type header:")
(type (read-token stream))
(subtype (and (assert-char stream #\/)
@@ -80,8 +80,8 @@
"Reads and consumes from STREAM any number of commas and
whitespace. Returns the following character or NIL in case of
END-OF-FILE."
- (loop while (eql (peek-char nil stream nil) #\,)
- do (read-char stream) (skip-whitespace stream))
+ (loop while (eql (peek-char* stream nil) #\,)
+ do (read-char* stream) (skip-whitespace stream))
(skip-whitespace stream))
(defun read-tokens-and-parameters (string &key (value-required-p t))
@@ -94,7 +94,7 @@
\(the attribute/value pairs). If VALUE-REQUIRED-P is NIL, the
value part \(including the #\\= character) of each attribute/value
pair is optional."
- (with-input-from-string (stream string)
+ (with-sequence-from-string (stream string)
(loop with *current-error-message* = (format nil "While parsing ~S:" string)
for first = t then nil
for next = (and (skip-whitespace stream)
Modified: trunk/thirdparty/drakma/util.lisp
===================================================================
--- trunk/thirdparty/drakma/util.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/drakma/util.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -274,3 +274,9 @@
(or (null candidate-subtype)
(string-equal subtype candidate-subtype)))))
+(defmacro with-sequence-from-string ((stream string) &body body)
+ "Kludge to make Chunga tokenizing functionality usable. Works like
+ WITH-INPUT-FROM-STRING, but creates a sequence of octets that works
+ with CHUNGA::PEEK-CHAR* and friends."
+ `(flex:with-input-from-sequence (,stream (map 'list #'char-code ,string))
+ ,@body))
\ No newline at end of file
Revision: 4230
Author: edi
URL: http://bknr.net/trac/changeset/4230
Checkpoint
U trunk/thirdparty/hunchentoot/acceptor.lisp
U trunk/thirdparty/hunchentoot/connection-dispatcher.lisp
U trunk/thirdparty/hunchentoot/packages.lisp
Modified: trunk/thirdparty/hunchentoot/acceptor.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/acceptor.lisp 2009-02-10 14:25:30 UTC (rev 4229)
+++ trunk/thirdparty/hunchentoot/acceptor.lisp 2009-02-10 14:46:11 UTC (rev 4230)
@@ -32,12 +32,10 @@
(defclass acceptor ()
((port :initarg :port
:reader acceptor-port
- :documentation "The port the acceptor is listening on.
-See START-SERVER.")
+ :documentation "The port the acceptor is listening on.")
(address :initarg :address
:reader acceptor-address
- :documentation "The address the acceptor is listening
-on. See START-SERVER.")
+ :documentation "The address the acceptor is listening on.")
(name :initarg :name
:accessor acceptor-name
:documentation "The optional name of the acceptor, a symbol.")
@@ -46,10 +44,10 @@
:documentation "Determines which class of request
objects is created when a request comes in and should be \(a symbol
naming) a class which inherits from REQUEST.")
- (dispatch-table :initarg :dispatch-table
- :accessor acceptor-dispatch-table
- :documentation "The dispatch-table used by this
-acceptor. Can be NIL to denote that *DISPATCH-TABLE* should be used.")
+ (request-dispatcher :initarg :request-dispatcher
+ :accessor acceptor-request-dispatcher
+ :documentation "The dispatcher function used by
+this acceptor.")
(output-chunking-p :initarg :output-chunking-p
:reader acceptor-output-chunking-p
:documentation "Whether the acceptor may use output chunking.")
@@ -71,28 +69,28 @@
semantics of this parameter is determined by the underlying Lisp's
implementation of socket timeouts.")
(write-timeout :initarg :write-timeout
- :reader acceptor-write-timeout
- :documentation "The connection timeout of the acceptor,
+ :reader acceptor-write-timeout
+ :documentation "The connection timeout of the acceptor,
specified in (fractional) seconds. The precise semantics of this
parameter is determined by the underlying Lisp's implementation of
socket timeouts.")
(connection-dispatcher :initarg :connection-dispatcher
- :initform nil
- :reader acceptor-connection-dispatcher
- :documentation "The connection dispatcher that is
+ :initform nil
+ :reader acceptor-connection-dispatcher
+ :documentation "The connection dispatcher that is
responsible for listening to new connections and scheduling them for
execution.")
#+:lispworks
- (acceptor :accessor acceptor-acceptor
- :documentation "The Lisp process which accepts incoming
+ (process :accessor acceptor-process
+ :documentation "The Lisp process which accepts incoming
requests.")
#-:lispworks
(listen-socket :accessor acceptor-listen-socket
:documentation "The listen socket for incoming
connections.")
(acceptor-shutdown-p :initform nil
- :accessor acceptor-shutdown-p
- :documentation "Flag that makes the acceptor
+ :accessor acceptor-shutdown-p
+ :documentation "Flag that makes the acceptor
shutdown itself when set to something other than NIL.")
(access-logger :initarg :access-logger
:accessor acceptor-access-logger
@@ -120,66 +118,12 @@
:request-class 'request
:output-chunking-p t
:input-chunking-p t
- :dispatch-table nil
+ :request-dispatcher 'dispatch-request
:access-logger 'log-access
:message-logger 'log-message)
(:documentation "An object of this class contains all relevant
information about a running Hunchentoot acceptor instance."))
-(defmethod initialize-instance :after ((acceptor acceptor)
- &key connection-dispatcher-class
- connection-dispatcher-arguments
- (threaded *supports-threads-p* threaded-specified-p)
- (persistent-connections-p
- threaded
- persistent-connections-specified-p)
- (connection-timeout
- *default-connection-timeout*
- connection-timeout-provided-p)
- (read-timeout nil read-timeout-provided-p)
- (write-timeout nil write-timeout-provided-p))
- "The CONNECTION-DISPATCHER-CLASS and CONNECTION-DISPATCHER-ARGUMENTS
-arguments to the creation of a acceptor instance determine the
-connection dispatcher instance that is created. THREADED is the user
-friendly version of the CONNECTION-DISPATCHER-CLASS option. If it is
-NIL, an unthreaded connection dispatcher is used. It is an error to
-specify both THREADED and a CONNECTION-DISPATCHER-CLASS argument.
-
-The PERSISTENT-CONNECTIONS-P keyword argument defaults to the value of
-the THREADED keyword argument but can be overridden.
-
-If a neither READ-TIMEOUT nor WRITE-TIMEOUT are specified by the user,
-the acceptor's read and write timeouts default to the CONNECTION-TIMEOUT
-value. If either of READ-TIMEOUT or WRITE-TIMEOUT is specified,
-CONNECTION-TIMEOUT is not used and may not be supplied."
- (declare (ignore read-timeout write-timeout))
- (when (and threaded-specified-p connection-dispatcher-class)
- (parameter-error "Can't use both THREADED and CONNECTION-DISPATCHER-CLASS arguments."))
- (unless persistent-connections-specified-p
- (setf (acceptor-persistent-connections-p acceptor) persistent-connections-p))
- (unless (acceptor-connection-dispatcher acceptor)
- (setf (slot-value acceptor 'connection-dispatcher)
- (apply #'make-instance
- (or connection-dispatcher-class
- (if threaded
- 'one-thread-per-connection-dispatcher
- 'single-threaded-connection-dispatcher))
- :acceptor acceptor
- connection-dispatcher-arguments)))
- (if (or read-timeout-provided-p write-timeout-provided-p)
- (when connection-timeout-provided-p
- (parameter-error "Can't have both CONNECTION-TIMEOUT and either of READ-TIMEOUT and WRITE-TIMEOUT."))
- (setf (slot-value acceptor 'read-timeout) connection-timeout
- (slot-value acceptor 'write-timeout) connection-timeout)))
-
-(defgeneric acceptor-ssl-p (acceptor)
- (:documentation "Returns a true value if ACCEPTOR is an SSL acceptor.")
- (:method ((acceptor t))
- nil))
-
-(defun ssl-p (&optional (acceptor *acceptor*))
- (acceptor-ssl-p acceptor))
-
(defmethod print-object ((acceptor acceptor) stream)
(print-unreadable-object (acceptor stream :type t)
(format stream "\(host ~A, port ~A)"
@@ -347,7 +291,7 @@
(when startup-condition
(error startup-condition))
(mp:process-stop listener-process)
- (setf (acceptor-acceptor acceptor) listener-process))
+ (setf (acceptor-process acceptor) listener-process))
#-:lispworks
(setf (acceptor-listen-socket acceptor)
(usocket:socket-listen (or (acceptor-address acceptor)
@@ -362,7 +306,7 @@
using HANDLE-INCOMING-CONNECTION.")
(:method ((acceptor acceptor))
#+:lispworks
- (mp:process-unstop (acceptor-acceptor acceptor))
+ (mp:process-unstop (acceptor-process acceptor))
#-:lispworks
(usocket:with-acceptor-socket (listener (acceptor-listen-socket acceptor))
(loop
@@ -405,6 +349,7 @@
(chunked-stream-stream stream))
(t stream))))
+;;; TODO
(defgeneric dispatch-request (acceptor request reply)
(:documentation "")
(:method (acceptor request reply)
Modified: trunk/thirdparty/hunchentoot/connection-dispatcher.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/connection-dispatcher.lisp 2009-02-10 14:25:30 UTC (rev 4229)
+++ trunk/thirdparty/hunchentoot/connection-dispatcher.lisp 2009-02-10 14:46:11 UTC (rev 4230)
@@ -65,13 +65,7 @@
(defgeneric shutdown (connection-dispatcher)
(:documentation "Terminate all threads that are currently associated
-with the connection dispatcher, if any.")
- (:method ((dispatcher t))
- #+:lispworks
- (when-let (acceptor (acceptor-acceptor (acceptor dispatcher)))
- ;; kill the main acceptor process, see LW documentation for
- ;; COMM:START-UP-SERVER
- (mp:process-kill acceptor))))
+with the connection dispatcher, if any."))
(defclass single-threaded-connection-dispatcher (connection-dispatcher)
()
@@ -87,16 +81,27 @@
(defclass one-thread-per-connection-dispatcher (connection-dispatcher)
((acceptor-process :accessor acceptor-process
:documentation "Process that accepts incoming
- connections and dispatches them to new processes
- for request execution."))
+connections and dispatches them to new processes for request
+execution."))
(:documentation "Connection Dispatcher that starts one thread for
listening to incoming requests and one thread for each incoming
connection."))
+;; usocket implementation
+
+#-:lispworks
+(defmethod shutdown ((dispatcher connection-dispatcher)))
+
+#-:lispworks
+(defmethod shutdown ((dispatcher one-thread-per-connection-dispatcher))
+ ;; just wait until the acceptor process has finished, then return
+ (loop
+ (unless (bt:thread-alive-p (acceptor-process dispatcher))
+ (return))
+ (sleep 1)))
+
+#-:lispworks
(defmethod execute-acceptor ((dispatcher one-thread-per-connection-dispatcher))
- #+:lispworks
- (accept-connections (acceptor dispatcher))
- #-:lispworks
(setf (acceptor-process dispatcher)
(bt:make-thread (lambda ()
(accept-connections (acceptor dispatcher)))
@@ -105,12 +110,34 @@
(acceptor-port (acceptor dispatcher))))))
#-:lispworks
-(defmethod shutdown ((dispatcher one-thread-per-connection-dispatcher))
- (loop
- while (bt:thread-alive-p (acceptor-process dispatcher))
- do (sleep 1)))
+(defun client-as-string (socket)
+ (let ((address (usocket:get-peer-address socket))
+ (port (usocket:get-peer-port socket)))
+ (when (and address port)
+ (format nil "~A:~A"
+ (usocket:vector-quad-to-dotted-quad address)
+ port))))
+#-:lispworks
+(defmethod handle-incoming-connection ((dispatcher one-thread-per-connection-dispatcher) socket)
+ (bt:make-thread (lambda ()
+ (process-connection (acceptor dispatcher) socket))
+ :name (format nil "Hunchentoot worker \(client: ~A)" (client-as-string socket))))
+
+;; LispWorks implementation
+
#+:lispworks
+(defmethod shutdown ((dispatcher connection-dispatcher))
+ (when-let (process (acceptor-process (acceptor dispatcher)))
+ ;; kill the main acceptor process, see LW documentation for
+ ;; COMM:START-UP-SERVER
+ (mp:process-kill process)))
+
+#+:lispworks
+(defmethod execute-acceptor ((dispatcher one-thread-per-connection-dispatcher))
+ (accept-connections (acceptor dispatcher)))
+
+#+:lispworks
(defmethod handle-incoming-connection ((dispatcher one-thread-per-connection-dispatcher) handle)
(incf *worker-counter*)
;; check if we need to perform a global GC
@@ -123,18 +150,3 @@
(get-peer-address-and-port handle)))
nil #'process-connection
(acceptor dispatcher) handle))
-
-#-:lispworks
-(defun client-as-string (socket)
- (let ((address (usocket:get-peer-address socket))
- (port (usocket:get-peer-port socket)))
- (when (and address port)
- (format nil "~A:~A"
- (usocket:vector-quad-to-dotted-quad address)
- port))))
-
-#-:lispworks
-(defmethod handle-incoming-connection ((dispatcher one-thread-per-connection-dispatcher) socket)
- (bt:make-thread (lambda ()
- (process-connection (acceptor dispatcher) socket))
- :name (format nil "Hunchentoot worker \(client: ~A)" (client-as-string socket))))
Modified: trunk/thirdparty/hunchentoot/packages.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/packages.lisp 2009-02-10 14:25:30 UTC (rev 4229)
+++ trunk/thirdparty/hunchentoot/packages.lisp 2009-02-10 14:46:11 UTC (rev 4230)
@@ -143,9 +143,11 @@
"DISPATCH-REQUEST"
"DO-SESSIONS"
"ESCAPE-FOR-HTML"
+ "EXECUTE-ACCEPTOR"
"GET-PARAMETER"
"GET-PARAMETERS"
"GET-PARAMETERS*"
+ "HANDLE-INCOMING-CONNECTION"
"HANDLE-IF-MODIFIED-SINCE"
"HANDLE-STATIC-FILE"
"HANDLER-DONE"
@@ -194,7 +196,7 @@
"SCRIPT-NAME*"
"SEND-HEADERS"
"ACCEPTOR-ADDRESS"
- "ACCEPTOR-DISPATCH-TABLE"
+ "ACCEPTOR-REQUEST-DISPATCHER"
"ACCEPTOR-NAME"
"ACCEPTOR-PORT"
"SERVER-PROTOCOL"
@@ -209,10 +211,10 @@
"SESSION-VALUE"
"SET-COOKIE"
"SET-COOKIE*"
- "SSL-P"
- "START-SERVER"
+ "SHUTDOWN"
+ "START"
"START-SESSION"
- "STOP-SERVER"
+ "STOP"
"URL-DECODE"
"URL-ENCODE"
"USER-AGENT"))
Revision: 4229
Author: hans
URL: http://bknr.net/trac/changeset/4229
revert 4228
U trunk/thirdparty/chunga/doc/index.html
U trunk/thirdparty/chunga/packages.lisp
Modified: trunk/thirdparty/chunga/doc/index.html
===================================================================
--- trunk/thirdparty/chunga/doc/index.html 2009-02-10 13:46:48 UTC (rev 4228)
+++ trunk/thirdparty/chunga/doc/index.html 2009-02-10 14:25:30 UTC (rev 4229)
@@ -89,7 +89,9 @@
<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>
<li><a href="#assert-char"><code>assert-char</code></a>
+ <li><a href="#skip-whitespace"><code>skip-whitespace</code></a>
<li><a href="#read-char*"><code>read-char*</code></a>
+ <li><a href="#trim-whitespace"><code>trim-whitespace</code></a>
<li><a href="#*current-error-message*"><code>*current-error-message*</code></a>
<li><a href="#*accept-bogus-eols*"><code>*accept-bogus-eols*</code></a>
<li><a href="#*treat-semicolon-as-continuation*"><code>*treat-semicolon-as-continuation*</code></a>
@@ -605,6 +607,25 @@
<!-- End of entry for ASSERT-CHAR -->
+<!-- Entry for SKIP-WHITESPACE -->
+
+<p><br>[Function]<br><a class=none name='skip-whitespace'><b>skip-whitespace</b> <i>stream</i> => <i>char-or-nil</i></a>
+<blockquote><br>
+
+Consume characters from the binary stream <code><i>stream</i></code> until an <a
+href="http://www.lispworks.com/documentation/HyperSpec/Body/e_end_of.htm"><code>END-OF-FILE</code></a> is
+encountered or a non-whitespace (according to <a href="http://www.rfc.net/rfc2616.html">RFC 2616</a>)
+characters is seen. This character is returned (or <code>NIL</code> in case
+of <a
+href="http://www.lispworks.com/documentation/HyperSpec/Body/e_end_of.htm"><code>END-OF-FILE</code></a>).
+<p>
+See <a href="#with-character-stream-semantics"><code>WITH-CHARACTER-STREAM-SEMANTICS</code></a>.
+
+</blockquote>
+
+<!-- End of entry for SKIP-WHITESPACE -->
+
+
<!-- Entry for READ-CHAR* -->
<p><br>[Function]<br><a class=none name='read-char*'><b>read-char*</b> <i>stream</i> => <i>char</i></a>
@@ -619,6 +640,19 @@
<!-- End of entry for READ-CHAR* -->
+<!-- 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>
+<blockquote><br>
+
+Returns a version of the string <code><i>string</i></code> where spaces and tab
+characters are trimmed from the start and the end.
+
+</blockquote>
+
+<!-- End of entry for TRIM-WHITESPACE -->
+
+
<!-- Entry for *CURRENT-ERROR-MESSAGE* -->
<p><br>[Special variable]<br><a class=none name='*current-error-message*'><b>*current-error-message*</b></a>
Modified: trunk/thirdparty/chunga/packages.lisp
===================================================================
--- trunk/thirdparty/chunga/packages.lisp 2009-02-10 13:46:48 UTC (rev 4228)
+++ trunk/thirdparty/chunga/packages.lisp 2009-02-10 14:25:30 UTC (rev 4229)
@@ -59,6 +59,8 @@
:read-name-value-pair
:read-name-value-pairs
:read-token
+ :skip-whitespace
:syntax-error
+ :trim-whitespace
:with-character-stream-semantics))
Revision: 4228
Author: hans
URL: http://bknr.net/trac/changeset/4228
Unexport SKIP-WHITESPACE and TRIM-WHITESPACE
U trunk/thirdparty/chunga/doc/index.html
U trunk/thirdparty/chunga/packages.lisp
Modified: trunk/thirdparty/chunga/doc/index.html
===================================================================
--- trunk/thirdparty/chunga/doc/index.html 2009-02-10 11:48:19 UTC (rev 4227)
+++ trunk/thirdparty/chunga/doc/index.html 2009-02-10 13:46:48 UTC (rev 4228)
@@ -89,9 +89,7 @@
<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>
<li><a href="#assert-char"><code>assert-char</code></a>
- <li><a href="#skip-whitespace"><code>skip-whitespace</code></a>
<li><a href="#read-char*"><code>read-char*</code></a>
- <li><a href="#trim-whitespace"><code>trim-whitespace</code></a>
<li><a href="#*current-error-message*"><code>*current-error-message*</code></a>
<li><a href="#*accept-bogus-eols*"><code>*accept-bogus-eols*</code></a>
<li><a href="#*treat-semicolon-as-continuation*"><code>*treat-semicolon-as-continuation*</code></a>
@@ -607,25 +605,6 @@
<!-- End of entry for ASSERT-CHAR -->
-<!-- Entry for SKIP-WHITESPACE -->
-
-<p><br>[Function]<br><a class=none name='skip-whitespace'><b>skip-whitespace</b> <i>stream</i> => <i>char-or-nil</i></a>
-<blockquote><br>
-
-Consume characters from the binary stream <code><i>stream</i></code> until an <a
-href="http://www.lispworks.com/documentation/HyperSpec/Body/e_end_of.htm"><code>END-OF-FILE</code></a> is
-encountered or a non-whitespace (according to <a href="http://www.rfc.net/rfc2616.html">RFC 2616</a>)
-characters is seen. This character is returned (or <code>NIL</code> in case
-of <a
-href="http://www.lispworks.com/documentation/HyperSpec/Body/e_end_of.htm"><code>END-OF-FILE</code></a>).
-<p>
-See <a href="#with-character-stream-semantics"><code>WITH-CHARACTER-STREAM-SEMANTICS</code></a>.
-
-</blockquote>
-
-<!-- End of entry for SKIP-WHITESPACE -->
-
-
<!-- Entry for READ-CHAR* -->
<p><br>[Function]<br><a class=none name='read-char*'><b>read-char*</b> <i>stream</i> => <i>char</i></a>
@@ -640,19 +619,6 @@
<!-- End of entry for READ-CHAR* -->
-<!-- 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>
-<blockquote><br>
-
-Returns a version of the string <code><i>string</i></code> where spaces and tab
-characters are trimmed from the start and the end.
-
-</blockquote>
-
-<!-- End of entry for TRIM-WHITESPACE -->
-
-
<!-- Entry for *CURRENT-ERROR-MESSAGE* -->
<p><br>[Special variable]<br><a class=none name='*current-error-message*'><b>*current-error-message*</b></a>
Modified: trunk/thirdparty/chunga/packages.lisp
===================================================================
--- trunk/thirdparty/chunga/packages.lisp 2009-02-10 11:48:19 UTC (rev 4227)
+++ trunk/thirdparty/chunga/packages.lisp 2009-02-10 13:46:48 UTC (rev 4228)
@@ -59,8 +59,6 @@
:read-name-value-pair
:read-name-value-pairs
:read-token
- :skip-whitespace
:syntax-error
- :trim-whitespace
:with-character-stream-semantics))