;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Aug 2002
;;;;
-;;;; $Id: base.lisp,v 1.7 2003/07/12 17:54:05 kevin Exp $
+;;;; $Id$
;;;;
;;;; This file, part of LML2, is Copyright (c) 2000-2003 by Kevin Rosenberg.
;;;; Rights of modification and redistribution are in the LICENSE file.
(defun lml-print-date (date)
(lml-write-string (date-string date)))
-(defun dtd-prologue (&optional (format :xhtml11))
+(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) &key entities)
(case format
((:xhtml :xhtml11 :xhtml10-strict :xhtml10-transitional :xhtml10-frameset :xml)
(lml-write-string +xml-prologue-string+)
- (lml-write-char #\newline)))
- (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+))
+ (lml-write-char #\newline)
+ (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)
+ (lml-file-name ',out-file :output)
:direction :output
:if-exists :supersede)
(dtd-prologue ,format)