r3564: *** empty log message ***
[hyperobject.git] / views.lisp
index a62baf0c40c78bdc072eefaf00f1b9c25f0a65f8..d994e4d0363a413daa6d46690750cc65f4119fc4 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: views.lisp,v 1.3 2002/11/29 05:05:29 kevin Exp $
+;;;; $Id: views.lisp,v 1.8 2002/12/05 19:15:02 kevin Exp $
 ;;;;
 ;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
 ;;;;
 (in-package :hyperobject)
 
 (eval-when (:compile-toplevel :execute)
-  (declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3))))
+  (declaim (optimize (speed 2) (safety 2) (compilation-speed 0) (debug 2))))
 
 
 ;;;; *************************************************************************
 ;;;;  Metaclass Intialization
 ;;;; *************************************************************************
 
-(defun process-views (cl)
+(defun finalize-hyperlinks (cl)
+  (let ((hyperlinks '()))
+    (dolist (esd (class-slots cl))
+      (awhen (slot-value esd 'hyperlink)
+        (push
+        (make-instance 'hyperlink
+                       :name (slot-definition-name esd)
+                       :lookup it
+                       :link-parameters (slot-value esd 'hyperlink-parameters))
+        hyperlinks)))
+    (setf (slot-value cl 'hyperlinks) hyperlinks)))
+
+
+(defun finalize-views (cl)
   "Calculate all view slots for a hyperobject class"
   (let ((fmtstr-text "")
        (fmtstr-html "")
@@ -40,7 +53,7 @@
        (xmlvalue-func '())
        (classname (class-name cl))
        (package (symbol-package (class-name cl)))
-       (references nil))
+       (hyperlinks nil))
     (declare (ignore classname))
     (check-type (slot-value cl 'print-slots) list)
     (dolist (slot-name (slot-value cl 'print-slots))
          (string-append fmtstr-html-labels html-label-str)
          (string-append fmtstr-xml-labels xml-label-str)
          
-         (if (slot-value slot 'reference)
+         (if (slot-value slot 'hyperlink)
              (progn
                (string-append fmtstr-html-ref "<~~a>" value-fmt "</~~a>")
                (string-append fmtstr-xml-ref "<~~a>" value-fmt "</~~a>")
                (string-append fmtstr-html-ref-labels "<span class=\"label\">" namestr-lower "</span> <~~a>" value-fmt "</~~a>")
                (string-append fmtstr-xml-ref-labels "<label>" namestr-lower "</label> <~~a>" value-fmt "</~~a>")
-               (push (make-instance 'reference :name name
-                                    :lookup (slot-value slot 'reference))
-                     references))
+               (push (make-instance 'hyperlink :name name
+                                    :lookup (slot-value slot 'hyperlink))
+                     hyperlinks))
              (progn
                (string-append fmtstr-html-ref html-str)
                (string-append fmtstr-xml-ref xml-str)
              (setq xmlvalue-func (append xmlvalue-func plain-value-func)))
          )))
     
-    (setf (slot-value cl 'references) references)
+    (setf (slot-value cl 'hyperlinks) hyperlinks)
     
     (if value-func
        (setq value-func `(lambda (x) (values ,@value-func)))
     :fmtstr-labels nil 
     :page-name "disp-func1" 
     :href-head nil :href-end nil :ampersand nil)
-  (:documentation "Formatting for a linked reference"))
+  (:documentation "Formatting for a linked hyperlink"))
 
 (defclass html-link-ref (link-ref)
   ()
         (multiple-value-list
          (funcall (funcall (obj-data-value-func fmt) x) x))))
     
-    ;; make list of reference link fields for printing to refstr template
-    (dolist (ref (hyperobject-class-references x))
-      (let ((link-start 
-            (make-link-start x (link-ref fmt) (name ref) (lookup ref)
-                             (nth (position (name ref)
-                                            (hyperobject-class-fields x)
-                                            :key #'(lambda (x)
-                                                     (slot-definition-name x)))
-                                  field-values)  
-                             (append (link-parameters ref) refvars)))
-           (link-end (make-link-end x (link-ref fmt) (name ref))))
-       (push link-start refvalues)
-       (push link-end refvalues)))
+    ;; make list of hyperlink link fields for printing to refstr template
+    (dolist (ref (hyperobject-class-hyperlinks x))
+      (let ((print-pos (position (name ref) (hyperobject-class-print-slots x))))
+       (when print-pos
+         (let ((link-start (make-link-start x (link-ref fmt) (name ref) (lookup ref)
+                                            (nth print-pos field-values)
+                                            (append (link-parameters ref) refvars)))
+               (link-end (make-link-end x (link-ref fmt) (name ref))))
+           (push link-start refvalues)
+           (push link-end refvalues)))))
     (setq refvalues (nreverse refvalues))
-    
     (apply #'format s refstr refvalues)))
 
 (defgeneric obj-data (obj))
 
 (defgeneric make-ref-data-str (obj fmt &optional label))
 (defmethod make-ref-data-str (x (fmt textformat) &optional (label nil))
-  "Return fmt string for that contains ~a slots for reference link start and end"
+  "Return fmt string for that contains ~a slots for hyperlink link start and end"
   (unless (link-ref fmt)
     (error "fmt does not contain a link-ref"))
   (let ((refstr 
        (fmt-file-end fmt os)))
   objs)
 
+
+;;; Misc formatting
+
+(defun fmt-comma-integer (i)
+  (format nil "~:d" i))
+