Function: ebrowse-draw-tree-fn
ebrowse-draw-tree-fn is a byte-compiled function defined in
ebrowse.el.gz.
Signature
(ebrowse-draw-tree-fn)
Documentation
Display a single class and recursively its subclasses.
This function may look weird, but this is faster than recursion.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebrowse.el.gz
(cl-defun ebrowse-draw-tree-fn (&aux stack1 stack2 start)
"Display a single class and recursively its subclasses.
This function may look weird, but this is faster than recursion."
(setq stack1 (make-list (length ebrowse--tree) 0)
stack2 (copy-sequence ebrowse--tree))
(cl-loop while stack2
as level = (pop stack1)
as tree = (pop stack2)
as class = (ebrowse-ts-class tree) do
(let ((start-of-line (point))
start-of-class-name end-of-class-name)
;; Insert mark
(insert (if (ebrowse-ts-mark tree) ">" " "))
;; Indent and insert class name
(indent-to (+ (* level ebrowse--indentation)
ebrowse-tree-left-margin))
(setq start (point))
(insert (ebrowse-qualified-class-name class))
;; If template class, add <>
(when (ebrowse-template-p class)
(insert "<>"))
(ebrowse-set-face start (point) (if (zerop level)
'ebrowse-root-class
'ebrowse-default))
(setf start-of-class-name start
end-of-class-name (point))
;; If filenames are to be displayed...
(when ebrowse--show-file-names-flag
(indent-to ebrowse-source-file-column)
(setq start (point))
(insert "("
(or (ebrowse-cs-file class)
"unknown")
")")
(ebrowse-set-face start (point) 'ebrowse-file-name))
(ebrowse-set-mark-props start-of-line (1+ start-of-line) tree)
(add-text-properties
start-of-class-name end-of-class-name
`(mouse-face highlight ebrowse-what class-name
ebrowse-tree ,tree
help-echo "double-mouse-1: (un)expand tree; mouse-2: member functions, mouse-3: menu"))
(insert "\n"))
;; Push subclasses, if any.
(when (ebrowse-ts-subclasses tree)
(setq stack2
(nconc (copy-sequence (ebrowse-ts-subclasses tree)) stack2)
stack1
(nconc (make-list (length (ebrowse-ts-subclasses tree))
(1+ level))
stack1)))))