;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: web-utils.lisp,v 1.8 2002/10/17 22:25:38 kevin Exp $
+;;;; $Id: web-utils.lisp,v 1.10 2003/06/06 21:59:30 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;; *************************************************************************
-(in-package :kmrcl)
-(declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3)))
+(in-package #:kmrcl)
;;; HTML/XML constants
(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"))))
+ (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)
+ "&"))))
+ (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))))
+ ""))))
+
+(defun make-url-new (page-name &key (base-dir *base-url*) (format :html)
+ (vars nil))
+ (let ((amp (ecase format
+ (:html "&")
+ ((:xml :ie-xml) "&"))))
+ (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))))
+ ""))))