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)))