Function: vhdl-template-type

vhdl-template-type is an interactive and byte-compiled function defined in vhdl-mode.el.gz.

Signature

(vhdl-template-type)

Documentation

Insert a type declaration.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-template-type ()
  "Insert a type declaration."
  (interactive)
  (let ((start (point))
	name mid-pos end-pos)
    (vhdl-insert-keyword "TYPE ")
    (when (setq name (vhdl-template-field "name" nil t start (point)))
      (vhdl-insert-keyword " IS ")
      (let ((definition
	      (upcase
	       (or (vhdl-template-field
		    "[scalar type | ARRAY | RECORD | ACCESS | FILE | ENUM]" nil t)
		   ""))))
	(cond ((equal definition "")
	       (delete-char -4)
	       (insert ";"))
	      ((equal definition "ARRAY")
	       (delete-region (point) (progn (forward-word-strictly -1)
                                             (point)))
	       (vhdl-template-array 'type t))
	      ((equal definition "RECORD")
	       (setq mid-pos (point-marker))
	       (delete-region (point) (progn (forward-word-strictly -1)
                                             (point)))
	       (vhdl-template-record 'type name t))
	      ((equal definition "ACCESS")
	       (insert " ")
	       (vhdl-template-field "type" ";"))
	      ((equal definition "FILE")
	       (vhdl-insert-keyword " OF ")
	       (vhdl-template-field "type" ";"))
	      ((equal definition "ENUM")
	       (kill-word -1)
	       (insert "(")
	       (setq end-pos (point-marker))
	       (insert ");"))
	      (t (insert ";")))
	(when mid-pos
	  (setq end-pos (point-marker))
	  (goto-char mid-pos)
	  (end-of-line))
	(vhdl-comment-insert-inline)
	(when end-pos (goto-char end-pos))))))