r4918: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Tue, 13 May 2003 23:10:44 +0000 (23:10 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Tue, 13 May 2003 23:10:44 +0000 (23:10 +0000)
views.lisp

index 1f01b7f5c8e3849abe86a4473a5f463c801cae3f..2286d9bdd6481119c290b34566ba2c2c00326b68 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: views.lisp,v 1.31 2003/05/13 15:56:50 kevin Exp $
+;;;; $Id: views.lisp,v 1.32 2003/05/13 23:10:44 kevin Exp $
 ;;;;
 ;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
 ;;;;
                   :accessor file-start-str)
    (file-end-str :type (or string null) :initform nil :initarg :file-end-str
                 :accessor file-end-str)
-   (list-start-fmtstr :type (or string null) :initform nil :initarg :list-start-fmtstr
-                     :accessor list-start-fmtstr)
-   (list-start-value-func :type (or function symbol null) :initform nil
-                         :initarg :list-start-value-func
-                         :accessor list-start-value-func)
+   (list-start-str-or-func :type (or string function null) :initform nil
+                          :initarg :list-start-str-or-func
+                     :accessor list-start-str-or-func)
    (list-start-indent :initform nil :initarg :list-start-indent
                      :accessor list-start-indent)
-   (list-end-fmtstr :type (or string null) :initform nil :initarg :list-end-fmtstr
-                   :accessor list-end-fmtstr)
-   (list-end-value-func :type (or function symbol null) :initform nil
-                       :initarg :list-end-value-func
-                       :accessor list-end-value-func)
+   (list-end-str-or-func :type (or string function null) :initform nil
+                        :initarg :list-end-str-or-func
+                   :accessor list-end-str-or-func)
    (list-end-indent :initform nil :initarg :list-end-indent
                    :accessor list-end-indent)
-   (obj-start-fmtstr :type (or string symbol null) :initform nil :initarg :obj-start-fmtstr
-                    :accessor obj-start-fmtstr)
-   (obj-start-value-func :initform nil :initarg :obj-start-value-func
-                        :accessor obj-start-value-func)
+   (obj-start-str-or-func :type (or string function null) :initform nil :initarg :obj-start-str-or-func
+                    :accessor obj-start-str-or-func)
    (obj-start-indent :initform nil :initarg :obj-start-indent
                     :accessor obj-start-indent)
-   (obj-end-fmtstr :type (or string null) :initform nil :initarg :obj-end-fmtstr
-                  :accessor obj-end-fmtstr)
-   (obj-end-value-func :type (or function symbol null) :initform nil
-                      :initarg :obj-end-value-func
-                      :accessor obj-end-value-func)
+   (obj-end-str-or-func :type (or string function null) :initform nil :initarg :obj-end-str-or-func
+                  :accessor obj-end-str-or-func)
    (obj-end-indent :initform nil :initarg :obj-end-indent
                   :accessor obj-end-indent)
    (obj-data-indent :initform nil :initarg :obj-data-indent
                    :accessor obj-data-indent)
    (obj-data-fmtstr :type (or string null) :initform nil :initarg :obj-data-fmtstr
                    :accessor obj-data-fmtstr)
-   (obj-data-end-fmtstr :type (or string null) :initform nil
-                       :initarg :obj-data-end-fmtstr
-                       :accessor obj-data-end-fmtstr)
    (obj-data-value-func :type (or function symbol null) :initform nil
                        :initarg :obj-data-value-func
                        :accessor obj-data-value-func)
+   (obj-data-end-str :type (or string null) :initform nil
+                       :initarg :obj-data-end-str
+                       :accessor obj-data-end-str)
    (link-slots :type list :initform nil
               :documentation "List of slot names that have hyperlinks"
               :accessor link-slots)
 (defun class-name-of (obj)
   (string-downcase (class-name (class-of obj))))
 
