2009年10月29日木曜日

文字列の中にCっぽく改行を入れる

Cなどのように文字列中の改行を"\n"と書けるようにしてみた。ダブルクオートにまで自前で設定できるなんてフリーダム。

;;;;文字列中の\nを改行に変える
(defun enable-string-reader ()
(set-macro-character
#\"
(lambda (stream ch)
(declare (ignore ch))
(with-output-to-string (s)
(loop
:for i = (read-char stream)
:until (char= i #\")
:do
(if (char= i #\\)
(let ((next (read-char stream)))
(case next
((#\n)
(write-char #\newline s))
(T
(write-char next s))))
(write-char i s)))))))

;;;SBCL用
(defun disable-string-reader ()
(set-macro-character #\" #'sb-impl::read-string))

0 件のコメント:

コメントを投稿