;;; vhdl-mode.el --- major mode for editing VHDL code
-;; Copyright (C) 1992-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+;; 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
;; Authors: Reto Zimmermann <reto@gnu.org>
;; Rodney J. Whitby <software.vhdl-mode@rwhitby.net>
;; Maintainer: Reto Zimmermann <reto@gnu.org>
;; Keywords: languages vhdl
-;; WWW: http://opensource.ethz.ch/emacs/vhdl-mode.html
+;; WWW: http://www.iis.ee.ethz.ch/~zimmi/emacs/vhdl-mode.html
(defconst vhdl-version "3.33.6"
"VHDL Mode version number.")
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
(defcustom vhdl-reset-active-high nil
"*Non-nil means reset in sequential processes is active high.
-nil means active low."
+Otherwise, reset is active low."
:type 'boolean
:group 'vhdl-sequential-process)
(defcustom vhdl-clock-rising-edge t
"*Non-nil means rising edge of clock triggers sequential processes.
-nil means falling edge."
+Otherwise, falling edge triggers."
:type 'boolean
:group 'vhdl-sequential-process)
(concat
"*Specifies how the name for the components package is obtained.
The components package is a package containing all component declarations for
-the current design. It's name can be obtained by modifying the project name
+the current design. Its name can be obtained by modifying the project name
\(e.g. attaching or stripping off a substring). If no project is defined, the
DIRECTORY entry is chosen."
vhdl-name-doc-string)
(insert-file-contents filename t)))
(defun vhdl-sort-alist (alist)
- "Sort alist."
+ "Sort ALIST."
(sort alist (function (lambda (a b) (string< (car a) (car b))))))
(defun vhdl-get-subdirs (directory)
(defun vhdl-mode-abbrev-table-init ()
"Initialize `vhdl-mode-abbrev-table'."
- (when vhdl-mode-abbrev-table (clear-abbrev-table vhdl-mode-abbrev-table))
(define-abbrev-table 'vhdl-mode-abbrev-table
(append
(when (memq 'vhdl vhdl-electric-keywords)
(defun vhdl-set-offset (symbol offset &optional add-p)
"Change the value of a syntactic element symbol in `vhdl-offsets-alist'.
SYMBOL is the syntactic element symbol to change and OFFSET is the new
-offset for that syntactic element. Optional ADD says to add SYMBOL to
+offset for that syntactic element. Optional ADD-P says to add SYMBOL to
`vhdl-offsets-alist' if it doesn't already appear there."
(interactive
(let* ((langelem
"If the word at the current position corresponds to an \"end\"
keyword, then return a vector containing enough information to find
the corresponding \"begin\" keyword, else return nil. The keyword to
-search backward for is aref 0. The column in which the keyword must
+search backward for is aref 0. The column in which the keyword must
appear is aref 1 or nil if any column is suitable. The supplementary
keyword to search forward for is aref 2 or nil if this is not
required. If aref 3 is t, then the \"begin\" keyword may be found in
;; Defuns for calculating the current syntactic state:
(defun vhdl-get-library-unit (bod placeholder)
- "If there is an enclosing library unit at bod, with it's \"begin\"
-keyword at placeholder, then return the library unit type."
+ "If there is an enclosing library unit at BOD, with its \"begin\"
+keyword at PLACEHOLDER, then return the library unit type."
(let ((here (vhdl-point 'bol)))
(if (save-excursion
(goto-char placeholder)
(defun vhdl-get-block-state (&optional lim)
"Finds and records all the closest opens.
-lim is the furthest back we need to search (it should be the
+LIM is the furthest back we need to search (it should be the
previous libunit keyword)."
(let ((here (point))
(lim (or lim (point-min)))
(defun vhdl-skip-case-alternative (&optional lim)
"Skip forward over case/when bodies, with optional maximal
-limit. If no next case alternative is found, nil is returned and point
-is not moved."
+limit. If no next case alternative is found, nil is returned and
+point is not moved."
(let ((lim (or lim (point-max)))
(here (point))
donep foundp)
(defun vhdl-backward-skip-label (&optional lim)
"Skip backward over a label, with optional maximal
-limit. If label is not found, nil is returned and point
+limit. If label is not found, nil is returned and point
is not moved."
(let ((lim (or lim (point-min)))
placeholder)
(when (and vhdl-progress-info (not noninteractive)
(< vhdl-progress-interval
(- (nth 1 (current-time)) (aref vhdl-progress-info 2))))
- (message (concat string "... (%2d%s)")
- (/ (* 100 (- pos (aref vhdl-progress-info 0)))
- (- (aref vhdl-progress-info 1)
- (aref vhdl-progress-info 0))) "%")
+ (let ((delta (- (aref vhdl-progress-info 1)
+ (aref vhdl-progress-info 0))))
+ (if (= 0 delta)
+ (message (concat string "... (100%s)") "%")
+ (message (concat string "... (%2d%s)")
+ (/ (* 100 (- pos (aref vhdl-progress-info 0)))
+ delta) "%")))
(aset vhdl-progress-info 2 (nth 1 (current-time)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(indent-to comment-column)
(indent-according-to-mode))
(t ; inline comment indent
- (kill-line -0))))
+ (delete-region (line-beginning-position) (point)))))
;; dedent
((and (>= (current-indentation) vhdl-basic-offset)
(or (eq last-command 'vhdl-electric-tab)
(when (not (looking-at "^\\s-*\\(--.*\\)?$"))
(end-of-line)
(if (search-backward " -- ((" (vhdl-point 'bol) t)
- (kill-line))
+ (delete-region (point) (line-end-position)))
(insert " -- ")
(insert (format "%s" expurgated))))))
(vhdl-keep-region-active))
(defun vhdl-align-region-2 (begin end match &optional substr spacing)
"Align a range of lines from BEGIN to END. The regular expression
-MATCH must match exactly one fields: the whitespace to be
+MATCH must match exactly one field: the whitespace to be
contracted/expanded. The alignment column will equal the
-rightmost column of the widest whitespace block. SPACING is
+rightmost column of the widest whitespace block. SPACING is
the amount of extra spaces to add to the calculated maximum required.
SPACING defaults to 1 so that at least one space is inserted after
the token in MATCH."
(defun vhdl-electric-dash (count)
"-- starts a comment, --- draws a horizontal line,
----- starts a display comment"
+---- starts a display comment."
(interactive "p")
(if (and vhdl-stutter-mode (not (vhdl-in-literal)))
(cond
(progn (vhdl-insert-keyword "FOR ")
(if (vhdl-template-field "[quantity name]" " USE " t)
(progn (vhdl-template-field "quantity name" " => ") t)
- (kill-word -1) nil))
+ (delete-region (point)
+ (progn (forward-word -1) (point)))
+ nil))
(vhdl-template-field "[quantity name]" " => " t))
(vhdl-template-field "expression")
(setq position (point))
(setq position (point))
(vhdl-insert-keyword "PORT ")
(unless (vhdl-template-map position t t)
- (kill-line -0)
+ (delete-region (line-beginning-position) (point))
(delete-char -1))
(insert ";"))))
(setq position (point))
(vhdl-insert-keyword "PORT ")
(unless (vhdl-template-map position t t)
- (kill-line -0)
+ (delete-region (line-beginning-position) (point))
(delete-char -1))
(insert ";")
t)
(cond ((equal definition "")
(insert ";"))
((equal definition "ARRAY")
- (kill-word -1)
+ (delete-region (point) (progn (forward-word -1) (point)))
(vhdl-template-array 'nature t))
((equal definition "RECORD")
(setq mid-pos (point-marker))
- (kill-word -1)
+ (delete-region (point) (progn (forward-word -1) (point)))
(vhdl-template-record 'nature name t))
(t
(vhdl-insert-keyword " ACROSS ")
(insert "\n")
(indent-to (+ margin vhdl-basic-offset))
(setq first nil))
- (kill-line -0)
+ (delete-region (line-beginning-position) (point))
(indent-to margin)
(vhdl-insert-keyword "END RECORD")
(unless (vhdl-standard-p '87) (and name (insert " " name)))
(delete-backward-char 4)
(insert ";"))
((equal definition "ARRAY")
- (kill-word -1)
+ (delete-region (point) (progn (forward-word -1) (point)))
(vhdl-template-array 'type t))
((equal definition "RECORD")
(setq mid-pos (point-marker))
- (kill-word -1)
+ (delete-region (point) (progn (forward-word -1) (point)))
(vhdl-template-record 'type name t))
((equal definition "ACCESS")
(insert " ")
(if vhdl-upper-case-keywords (upcase keyword) (downcase keyword)))
(defun vhdl-case-word (num)
- "Adjust case or following NUM words."
+ "Adjust case of following NUM words."
(if vhdl-upper-case-keywords (upcase-word num) (downcase-word num)))
(defun vhdl-minibuffer-tab (&optional prefix-arg)
(defun vhdl-hooked-abbrev (func)
"Do function, if syntax says abbrev is a keyword, invoked by hooked abbrev,
-but not if inside a comment or quote)."
+but not if inside a comment or quote."
(if (or (vhdl-in-literal)
(save-excursion
(forward-word -1)
;; Case fixing
(defun vhdl-fix-case-region-1 (beg end upper-case word-regexp &optional count)
- "Convert all words matching word-regexp in region to lower or upper case,
-depending on parameter upper-case."
+ "Convert all words matching WORD-REGEXP in region to lower or upper case,
+depending on parameter UPPER-CASE."
(let ((case-replace nil)
(last-update 0))
(vhdl-prepare-search-2
"Regexp to match start of construct to hide.")
(defun vhdl-hs-forward-sexp-func (count)
- "Find end of construct to hide (for hideshow). Only searches forward."
+ "Find end of construct to hide (for hideshow). Only searches forward."
(let ((pos (point)))
(vhdl-prepare-search-2
(beginning-of-line)
(goto-char end))))))
(defun vhdl-font-lock-match-item (limit)
- "Match, and move over, any declaration item after point. Adapted from
+ "Match, and move over, any declaration item after point. Adapted from
`font-lock-match-c-style-declaration-item-and-skip-to-next'."
(condition-case nil
(save-restriction
(defun vhdl-scan-directory-contents (name &optional project update num-string
non-final)
- "Scan contents of VHDL files in directory or file pattern DIR-NAME."
+ "Scan contents of VHDL files in directory or file pattern NAME."
(string-match "\\(.*[/\\]\\)\\(.*\\)" name)
; (unless (file-directory-p (match-string 1 name))
; (message "No such directory: \"%s\"" (match-string 1 name)))
(vhdl-save-cache (car project-list))
(setq project-list (cdr project-list)))
(message "Saving hierarchy caches...done")))
- (error (progn (vhdl-warning "ERROR: An error occured while saving the hierarchy caches")
+ (error (progn (vhdl-warning "ERROR: An error occurred while saving the hierarchy caches")
(sit-for 2)))))
(defun vhdl-save-cache (key)
)
(defun vhdl-speedbar-insert-project-hierarchy (project indent &optional rescan)
- "Insert hierarchy of project. Rescan directories if RESCAN is non-nil,
+ "Insert hierarchy of PROJECT. Rescan directories if RESCAN is non-nil,
otherwise use cached data."
(when (or rescan (and (not (assoc project vhdl-file-alist))
(not (vhdl-load-cache project))))