;;;; in Text, HTML, and XML formats. This includes hyperlinking
;;;; capability and sub-objects.
;;;;
-;;;; $Id: ml-class.lisp,v 1.15 2002/10/16 16:18:27 kevin Exp $
+;;;; $Id: ml-class.lisp,v 1.20 2002/10/17 00:25:05 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(declaim (optimize (speed 3) (safety 1)))
(defun ml-class-of (obj)
- #-(or cmu sbcl) (class-of obj)
+ #-(or cmu sbcl scl) (class-of obj)
#+sbcl (sb-pcl:class-of obj)
- #+cmu (pcl:class-of obj))
+ #+(or cmu scl) (pcl:class-of obj))
(defun ml-class-name (obj)
- #-(or cmu sbcl) (class-name obj)
+ #-(or cmu sbcl scl) (class-name obj)
#+sbcl (sb-pcl:class-name obj)
- #+cmu (pcl:class-name obj))
+ #+(or cmu scl) (pcl:class-name obj))
(defclass ml-class (#-(or cmu sbcl) standard-class
- #+cmu pcl::standard-class
+ #+(or cmu scl) pcl::standard-class
#+sbcl sb-pcl::standard-class)
((title :initarg :title :type string :reader ml-std-title
:documentation
(:default-initargs :title nil :fields nil :subobjects-lists nil :ref-fields nil)
(:documentation "Metaclass for Markup Language classes."))
-#+cmu
+#+(or cmu scl)
(defmethod pcl:finalize-inheritance :after ((cl ml-class))
(init-ml-class cl))
(init-ml-class cl))
-#+cmu
+#+(or cmu slc)
(defmethod pcl:validate-superclass ((class ml-class) (superclass pcl::standard-class))
t)
(defmethod clos:finalize-inheritance :after ((cl ml-class))
(init-ml-class cl))
-;;#+cmu
-;;(defmethod pcl::class-finalized-p ((cl ml-class))
-;; (and (not (null (slot-value cl 'pcl::wrapper)))
-;; (not (null (slot-value cl 'fmtstr-text)))))
-
-;;#+sbcl
-;;(defmethod sb-pcl::class-finalized-p ((cl ml-class))
-;; (and (not (null (slot-value cl 'sb-pcl::wrapper)))
-;; (not (null (slot-value cl 'fmtstr-text)))))
-
#+lispworks
(defmethod clos:process-a-class-option ((class ml-class)
(name (eql :title))
(setq html-str (concatenate 'string "<span class=\"" namestr-lower "\">" value-fmt "</span>"))
(setq xml-str (concatenate 'string "<" namestr-lower ">" value-fmt "</" namestr-lower ">"))
- (setq html-label-str (concatenate 'string "<span class=\"label\">" namestr-lower "</span> " value-fmt))
+ (setq html-label-str (concatenate 'string "<span class=\"label\">" namestr-lower "</span> <span class=\"" namestr-lower "\">" value-fmt "</span>"))
(setq xml-label-str (concatenate 'string "<label>" namestr-lower "</label> <" namestr-lower ">" value-fmt "</" namestr-lower ">"))
(string-append fmtstr-text value-fmt)
(setq xmlvalue-func (append xmlvalue-func (list `(xml-cdata ,@plain-value-func))))
(setq xmlvalue-func (append xmlvalue-func plain-value-func)))
))
-
+
(if value-func
(setq value-func `(lambda (x) (values ,@value-func)))
(setq value-func `(lambda () (values))))
(defparameter *default-textformat* nil)
(defparameter *default-htmlformat* nil)
(defparameter *default-htmlrefformat* nil)
+(defparameter *default-xhtmlformat* nil)
+(defparameter *default-xhtmlrefformat* nil)
(defparameter *default-xmlformat* nil)
(defparameter *default-xmlrefformat* nil)
(defparameter *default-ie-xmlrefformat* nil)
(setq *default-textformat* (make-instance 'textformat))
(setq *default-htmlformat* (make-instance 'htmlformat))
(setq *default-htmlrefformat* (make-instance 'htmlrefformat))
+ (setq *default-xhtmlformat* (make-instance 'xhtmlformat))
+ (setq *default-xhtmlrefformat* (make-instance 'xhtmlrefformat))
(setq *default-xmlformat* (make-instance 'xmlformat))
(setq *default-xmlrefformat* (make-instance 'xmlrefformat))
(setq *default-ie-xmlrefformat* (make-instance 'ie-xmlrefformat))
(:text *default-textformat*)
(:html *default-htmlformat*)
(:htmlref *default-htmlrefformat*)
- (:xml *default-xmlformat*)
+ (:xhtml *default-xhtmlformat*)
+ (:xhtmlref *default-xhtmlrefformat*)
(:xml *default-xmlformat*)
(:xmlref *default-xmlrefformat*)
(:ie-xmlref *default-ie-xmlrefformat*)
:obj-data-end-fmtstr "~%"
:obj-data-value-func #'ml-class-value-func))
+
+(defun class-name-of (obj)
+ (string-downcase (ml-class-name (ml-class-of obj))))
+
+(defun htmlformat-list-start-value-func (x nitems)
+ (values (ml-class-title x) nitems (class-name-of x)))
+
(defclass htmlformat (textformat)
()
(:default-initargs :file-start-str "<html><body>~%"
:file-end-str "</body><html>~%"
:list-start-indent t
- :list-start-fmtstr "<p><b>~a~P:</b></p><ul>~%"
- :list-start-value-func #'text-list-start-value-func
- :list-end-fmtstr "</ul>~%"
+ :list-start-fmtstr "<p><b>~a~p:</b></p><div class=\"~A\"><ul>~%"
+ :list-start-value-func #'htmlformat-list-start-value-func
+ :list-end-fmtstr "</ul></div>~%"
:list-end-indent t
:list-end-value-func #'identity
:obj-start-indent t
:obj-data-fmtstr-labels #'ml-class-fmtstr-html-labels
:obj-data-value-func #'ml-class-value-func))
+(defclass xhtmlformat (textformat)
+ ()
+ (:default-initargs :file-start-str "<html><body>~%"
+ :file-end-str "</body><html>~%"
+ :list-start-indent t
+ :list-start-fmtstr "<p><b>~a~p:</b></p><div class=\"~A\"><ul>~%"
+ :list-start-value-func #'htmlformat-list-start-value-func
+ :list-end-fmtstr "</ul></div>~%"
+ :list-end-indent t
+ :list-end-value-func #'identity
+ :obj-start-indent t
+ :obj-start-fmtstr "<li>"
+ :obj-start-value-func #'identity
+ :obj-end-indent t
+ :obj-end-fmtstr "</li>~%"
+ :obj-end-value-func #'identity
+ :obj-data-indent t
+ :obj-data-fmtstr #'ml-class-fmtstr-html-labels
+ :obj-data-fmtstr-labels #'ml-class-fmtstr-html-labels
+ :obj-data-value-func #'ml-class-xmlvalue-func))
-(defun class-name-of (obj)
- (string-downcase (ml-class-name (ml-class-of obj))))
(defun xmlformat-list-end-value-func (x)
- (format nil "~alist" (string-downcase (ml-class-name (ml-class-of x)))))
+ (format nil "~alist" (class-name-of x)))
(defun xmlformat-list-start-value-func (x nitems)
- (values (format nil "~alist" (string-downcase (ml-class-name (ml-class-of x)))) (ml-class-title x) nitems))
+ (values (format nil "~alist" (class-name-of x)) (ml-class-title x) nitems))
(defclass xmlformat (textformat)
()
:href-end "a"
:ampersand "&"))
+(defclass xhtml-link-ref (link-ref)
+ ()
+ (:default-initargs :fmtstr #'ml-class-fmtstr-html-ref
+ :fmtstr-labels #'ml-class-fmtstr-html-ref-labels
+ :href-head "a href="
+ :href-end "a"
+ :ampersand "&"))
+
(defclass xml-link-ref (link-ref)
()
(:default-initargs :fmtstr #'ml-class-fmtstr-xml-ref
()
(:default-initargs :link-ref (make-instance 'html-link-ref)))
+(defclass xhtmlrefformat (xhtmlformat)
+ ()
+ (:default-initargs :link-ref (make-instance 'xhtml-link-ref)))
+
(defclass xmlrefformat (xmlformat)
()
(:default-initargs :link-ref (make-instance 'xml-link-ref)))
(let ((nobjs (length objs)))
(fmt-list-start (car objs) fmt strm indent nobjs)
(dolist (obj objs)
- (unless (and english-only-function (not (funcall english-only-function obj)))
+ (unless (and english-only-function
+ (multiple-value-bind (eng term) (funcall english-only-function obj)
+ (and term (not eng))))
(fmt-obj-start obj fmt strm indent)
(fmt-obj-data obj fmt strm (1+ indent) label refvars)
(if subobjects