API CHANGE: Removed the OBJECT arg from attribute-value
[clinton/lisp-on-lines.git] / src / standard-descriptions / t.lisp
index fe4864f..eff4d4e 100644 (file)
@@ -2,17 +2,46 @@
 
 (define-description T ()
   ((identity :label nil :function #'identity)
-   (type :label "Type" :function #'type-of)
-   (class :label "Class" :function #'class-of)))
+   (type :label "Type of" :function #'type-of)
+   (class :label "Class" :function #'class-of)
+   (active-attributes :label "Attributes"
+                     :value nil
+                     :activep nil
+                     :keyword :attributes)))
 
 (define-layered-method description-of (any-lisp-object)
   (find-description 't))
 
+(define-layered-function display-attribute (object attribute)
+  (:method (object attribute)
+    (display-using-description attribute *display* object)))
+
+(define-layered-function display-attribute-label (object attribute)
+  (:method (object attribute)
+        (format *display* "~A " (attribute-label attribute))))
+
+(define-layered-function display-attribute-value (object attribute)
+  (:method (object attribute)
+    (let ((val (attribute-value attribute)))
+      (if (eql val object)
+         (format *display* "~A " val)
+         (with-active-descriptions (inline)
+           (display *display* val))))))
+
+(define-layered-method display-using-description 
+  ((attribute standard-attribute) display object &rest args)
+  (declare (ignore args))
+  (when (attribute-label attribute)
+    (display-attribute-label object attribute))
+  (display-attribute-value object attribute))
+
 (define-display ((description t))
   (format *display* "~{~A~%~}" 
          (mapcar 
           (lambda (attribute)
             (with-output-to-string (*display*)
-              (display-attribute attribute)))
+              (display-attribute *object* attribute)))
           (attributes description))))
 
+
+