From 14614b6d3a860788bb413be595ca297b7e178145 Mon Sep 17 00:00:00 2001 From: Mike Williams Date: Wed, 3 Apr 2002 21:17:38 +0000 Subject: [PATCH] (sgml-lexical-context): Fix up CDATA detection for boundary cases. --- lisp/textmodes/sgml-mode.el | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index 49201f5a89..b308915c94 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -872,29 +872,36 @@ If non-nil LIMIT is a nearby position before point outside of any tag." ;; any string or tag or comment or ... (save-excursion (let ((pos (point)) - text-start cdata-start state) + 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)) - ;; (setq text-start (point)) (with-syntax-table sgml-tag-syntax-table (while (< (point) pos) ;; When entering this loop we're inside text. (setq text-start (point)) (skip-chars-forward "^<" pos) - (setq cdata-start (if (looking-at "" pos 'move) - (setq state (parse-partial-sexp (point) pos 0)))) - (cond - (cdata-start (cons 'cdata cdata-start)) - ((nth 3 state) (cons 'string (nth 8 state))) - ((nth 4 state) (cons 'comment (nth 8 state))) - ((and state (> (nth 0 state) 0)) (cons 'tag (nth 1 state))) - (t (cons 'text text-start))))))) + (setq state + (cond + ((= (point) pos) + ;; We got to the end without seeing a tag. + nil) + ((looking-at "" pos 'move) + (list 0 nil nil 'cdata nil nil nil nil cdata-start)))) + (t + ;; We've reached a tag. Parse it. + ;; FIXME: Handle net-enabling start-tags + (parse-partial-sexp (point) pos 0)))))) + (cond + ((eq (nth 3 state) 'cdata) (cons 'cdata (nth 8 state))) + ((nth 3 state) (cons 'string (nth 8 state))) + ((nth 4 state) (cons 'comment (nth 8 state))) + ((and state (> (nth 0 state) 0)) (cons 'tag (nth 1 state))) + (t (cons 'text text-start)))))) (defun sgml-beginning-of-tag (&optional top-level) "Skip to beginning of tag and return its name. -- 2.20.1