X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=stdsite.lisp;fp=stdsite.lisp;h=5c96142d5a5393d44d2ae8c571c65b56190259c6;hb=e741d288978f9a65554235ecb3115db8eef60b54;hp=0000000000000000000000000000000000000000;hpb=f3088cd6e99688e7bc3d37bb6c5a58e08c958611;p=lml.git diff --git a/stdsite.lisp b/stdsite.lisp new file mode 100644 index 0000000..5c96142 --- /dev/null +++ b/stdsite.lisp @@ -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))) + + +