From 73631a484a54cfd9596d7610e303295778cf4b11 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Sat, 4 Jan 2003 13:26:14 +0000 Subject: [PATCH] r3729: *** empty log message *** --- base.lisp | 65 ++++++++++++++++++++++++++++++++++-------------- debian/changelog | 6 +++++ doc/readme.html | 4 +-- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/base.lisp b/base.lisp index 85a5911..421eac0 100644 --- a/base.lisp +++ b/base.lisp @@ -1,4 +1,4 @@ -;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- +;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Aug 2002 ;;;; -;;;; $Id: base.lisp,v 1.1 2002/12/29 09:10:41 kevin Exp $ +;;;; $Id: base.lisp,v 1.2 2003/01/04 13:26:14 kevin Exp $ ;;;; ;;;; This file, part of LML, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -59,7 +59,7 @@ `(lml-print "~D" ,form)) (symbol (when form - `(lml-print (string-downcase (symbol-name ,form))))) + `(lml-print ,form))) (cons form))) forms))) @@ -92,26 +92,55 @@ (kv (gensym))) `(progn (let ((,attr '())) - (dolist (,kv ',keyargs) - (awhen (cadr ,kv) + (dolist (,kv ,keyargs) + (awhen (cdr ,kv) (push (one-keyarg-string (car ,kv) it) ,attr))) (with-attr-string ,tag (list-to-spaced-string (nreverse ,attr)) ,@body))))) +(defmacro bind-one-keyarg (keyarg) + `(list ,(car keyarg) ,(cdr keyarg))) + +(defmacro bind-all-keyargs (keyargs) + "Convert a list of keyarg pairs and convert eval/bind arguments" + (let* ((npairs (length keyargs)) + (syms (make-array npairs)) + (ipair 0) + (ipair2 0)) + (declare (dynamic-extent syms)) + (dotimes (i npairs) + (setf (aref syms i) (gensym))) + `(let ,(mapcar #'(lambda (ka) + (prog1 + (list (aref syms ipair) (cdr ka)) + (incf ipair))) + keyargs) + (list ,@(mapcar #'(lambda (ka) + (prog1 + `(cons ,(car ka) ,(aref syms ipair2)) + (incf ipair2))) + keyargs))))) + (defmacro with (tag &rest args) + "Return a list of keyargs and also the body of LML form" (let ((body '()) (keyargs '()) - (n (length args))) - (do ((i 0 (1+ i))) - ((> i (1- n))) - (let ((arg (nth i args)) - (value (when (< (1+ i) n) - (nth (1+ i) args)))) - (if (keyword-symbol? arg) - (progn - (push (list arg value) keyargs) - (incf i)) - (push arg body)))) - `(with-keyargs ,tag ,keyargs ,@(nreverse body)))) + (bound-keyargs (gensym))) + (do* ((n (length args)) + (i 0 (+ 2 i)) + (arg (nth i args) (nth i args)) + (value (when (< (1+ i) n) + (nth (1+ i) args)) + (when (< (1+ i) n) + (nth (1+ i) args)))) + ((or (not (keyword-symbol? arg)) + (>= i n)) + (dotimes (j (- n i)) + (push (nth (+ i j) args) body))) + (push (cons arg value) keyargs)) + (setq keyargs (nreverse keyargs)) + (setq body (nreverse body)) + `(let ((,bound-keyargs ,(macroexpand `(bind-all-keyargs ,keyargs)))) + ,(macroexpand `(with-keyargs ,tag ,bound-keyargs ,@body))))) (defmacro keyargs-string (&rest args) @@ -170,7 +199,7 @@ (let ((name (intern (format nil "~A-~A" tag :c)))) `(progn (defmacro ,name (&body body) - `(with ,',tag :class ,(car body) ,@(cdr body))) + `(with ,',tag :class (quote ,(car body)) ,@(cdr body))) (export ',name)))) (eval-when (:compile-toplevel :load-toplevel :execute) diff --git a/debian/changelog b/debian/changelog index c256bc5..e7746e4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +cl-lml (2.0.0-1) unstable; urgency=low + + * Major change: keyword parameters are now evaluated in the lexical environment. + + -- Kevin M. Rosenberg Sat, 4 Jan 2003 06:17:40 -0700 + cl-lml (1.7.6-1) unstable; urgency=low * Add checked to input macro diff --git a/doc/readme.html b/doc/readme.html index e52a9a7..5c9e51b 100644 --- a/doc/readme.html +++ b/doc/readme.html @@ -1,6 +1,6 @@ -LML README

LML Documentation

Overview

LML is a Common Lisp package for generating HTML and XHTML documents. +LML README

LML Documentation

Overview

LML is a Common Lisp package for generating HTML and XHTML documents. LML is authored by Kevin Rosenberg. The home page for LML is http://lml.b9.com/.

Installation

The easiest way to install LML is to use the Debian @@ -9,7 +9,7 @@ or mk-defsystem installed to load the system definition file. You will need to change the source pathname in the system file to match the location where you have installed LML.

Usage

Currently, there is no documentation on the functions provided by LML. However, the source code is - instructive and there are example files included in the LML package.

Examples

Iteration
(i "The square of the first five integers are)"
+		   instructive and there are example files included in the LML package.

Examples

Iteration
(i "The square of the first five integers are)"
  (b
    (loop as x from 1 to 5 
      doing
-- 
2.34.1