r3341: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Fri, 8 Nov 2002 06:00:12 +0000 (06:00 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Fri, 8 Nov 2002 06:00:12 +0000 (06:00 +0000)
api.lisp [new file with mode: 0644]

diff --git a/api.lisp b/api.lisp
new file mode 100644 (file)
index 0000000..eb584d4
--- /dev/null
+++ b/api.lisp
@@ -0,0 +1,100 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          api.lisp
+;;;; Purpose:       Macros for generating API documentation
+;;;; Programmer:    Kevin M. Rosenberg based on Matthew Danish's code
+;;;; Date Started:  Nov 2002
+;;;;
+;;;; $Id: api.lisp,v 1.1 2002/11/08 06:00:12 kevin Exp $
+;;;;
+;;;; This file, part of LML, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;; and Copyright (c) 2002 Matthew Danish
+;;;;
+;;;; LML users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the GNU General Public License v2
+;;;; (http://www.gnu.org/licenses/gpl.html)
+;;;; *************************************************************************
+
+(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0)))
+(in-package :lml)
+
+;;; Copyright (c) 2002 Matthew Danish.
+;;; All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+;;; 1. Redistributions of source code must retain the above copyright
+;;;    notice, this list of conditions and the following disclaimer.
+;;; 2. Redistributions in binary form must reproduce the above copyright
+;;;    notice, this list of conditions and the following disclaimer in the
+;;;    documentation and/or other materials provided with the distribution.
+;;; 3. The name of the author may not be used to endorse or promote products
+;;;    derived from this software without specific prior written permission.
+;;;
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+;;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+;;; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+;;; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+;;; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+;;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+;;; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+;;; For an example, see Matthew Danish's cl-ftp documentation at
+;;; http://www.mapcar.org/~mrd/cl-sql/
+
+(defmacro api-list (&body body)
+  `(ul ,@(loop for item in body collect `(li ,item))))
+
+(defun stringify (x)
+  (let ((*print-case* :downcase))
+    (if (null x)
+        "()"
+        (format nil "~A" x))))
+
+(defmacro with-class-info ((class-name superclasses &rest slot-docs) &body other-info)
+  `(p (i "Class ") (b ,(stringify class-name))
+    (i " derived from ") ,(stringify superclasses) " -- " (br)
+    (i "Initargs:") (br)
+    (ul
+     ,@(loop for (slot-name slot-desc slot-default) in slot-docs collect
+             `(li (tt ,(format nil ":~A" slot-name))
+               " -- " ,slot-desc " -- " (i "Default: ")
+               ,(if (eql slot-default :n/a)
+                    "Not specified"
+                    (format nil "~S" slot-default)))))
+    ,@other-info))
+
+(defmacro with-macro-info ((macro-name &rest lambda-list) &body other-info)
+  `(p (i "Macro ") (b ,(stringify macro-name)) " "
+    (tt ,(stringify lambda-list)) (br)
+    ,@other-info))
+
+(defmacro with-function-info ((function-name &rest lambda-list) &body other-info)
+  `(p (i "Function ") (b ,(stringify function-name)) " "
+    (tt ,(stringify lambda-list))
+    (br) ,@other-info))
+
+(defmacro with-condition-info ((condition-name supers &rest slot-docs) &body other-info)
+  `(p (i "Condition ") (b ,(stringify condition-name))
+    (i " derived from ") ,(stringify supers) " -- " (br)
+    (i "Slots:") (br)
+    (ul
+     ,@(loop for (slot-name slot-desc slot-reader slot-initarg slot-default) in slot-docs collect
+             `(li (tt ,(stringify slot-name))
+               " -- " ,slot-desc " -- " (i " Default: ")
+               ,(if (eql slot-default :n/a)
+                    "Not specified"
+                    (format nil "~S" slot-default)))))
+    ,@other-info))
+
+(defmacro with-functions (&rest slots)
+  `(progn ,@(loop for (fn description . args) in slots collect
+                  `(with-function-info (,fn ,@(if args args 
+                                                 '(connection-variable)))
+                    ,description))))