+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name: stdsite.cl
+;;;; Purpose: Functions to create my standard style sites
+;;;; Programmer: Kevin M. Rosenberg
+;;;; Date Started: Aug 2002
+;;;;
+;;;; $Id: stdsite.lisp,v 1.1 2002/09/30 10:26:43 kevin Exp $
+;;;;
+;;;; This file, part of LML, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;;
+;;;; 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)
+;;;; *************************************************************************
+
+;;; A "standard site" is a format for a certain style of web page.
+;;; It is based on the LML package.
+;;; A stdsite page expects to include the following files:
+;;; head.lml_
+;;; banner.lml_
+;;; content.lml_
+;;; footer.lml_
+
+(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0)))
+(in-package :lml)
+
+(defmacro std-head (title &body body)
+ `(head
+ (title ,title)
+ (lml-load #p"head.lml_")
+ ,@body))
+
+
+(defun std-footer (file)
+ (div-c "disclaimsec"
+ (let ((src-file (make-pathname
+ :defaults *sources-dir*
+ :type "lml"
+ :name (pathname-name file))))
+ (when (probe-file src-file)
+ (div-c "lastmod"
+ (lml-print "Last modified: ~A" (date-string (file-write-date src-file))))))
+ (lml-load #p"footer.lml_"))
+ (values))
+
+
+(defmacro std-body (file &body body)
+ `(body
+ (lml-load #p"banner.lml_")
+ (table-c "stdbodytable" :border "0" :cellpadding "3"
+ (tbody
+ (tr :valign "top"
+ (td-c "stdcontentcell"
+ (lml-load #p"contents.lml_"))
+ (td :valign "top"
+ ,@body
+ (std-footer ,file)))))))
+
+
+(defmacro print-std-page (file title &body body)
+ `(progn
+ (xhtml-prologue)
+ (html :xmlns "http://www.w3.org/1999/xhtml"
+ (std-head ,title)
+ (std-body ,file ,@body))))
+
+(defmacro std-page (out-file title &body body)
+ `(let ((*indent* 0))
+ (with-open-file (*html-output* (lml-file-name ,out-file :output)
+ :direction :output
+ :if-exists :supersede)
+ (print-std-page (lml-file-name ,out-file :source) ,title ,@body))))
+
+(defmacro titled-pre-section (title &body body)
+ `(progn
+ (h1 ,title)
+ (pre :style "padding-left:30pt;"
+ ,@body)))
+
+
+