DO-HTML cleanup
authorMatthew Mondor <mmondor@pulsar-zone.net>
Tue, 7 Feb 2012 10:38:34 +0000 (10:38 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Tue, 7 Feb 2012 10:38:34 +0000 (10:38 +0000)
mmsoftware/cl/server/html.lisp

index 471a000..98b81a7 100644 (file)
@@ -1,4 +1,4 @@
-;;;; $Id: html.lisp,v 1.10 2012/02/07 09:53:05 mmondor Exp $
+;;;; $Id: html.lisp,v 1.11 2012/02/07 10:38:34 mmondor Exp $
 
 #|
 
@@ -51,7 +51,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 (in-package :html)
 
 (defparameter *rcsid*
-  "$Id: html.lisp,v 1.10 2012/02/07 09:53:05 mmondor Exp $")
+  "$Id: html.lisp,v 1.11 2012/02/07 10:38:34 mmondor Exp $")
 
 
 (defparameter *html-mode* :xhtml
@@ -211,25 +211,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      list)
     (reverse out)))
 
-;00:46 <ASau`> phadthai: (let ((s-stream (gensym)) (if stream (let ((s-stream 
-;              stream)) ... )))) is wrong.
-;00:46 <MTecknology> we'd have to hire someone to manage just that..
-;00:46 <ASau`> phadthai: what if you supply something that generates stream?
-;00:46 <ASau`> phadthai: it will be calculated twice.
-;00:52 <ASau`> phadthai: actually, no, that construct is right.
-;00:54 <ASau`> phadthai: still the code wouldn't pass my review :)
-;00:54 <phadthai> ASau`: I still consider myself a lisp newbie :)
-;00:55 <ASau`> In particular (lambda (i) (if (stringp i) ...)) is repetitious,
-;00:55 <ASau`> it should be function.
-;00:56 <phadthai> current code is 
-;http://cvs.pulsar-zone.net/cgi-bin/cvsweb.cgi/mmondor/mmsoftware/cl/server/
-;00:56 <ASau`> I doubt that mapcar's value is used, perhaps it should be just 
-;              dolist.
-;00:58 <ASau`> It's not lisp-specific.
-;01:01 <ASau`> phadthai: There're more or less general approaches to visible 
-;              factors, it doesn't depend on whether it is Lisp or not.
-
-
 (defmacro do-html (stream &body tree)
   "Utility macro to generate HTML easily from Common Lisp code.
 At compile time, the supplied TREE template is converted to a list
@@ -249,21 +230,19 @@ HEAD, single attributes are expanded redundantly, and non-closing tags
 are suffixed with ' /', automatically."
   (let ((list (html-coalesce (reverse (html-parse-r tree))))
        (s-stream (gensym)))
-    `(let ((*print-pretty* nil))
-       ,(if stream
-           `(let ((,s-stream ,stream))
-              ,@(mapcar #'(lambda (i)
-                            (if (stringp i)
-                                `(write-string ,i ,s-stream)
-                                `(format ,s-stream "~A" ,i)))
-                        list)
-              nil)
-           `(with-output-to-string (,s-stream)
-              ,@(mapcar #'(lambda (i)
-                            (if (stringp i)
-                                `(write-string ,i ,s-stream)
-                                `(format ,s-stream "~A" ,i)))
-                        list))))))
+    (flet ((gen-prints (l s)
+            (mapcar #'(lambda (i)
+                        (if (stringp i)
+                            `(write-string ,i ,s)
+                            `(format ,s "~A" ,i)))
+                    l)))
+      `(let ((*print-pretty* nil))
+        ,(if stream
+             `(let ((,s-stream ,stream))
+                ,@(gen-prints list s-stream)
+                nil)
+             `(with-output-to-string (,s-stream)
+                ,@(gen-prints list s-stream)))))))
 
 (defmacro do-html-loop ((&body loop-clauses) &body body)
   "This macro provides an easy interface to produce HTML markup with loops.