r4981: Auto commit for Debian build
[kmrcl.git] / web-utils.lisp
index f8c073b43c3d1a0b7e7e682af701c540c2d48705..0f41c1275fec17e8b58ffcf9fc1ceff9afeaffd5 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: web-utils.lisp,v 1.5 2002/10/16 17:37:18 kevin Exp $
+;;;; $Id: web-utils.lisp,v 1.9 2002/10/18 05:14:49 kevin Exp $
 ;;;;
 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
 
 ;;; HTML/XML constants
 
-(defvar *std-xml-header* 
-  (format nil 
-  "<?xml version=\"1.0\" ?>~%<?xml-stylesheet type=\"text/css\" href=\"http://b9.com/umls.css\" ?>~%~%"))
+(defvar *standard-xml-header* 
+  #.(format nil "<?xml version=\"1.0\" ?>~%<?xml-stylesheet type=\"text/css\" href=\"http://b9.com/umlsxml.css\" ?>~%~%"))
 
-(defun std-xml-header ()
-  *std-xml-header*)
+(defvar *standard-html-header* "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">")
+
+(defvar *standard-xhtml-header*
+  #.(format nil "<?xml version=\"1.0\" standalone=\"yes\"?>~%<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"))
+
+
+;;; User agent functions
+
+(defun user-agent-ie-p (agent)
+  "Takes a user-agent string and returns T for Internet Explorer."
+  (when (or (string-equal "Microsoft" (subseq agent 0 (length "Microsoft")))
+           (string-equal "Internet Explore" (subseq agent 0 (length "Internet Explore")))
+           (search "MSIE" agent))
+    t))
 
 ;;; URL Functions
 
 (defun base-url! (url)
   (setq *base-url* url))
 
-(defun make-url (page-name &key (base-dir *base-url*) (vars nil))
-  (concatenate 'string base-dir page-name
-              (if vars
-                  (string-trim-last-character
-                   (concatenate 'string "?"
-                                (mapcar-append-string 
-                                 #'(lambda (var) 
-                                     (when (and (car var) (cadr var))
-                                         (concatenate 'string 
-                                           (car var) "=" (cadr var) "&")))
-                                 vars)))
-                "")))
-
+(defun make-url (page-name &key (base-dir *base-url*) (format :html) (vars nil))
+  (let ((amp (case format
+              (:html
+               "&")
+              ((:xml :ie-xml)
+               "&amp;"))))
+    (concatenate 'string 
+      base-dir page-name
+      (if vars
+         (let ((first-var (first vars)))
+           (concatenate 'string 
+             "?"  (car first-var) "=" (cadr first-var)
+             (mapcar-append-string 
+              #'(lambda (var) 
+                  (when (and (car var) (cadr var))
+                    (concatenate 'string 
+                      amp (car var) "=" (cadr var))))
+              (rest vars))))
+       ""))))