Function: nxml-try-copy-markup
nxml-try-copy-markup is a byte-compiled function defined in
nxml-mode.el.gz.
Signature
(nxml-try-copy-markup WORD-END-POS)
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/nxml-mode.el.gz
(defun nxml-try-copy-markup (word-end-pos)
(save-excursion
(let ((end-tag-pos (point)))
(when (and (not (nxml-get-inside end-tag-pos))
(search-backward "<" nil t)
(not (nxml-get-inside (point))))
(xmltok-forward)
(when (and (eq xmltok-type 'start-tag)
(< (point) end-tag-pos))
(let* ((start-tag-close-pos (point))
(start-tag
(buffer-substring-no-properties xmltok-start
start-tag-close-pos))
(words
(nreverse
(split-string
(buffer-substring-no-properties start-tag-close-pos
end-tag-pos)
"[ \t\r\n]+"))))
(goto-char word-end-pos)
(while (and words
(re-search-backward (concat
(regexp-quote (car words))
"\\=")
nil
t))
(setq words (cdr words))
(skip-chars-backward " \t\r\n"))
(when (and (not words)
(progn
(skip-chars-forward " \t\r\n")
(not (gethash (cons (point) start-tag)
nxml-dynamic-markup-prev-start-tags)))
(or (< end-tag-pos (point))
(< word-end-pos xmltok-start)))
(setq nxml-dynamic-markup-prev-found-marker
(copy-marker end-tag-pos t))
(puthash (cons (point) start-tag)
t
nxml-dynamic-markup-prev-start-tags)
(setq nxml-dynamic-markup-prev-lengths
(list (- start-tag-close-pos xmltok-start)
(- word-end-pos (point))
(+ (- xmltok-name-end xmltok-start) 2)))
(let ((name (xmltok-start-tag-qname)))
(insert start-tag)
(goto-char (+ word-end-pos
(- start-tag-close-pos xmltok-start)))
(insert "</" name ">")
(setq nxml-dynamic-markup-prev-pos (point))))))))))