r5163: *** empty log message ***
[lml.git] / 2 / stdsite.lisp
diff --git a/2/stdsite.lisp b/2/stdsite.lisp
new file mode 100644 (file)
index 0000000..bf7773b
--- /dev/null
@@ -0,0 +1,89 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          stdsite.lisp
+;;;; Purpose:       Functions to create my standard style sites
+;;;; Programmer:    Kevin M. Rosenberg
+;;;; Date Started:  Aug 2002
+;;;;
+;;;; $Id: stdsite.lisp,v 1.1 2003/06/20 04:12:29 kevin Exp $
+;;;;
+;;;; This file, part of LML2, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;;
+;;;; 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_
+;;;  banner.lml_
+;;;  content.lml_
+;;;  footer.lml_
+
+(in-package #:lml2)
+
+(defmacro std-head (title &body body)
+  `(html
+    (:head 
+     (:title (:princ ,title))
+     (lml-load "head.lml_")
+     ,@body)))
+
+
+(defun std-footer (file)
+  (html
+   ((:div :class "disclaimsec")
+    (let ((src-file (make-pathname
+                    :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_")))))
+
+
+(defmacro std-body (file &body body)
+  `(body
+    (lml-load "banner.lml_")
+    (html
+     ((:table :class "stdbodytable" :border "0" :cellpadding "3")
+      (:tbody 
+       ((:tr :valign "top")
+       ((td :class "stdcontentcell")
+        (lml-load "contents.lml_"))
+       ((:td :valign "top")
+        ,@body
+        (std-footer ,file))))))))
+  
+
+(defmacro print-std-page (file title &body body)
+  `(progn
+    (xhtml-prologue)
+    (html
+     ((: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-stream* (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
+    (html
+     (:h1 ,title)
+     ((:pre "style" "padding-left:30pt;")
+      ,@body))))
+
+
+