+2002-04-09 Mike Williams <mdub@bigfoot.com>
+
+ * textmodes/sgml-mode.el (sgml-lexical-context): Use
+ sgml-parse-tag-backward to find start point.
+ (sgml-looking-back-at): Doc fix.
+
2002-04-09 Pavel Jan\e,Bm\e(Bk <Pavel@Janik.cz>
* isearch.el (isearch-message-prefix): Use minibuffer-prompt face
START is the location of the start of the lexical element.
TYPE is one of `string', `comment', `tag', `cdata', or `text'.
-If non-nil LIMIT is a nearby position before point outside of any tag."
- ;; As usual, it's difficult to get a reliable answer without parsing the
- ;; whole buffer. We'll assume that a tag at indentation is outside of
- ;; any string or tag or comment or ...
+Optional argument LIMIT is the position to start parsing from.
+If nil, start from a preceding tag at indentation."
(save-excursion
(let ((pos (point))
text-start state)
- (if limit (goto-char limit)
- ;; Hopefully this regexp will match something that's not inside
- ;; a tag and also hopefully the match is nearby.
- (re-search-backward "^[ \t]*<[_:[:alpha:]/%!?#]" nil 'move))
+ (if limit
+ (goto-char limit)
+ ;; Skip tags backwards until we find one at indentation
+ (while (and (ignore-errors (sgml-parse-tag-backward))
+ (not (sgml-at-indentation-p)))))
(with-syntax-table sgml-tag-syntax-table
(while (< (point) pos)
;; When entering this loop we're inside text.
(buffer-substring-no-properties
(point) (progn (skip-syntax-forward "w_") (point))))
-(defsubst sgml-looking-back-at (s)
- (let ((start (- (point) (length s))))
+(defsubst sgml-looking-back-at (str)
+ "Return t if the test before point matches STR."
+ (let ((start (- (point) (length str))))
(and (>= start (point-min))
- (equal s (buffer-substring-no-properties start (point))))))
+ (equal str (buffer-substring-no-properties start (point))))))
(defun sgml-parse-tag-backward ()
"Parse an SGML tag backward, and return information about the tag.