Function: sgml-skip-tag-forward
sgml-skip-tag-forward is an interactive and byte-compiled function
defined in sgml-mode.el.gz.
Signature
(sgml-skip-tag-forward ARG)
Documentation
Skip to end of tag or matching closing tag if present.
With prefix argument ARG, repeat this ARG times. Return t if after a closing tag.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/sgml-mode.el.gz
(defun sgml-skip-tag-forward (arg)
"Skip to end of tag or matching closing tag if present.
With prefix argument ARG, repeat this ARG times.
Return t if after a closing tag."
(interactive "^p")
;; FIXME: Use sgml-get-context or something similar.
;; It currently might jump to an unrelated </P> if the <P>
;; we're skipping has no matching </P>.
(let ((return t))
(with-syntax-table sgml-tag-syntax-table
(while (>= arg 1)
(skip-chars-forward "^<>")
(if (eq (following-char) ?>)
(up-list -1))
(if (looking-at "<\\([^/ \n\t>]+\\)\\([^>]*[^/>]\\)?>")
;; start tag, skip any nested same pairs _and_ closing tag
(let ((case-fold-search t)
(re (concat "</?" (regexp-quote (match-string 1))
;; Ignore empty tags like <foo/>.
"\\([^>]*[^/>]\\)?>"))
point close)
(forward-list 1)
(setq point (point))
;; FIXME: This re-search-forward will mistakenly match
;; tag-like text inside attributes.
(while (and (re-search-forward re nil t)
(not (setq close
(eq (char-after (1+ (match-beginning 0))) ?/)))
(goto-char (match-beginning 0))
(sgml-skip-tag-forward 1))
(setq close nil))
(unless close
(goto-char point)
(setq return nil)))
(forward-list 1))
(setq arg (1- arg)))
return)))