Function: nxml-finish-element-1
nxml-finish-element-1 is an interactive and byte-compiled function
defined in nxml-mode.el.gz.
Signature
(nxml-finish-element-1 STARTP)
Documentation
Insert an end-tag for the current element and optionally a start-tag.
The start-tag is inserted if STARTP is non-nil. Return the position of the inserted start-tag or nil if none was inserted.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/nxml-mode.el.gz
(defun nxml-finish-element-1 (startp)
"Insert an end-tag for the current element and optionally a start-tag.
The start-tag is inserted if STARTP is non-nil. Return the position
of the inserted start-tag or nil if none was inserted."
(interactive "*")
(let* ((token-end (nxml-token-before))
(start-tag-end
(save-excursion
(when (and (< (point) token-end)
(memq xmltok-type
'(cdata-section
processing-instruction
comment
start-tag
end-tag
empty-element)))
(error "Point is inside a %s"
(nxml-token-type-friendly-name xmltok-type)))
(nxml-scan-element-backward token-end t)))
(starts-line
(save-excursion
(unless (eq xmltok-type 'start-tag)
(error "No matching start-tag"))
(goto-char xmltok-start)
(back-to-indentation)
(eq (point) xmltok-start)))
(ends-line
(save-excursion
(goto-char start-tag-end)
(looking-at "[ \t\r\n]*$")))
(start-tag-indent (save-excursion
(goto-char xmltok-start)
(current-column)))
(qname (xmltok-start-tag-qname))
inserted-start-tag-pos)
(when (and starts-line ends-line)
;; start-tag is on a line by itself
;; => put the end-tag on a line by itself
(unless (<= (point)
(save-excursion
(back-to-indentation)
(point)))
(insert "\n"))
(indent-line-to start-tag-indent))
(insert "</" qname ">")
(when startp
(when starts-line
(insert "\n")
(indent-line-to start-tag-indent))
(setq inserted-start-tag-pos (point))
(insert "<" qname ">")
(when (and starts-line ends-line)
(insert "\n")
(indent-line-to (save-excursion
(goto-char xmltok-start)
(forward-line 1)
(back-to-indentation)
(if (= (current-column)
(+ start-tag-indent nxml-child-indent))
(+ start-tag-indent nxml-child-indent)
start-tag-indent)))))
inserted-start-tag-pos))