change display of gitweb link
[lml2.git] / stdsite.lisp
index bf7773ba5253e320ab919ac5561e756f711aa87a..ac3ee634cf005741b2384785877b53f7855cc18d 100644 (file)
@@ -7,30 +7,32 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Aug 2002
 ;;;;
-;;;; $Id: stdsite.lisp,v 1.1 2003/06/20 04:12:29 kevin Exp $
+;;;; $Id$
 ;;;;
-;;;; This file, part of LML2, 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.
 ;;;;
-;;;; LML2 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)
 ;;;; *************************************************************************
 
+
 ;;; A "standard site" is a format for a certain style of web page.
 ;;; It is based on the LML2 package.
 ;;; A stdsite page expects to include the following files:
-;;;  head.lml_
+;;;  header.lml_
 ;;;  banner.lml_
 ;;;  content.lml_
 ;;;  footer.lml_
+;;; These files are optional
+;;;  final.lml_
+;;;  rightcol.lml_
 
 (in-package #:lml2)
 
 (defmacro std-head (title &body body)
   `(html
-    (:head 
+    (:head
      (:title (:princ ,title))
-     (lml-load "head.lml_")
+     (lml-load "header.lml_")
      ,@body)))
 
 
   (html
    ((:div :class "disclaimsec")
     (let ((src-file (make-pathname
-                    :defaults *sources-dir*
-                    :type "lml"
-                    :name (pathname-name file))))       
+                     :defaults *sources-dir*
+                     :type "lml"
+                     :name (pathname-name file))))
       (when (probe-file src-file)
-       (html
-        ((:div :class "lastmod")
-         (lml-format  "Last modified: ~A" (date-string (file-write-date src-file)))))))
-    (when (probe-file "footer.lml_")
-      (lml-load "footer.lml_")))))
+        (html
+         ((:div :class "lastmod")
+          (lml-format  "Last modified: ~A" (date-string (file-write-date src-file)))))))
+    (lml-load "footer.lml_"))))
 
 
 (defmacro std-body (file &body body)
-  `(body
-    (lml-load "banner.lml_")
-    (html
+  `(html
+    (:body
+     (lml-load "banner.lml_")
      ((:table :class "stdbodytable" :border "0" :cellpadding "3")
-      (:tbody 
+      (:tbody
        ((:tr :valign "top")
-       ((td :class "stdcontentcell")
-        (lml-load "contents.lml_"))
-       ((:td :valign "top")
-        ,@body
-        (std-footer ,file))))))))
-  
+        ((:td :class "stdcontentcell")
+         (lml-load "contents.lml_"))
+        ((:td :valign "top")
+         ,@body
+         (std-footer ,file))
+        ((:td :valign "top")
+         (lml-load "rightcol.lml_" :optional t)))))
+     (lml-load "final.lml_" :optional t))))
 
-(defmacro print-std-page (file title &body body)
+
+(defmacro print-std-page (file title format &body body)
   `(progn
-    (xhtml-prologue)
-    (html
-     ((:html :xmlns "http://www.w3.org/1999/xhtml")
-      (std-head ,title)
-      (std-body ,file ,@body)))))
+     (dtd-prologue ,format)
+     (html
+      ((:html :xmlns "http://www.w3.org/1999/xhtml")
+       (std-head ,title)
+       (std-body ,file ,@body)))))
 
-(defmacro std-page (out-file title &body body)
+(defmacro std-page ((out-file title &key (format :xhtml11))
+                    &body body)
   `(let ((*indent* 0))
-     (with-open-file (*html-stream* (lml-file-name ,out-file :output)
-                     :direction :output
-                     :if-exists :supersede)
-       (print-std-page (lml-file-name ,out-file :source) ,title ,@body))))
+     (with-open-file (*html-stream* (lml-file-name ',out-file :output)
+                      :direction :output
+                      :if-exists :supersede)
+       (print-std-page (lml-file-name ',out-file :source) ,title ,format ,@body))))
 
 (defmacro titled-pre-section (title &body body)
   `(progn