On Jul 10, 2007, at 11:03 , Larry Clapp wrote:
Send answers to the list, preferably with at least one working test case displayed, e.g. something like
cl-user> #"\w " \s" "\w " \s"
Well, I ended up doing something slightly different.
(defun |#?-READER| (s c n) (declare (ignore c n)) (let ((term (read-char s))) (with-output-to-string (string) (loop :for char := (read-char s) :until (char= char term) :if (and (char= char #\) (char= (peek-char nil s) term)) :do (write-char (read-char s) string) :else :do (write-char char string)))))
(set-dispatch-macro-character ## #? #'|#?-READER|)
This means that whatever character follows the #? becomes the delimeter, like so:
CL-USER> #?"foo"bar" "foo"bar"
CL-USER> #?%foo"bar% "foo"bar"
CL-USER> #?%foo\bar% "foo\\bar"
CL-USER> #?%foo"bar% "foo\"bar"
Cheers, Pillsy