Function: vhdl-speedbar-expand-entity

vhdl-speedbar-expand-entity is a byte-compiled function defined in vhdl-mode.el.gz.

Signature

(vhdl-speedbar-expand-entity TEXT TOKEN INDENT)

Documentation

Expand/contract the entity under the cursor.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-speedbar-expand-entity (text token indent)
  "Expand/contract the entity under the cursor."
  (cond
   ((string-match "\\+" text)		; expand entity
    (let* ((key (vhdl-speedbar-line-key indent))
	   (ent-alist (vhdl-aget vhdl-entity-alist key))
	   (ent-entry (vhdl-aget ent-alist token))
	   (arch-alist (nth 3 ent-entry))
	   (inst-alist (vhdl-get-instantiations token indent))
	   (subpack-alist (nth 5 ent-entry))
	   (multiple-arch (> (length arch-alist) 1))
	   arch-entry inst-entry)
      (if (not (or arch-alist inst-alist subpack-alist))
	  (speedbar-change-expand-button-char ??)
	(speedbar-change-expand-button-char ?-)
	;; add entity to `vhdl-speedbar-shown-unit-alist'
	(let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
	  (vhdl-aput 'unit-alist token nil)
	  (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
	(speedbar-with-writable
	 (save-excursion
	   (end-of-line) (forward-char 1)
	   ;; insert architectures
	   (when arch-alist
	     (vhdl-speedbar-make-title-line "Architectures:" (1+ indent)))
	   (while arch-alist
	     (setq arch-entry (car arch-alist))
	     (speedbar-make-tag-line
	      'curly ?+ 'vhdl-speedbar-expand-architecture
	      (cons token (nth 0 arch-entry))
	      (nth 1 arch-entry) 'vhdl-speedbar-find-file
	      (cons (nth 2 arch-entry) (nth 3 arch-entry))
	      'vhdl-speedbar-architecture-face (1+ indent))
	     (when (and multiple-arch
			(equal (nth 0 arch-entry) (nth 4 ent-entry)))
	       (end-of-line 0) (insert " (mra)") (forward-char 1))
	     (setq arch-alist (cdr arch-alist)))
	   ;; insert instantiations
	   (when inst-alist
	     (vhdl-speedbar-make-title-line "Instantiated as:" (1+ indent)))
	   (while inst-alist
	     (setq inst-entry (car inst-alist))
	     (vhdl-speedbar-make-inst-line
	      (nth 0 inst-entry) (nth 1 inst-entry) (nth 2 inst-entry)
	      (nth 3 inst-entry) (nth 4 inst-entry) (nth 5 inst-entry)
	      nil nil nil (1+ indent) 0 " in ")
	     (setq inst-alist (cdr inst-alist)))
	   ;; insert required packages
	   (vhdl-speedbar-insert-subpackages
	    subpack-alist (1+ indent) 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 entity
    (speedbar-change-expand-button-char ?+)
    ;; remove entity from `vhdl-speedbar-shown-unit-alist'
    (let* ((key (vhdl-speedbar-line-key indent))
	   (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
      (vhdl-adelete 'unit-alist token)
      (if unit-alist
	  (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
	(vhdl-adelete 'vhdl-speedbar-shown-unit-alist key))
      (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)))