(defvar +whitespace-chars+
'(#\space #\tab #\newline #\return
- ;; Tested: sbcl unicode, allegrocl, and clisp use #\no-break_space
+ ;; Tested: sbcl unicode, allegrocl, openmcl,clisp use #\no-break_space
;; lispworks uses #\no-break-space
;; sbcl non-unicode doesn't support no break space
;; AllegroCL 8-bit strings don't fail on reading #\no-break_space,
;; but can't represent such a character
- #+lispworks #\no-break-space
- #+(or (and sbcl sb-unicode) (and allegro ics) clisp) #\no-break_space
+ ;; CMUCL errors when trying to read #\no-break_space
+ #+(and lispworks unicode) #\no-break-space
+ #+(or (and sbcl sb-unicode) (and allegro ics) (and clisp i18n)
+ (and openmcl openmcl-unicode-strings))
+ #\no-break_space
)
"List of whitespace characters for this lisp implementation.")
(eval-when (:compile-toplevel :load-toplevel :execute)
(setq cl:*features* (delete :clsql-lowercase-reader cl:*features*)))
+(defun replace-all (string part replacement &key (test #'char=) stream)
+ "Returns a new string in which all the occurences of the part
+is replaced with replacement. [FROM http://cl-cookbook.sourceforge.net/strings.html#manip]"
+ (let ((out (or stream (make-string-output-stream))))
+ (loop with part-length = (length part)
+ for old-pos = 0 then (+ pos part-length)
+ for pos = (search part string
+ :start2 old-pos
+ :test test)
+ do (write-string string out
+ :start old-pos
+ :end (or pos (length string)))
+ when pos do (write-string replacement out)
+ while pos)
+ (unless stream
+ (get-output-stream-string out))))
\ No newline at end of file