X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=views.lisp;h=8f0f9b8c2ff377ff205c2011a4bb2e0095140c81;hb=0de08a4b7bd0ee44f96b1a543de6a86c89e7e6a9;hp=fadc3ba1736479d035975a40eab26c2bdbfb3593;hpb=d3dd5096c102155d3c5dba9642bbcf4d6f78928e;p=hyperobject.git diff --git a/views.lisp b/views.lisp index fadc3ba..8f0f9b8 100644 --- a/views.lisp +++ b/views.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: views.lisp,v 1.16 2002/12/13 12:23:17 kevin Exp $ +;;;; $Id: views.lisp,v 1.25 2003/03/26 21:03:22 kevin Exp $ ;;;; ;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg ;;;; @@ -20,8 +20,12 @@ (defclass object-view () - ((object-class :initform nil :initarg :object-class :accessor object-class - :documentation "Name of class for object to be viewed.") + ((object-class-name :initform nil :initarg :object-class-name + :accessor object-class-name + :documentation "Name of class of object to be viewed.") + (object-class :initform nil :initarg :object-class + :accessor object-class + :documentation "Class of object to be viewed.") (slots :initform nil :initarg :slots :accessor slots :documentation "List of effective slots for object to be viewed.") (name :initform nil :initarg :name :accessor name @@ -97,7 +101,9 @@ (aif (find category (views obj-class) :key #'category) it (let ((view - (make-instance 'object-view :object-class (class-name obj-class) + (make-instance 'object-view + :object-class-name (class-name obj-class) + :object-class obj-class :category category :slots slots))) (push view (views obj-class)) @@ -132,7 +138,8 @@ ((eq view-def :default) (let* ((name (class-name cl)) (view (make-instance 'object-view :name "automatic" - :object-class name + :object-class-name name + :object-class cl :category :compact-text))) view)) ((consp view-def) @@ -142,7 +149,7 @@ (defmethod initialize-instance :after ((view object-view) &rest initargs &key &allow-other-keys) - (initialize-view (find-class (object-class view)) view)) + (initialize-view (object-class view) view)) (defun initialize-view (obj-cl view) "Calculate all view slots for a hyperobject class" @@ -162,6 +169,7 @@ ) ) + (defun initialize-view-by-category (obj-cl view) "Initialize a view based upon a preset category" (let ((fmtstr nil) @@ -173,7 +181,8 @@ (unless (in category :compact-text :compact-text-labels :html :html-labels :html-link-labels :xhtml :xhtml-labels :xhtml-link-labels - :xml :xml-labels :xml-link-labels) + :xml :xml-labels :xml-link :ie-xml-link + :xml-link-labels :ie-xml-link-labels) (error "Unknown view category ~A" category)) (unless (slots view) @@ -182,10 +191,12 @@ (let ((slot (find-slot-by-name obj-cl slot-name))) (unless slot (error "Slot ~A is not found in class ~S" slot-name obj-cl)) - (let ((name (slot-definition-name slot)) - (namestr-lower (string-downcase (symbol-name (slot-definition-name slot)))) - (type (slot-value slot 'type)) - (print-formatter (esd-print-formatter slot))) + (let* ((name (slot-definition-name slot)) + (namestr-lower (string-downcase (symbol-name name))) + (xml-namestr (escape-xml-string namestr-lower)) + (xml-tag (escape-xml-string namestr-lower)) + (type (slot-value slot 'type)) + (print-formatter (esd-print-formatter slot))) (cond (first-field @@ -214,19 +225,19 @@ (:html-labels (string-append fmtstr (concatenate 'string "" namestr-lower " " value-fmt ""))) (:xhtml-labels - (string-append fmtstr (concatenate 'string " " value-fmt ""))) + (string-append fmtstr (concatenate 'string "" xml-namestr " " value-fmt ""))) (:xml-labels - (string-append fmtstr (concatenate 'string " <" namestr-lower ">" value-fmt ""))) + (string-append fmtstr (concatenate 'string " <" xml-tag ">" value-fmt ""))) ((or :html-link :xhtml-link) (push name links) (if (esd-hyperlink slot) (string-append fmtstr "<~~a>" value-fmt "") (string-append fmtstr (concatenate 'string "" value-fmt "")))) - (:xml-link + ((or :xml-link :ie-xml-link) (push name links) (if (esd-hyperlink slot) (string-append fmtstr "<~~a>" value-fmt "") - (string-append fmtstr (concatenate 'string "<" namestr-lower ">" value-fmt "")))) + (string-append fmtstr (concatenate 'string "<" xml-tag ">" value-fmt "")))) (:html-link-labels (push name links) (if (esd-hyperlink slot) @@ -235,19 +246,20 @@ (:xhtml-link-labels (push name links) (if (esd-hyperlink slot) - (string-append fmtstr "<[!CDATA[" namestr-lower "]]> <~~a>" value-fmt "") - (string-append fmtstr (concatenate 'string " " value-fmt "")))) - (:xml-link-labels + (string-append fmtstr "" xml-namestr " <~~a>" value-fmt "") + (string-append fmtstr (concatenate 'string "" xml-namestr " " value-fmt "")))) + ((or :xml-link-labels :ie-xml-link-labels) (push name links) (if (esd-hyperlink slot) - (string-append fmtstr " <~~a>" value-fmt "") - (string-append fmtstr (concatenate 'string " <" namestr-lower ">" value-fmt ""))))) + (string-append fmtstr " <~~a>" value-fmt "") + (string-append fmtstr (concatenate 'string " <" xml-tag ">" value-fmt ""))))) ) ;; let value-fmt - + (let ((func (if print-formatter `(,print-formatter (slot-value x (quote ,name))) `(slot-value x (quote ,name))))) (when (and (in category :xml :xhtml :xml-link :xhtml-link + :xml-labels :ie-xml-labels :xhtml-link-labels :xml-link-labels :ie-xml-link :ie-xml-link-labels) (or print-formatter @@ -372,9 +384,9 @@ (setf (list-end-indent view) t) (setf (list-end-fmtstr view) "~%") (setf (list-end-value-func view) #'xmlformat-list-end-value-func) - (setf (obj-start-fmtstr view) (format nil "<~(~a~)>" (object-class view))) + (setf (obj-start-fmtstr view) (format nil "<~(~a~)>" (object-class-name view))) (setf (obj-start-indent view) t) - (setf (obj-end-fmtstr view) (format nil "~%" (object-class view))) + (setf (obj-end-fmtstr view) (format nil "~%" (object-class-name view))) (setf (obj-end-indent view) nil) (setf (obj-data-indent view) nil)) @@ -549,4 +561,3 @@ (defun fmt-comma-integer (i) (format nil "~:d" i)) -