]> git.eshelyaron.com Git - emacs.git/commitdiff
(xml-lite-get-context): Don't stop parsing
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 29 Mar 2002 22:16:38 +0000 (22:16 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 29 Mar 2002 22:16:38 +0000 (22:16 +0000)
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

index 0dfe41c6b2aedc56b43cc610d1298c954a5fa697..ccab39365f44be2669a0934e1672110dd2f5e760 100644 (file)
@@ -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."
 \f
 ;; 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 "</"))
-              (setq indent-offset 0))
-          (goto-char (xml-lite-tag-start ref-tag-info))
-          (+ (current-column) indent-offset)))
-
-       ))))
-
-(defun xml-lite-indent-line ()
-  "Indent the current line as XML."
-  (interactive)
-  (let* ((savep (point))
-        (indent-col
-         (save-excursion
-           (back-to-indentation)
-           (if (>= (point) savep) (setq savep nil))
-           (xml-lite-calculate-indent))))
-    (if savep
-       (save-excursion (indent-line-to indent-col))
-      (indent-line-to indent-col))))
-
 \f
 ;; 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)))