;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: kmrcl.asd,v 1.13 2002/10/17 00:25:05 kevin Exp $
+;;;; $Id: kmrcl.asd,v 1.14 2002/10/18 05:14:49 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
;;;; *************************************************************************
#+allegro (require :pxml)
-#+allegro (require :aserve)
+#+(and allegro (not common-lisp-controller)) (require :aserve)
+#+(and allegro common-lisp-controller) (c-l-c::clc-require :aserve)
#+(or lispworks cmu) (ignore-errors (require :aserve))
(in-package :asdf)
-
;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: web-utils-aserve.lisp,v 1.8 2002/10/16 23:34:33 kevin Exp $
+;;;; $Id: web-utils-aserve.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
;;;;
(with-tag-attribute "font" (format nil "size=\"~a\"" size)
(princ-http text)))
-(defmacro with-link ((href xml linktype) &rest body)
- (declare (ignore linktype))
+(defmacro with-link ((href &key (format :html)) &rest body)
; (format *html-stream* "Return to <cui2 xml:href=\"qstr\">Home</cui2>")
; (format *html-stream* "Return to <go xml:link=\"simple\" show=\"replace\" href=\"qstr/\">Home</go>")
- `(if ,xml
- (progn
- (princ-http "<elem xlink:type=\"simple\" xlink:href=\"")
- (princ-http ,href)
- (princ-http "\">")
- ,@body
- (princ-http "</elem>"))
- (progn
- (princ-http "<a href=\"")
- (princ-http ,href)
- (princ-http "\">")
- ,@body
- (princ-http "</a>"))))
-
-(defun home-link (&key (xml nil) (vars nil))
- (princ-http "<font size=\"-1\">Return to ")
- (with-link ((make-url "index.html" :vars vars) xml "homelink")
- (princ-http "Browser Home"))
- (princ-http "</font><p></p>"))
+ `(case ,format
+ (:xml
+ (princ-http "<elem xlink:type=\"simple\" xlink:href=\"")
+ (princ-http ,href)
+ (princ-http "\">")
+ ,@body
+ (princ-http "</elem>"))
+ (:ie-xml
+ (princ-http "<html:a href=\"")
+ (princ-http ,href)
+ (princ-http "\">")
+ ,@body
+ (princ-http "</html:a>"))
+ (:html
+ (princ-http "<a href=\"")
+ (princ-http ,href)
+ (princ-http "\">")
+ ,@body
+ (princ-http "</a>"))))
+
+(defun home-link (&key (format :html) (vars nil))
+ (case format
+ (:html
+ (princ-http "<div class=\"homelink\">Return to ")
+ (with-link ((make-url "index.html" :vars vars))
+ (princ-http "Home"))
+ (princ-http "</div>"))
+ ((:xml :ie-xml)
+ (princ-http "<homelink>Return to ")
+ (with-link ((make-url "index.html" :vars vars :format format) :format format)
+ (princ-http "Home"))
+ (princ-http "</homelink>"))))
(defun head (title-str &key css)
(unless css
;;;; 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.9 2002/10/18 05:14:49 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(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))))
+ ""))))