;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Aug 2002
;;;;
-;;;; $Id: base.lisp,v 1.4 2003/01/14 08:41:22 kevin Exp $
+;;;; $Id: base.lisp,v 1.12 2003/03/05 04:25:09 kevin Exp $
;;;;
;;;; This file, part of LML, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
"<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>")
(defun xhtml-prologue-string ()
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">")
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">")
(defvar *print-spaces* nil)
(defvar *indent* 0)
(defun reset-indent ()
(setq *indent* 0))
-(defun lml-print (str &rest args)
+(defun lml-format (str &rest args)
(when (streamp *html-output*)
(when *print-spaces* (indent-spaces *indent* *html-output*))
(if args
(when *print-spaces* (format *html-output* "~%"))
(values)))
-(defmacro lml-line (str &rest args)
- `(lml-print ,str ,@args))
+(defun lml-princ (s)
+ (princ s *html-output*))
+
+(defun lml-print (s)
+ (format *html-output* "~A~%" s))
+
+(defun lml-write-char (char)
+ (write-char char *html-output*))
(defun lml-print-date (date)
- (lml-print (date-string date)))
+ (lml-princ (date-string date)))
(defmacro lml-exec-body (&body forms)
`(progn
#'(lambda (form)
(etypecase form
(string
- `(lml-print ,form))
+ `(lml-princ ,form))
(number
- `(lml-print "~D" ,form))
+ `(lml-format "~D" ,form))
(symbol
(when form
- `(lml-print ,form)))
+ `(lml-princ ,form)))
(cons
form)))
forms)))
(defmacro with-attr-string (tag attr-string &body body)
(let ((attr (gensym)))
`(let ((,attr ,attr-string))
- (lml-print "<~(~A~)~A>" ',tag
+ (lml-format "<~(~A~) ~A>" ',tag
(if (and (stringp ,attr) (plusp (length ,attr)))
(format nil "~A" ,attr)
""))
(incf *indent*)
(lml-exec-body ,@body)
(decf *indent*)
- (lml-print "</~(~A~)>" ',tag))))
+ (lml-format "</~(~A~)>" ',tag))))
(defmacro with-no-endtag-attr-string (tag attr-string)
(let ((attr (gensym)))
`(let ((,attr ,attr-string))
- (lml-print "<~(~A~)~A />" ',tag
+ (lml-format "<~(~A~) ~A />" ',tag
(if (and (stringp ,attr) (plusp (length ,attr)))
(format nil "~A" ,attr)
"")))))
(defmacro xhtml-prologue ()
`(progn
- (lml-print "~A~%" (xml-prologue-string))
- (lml-print "~A~%" (xhtml-prologue-string))))
+ (lml-format "~A~%" (xml-prologue-string))
+ (lml-format "~A~%" (xhtml-prologue-string))))
-(defmacro link (dest &body body)
+(defmacro alink (dest &body body)
`(with a :href ,dest ,@body))
-(defmacro link-c (class dest &body body)
+(defmacro alink-c (class dest &body body)
`(with a :href ,dest :class (quote ,class) ,@body))
(defmacro img (dest &rest args)
- `(with-no-endtag :src ,dest ,@args))
+ `(with-no-endtag img :src ,dest ,@args))
(defmacro input (&rest args)
`(with-no-endtag input ,@args))
-(defmacro meta (name content)
- `(with meta :name ,name :content ,content))
+(defmacro link (&rest args)
+ `(with-no-endtag link ,@args))
-(defmacro meta-key (&key name content http-equiv)
- `(with meta :name ,name :content ,content :http-equiv ,http-equiv))
+(defmacro meta (&rest args)
+ `(with-no-endtag meta ,@args))
(defmacro br (&rest args)
`(with-no-endtag br ,@args))
(eval-when (:compile-toplevel :load-toplevel :execute)
(defparameter *macro-list*
- '(a div span h1 h2 h3 h4 h5 h6 i b p li ul ol table tbody td tr body head
- html title pre tt u dl dt dd kbd code form))
- (export '(link link-c br hr img input meta meta-key))
+ '(a div span h1 h2 h3 h4 h5 h6 i b p li ul ol table tbody td th tr body head
+ html title pre tt u dl dt dd kbd code form textarea))
+ (export '(alink alink br hr img input meta link meta-key))
(export *macro-list*))
(loop for i in *macro-list*
#+cmu
(setf curr-string (coerce curr-string `(simple-array character (*))))
- (push `(lml-print ,curr-string) forms)
+ (push `(lml-princ ,curr-string) forms)
(setq curr-string (new-string))
(setq got-comma nil)
(vector-push #\( curr-string)
(push
`(let ((,res ,eval-string))
(when ,res
- (lml-print ,res)))
+ (lml-princ ,res)))
forms))
(setq curr-string (new-string)))
;; read comma, then non #\( char
#+cmu
(setf curr-string (coerce curr-string `(simple-array character (*))))
- (push `(lml-print ,curr-string) forms)
+ (push `(lml-princ ,curr-string) forms)
`(progn ,@(nreverse forms)))))