From 4c0414fef484b5809552beb99a43c24a305e280c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 29 Mar 2002 22:16:38 +0000 Subject: [PATCH] (xml-lite-get-context): Don't stop parsing at unclosed tags unless it is at indentation. Kill nested unclosed tags. (xml-lite-calculate-indent, xml-lite-indent-line): Remove. (xml-lite-mode): Use sgml-indent-line instead. --- lisp/textmodes/xml-lite.el | 90 +++++++------------------------------- 1 file changed, 16 insertions(+), 74 deletions(-) diff --git a/lisp/textmodes/xml-lite.el b/lisp/textmodes/xml-lite.el index 0dfe41c6b2..ccab39365f 100644 --- a/lisp/textmodes/xml-lite.el +++ b/lisp/textmodes/xml-lite.el @@ -223,7 +223,11 @@ immediately enclosing the current position." (skip-chars-backward " \t\n") ; Make sure we're not at indentation. (while (and (or ignore (not (if full (eq full 'empty) context)) - (not (xml-lite-at-indentation-p))) + (not (xml-lite-at-indentation-p)) + (and (not sgml-xml-mode) context + (/= (point) (xml-lite-tag-start (car context))) + (member-ignore-case (xml-lite-tag-name (car context)) + sgml-unclosed-tags))) (setq tag-info (xml-lite-parse-tag-backward))) ;; This tag may enclose things we thought were tags. If so, @@ -242,7 +246,16 @@ immediately enclosing the current position." ;; start-tag ((eq (xml-lite-tag-type tag-info) 'open) (cond - ((null ignore) (push tag-info context)) + ((null ignore) + (if (and (not sgml-xml-mode) context + (member-ignore-case (xml-lite-tag-name tag-info) + sgml-unclosed-tags) + (eq t (compare-strings + (xml-lite-tag-name tag-info) nil nil + (xml-lite-tag-name (car context)) nil nil t))) + ;; There was an implicit end-tag. + nil + (push tag-info context))) ((eq t (compare-strings (xml-lite-tag-name tag-info) nil nil (car ignore) nil nil t)) (setq ignore (cdr ignore))) @@ -278,77 +291,6 @@ If FULL is non-nil, parse back to the beginning of the buffer." ;; Indenting -(defun xml-lite-calculate-indent () - "Calculate the column to which this line should be indented." - (let* ((here (point)) - (context (save-excursion (xml-lite-get-context))) - (ref-tag-info (car context)) - (last-tag-info (car (last context)))) - - (save-excursion - (cond - - ;; no context - ((null context) 0) - - ;; inside a comment - ((eq 'comment (xml-lite-tag-type last-tag-info)) - (let ((mark (looking-at "--"))) - (goto-char (xml-lite-tag-start last-tag-info)) - (forward-char 2) - (if mark (current-column) - (forward-char 2) - (+ (if (zerop (skip-chars-forward " \t")) 1 0) - (current-column))))) - - ;; inside a tag - ((xml-lite-inside-tag-p last-tag-info here) - - (let ((start-of-enclosing-string - (xml-lite-in-string-p (xml-lite-tag-start last-tag-info)))) - (cond - ;; inside an attribute value - (start-of-enclosing-string - (goto-char start-of-enclosing-string) - (1+ (current-column))) - ;; if we have a tag-name, base indent on that - ((and (xml-lite-tag-name-end last-tag-info) - (progn - (goto-char (xml-lite-tag-name-end last-tag-info)) - (not (looking-at "[ \t]*$")))) - (1+ (current-column))) - ;; otherwise, add indent-offset - (t - (goto-char (xml-lite-tag-start last-tag-info)) - (+ (current-column) xml-lite-basic-offset))))) - - ;; inside an element - (t - ;; indent to start of tag - (let ((indent-offset xml-lite-basic-offset)) - ;; add xml-lite-basic-offset, unless we're looking at the - ;; matching end-tag - (if (and (eq (length context) 1) - (xml-lite-looking-at "= (point) savep) (setq savep nil)) - (xml-lite-calculate-indent)))) - (if savep - (save-excursion (indent-line-to indent-col)) - (indent-line-to indent-col)))) - ;; Editing shortcuts @@ -431,7 +373,7 @@ Key bindings: (set (make-local-variable 'sgml-xml-mode) t) (set (make-local-variable 'xml-lite-orig-indent-line-function) indent-line-function) - (set (make-local-variable 'indent-line-function) 'xml-lite-indent-line)) + (set (make-local-variable 'indent-line-function) 'sgml-indent-line)) (kill-local-variable 'sgml-xml-mode) (setq indent-line-function xml-lite-orig-indent-line-function))) -- 2.39.2