X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=strings.lisp;h=231ad6923fc1788d0ccfc5378a03e232a6cdf404;hb=3e172b14a7f4c73098ab3e1808db2b0bdc0bf986;hp=dce2908125da7f7f0949d16d6427baa8b3fe2c3d;hpb=933317b82c3441aa75c2c5375e25d1929bc80045;p=kmrcl.git diff --git a/strings.lisp b/strings.lisp index dce2908..231ad69 100644 --- a/strings.lisp +++ b/strings.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: strings.lisp,v 1.2 2002/11/04 18:02:13 kevin Exp $ +;;;; $Id: strings.lisp,v 1.5 2002/12/28 07:59:37 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -25,9 +25,6 @@ (defmacro string-append (outputstr &rest args) `(setq ,outputstr (concatenate 'string ,outputstr ,@args))) -(defmacro string-field-append (outputstr &rest args) - `(setq ,outputstr (concatenate 'string ,outputstr ,@args))) - (defun list-to-string (lst) "Converts a list to a string, doesn't include any delimiters between elements" (format nil "~{~A~}" lst)) @@ -149,3 +146,54 @@ (when (stringp str) (null (find-if #'not-whitespace? str)))) +#+ignore +(defun string-replace-chars-strings (str repl-alist) + "Replace all instances of a chars with a string. repl-alist is an assoc +list of characters and replacement strings." + (let* ((orig-len (length str)) + (new-len orign-len)) + (declare (fixnum orig-len new-len)) + (dotimes (i orign-len) + (declare (fixnum i)) + (let ((c (schar i str))) + ))) + str) + +(defun escape-xml-string (string) + "Escape invalid XML characters" + (string-replace-char-string + (string-replace-char-string string #\& "&") + #\< "<")) + +(defun string-replace-char-string (string repl-char repl-str) + "Replace all occurances of repl-char with repl-str" + (declare (simple-string string)) + (let ((count (count repl-char string))) + (declare (fixnum count)) + (if (zerop count) + string + (locally (declare (optimize (speed 3) (safety 0))) + (let* ((old-length (length string)) + (repl-length (length repl-str)) + (new-string (make-string (the fixnum + (+ old-length + (the fixnum + (* count + (the fixnum (1- repl-length))))))))) + (declare (fixnum old-length repl-length) + (simple-string new-string)) + (let ((newpos 0)) + (declare (fixnum newpos)) + (dotimes (oldpos (length string)) + (declare (fixnum oldpos)) + (if (char= repl-char (schar string oldpos)) + (dotimes (repl-pos repl-length) + (declare (fixnum repl-pos)) + (setf (schar new-string newpos) (schar repl-str repl-pos)) + (incf newpos)) + (progn + (setf (schar new-string newpos) (schar string oldpos)) + (incf newpos))))) + new-string))))) + +