Function: sgml-electric-tag-pair-before-change-function
sgml-electric-tag-pair-before-change-function is a byte-compiled
function defined in sgml-mode.el.gz.
Signature
(sgml-electric-tag-pair-before-change-function BEG END)
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/sgml-mode.el.gz
(defun sgml-electric-tag-pair-before-change-function (_beg end)
(condition-case err
(save-excursion
(goto-char end)
(skip-chars-backward "-[:alnum:]_.:")
(if (and ;; (<= (point) beg) ; This poses problems for downcase-word.
(or (eq (char-before) ?<)
(and (eq (char-before) ?/)
(eq (char-before (1- (point))) ?<)))
(null (get-char-property (point) 'text-clones)))
(let* ((endp (eq (char-before) ?/))
(cl-start (point))
(cl-end (progn (skip-chars-forward "-[:alnum:]_.:") (point)))
(match
(if endp
(when (sgml-skip-tag-backward 1) (forward-char 1) t)
(with-syntax-table sgml-tag-syntax-table
(let ((forward-sexp-function nil))
(up-list -1)
(when (sgml-skip-tag-forward 1)
(backward-sexp 1)
(forward-char 2)
t)))))
(clones (get-char-property (point) 'text-clones)))
(when (and match
(/= cl-end cl-start)
(equal (buffer-substring cl-start cl-end)
(buffer-substring (point)
(save-excursion
(skip-chars-forward
"-[:alnum:]_.:")
(point))))
(or (not endp) (eq (char-after cl-end) ?>)))
(when clones
(message "sgml-electric-tag-pair-before-change-function: deleting old OLs")
(mapc 'delete-overlay clones))
(message "sgml-electric-tag-pair-before-change-function: new clone")
(text-clone-create cl-start cl-end 'spread "[[:alnum:]-_.:]+")
(setq sgml-electric-tag-pair-overlays
(append (get-char-property (point) 'text-clones)
sgml-electric-tag-pair-overlays))))))
(scan-error nil)
(error (message "Error in sgml-electric-pair-mode: %s" err))))