Function: semantic-html-recursive-combobulate-list
semantic-html-recursive-combobulate-list is a byte-compiled function
defined in html.el.gz.
Signature
(semantic-html-recursive-combobulate-list SECTIONLIST LEVEL)
Documentation
Rearrange SECTIONLIST to be a hierarchical tag list starting at LEVEL.
Return the rearranged new list, with all remaining tags from SECTIONLIST starting at ELT 2. Sections not are not dealt with as soon as a tag with greater section value than LEVEL is found.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/html.el.gz
(defun semantic-html-recursive-combobulate-list (sectionlist level)
"Rearrange SECTIONLIST to be a hierarchical tag list starting at LEVEL.
Return the rearranged new list, with all remaining tags from
SECTIONLIST starting at ELT 2. Sections not are not dealt with as soon as a
tag with greater section value than LEVEL is found."
(let ((newl nil)
(oldl sectionlist)
(case-fold-search t)
tag
)
(save-excursion
(catch 'level-jump
(while oldl
(goto-char (car oldl))
(if (looking-at "<\\(\\w+\\)")
(let* ((word (match-string 1))
(levelmatch (assoc-string
word semantic-html-section-list t))
text begin tmp
)
(when (not levelmatch)
(error "Tag %s matched in regexp but is not in list"
word))
;; Set begin to the right location
(setq begin (point))
;; Get out of here if there if we made it that far.
(if (and levelmatch (<= (car (cdr levelmatch)) level))
(progn
(when newl
(semantic-html-set-endpoint newl begin))
(throw 'level-jump t)))
;; When there is a match, the descriptive text
;; consists of the rest of the line.
(goto-char (match-end 1))
(skip-chars-forward " \t")
(setq text (semantic-html-extract-section-name))
;; Next, recurse into the body to find the end.
(setq tmp (semantic-html-recursive-combobulate-list
(cdr oldl) (car (cdr levelmatch))))
;; Build a tag
(setq tag (semantic-html-new-section-tag
text (car tmp) (car (cdr levelmatch)) begin (point-max)))
;; Before appending the newtag, update the previous tag
;; if it is a section tag.
(when newl
(semantic-html-set-endpoint newl begin))
;; Append new tag to our master list.
(setq newl (cons tag newl))
;; continue
(setq oldl (cdr tmp))
)
(error "Problem finding section in semantic/html parser"))
;; (setq oldl (cdr oldl))
)))
;; Return the list
(cons (nreverse newl) oldl)))