r2915: *** empty log message ***
[lml.git] / stdsite.lisp
diff --git a/stdsite.lisp b/stdsite.lisp
new file mode 100644 (file)
index 0000000..5c96142
--- /dev/null
@@ -0,0 +1,84 @@
+;;;; -*- 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)))
+
+
+