From eweitz at common-lisp.net Sat Apr 24 00:26:54 2004 From: eweitz at common-lisp.net (Edi Weitz) Date: Fri, 23 Apr 2004 20:26:54 -0400 Subject: [cl-interpol-cvs] CVS update: cl-interpol/CHANGELOG cl-interpol/README cl-interpol/cl-interpol.asd cl-interpol/cl-interpol.system cl-interpol/load.lisp cl-interpol/packages.lisp cl-interpol/read.lisp cl-interpol/specials.lisp cl-interpol/test.lisp cl-interpol/test.pl cl-interpol/test2.lisp cl-interpol/unicode.lisp cl-interpol/util.lisp Message-ID: Update of /project/cl-interpol/cvsroot/cl-interpol In directory common-lisp.net:/tmp/cvs-serv31054 Modified Files: CHANGELOG README cl-interpol.asd cl-interpol.system load.lisp packages.lisp read.lisp specials.lisp test.lisp test.pl test2.lisp unicode.lisp util.lisp Log Message: pre-0.1.2 including hyperdoc support Date: Fri Apr 23 20:26:53 2004 Author: eweitz Index: cl-interpol/CHANGELOG diff -u cl-interpol/CHANGELOG:1.1.1.1 cl-interpol/CHANGELOG:1.2 --- cl-interpol/CHANGELOG:1.1.1.1 Tue Jan 6 20:05:17 2004 +++ cl-interpol/CHANGELOG Fri Apr 23 20:26:52 2004 @@ -1,3 +1,8 @@ +Version 0.1.2 +????-??-?? +Added hyperdoc support +Added :CL-INTERPOL to *FEATURES* + Version 0.1.1 2003-12-21 Fixed an embarrassing bug where COLLECTOR was re-used in read.lisp (reported by Hans H?bner) Index: cl-interpol/README diff -u cl-interpol/README:1.1.1.1 cl-interpol/README:1.2 --- cl-interpol/README:1.1.1.1 Tue Jan 6 20:05:01 2004 +++ cl-interpol/README Fri Apr 23 20:26:52 2004 @@ -1,6 +1,10 @@ Complete documentation for CL-INTERPOL can be found in the 'doc' directory. +CL-INTERPOL also supports Nikodemus Siivola's HYPERDOC, see + and +. + 1. Installation 1.1. Probably the easiest way is Index: cl-interpol/cl-interpol.asd diff -u cl-interpol/cl-interpol.asd:1.1.1.1 cl-interpol/cl-interpol.asd:1.2 --- cl-interpol/cl-interpol.asd:1.1.1.1 Tue Jan 6 20:05:01 2004 +++ cl-interpol/cl-interpol.asd Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/cl-interpol.asd,v 1.1.1.1 2004/01/07 01:05:01 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/cl-interpol.asd,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. Index: cl-interpol/cl-interpol.system diff -u cl-interpol/cl-interpol.system:1.1.1.1 cl-interpol/cl-interpol.system:1.2 --- cl-interpol/cl-interpol.system:1.1.1.1 Tue Jan 6 20:05:17 2004 +++ cl-interpol/cl-interpol.system Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/cl-interpol.system,v 1.1.1.1 2004/01/07 01:05:17 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/cl-interpol.system,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. Index: cl-interpol/load.lisp diff -u cl-interpol/load.lisp:1.1.1.1 cl-interpol/load.lisp:1.2 --- cl-interpol/load.lisp:1.1.1.1 Tue Jan 6 20:05:01 2004 +++ cl-interpol/load.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/load.lisp,v 1.1.1.1 2004/01/07 01:05:01 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/load.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2002-2003, Dr. Edmund Weitz. All rights reserved. Index: cl-interpol/packages.lisp diff -u cl-interpol/packages.lisp:1.1.1.1 cl-interpol/packages.lisp:1.2 --- cl-interpol/packages.lisp:1.1.1.1 Tue Jan 6 20:05:01 2004 +++ cl-interpol/packages.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/packages.lisp,v 1.1.1.1 2004/01/07 01:05:01 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/packages.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. @@ -41,7 +41,8 @@ #:*short-unicode-names-p* #:*unicode-scripts* #:*outer-delimiters* - #:*inner-delimiters*)) + #:*inner-delimiters* + #:*optional-delimiters-p*)) #+:cormanlisp (defpackage "CL-INTERPOL" @@ -56,3 +57,5 @@ "*UNICODE-SCRIPTS*" "*OUTER-DELIMITERS*" "*INNER-DELIMITERS*")) + +(pushnew :cl-interpol *features*) \ No newline at end of file Index: cl-interpol/read.lisp diff -u cl-interpol/read.lisp:1.1.1.1 cl-interpol/read.lisp:1.2 --- cl-interpol/read.lisp:1.1.1.1 Tue Jan 6 20:05:20 2004 +++ cl-interpol/read.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/read.lisp,v 1.1.1.1 2004/01/07 01:05:20 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/read.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. @@ -202,6 +202,63 @@ (concatenate 'string "\\" (string result))) (t result))))) +(declaim (inline normal-name-char-p) + (inline never-name-char-p)) + +(defun normal-name-char-p (c) + (and c (or (alphanumericp c) + (member c '(#\_ #\- #\+ #\*))))) + +(defun never-name-char-p (c) + (or (not c) + (get-macro-character c) + (member c '(#\$ #\@)))) + +(defvar quell-warnings-form + #+sbcl '(declare (optimize (sb-ext:inhibit-warnings 3))) + #-sbcl nil + "A declaration form to quiet warnings about unbound variables + within a lexical environment.") + +(defun read-longest-name () + (coerce + (loop until (never-name-char-p (peek-char nil *stream* nil nil t)) + collect (read-char*)) + 'string)) + +(defun read-optional-delimited () + "Read the stuff following an optional delimiter, returning a form +that tries to deal correctly with lexical variables." + (flet ((try-pos (name i form) + (let ((ostr (gensym))) + `(handler-case + (with-output-to-string (,ostr) + (princ ,(read-from-string (subseq name 0 i)) ,ostr) + (princ ,(subseq name i) ,ostr) + ,ostr) + (unbound-variable () ,form))))) + + (loop + with name = (read-longest-name) + with form = `(error ,(format nil "Interpolation error in ~s~%" name)) + with ostr = (gensym) + for i = (position-if-not #'normal-name-char-p name) + then (position-if-not #'normal-name-char-p name :start (1+ i)) + + unless i + return `(let () ,quell-warnings-form + (handler-case + (with-output-to-string (,ostr) + (princ ,(read-from-string name) ,ostr) + ,ostr) + (unbound-variable () ,form))) + + if (> i 0) + do (setq form (try-pos name i form)) + + if (< i (length name)) + do (setq form (try-pos name (1+ i) form))))) + (declaim (inline read-form)) (defun read-form () "Reads and returns one or more Lisp forms from *STREAM* if the @@ -210,7 +267,9 @@ (let* ((start-delimiter (peek-char*)) (end-delimiter (get-end-delimiter start-delimiter *inner-delimiters*))) (cond ((null end-delimiter) - nil) + (if *optional-delimiters-p* + (read-optional-delimited) + nil)) (t `(progn ,@(progn Index: cl-interpol/specials.lisp diff -u cl-interpol/specials.lisp:1.1.1.1 cl-interpol/specials.lisp:1.2 --- cl-interpol/specials.lisp:1.1.1.1 Tue Jan 6 20:05:17 2004 +++ cl-interpol/specials.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/specials.lisp,v 1.1.1.1 2004/01/07 01:05:17 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/specials.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. @@ -63,6 +63,11 @@ "The Unicode scripts which are to be tried if a name couldn't be resolved otherwise.") +(defvar *optional-delimiters-p* nil + "Whether text following $ or @ should interpolate even without a +following delimiter. Lexical variables are handled correctly, +but the rules are somewhat complex -- see the docs for details.") + (defmacro defvar-unbound (variable-name documentation) "Like DEFVAR, but the variable will be unbound rather than getting an initial value. This is useful for variables which should have no @@ -96,4 +101,23 @@ (defvar-unbound *readtable-copy* "Bound to the current readtable if it has to be temporarily -modified.") \ No newline at end of file +modified.") + +;; stuff for Nikodemus Siivola's HYPERDOC +;; see +;; and + +(defvar *hyperdoc-base-uri* "http://weitz.de/cl-interpol/") + +(let ((exported-symbols-alist + (loop for symbol being the external-symbols of :cl-interpol + collect (cons symbol + (concatenate 'string + "#" + (string-downcase symbol)))))) + (defun hyperdoc-lookup (symbol type) + (declare (ignore type)) + (cdr (assoc symbol + exported-symbols-alist + :test #'eq)))) + \ No newline at end of file Index: cl-interpol/test.lisp diff -u cl-interpol/test.lisp:1.1.1.1 cl-interpol/test.lisp:1.2 --- cl-interpol/test.lisp:1.1.1.1 Tue Jan 6 20:05:17 2004 +++ cl-interpol/test.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/test.lisp,v 1.1.1.1 2004/01/07 01:05:17 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/test.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2002-2003, Dr. Edmund Weitz. All rights reserved. @@ -29,6 +29,10 @@ (in-package #:cl-interpol) +;; Otherwise it's impossible to see which tests are failing for all +;; the "helpful" warnings. +#+sbcl (declaim (optimize (sb-ext:inhibit-warnings 3))) + (defvar *temp*) (defparameter *cl-interpol-base-directory* @@ -153,6 +157,14 @@ (test #?"The result is ${(let ((y 2)) (+ x y))}" "The result is 42") (test #?"${#?'${a} ${c}'} ${x}" "foo bar 40")) + +(setq cl-interpol:*optional-delimiters-p* t) +(test (let ((% 23)) #?"$%a%b%") "23a%b%") +(test (let ((%a 23)) #?"$%a%b%") "23%b%") +(test (let ((%a% 23)) #?"$%a%b%") "23b%") +(test (let ((%a%b 23)) #?"$%a%b%") "23%") +(test (let ((%a%b% 23)) #?"$%a%b%") "23") +(setq cl-interpol:*optional-delimiters-p* nil) (load (merge-pathnames "test2.lisp" *cl-interpol-base-directory*)) Index: cl-interpol/test.pl diff -u cl-interpol/test.pl:1.1.1.1 cl-interpol/test.pl:1.2 --- cl-interpol/test.pl:1.1.1.1 Tue Jan 6 20:05:17 2004 +++ cl-interpol/test.pl Fri Apr 23 20:26:52 2004 @@ -1,6 +1,6 @@ #!/usr/bin/perl -### $Header: /project/cl-interpol/cvsroot/cl-interpol/test.pl,v 1.1.1.1 2004/01/07 01:05:17 eweitz Exp $ +### $Header: /project/cl-interpol/cvsroot/cl-interpol/test.pl,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ### Copyright (c) 2002-2003, Dr. Edmund Weitz. All rights reserved. @@ -49,7 +49,7 @@ print <<'HEAD'; ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/test.pl,v 1.1.1.1 2004/01/07 01:05:17 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/test.pl,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2002-2003, Dr. Edmund Weitz. All rights reserved. Index: cl-interpol/test2.lisp diff -u cl-interpol/test2.lisp:1.1.1.1 cl-interpol/test2.lisp:1.2 --- cl-interpol/test2.lisp:1.1.1.1 Tue Jan 6 20:05:17 2004 +++ cl-interpol/test2.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/test2.lisp,v 1.1.1.1 2004/01/07 01:05:17 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/test2.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2002-2003, Dr. Edmund Weitz. All rights reserved. Index: cl-interpol/unicode.lisp diff -u cl-interpol/unicode.lisp:1.1.1.1 cl-interpol/unicode.lisp:1.2 --- cl-interpol/unicode.lisp:1.1.1.1 Tue Jan 6 20:06:26 2004 +++ cl-interpol/unicode.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/unicode.lisp,v 1.1.1.1 2004/01/07 01:06:26 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/unicode.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. Index: cl-interpol/util.lisp diff -u cl-interpol/util.lisp:1.1.1.1 cl-interpol/util.lisp:1.2 --- cl-interpol/util.lisp:1.1.1.1 Tue Jan 6 20:05:20 2004 +++ cl-interpol/util.lisp Fri Apr 23 20:26:52 2004 @@ -1,5 +1,5 @@ ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-INTERPOL; Base: 10 -*- -;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/util.lisp,v 1.1.1.1 2004/01/07 01:05:20 eweitz Exp $ +;;; $Header: /project/cl-interpol/cvsroot/cl-interpol/util.lisp,v 1.2 2004/04/24 00:26:52 eweitz Exp $ ;;; Copyright (c) 2003, Dr. Edmund Weitz. All rights reserved. From eweitz at common-lisp.net Sat Apr 24 00:26:55 2004 From: eweitz at common-lisp.net (Edi Weitz) Date: Fri, 23 Apr 2004 20:26:55 -0400 Subject: [cl-interpol-cvs] CVS update: cl-interpol/doc/index.html Message-ID: Update of /project/cl-interpol/cvsroot/cl-interpol/doc In directory common-lisp.net:/tmp/cvs-serv31054/doc Modified Files: index.html Log Message: pre-0.1.2 including hyperdoc support Date: Fri Apr 23 20:26:54 2004 Author: eweitz Index: cl-interpol/doc/index.html diff -u cl-interpol/doc/index.html:1.1.1.1 cl-interpol/doc/index.html:1.2 --- cl-interpol/doc/index.html:1.1.1.1 Tue Jan 6 20:06:28 2004 +++ cl-interpol/doc/index.html Fri Apr 23 20:26:54 2004 @@ -48,7 +48,6 @@
 

Contents

  1. Download and installation -
  2. Support and mailing lists
  3. Syntax
    1. Backslashes @@ -70,7 +69,7 @@
  4. Bugs and problems
      -
    1. CL-INTERPOL doesn't work with LispWorks +
    2. CL-INTERPOL doesn't work with LispWorks 4.3
    3. Reading of large forms can be slow
    4. {n,m} modifiers in extended mode
    @@ -129,17 +128,6 @@ syntax you have to enable it with ENABLE-INTERPOL-SYNTAX. -
     

    Support and mailing lists

    - -For questions, bug reports, feature requests, improvements, or patches -please use the cl-interpol-devel -mailing list. If you want to be notified about future releases -subscribe to the cl-interpol-announce -mailing list. These mailing lists were made available thanks to -the services of common-lisp.net. -
     

    Syntax

    CL-INTERPOL installs ? (question mark) as a @@ -753,11 +741,11 @@
     

    Bugs and problems

    -

    CL-INTERPOL doesn't work with LispWorks

    +

    CL-INTERPOL doesn't work with LispWorks 4.3

    -LispWorks -(4.3.6 professional on Linux, maybe other versions too) has an error which prevents +(4.3.6 professional on Linux) has an error which prevents CL-INTERPOL from working correctly. You can check for yourself by evaluating the following form in a LispWorks listener: @@ -771,8 +759,7 @@ This should of course return 1 but signals an error for -me. If you also encounter this error you can contact Xanalys support -for a patch. +me. I have reported this as a bug to Xanalys support.

    Reading of large forms can be slow

    @@ -812,7 +799,7 @@ Thanks to Peter Seibel who had the idea to do this to make CL-PPCRE more convenient. Read his book when it is released!!!

    -$Header: /project/cl-interpol/cvsroot/cl-interpol/doc/index.html,v 1.1.1.1 2004/01/07 01:06:28 eweitz Exp $ +$Header: /project/cl-interpol/cvsroot/cl-interpol/doc/index.html,v 1.2 2004/04/24 00:26:54 eweitz Exp $

    BACK TO MY HOMEPAGE