r5068: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sat, 7 Jun 2003 22:34:24 +0000 (22:34 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sat, 7 Jun 2003 22:34:24 +0000 (22:34 +0000)
xml-utils.lisp

index 2c2db3961e31023b47652cbfd06d60e9b6b02eb8..8acb0f6a5ef0405fb12b295bf54335e987e51656 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: xml-utils.lisp,v 1.10 2003/06/07 05:45:14 kevin Exp $
+;;;; $Id: xml-utils.lisp,v 1.11 2003/06/07 22:34:16 kevin Exp $
 ;;;;
 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
 
 ;;; XML Extraction Functions
 
-#|
-#+allegro (require :pxml)
-#+allegro
-(defun parse-xml-no-ws (str)
-  "Return list structure of XML string with removing whitespace strings"
-  (remove-tree-if #'string-ws? (parse-xml str)))
-|#
-
-
-
-(defun find-start-tag (tag taglen xmlstr start-pos end-xmlstr)
-  "Searches for the start of a tag in an xmlstring. Returns (VALUES STARTPOS ATTRIBUTE-LIST)"
+(defun find-start-tag (tag taglen xmlstr start end)
+  "Searches for the start of a tag in an xmlstring. Returns STARTPOS ATTRIBUTE-LIST)"
   (declare (simple-string tag xmlstr)
-          (fixnum taglen start-pos end-xmlstr))
+          (fixnum taglen start end)
+          (optimize (speed 3) (safety 0) (space 0)))
   (do* ((search-str (concatenate 'string "<" tag))
-       (bracketpos (fast-string-search search-str xmlstr
-                                     (1+ taglen) start-pos end-xmlstr)
-                 (fast-string-search search-str xmlstr
-                                     (1+ taglen) start-pos end-xmlstr)))
+       (search-len (1+ taglen))
+       (bracketpos (fast-string-search search-str xmlstr search-len start end)
+                   (fast-string-search search-str xmlstr search-len start end)))
        ((null bracketpos) nil)
     (let* ((endtag (+ bracketpos 1 taglen))
           (char-after-tag (schar xmlstr endtag)))
                (char= #\space char-after-tag))
        (if (char= #\> char-after-tag) 
            (return-from find-start-tag (values (1+ endtag) nil))
-           (let ((endbrack (position-char #\> xmlstr (1+ endtag) end-xmlstr)))
+           (let ((endbrack (position-char #\> xmlstr (1+ endtag) end)))
              (if endbrack
                  (return-from find-start-tag
                    (values (1+ endbrack)
                            (string-to-list-skip-delimiter
                             (subseq xmlstr endtag endbrack))))
                  (values nil nil)))))
-      (setq start-pos endtag))))
+      (setq start endtag))))
 
 
-(defun find-end-tag (tag taglen xmlstr start-pos end-xmlstr)
+(defun find-end-tag (tag taglen xmlstr start end)
   (fast-string-search
    (concatenate 'string "</" tag ">") xmlstr
-   (+ taglen 3) start-pos end-xmlstr))
+   (+ taglen 3) start end))
   
 (defun positions-xml-tag-contents (tag xmlstr &optional (start-xmlstr 0)
                                       (end-xmlstr (length xmlstr)))