Update domain name to kpe.io
[lml.git] / stdsite.lisp
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          stdsite.lisp
6 ;;;; Purpose:       Functions to create my standard style sites
7 ;;;; Programmer:    Kevin M. Rosenberg
8 ;;;; Date Started:  Aug 2002
9 ;;;;
10 ;;;; $Id$
11 ;;;;
12 ;;;; This file, part of LML, is Copyright (c) 2002 by Kevin M. Rosenberg
13 ;;;;
14 ;;;; LML users are granted the rights to distribute and use this software
15 ;;;; as governed by the terms of the GNU General Public License v2
16 ;;;; (http://www.gnu.org/licenses/gpl.html)
17 ;;;; *************************************************************************
18
19 ;;; A "standard site" is a format for a certain style of web page.
20 ;;; It is based on the LML package.
21 ;;; A stdsite page expects to include the following files:
22 ;;;  head.lml_
23 ;;;  banner.lml_
24 ;;;  content.lml_
25 ;;;  footer.lml_
26
27 (in-package #:lml)
28
29 (defmacro std-head (title &body body)
30   `(head
31     (title ,title)
32     (lml-load "head.lml_")
33     ,@body))
34
35
36 (defun std-footer (file)
37   (div-c "disclaimsec"
38     (let ((src-file (make-pathname
39                      :defaults *sources-dir*
40                      :type "lml"
41                      :name (pathname-name file))))
42       (when (probe-file src-file)
43         (div-c "lastmod"
44           (lml-format  "Last modified: ~A" (date-string (file-write-date src-file))))))
45     (lml-load "footer.lml_"))
46   (values))
47
48
49 (defmacro std-body (file &body body)
50   `(body
51     (lml-load "banner.lml_")
52     (table-c "stdbodytable" :border "0" :cellpadding "3"
53              (tbody
54               (tr :valign "top"
55                   (td-c "stdcontentcell"
56                         (lml-load "contents.lml_"))
57                   (td :valign "top"
58                       ,@body
59                       (std-footer ,file)))))
60     (lml-load "final.lml_")))
61
62
63 (defmacro print-std-page (file title &body body)
64   `(progn
65      (xhtml-prologue)
66      (html :xmlns "http://www.w3.org/1999/xhtml"
67            (std-head ,title)
68            (std-body ,file ,@body))))
69
70 (defmacro std-page (out-file title &body body)
71   `(let ((*indent* 0))
72      (with-open-file (*html-output* (lml-file-name ',out-file :output)
73                       :direction :output
74                       :if-exists :supersede)
75        (print-std-page (lml-file-name ',out-file :source) ,title ,@body))))
76
77 (defmacro titled-pre-section (title &body body)
78   `(progn
79      (h1 ,title)
80      (pre :style "padding-left:30pt;"
81           ,@body)))
82
83
84