Function: vhdl-speedbar-expand-architecture
vhdl-speedbar-expand-architecture is a byte-compiled function defined
in vhdl-mode.el.gz.
Signature
(vhdl-speedbar-expand-architecture TEXT TOKEN INDENT)
Documentation
Expand/contract the architecture under the cursor.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-speedbar-expand-architecture (text token indent)
"Expand/contract the architecture under the cursor."
(cond
((string-match "\\+" text) ; expand architecture
(let* ((key (vhdl-speedbar-line-key (1- indent)))
(ent-alist (vhdl-aget vhdl-entity-alist key))
(conf-alist (vhdl-aget vhdl-config-alist key))
(hier-alist (vhdl-get-hierarchy
ent-alist conf-alist (car token) (cdr token) nil nil
0 (1- indent)))
(ent-entry (vhdl-aget ent-alist (car token)))
(arch-entry (vhdl-aget (nth 3 ent-entry) (cdr token)))
(subpack-alist (nth 4 arch-entry))
entry)
(if (not (or hier-alist subpack-alist))
(speedbar-change-expand-button-char ??)
(speedbar-change-expand-button-char ?-)
;; add architecture to `vhdl-speedbar-shown-unit-alist'
(let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key))
(arch-alist (nth 0 (vhdl-aget unit-alist (car token)))))
(vhdl-aput 'unit-alist (car token)
(list (cons (cdr token) arch-alist)))
(vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
(speedbar-with-writable
(save-excursion
(end-of-line) (forward-char 1)
;; insert instance hierarchy
(when hier-alist
(vhdl-speedbar-make-title-line "Subcomponent hierarchy:"
(1+ indent)))
(while hier-alist
(setq entry (car hier-alist))
(when (or (= vhdl-speedbar-hierarchy-depth 0)
(< (nth 9 entry) vhdl-speedbar-hierarchy-depth))
(vhdl-speedbar-make-inst-line
(nth 0 entry) (nth 1 entry) (nth 2 entry) (nth 3 entry)
(nth 4 entry) (nth 5 entry) (nth 6 entry) (nth 7 entry)
(nth 8 entry) (1+ indent) (1+ (nth 9 entry)) ": "))
(setq hier-alist (cdr hier-alist)))
;; insert required packages
(vhdl-speedbar-insert-subpackages
subpack-alist (1+ indent) (1- indent))))
(when (memq 'display vhdl-speedbar-save-cache)
(add-to-list 'vhdl-updated-project-list key))
(vhdl-speedbar-update-current-unit t t))))
((string-match "-" text) ; contract architecture
(speedbar-change-expand-button-char ?+)
;; remove architecture from `vhdl-speedbar-shown-unit-alist'
(let* ((key (vhdl-speedbar-line-key (1- indent)))
(unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key))
(arch-alist (nth 0 (vhdl-aget unit-alist (car token)))))
(vhdl-aput 'unit-alist (car token) (list (delete (cdr token) arch-alist)))
(vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
(speedbar-delete-subblock indent)
(when (memq 'display vhdl-speedbar-save-cache)
(add-to-list 'vhdl-updated-project-list key))))
(t (error "Nothing to display")))
(when (equal (selected-frame) speedbar-frame)
(speedbar-center-buffer-smartly)))