r5094: *** empty log message ***
[kmrcl.git] / web-utils.lisp
1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          web-utils.lisp
6 ;;;; Purpose:       Basic web utility functions
7 ;;;; Programmer:    Kevin M. Rosenberg
8 ;;;; Date Started:  Apr 2000
9 ;;;;
10 ;;;; $Id: web-utils.lisp,v 1.11 2003/06/12 02:38:39 kevin Exp $
11 ;;;;
12 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
13 ;;;;
14 ;;;; KMRCL users are granted the rights to distribute and use this software
15 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
16 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
17 ;;;; *************************************************************************
18
19 (in-package #:kmrcl)
20
21
22 ;;; HTML/XML constants
23
24 (defvar *standard-xml-header* 
25   #.(format nil "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>~%<?xml-stylesheet type=\"text/css\" href=\"http://b9.com/umlsxml.css\" ?>~%~%"))
26
27 (defvar *standard-html-header* "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">")
28
29 (defvar *standard-xhtml-header*
30   #.(format nil "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>~%<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3c.org/TR/xhtml11/DTD/xhtml11\">"))
31
32
33 ;;; User agent functions
34
35 (defun user-agent-ie-p (agent)
36   "Takes a user-agent string and returns T for Internet Explorer."
37   (or (string-starts-with "Microsoft" agent)
38       (string-starts-with "Internet Explore" agent)
39       (search "MSIE" agent)))
40
41 ;;; URL Functions
42
43 (defvar *base-url* "")
44 (defun base-url! (url)
45   (setq *base-url* url))
46
47 (defun make-url (page-name &key (base-dir *base-url*) (format :html) (vars nil))
48   (let ((amp (case format
49                (:html
50                 "&")
51                ((:xml :ie-xml)
52                 "&amp;"))))
53     (concatenate 'string 
54       base-dir page-name
55       (if vars
56           (let ((first-var (first vars)))
57             (concatenate 'string 
58               "?"  (car first-var) "=" (cadr first-var)
59               (mapcar-append-string 
60                #'(lambda (var) 
61                    (when (and (car var) (cadr var))
62                      (concatenate 'string 
63                        amp (car var) "=" (cadr var))))
64                (rest vars))))
65         ""))))
66
67 (defun make-url-new (page-name &key (base-dir *base-url*) (format :html)
68                                (vars nil))
69   (let ((amp (ecase format
70                (:html "&")
71                ((:xml :ie-xml) "&amp;"))))
72     (concatenate 'string 
73          base-dir page-name
74          (if vars
75              (let ((first-var (first vars)))
76                (concatenate 'string 
77                             "?"  (car first-var) "=" (cadr first-var)
78                             (mapcar-append-string 
79                              #'(lambda (var) 
80                                  (when (and (car var) (cadr var))
81                                    (concatenate 'string 
82                                                 amp (car var) "=" (cadr var))))
83                              (rest vars))))
84            ""))))