r5097: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 12 Jun 2003 11:10:38 +0000 (11:10 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 12 Jun 2003 11:10:38 +0000 (11:10 +0000)
views.lisp

index b9097a1f93f47b62402edf51c58f7cd96766aac9..7cf370db7415e68af6eea30c471d9c2d20187275 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: views.lisp,v 1.50 2003/06/06 21:59:29 kevin Exp $
+;;;; $Id: views.lisp,v 1.51 2003/06/12 11:10:38 kevin Exp $
 ;;;;
 ;;;; This file is Copyright (c) 2000-2003 by Kevin M. Rosenberg
 ;;;; *************************************************************************
    (link-slots :type list :initform nil
               :documentation "List of slot names that have hyperlinks"
               :accessor link-slots)
-   (link-page-name :type (or string null) :initform nil :initarg :link-page-name
-                  :accessor link-page-name)
+   (link-page-printer :type (or string function symbol null) :initform nil
+                     :initarg :link-page-printer
+                     :accessor link-page-printer)
    (link-href-start :type (or string null) :initform nil :initarg :link-href-start
                    :accessor link-href-start)
    (link-href-end :type (or string null) :initform nil :initarg :link-href-end
                  :accessor link-href-end)
    (link-ampersand :type (or string null) :initform nil :initarg :link-ampersand
                   :accessor link-ampersand))
-  (:default-initargs :link-page-name "disp-func1")
+  (:default-initargs :link-page-printer "disp-func1")
   (:documentation "View class for a hyperobject"))
 
 
   (with-output-to-string (s)
     (write-string (link-href-start view) s)
     (write-char #\" s)
-    (write-string (make-url (link-page-name view)) s)
-    (write-string "?func=" s)
-    (write-simple fieldfunc s)
-    (write-string (link-ampersand view) s)
-    (write-string "key=" s)
-    (write-simple fieldvalue s)
-    (dolist (var refvars)
-      (write-string (link-ampersand view) s)
-      (write-simple (car var) s)
-      (write-char #\= s)
-      (write-simple (cdr var) s))
-    (write-char #\" s)))
+    (let ((link-page (link-page-printer view)))
+      (typecase link-page
+       (string
+        (write-string (make-url link-page) s)
+        (write-string "?func=" s)
+        (write-simple fieldfunc s)
+        (write-string (link-ampersand view) s)
+        (write-string "key=" s)
+        (write-simple fieldvalue s)
+        (dolist (var refvars)
+          (write-string (link-ampersand view) s)
+          (write-simple (car var) s)
+          (write-char #\= s)
+          (write-simple (cdr var) s))
+        (write-char #\" s)))
+      ((or symbol function)
+       (funcall link-page fieldfunc fieldvalue refvars s)))))
   
 (defun make-link-end (obj view fieldname)
   (declare (ignore obj fieldname))