]> code.delx.au - gnu-emacs/commitdiff
(sgml-lexical-context): Use sgml-parse-tag-backward to find start point.
authorMike Williams <mdub@bigfoot.com>
Tue, 9 Apr 2002 12:27:17 +0000 (12:27 +0000)
committerMike Williams <mdub@bigfoot.com>
Tue, 9 Apr 2002 12:27:17 +0000 (12:27 +0000)
(sgml-looking-back-at): Doc fix.

lisp/ChangeLog
lisp/textmodes/sgml-mode.el

index 555619a37e46e818c4322fadf616491dc259f0fe..7a14c1a419de881be5506d48a389fa91e24398ec 100644 (file)
@@ -1,3 +1,9 @@
+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
index a5532146b7c972a43a7a04ffc769962122f5ca6b..9df19cc1180b3e20d5d33072e088fb517fa6b451 100644 (file)
@@ -863,17 +863,16 @@ and move to the line in the SGML document that caused it."
 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.
@@ -966,10 +965,11 @@ With prefix argument, unquote the region."
   (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.