Function: nxml-compute-indent-from-previous-line
nxml-compute-indent-from-previous-line is a byte-compiled function
defined in nxml-mode.el.gz.
Signature
(nxml-compute-indent-from-previous-line)
Documentation
Compute the indent for a line using the indentation of a previous line.
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/nxml-mode.el.gz
(defun nxml-compute-indent-from-previous-line ()
"Compute the indent for a line using the indentation of a previous line."
(save-excursion
(end-of-line)
(let ((eol (point))
bol prev-bol ref
before-context after-context)
(back-to-indentation)
(setq bol (point))
(catch 'indent
;; Move backwards until the start of a non-blank line that is
;; not inside a token.
(while (progn
(when (= (forward-line -1) -1)
(throw 'indent 0))
(back-to-indentation)
(if (looking-at "[ \t]*$")
t
(or prev-bol
(setq prev-bol (point)))
(nxml-token-after)
(not (or (= xmltok-start (point))
(eq xmltok-type 'data))))))
(setq ref (point))
;; Now scan over tokens until the end of the line to be indented.
;; Determine the context before and after the beginning of the
;; line.
(while (< (point) eol)
(nxml-tokenize-forward)
(cond ((<= bol xmltok-start)
(setq after-context
(nxml-merge-indent-context-type after-context)))
((and (<= (point) bol)
(not (and (eq xmltok-type 'partial-start-tag)
(= (point) bol))))
(setq before-context
(nxml-merge-indent-context-type before-context)))
((eq xmltok-type 'data)
(setq before-context
(nxml-merge-indent-context-type before-context))
(setq after-context
(nxml-merge-indent-context-type after-context)))
;; If in the middle of a token that looks inline,
;; then indent relative to the previous non-blank line
((eq (nxml-merge-indent-context-type before-context)
'mixed)
(goto-char prev-bol)
(throw 'indent (current-column)))
(t
(throw 'indent
(nxml-compute-indent-in-token bol))))
(skip-chars-forward " \t\r\n"))
(goto-char ref)
(+ (current-column)
(* nxml-child-indent
(+ (if (eq before-context 'start-tag) 1 0)
(if (eq after-context 'end-tag) -1 0))))))))