Function: semantic-edits-change-between-tags
semantic-edits-change-between-tags is a byte-compiled function defined
in edit.el.gz.
Signature
(semantic-edits-change-between-tags CHANGE)
Documentation
Return a cache list of tags surrounding CHANGE.
The returned list is the CONS cell in the master list pointing to
a tag just before CHANGE. The CDR will have the tag just after CHANGE.
CHANGE cannot encompass or overlap a leaf tag.
If CHANGE is fully encompassed in a tag that has children, and
this change occurs between those children, this returns non-nil.
See semantic-edits-change-leaf-tag for details on parents.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/edit.el.gz
(defun semantic-edits-change-between-tags (change)
"Return a cache list of tags surrounding CHANGE.
The returned list is the CONS cell in the master list pointing to
a tag just before CHANGE. The CDR will have the tag just after CHANGE.
CHANGE cannot encompass or overlap a leaf tag.
If CHANGE is fully encompassed in a tag that has children, and
this change occurs between those children, this returns non-nil.
See `semantic-edits-change-leaf-tag' for details on parents."
(let* ((start (semantic-edits-os change))
(end (semantic-edits-oe change))
(tags (nreverse
(semantic-find-tag-by-overlay-in-region
start end)))
(list-to-search nil)
(found nil))
(if (not tags)
(setq list-to-search semantic--buffer-cache)
;; A leaf is always first in this list
(if (and (< (semantic-tag-start (car tags)) start)
(> (semantic-tag-end (car tags)) end))
;; We are completely encompassed in a tag.
(if (setq list-to-search
(semantic-tag-components (car tags)))
;; Ok, we are completely encompassed within the first tag
;; entry, AND that tag has children. This means that change
;; occurred outside of all children, but inside some tag
;; with children.
(if (or (not (semantic-tag-with-position-p (car list-to-search)))
(> start (semantic-tag-end
(nth (1- (length list-to-search))
list-to-search)))
(< end (semantic-tag-start (car list-to-search))))
;; We have modifications to the definition of this parent
;; and not between it's children. Clear the search list.
(setq list-to-search nil)))
;; Search list is nil.
))
;; If we have a search list, let's go. Otherwise nothing.
(while (and list-to-search (not found))
(if (cdr list-to-search)
;; We end when the start of the CDR is after the end of our
;; asked change.
(if (< (semantic-tag-start (cadr list-to-search)) end)
(setq list-to-search (cdr list-to-search))
(setq found t))
(setq list-to-search nil)))
;; Return it. If it is nil, there is a logic bug, and we need
;; to avoid this bit of logic anyway.
list-to-search
))