-(defun positions-xml-tag-contents-old (tag xmlstr &optional (start-xmlstr 0) (end-xmlstr nil))
- "Returns three values: the start and end positions of contents between
- the xml tags and the position following the close of the end tag."
- (let ((done nil)
- (pos start-xmlstr)
- (taglen (length tag))
- (startpos nil)
- (endpos nil)
- (nextpos nil))
- (unless end-xmlstr
- (setq end-xmlstr (length xmlstr)))
- (while (not done)
- (let ((bracketpos (position #\< xmlstr :start pos :end end-xmlstr)))
- (if bracketpos
- (let* ((starttag (1+ bracketpos))
- (endtag (+ starttag taglen)))
- (if (and (< endtag end-xmlstr)
- (string= tag xmlstr :start2 starttag :end2 endtag))
- (let* ((char-after-tag (char xmlstr endtag)))
- (declare (character char-after-tag))
- (if (or (char= #\> char-after-tag) (char= #\space char-after-tag))
- (progn
- (if (char= #\> char-after-tag)
- (setq startpos (1+ endtag))
- (setq startpos (1+ (position #\> xmlstr :start (1+ endtag)))))
- (setq endpos (search (format nil "</~a>" tag) xmlstr
- :start2 startpos :end2 end-xmlstr))
- (setq done t)
- (if (and startpos endpos)
- (progn
- (setq nextpos (+ endpos taglen 3))
- (setq pos nextpos))
- (setf startpos nil
- endpos nil)))
- (setq pos (1+ endtag))))
- (setq pos (1+ starttag)))
- (when (> pos end-xmlstr)
- (setq done t)))
- (setq done t))))
- (values startpos endpos nextpos)))
-
-(defun find-start-tag (tag taglen xmlstr start-pos end-xmlstr)
- (let ((bracketpos (position-char #\< xmlstr start-pos end-xmlstr)))
- (when bracketpos
- (let* ((starttag (1+ bracketpos))
- (endtag (+ starttag taglen)))
- (if (and (< endtag end-xmlstr)
- (string= tag xmlstr :start2 starttag :end2 endtag))
- (let* ((char-after-tag (char xmlstr endtag)))
- (declare (character char-after-tag))
- (if (or (char= #\> char-after-tag)
- (char= #\space char-after-tag))
- (progn
- (if (char= #\> char-after-tag)
- (setq startpos (1+ endtag))
- (setq startpos (1+ (position-char #\> xmlstr (1+ endtag) end-xmlstr))))
- ))))))))