;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Aug 2002
;;;;
-;;;; $Id: base.lisp,v 1.2 2003/06/20 04:46:54 kevin Exp $
+;;;; $Id$
;;;;
-;;;; This file, part of LML, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;; This file, part of LML2, is Copyright (c) 2000-2003 by Kevin Rosenberg.
+;;;; Rights of modification and redistribution are in the LICENSE file.
;;;;
-;;;; LML users are granted the rights to distribute and use this software
-;;;; as governed by the terms of the GNU General Public License v2
-;;;; (http://www.gnu.org/licenses/gpl.html)
;;;; *************************************************************************
(in-package #:lml2)
-(defun reset-indent ()
- (setq *indent* 0))
-
(defun lml-format (str &rest args)
(when (streamp *html-stream*)
- (when *print-spaces* (indent-spaces *indent* *html-stream*))
(if args
- (apply #'format *html-stream* str args)
- (write-string str *html-stream*))
- (when *print-spaces* (write-char #\newline *html-stream*))))
+ (apply #'format *html-stream* str args)
+ (write-string str *html-stream*))))
(defun lml-princ (s)
(princ s *html-stream*))
(defun lml-print-date (date)
(lml-write-string (date-string date)))
-(defmacro xhtml-prologue ()
- `(progn
- (lml-write-string (xml-prologue-string))
+(defun xml-header-stream (stream &key (version "1.0") (standalone :unspecified)
+ (encoding :unspecified))
+ (format stream "<?xml version=\"~A\"~A~A ?>"
+ version
+ (if (eq standalone :unspecified)
+ ""
+ (format nil " standalone=\"~A\"" standalone))
+ (if (eq encoding :unspecified)
+ ""
+ (format nil " encoding=\"~A\"" encoding))))
+
+(defun dtd-prologue (&optional (format :xhtml11) (encoding :iso-8859-1) &key entities)
+ (ecase format
+ ((:xhtml :xhtml11 :xhtml10-strict :xhtml10-transitional :xhtml10-frameset :xml)
+ (lml-write-string +xml-prologue-begin+)
+ (ecase encoding
+ (:iso-8859-1
+ (lml-write-string "iso-8859-1"))
+ (:utf-8
+ (lml-write-string "UTF-8")))
+ (lml-write-string +xml-prologue-end+)
(lml-write-char #\newline)
- (lml-write-string (xhtml-prologue-string))
- (lml-write-char #\newline)))
-
-(defmacro print-page (title &body body)
- `(html
- (:head
- (:title (:princ ,title)))
- (:body ,@body)))
-
-(defmacro page (out-file &body body)
+ (case format
+ ((:xhtml11 :xhtml)
+ (lml-write-string +xhtml11-dtd-string+))
+ (:xhtml10-strict
+ (lml-write-string +xhtml10-strict-dtd-string+))
+ (:xhtml10-transitional
+ (lml-write-string +xhtml10-transitional-dtd-string+))
+ (:xhtml10-frameset
+ (lml-write-string +xhtml10-frameset-dtd-string+)))
+ (when entities
+ (lml-write-char #\space)
+ (lml-write-char #\[)
+ (lml-write-char #\Newline)
+ (lml-write-string entities)
+ (lml-write-char #\Newline)
+ (lml-write-char #\]))
+ (lml-write-char #\>))
+ (:html
+ (lml-write-string +html4-dtd-string+)))
+ (lml-write-char #\newline))
+
+
+(defmacro html-file-page ((out-file &key (format :xhtml11))
+ &body body)
`(with-open-file (*html-stream*
- (lml-file-name ,out-file :output)
- :direction :output
- :if-exists :supersede)
- (xhtml-prologue)
+ (lml-file-name ',out-file :output)
+ :direction :output
+ :if-exists :supersede)
+ (dtd-prologue ,format)
(html
((:html :xmlns "http://www.w3.org/1999/xhtml")
,@body))))
-
(defmacro alink (url desc)
`(html
(defmacro alink-c (class url desc)
`(html
((:a :class ,class :href ,url) ,desc)))
-
-(export '(alink alink-c))