Function: vhdl-model-insert
vhdl-model-insert is an interactive and byte-compiled function defined
in vhdl-mode.el.gz.
Signature
(vhdl-model-insert MODEL-NAME)
Documentation
Insert the user model with name MODEL-NAME.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Models
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun vhdl-model-insert (model-name)
"Insert the user model with name MODEL-NAME."
(interactive
(let ((completion-ignore-case t))
(list (completing-read "Model name: " vhdl-model-alist))))
(indent-according-to-mode)
(let ((start (point-marker))
(margin (current-indentation))
model position prompt string end)
(vhdl-prepare-search-2
(when (setq model (assoc model-name vhdl-model-alist))
;; insert model
(beginning-of-line)
(delete-horizontal-space)
(goto-char start)
(vhdl-insert-string-or-file (nth 1 model))
(setq end (point-marker))
;; indent code
(goto-char start)
(beginning-of-line)
(while (< (point) end)
(unless (looking-at "^$")
(insert-char ? margin))
(beginning-of-line 2))
(goto-char start)
;; insert clock
(unless (equal "" vhdl-clock-name)
(while (re-search-forward "<clock>" end t)
(replace-match vhdl-clock-name)))
(goto-char start)
;; insert reset
(unless (equal "" vhdl-reset-name)
(while (re-search-forward "<reset>" end t)
(replace-match vhdl-reset-name)))
;; replace header prompts
(vhdl-template-replace-header-keywords start end nil t)
(goto-char start)
;; query other prompts
(while (re-search-forward
(concat "<\\(" vhdl-template-prompt-syntax "\\)>") end t)
(unless (equal "cursor" (match-string 1))
(setq position (match-beginning 1))
(setq prompt (match-string 1))
(replace-match "")
(setq string (vhdl-template-field prompt nil t))
;; replace occurrences of same prompt
(while (re-search-forward (concat "<\\(" prompt "\\)>") end t)
(replace-match (or string "")))
(goto-char position)))
(goto-char start)
;; goto final position
(if (re-search-forward "<cursor>" end t)
(replace-match "")
(goto-char end))))))