Function: vhdl-template-case
vhdl-template-case is an interactive and byte-compiled function
defined in vhdl-mode.el.gz.
Signature
(vhdl-template-case &optional KIND)
Documentation
Insert a case statement.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-template-case (&optional kind)
"Insert a case statement."
(interactive)
(let ((margin (current-indentation))
(start (point))
label)
(unless kind (setq kind (if (or (vhdl-sequential-statement-p)
(not (vhdl-standard-p 'ams))) 'is 'use)))
(if (or (not (eq vhdl-optional-labels 'all)) (vhdl-standard-p '87))
(vhdl-insert-keyword "CASE ")
(vhdl-insert-keyword ": CASE ")
(goto-char start)
(setq label (vhdl-template-field "[label]" nil t))
(unless label (delete-char 2))
(forward-word-strictly 1)
(forward-char 1))
(when (vhdl-template-field "expression" nil t start (point))
(vhdl-insert-keyword (concat " " (if (eq kind 'is) "IS" "USE") "\n\n"))
(indent-to margin)
(vhdl-insert-keyword "END CASE")
(when label (insert " " label))
(insert ";")
(forward-line -1)
(indent-to (+ margin vhdl-basic-offset))
(vhdl-insert-keyword "WHEN ")
(let ((position (point)))
(insert " => ;\n")
(indent-to (+ margin vhdl-basic-offset))
(vhdl-insert-keyword "WHEN OTHERS => null;")
(goto-char position)))))