-(defun text-list-start-value-func (obj nitems)
-  (values (hyperobject-class-user-name obj) nitems))
-
-(defun htmlformat-list-start-value-func (x nitems) 
-  (values (hyperobject-class-user-name x) nitems (class-name-of x)))
+(defvar +newline-string+ (format nil "~%"))
 
 (defun initialize-text-view (view)
-  (setf (list-start-fmtstr view) "~a~P:~%")
-  (setf (list-start-value-func view) #'text-list-start-value-func)
+  (setf (list-start-str-or-func view)
+       (compile nil
+                #'(lambda (obj nitems strm)
+                    (format strm "~a~P:~%"
+                            (hyperobject-class-user-name obj) nitems))))
   (setf (list-start-indent view) t)
   (setf (obj-data-indent view) t)
-  (setf (obj-data-end-fmtstr view) (format nil "~%"))
-  )
+  (setf (obj-data-end-str view) +newline-string+))
+
+(defun html-list-start-func (obj nitems strm)
+  (format strm "<p><b>~a~p:</b></p><div class=\""
+         (hyperobject-class-user-name obj) nitems)
+  (write-string (class-name-of obj))
+  (write-string "\"><ul>~%" strm))
 
 (defun initialize-html-view (view)
   (initialize-text-view view)
   (setf (file-start-str view) (format nil "<html><body>~%"))
   (setf (file-end-str view) (format nil "</body><html>~%"))
   (setf (list-start-indent view) t)
-  (setf (list-start-fmtstr view)
-       "<p><b>~a~p:</b></p><div class=\"~A\"><ul>~%")
-  (setf (list-start-value-func view)
-       #'htmlformat-list-start-value-func)
-  (setf (list-end-fmtstr view) (format nil "</ul></div>~%"))
+  (setf (list-start-str-or-func view) #'html-list-start-func)
+  (setf (list-end-str-or-func view) (format nil "</ul></div>~%"))
   (setf (list-end-indent view) t)
-  (setf (list-end-value-func view) nil)
   (setf (obj-start-indent view) t)
-  (setf (obj-start-fmtstr view) "<li>")
-  (setf (obj-start-value-func view) nil)
+  (setf (obj-start-str-or-func view) "<li>")
   (setf (obj-end-indent view)  t)
-  (setf (obj-end-fmtstr view)  (format nil "</li>~%"))
-  (setf (obj-end-value-func view) nil)
+  (setf (obj-end-str-or-func view)  (format nil "</li>~%"))
   (setf (obj-data-indent view) t))
 
 (defun initialize-xhtml-view (view)
   (setf (file-start-str view) (format nil "<html><body>~%"))
   (setf (file-end-str view) (format nil "</body><html>~%"))
   (setf (list-start-indent view) t)
-  (setf (list-start-fmtstr view)
-       "<p><b>~a~p:</b></p><div class=\"~A\"><ul>~%")
-  (setf (list-start-value-func view)
-                   #'htmlformat-list-start-value-func)
-  (setf (list-end-fmtstr view) (format nil "</ul></div>~%"))
+  (setf (list-start-str-or-func view) #'html-list-start-func)
+  (setf (list-end-str-or-func view) (format nil "</ul></div>~%"))
   (setf (list-end-indent view) t)
-  (setf (list-end-value-func view) nil)
   (setf (obj-start-indent view) t)
-  (setf (obj-start-fmtstr view) "<li>")
-  (setf (obj-start-value-func view) nil)
+  (setf (obj-start-str-or-func view) "<li>")
   (setf (obj-end-indent view)  t)
-  (setf (obj-end-fmtstr view) (format nil "</li>~%"))
-  (setf (obj-end-value-func view) nil)
+  (setf (obj-end-str-or-func view) (format nil "</li>~%"))
   (setf (obj-data-indent view) t))
 
-(defun xmlformat-list-end-value-func (x)
-  (format nil "~alist" (class-name-of x)))
+(defun xmlformat-list-end-func (x strm)
+  (write-string "</" strm)
+  (write-string (class-name-of x) strm)
+  (write-string "list" strm)
+  (write-string ">" strm)
+  (write-char #\newline strm))
 
-(defun xmlformat-list-start-value-func (x nitems) 
-  (values (format nil "~alist" (class-name-of x)) (hyperobject-class-user-name x) nitems))
+(defun xmlformat-list-start-func (x nitems strm)
+  (write-char #\< strm)
+  (write-string (class-name-of x) strm)
+  (write-string "list><title>" strm)
+  (format strm "~A~P:</title> ~%"
+         (hyperobject-class-user-name x) nitems))
 
 (defun initialize-xml-view (view)
   (initialize-text-view view)
   (setf (file-start-str view) "") ; (std-xml-header)
   (setf (list-start-indent view)  t)
-  (setf (list-start-fmtstr view) "<~a><title>~a~p:</title> ~%")
-  (setf (list-start-value-func view)
-       #'xmlformat-list-start-value-func)
+  (setf (list-start-str-or-func view) #'xmlformat-list-start-func)
   (setf (list-end-indent view) t)
-  (setf (list-end-fmtstr view) "</~a>~%")
-  (setf (list-end-value-func view) #'xmlformat-list-end-value-func)
-  (setf (obj-start-fmtstr view) (format nil "<~(~a~)>" (object-class-name view)))
+  (setf (list-end-str-or-func view) #'xmlformat-list-end-func)
+  (setf (obj-start-str-or-func view) (format nil "<~(~a~)>" (object-class-name view)))
   (setf (obj-start-indent view) t)
-  (setf (obj-end-fmtstr view) (format nil "</~(~a~)>~%" (object-class-name view)))
+  (setf (obj-end-str-or-func view) (format nil "</~(~a~)>~%" (object-class-name view)))
   (setf (obj-end-indent view) nil)
   (setf (obj-data-indent view) nil))
 
 (defun fmt-list-start (obj view strm indent num-items)
   (when (list-start-indent view)
     (indent-spaces indent strm))
-  (let-when (fmtstr (list-start-fmtstr view))
-           (let-if (value-func (list-start-value-func view))
-                   (multiple-value-call #'format strm fmtstr
-                                        (funcall value-func obj num-items))
-                   (write-string fmtstr strm))))
+  (awhen (list-start-str-or-func view)
+        (if (stringp it)
+            (write-string it strm)
+            (funcall it obj num-items strm))))
 
 (defun fmt-list-end (obj view strm indent num-items)
   (declare (ignore num-items))
   (when (list-end-indent view)
       (indent-spaces indent strm))
-  (let-when (fmtstr (list-end-fmtstr view))
-           (let-if (value-func (list-end-value-func view))
-                   (multiple-value-call #'format strm fmtstr
-                                        (funcall value-func obj))
-                   (write-string fmtstr strm))))
+  (awhen (list-end-str-or-func view)
+        (if (stringp it)
+            (write-string it strm)
+            (funcall it obj strm))))
 
 ;;; Object Start and Ends
 
 (defun fmt-obj-start (obj view strm indent)
   (when (obj-start-indent view)
     (indent-spaces indent strm))
-  (let-when (fmtstr (obj-start-fmtstr view))
-           (let-if (value-func (obj-start-value-func view))
-                   (multiple-value-call #'format strm fmtstr
-                                        (funcall value-func obj))
-                   (write-string fmtstr strm))))
+  (awhen (obj-start-str-or-func view)
+        (if (stringp it)
+            (write-string it strm)
+            (funcall it obj strm))))
 
 (defun fmt-obj-end (obj view strm indent)
   (when (obj-end-indent view)
     (indent-spaces indent strm))
-  (let-when (fmtstr (obj-end-fmtstr view))
-           (let-if (value-func (obj-end-value-func view))
-                   (multiple-value-call #'format strm fmtstr 
-                                        (funcall value-func obj))
-                   (write-string fmtstr strm))))
+  (awhen (obj-end-str-or-func view)
+        (if (stringp it)
+            (write-string it strm)
+            (funcall it obj strm))))
   
 ;;; Object Data 
 
   (if (link-slots view)
       (fmt-obj-data-with-link obj view strm refvars)
       (fmt-obj-data-plain obj view strm))
-  (awhen (obj-data-end-fmtstr view)
+  (awhen (obj-data-end-str view)
         (write-string it strm)))
 
 (defun fmt-obj-data-plain (obj view strm)