[bknr-cvs] r2432 - branches/trunk-reorg/xhtmlgen
hhubner at common-lisp.net
hhubner at common-lisp.net
Thu Jan 31 12:32:07 UTC 2008
Author: hhubner
Date: Thu Jan 31 07:32:06 2008
New Revision: 2432
Modified:
branches/trunk-reorg/xhtmlgen/package.lisp
branches/trunk-reorg/xhtmlgen/xhtmlgen.lisp
Log:
Fix xhtmlgen so that it properly flushes the output ystream when it
is done.
Modified: branches/trunk-reorg/xhtmlgen/package.lisp
==============================================================================
--- branches/trunk-reorg/xhtmlgen/package.lisp (original)
+++ branches/trunk-reorg/xhtmlgen/package.lisp Thu Jan 31 07:32:06 2008
@@ -1,7 +1,7 @@
(in-package :cl-user)
(defpackage :xhtml-generator
- (:use :common-lisp)
+ (:use :common-lisp :alexandria)
(:export #:html
#:html-stream
#:*html-sink*
Modified: branches/trunk-reorg/xhtmlgen/xhtmlgen.lisp
==============================================================================
--- branches/trunk-reorg/xhtmlgen/xhtmlgen.lisp (original)
+++ branches/trunk-reorg/xhtmlgen/xhtmlgen.lisp Thu Jan 31 07:32:06 2008
@@ -24,7 +24,6 @@
(in-package :xhtml-generator)
-;; fixme
(defvar *html-sink*)
;; html generation
@@ -45,48 +44,21 @@
(make-hash-table :test #'equal) ; #'eq is accurate but want to avoid rehashes
)
-;; support for strings encoded in latin-1 or utf-8 on non-unicode lisps
-
-#-rune-is-character
-(defun make-sink-for-utf8-strings (stream)
- (cxml:make-recoder (cxml:make-character-stream-sink/utf8 stream :canonical nil :indentation 3)
- #'cxml::utf8-string-to-rod))
-
-#-rune-is-character
-(defun make-sink-for-latin1-strings (stream)
- (cxml:make-recoder (cxml:make-character-stream-sink/utf8 stream :canonical nil :indentation 3)
- #'cxml::string-rod))
-
-#-rune-is-character
-(defvar *make-sink-for-internal-strings-fn* #'make-sink-for-utf8-strings)
-
-#-rune-is-character
-(defun make-sink-for-internal-strings (stream)
- (funcall *make-sink-for-internal-strings-fn* stream))
-
-#-rune-is-character
-(defun set-string-encoding (encoding)
- (ecase encoding
- (:latin-1 (setf *make-sink-for-internal-strings-fn* #'make-sink-for-latin1-strings))
- (:utf-8 (setf *make-sink-for-internal-strings-fn* #'make-sink-for-utf8-strings))))
-
(defmacro html (&rest forms &environment env)
;; just emit html to the current stream
- `(let ((*html-sink* (if (boundp '*html-sink*)
- *html-sink*
- #+rune-is-character
- (cxml:make-character-stream-sink *standard-output* :canonical nil :indentation 3)
- #-rune-is-character
- (make-sink-for-internal-strings *standard-output*))))
- ,(process-html-forms forms env)))
+ (with-gensyms (body)
+ `(labels ((,body ()
+ ,(process-html-forms forms env)))
+ (if (boundp '*html-sink*)
+ (,body)
+ (let ((*html-sink* (cxml:make-character-stream-sink *standard-output* :canonical nil :indentation 3)))
+ (,body)
+ (sax:end-document *html-sink*))))))
(defmacro html-stream (stream &rest forms &environment env)
- `(let ((*html-sink*
- #+rune-is-character
- (cxml:make-character-stream-sink ,stream :canonical nil :indentation 3)
- #-rune-is-character
- (make-sink-for-internal-strings ,stream)))
- ,(process-html-forms forms env)))
+ `(let ((*html-sink* (cxml:make-character-stream-sink ,stream :canonical nil :indentation 3)))
+ ,(process-html-forms forms env)
+ (sax:end-document *html-sink*)))
(defun get-process (form)
(let ((ent (gethash form *html-process-table*)))
More information about the Bknr-cvs
mailing list