X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=views.lisp;h=7cf370db7415e68af6eea30c471d9c2d20187275;hb=b3374bfdd283f1ec52ebecb63f2f597a8b161cb3;hp=0aeafe1bda4b2401a7d617dcea6c321a66bb246d;hpb=d6af219e32386c64ef95b8ff0dd8900ea92371fc;p=hyperobject.git diff --git a/views.lisp b/views.lisp index 0aeafe1..7cf370d 100644 --- a/views.lisp +++ b/views.lisp @@ -7,15 +7,12 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: views.lisp,v 1.48 2003/05/26 21:43:05 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 ;;;; ************************************************************************* -(in-package :hyperobject) - -(eval-when (:compile-toplevel :execute) - (declaim (optimize (speed 2) (safety 2) (compilation-speed 0) (debug 2)))) +(in-package #:hyperobject) (defclass object-view () @@ -72,15 +69,16 @@ (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")) @@ -331,7 +329,7 @@ (vector-push-extend 'x print-func) ;; return object (setf (obj-data-print-code view) `(lambda (x s links) - (declare (ignorable links)) + (declare (ignorable s links)) ,@(map 'list #'identity print-func))) (setf (obj-data-printer view) (compile nil (eval (obj-data-print-code view)))) @@ -518,18 +516,23 @@ (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))