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
              (mapc #'delete-overlay clones))
            (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))))