annotate lisp/progmodes/vhdl-mode.el @ 20665:5d82beffb498

Initial revision
author Karl Heuer <kwzh@gnu.org>
date Sun, 18 Jan 1998 03:39:09 +0000
parents
children 830023d4cec6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20665
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 ;;; vhdl-mode.el --- major mode for editing VHDL code
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5 ;; Authors: Reto Zimmermann <mailto:Reto.Zimmermann@iaeth.ch>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6 ;; <http://www.iis.ee.ethz.ch/~zimmi/>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7 ;; Rodney J. Whitby <mailto:rwhitby@geocities.com>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8 ;; <http://www.geocities.com/SiliconValley/Park/8287/>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9 ;; Maintainer: vhdl-mode@geocities.com
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10 ;; Maintainers' Version: 3.19
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11 ;; Keywords: languages vhdl
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
12
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
13 ;; This file is part of GNU Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is free software; you can redistribute it and/or modify
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16 ;; it under the terms of the GNU General Public License as published by
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17 ;; the Free Software Foundation; either version 2, or (at your option)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
18 ;; any later version.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
19
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
20 ;; GNU Emacs is distributed in the hope that it will be useful,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
23 ;; GNU General Public License for more details.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
24
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25 ;; You should have received a copy of the GNU General Public License
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26 ;; along with GNU Emacs; see the file COPYING. If not, write to the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
27 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28 ;; Boston, MA 02111-1307, USA.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
29
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
30 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
31 ;;; Commentary:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
32 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
33
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
34 ;; This package provides an Emacs major mode for editing VHDL code.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
35 ;; It includes the following features:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
36
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
37 ;; - Highlighting of VHDL syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
38 ;; - Indentation based on versatile syntax analysis
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
39 ;; - Template insertion (electrification) for most VHDL constructs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
40 ;; - Insertion of customizable VHDL file headers
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
41 ;; - Word completion (dynamic abbreviations)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
42 ;; - Menu containing all VHDL Mode commands
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
43 ;; - Index menu (jump index to main units and blocks in a file)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
44 ;; - Source file menu (menu of all source files in current directory)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
45 ;; - Source file compilation (syntax analysis)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
46 ;; - Postscript printing with fontification
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
47 ;; - Lower and upper case keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
48 ;; - Hiding blocks of code
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
49 ;; - Alignment functions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
50 ;; - Easy customization
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
51 ;; - Works under GNU Emacs and XEmacs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
52
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
53 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
54 ;; Usage
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
55 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
56
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
57 ;; see below (comment in vhdl-mode function) or type `C-c C-h' in Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
58
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
59 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
60 ;; Emacs Versions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
61 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
62
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
63 ;; - Emacs 20
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
64 ;; - XEmacs 19.15
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
65 ;; - This version does not support Emacs 19 (use VHDL Mode 3.10 instead)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
66
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
68 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
69 ;; Acknowledgements
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
70 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
71
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
72 ;; Electrification ideas by Bob Pack <rlpst@cislabs.pitt.edu>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
73 ;; and Steve Grout
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
74
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
75 ;; Fontification approach suggested by Ken Wood <ken@eda.com.au>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
76 ;; Source file menu suggested by Michael Laajanen <mila@enea.se>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
77 ;; Ideas about alignment from John Wiegley <johnw@borland.com>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
78
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
79 ;; Many thanks to all the users who sent me bug reports and enhancement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
80 ;; requests.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
81 ;; Special thanks go to Dan Nicolaescu <done@ece.arizona.edu> for reviewing
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
82 ;; the code and for his valuable hints.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
83
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
84 ;;; Code:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
85
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
86 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
87 ;; User definable variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
88 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
89
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
90 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
91 ;; Variables for customization
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
92
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
93 (defgroup vhdl nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
94 "Customizations for VHDL Mode."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
95 :prefix "vhdl-"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
96 :group 'languages)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
97
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
98
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
99 (defgroup vhdl-mode nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
100 "Customizations for modes."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
101 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
102
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
103 (defcustom vhdl-electric-mode t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
104 "*If non-nil, electrification (automatic template generation) is enabled.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
105 If nil, template generators can still be invoked through key bindings
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
106 and menu. Can be toggled by `\\[vhdl-electric-mode]'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
107 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
108 :group 'vhdl-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
109
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
110 (defcustom vhdl-stutter-mode t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
111 "*If non-nil, stuttering is enabled.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
112 Can be toggled by `\\[vhdl-stutter-mode]'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
113 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
114 :group 'vhdl-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
115
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
116 (defcustom vhdl-indent-tabs-mode t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
117 "*Indentation can insert tabs if this is non-nil.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
118 Overrides local variable `indent-tabs-mode'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
119 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
120 :group 'vhdl-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
121
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
122
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
123 (defgroup vhdl-compile nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
124 "Customizations for compilation."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
125 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
126
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
127 (defcustom vhdl-compiler 'v-system
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
128 "*VHDL compiler to be used for syntax analysis.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
129 cadence Cadence Design Systems (`cv -file')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
130 ikos Ikos Voyager (`analyze')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
131 quickhdl QuickHDL, Mentor Graphics (`qvhcom')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
132 synopsys Synopsys, VHDL Analyzer (`vhdlan')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
133 vantage Vantage Analysis Systems (`analyze -libfile vsslib.ini -src')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
134 viewlogic Viewlogic (`analyze -libfile vsslib.ini -src')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
135 v-system V-System, Model Technology (`vcom')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
136 For incorporation of additional compilers, please send me their command syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
137 and some example error messages."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
138 :type '(choice
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
139 (const cadence)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
140 (const ikos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
141 (const quickhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
142 (const synopsys)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
143 (const vantage)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
144 (const viewlogic)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
145 (const v-system)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
146 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
147 :group 'vhdl-compile)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
148
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
149 (defcustom vhdl-compiler-options ""
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
150 "*Options to be added to the compile command."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
151 :type 'string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
152 :group 'vhdl-compile)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
153
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
154
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
155 (defgroup vhdl-style nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
156 "Customizations for code styles."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
157 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
158
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
159 (defcustom vhdl-basic-offset 4
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
160 "*Amount of basic offset used for indentation.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
161 This value is used by + and - symbols in `vhdl-offsets-alist'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
162 :type 'integer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
163 :group 'vhdl-style)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
164
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
165
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
166 (defgroup vhdl-word-case nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
167 "Customizations for case of VHDL words."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
168 :group 'vhdl-style)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
169
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
170 (defcustom vhdl-upper-case-keywords nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
171 "*If non-nil, keywords are converted to upper case
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
172 when typed or by the fix case functions."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
173 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
174 :group 'vhdl-word-case)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
175
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
176 (defcustom vhdl-upper-case-types nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
177 "*If non-nil, standardized types are converted to upper case
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
178 by the fix case functions."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
179 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180 :group 'vhdl-word-case)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
181
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
182 (defcustom vhdl-upper-case-attributes nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
183 "*If non-nil, standardized attributes are converted to upper case
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
184 by the fix case functions."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
185 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
186 :group 'vhdl-word-case)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
188 (defcustom vhdl-upper-case-enum-values nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
189 "*If non-nil, standardized enumeration values are converted to upper case
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
190 by the fix case functions."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
191 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
192 :group 'vhdl-word-case)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
193
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
194
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
195 (defgroup vhdl-electric nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
196 "Customizations for comments."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
197 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
198
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
199 (defcustom vhdl-auto-align nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
200 "*If non-nil, some templates are automatically aligned after generation."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
201 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
202 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
203
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
204 (defcustom vhdl-additional-empty-lines t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
205 "*If non-nil, additional empty lines are inserted in some templates.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
206 This improves readability of code."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
207 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
208 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
209
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
210 (defcustom vhdl-argument-list-indent t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
211 "*If non-nil, argument lists are indented relative to the opening paren.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
212 Normal indentation is applied otherwise."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
213 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
214 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
215
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
216 (defcustom vhdl-conditions-in-parenthesis nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
217 "*If non-nil, parenthesis are placed around condition expressions."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
218 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
219 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
220
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
221 (defcustom vhdl-date-format 'scientific
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
222 "*Specifies date format to be used in header.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
223 Date formats are:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
224 american (09/17/1997)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
225 european (17.09.1997)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
226 scientific (1997/09/17)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
227 :type '(choice (const american)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
228 (const european)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
229 (const scientific))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
230 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
231
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
232 (defcustom vhdl-header-file nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
233 "*Pathname/filename of the file to be inserted as header.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
234 If the header contains RCS keywords, they may be written as <RCS>Keyword<RCS>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
235 if the header needs to be version controlled.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
236
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
237 The following keywords for template generation are supported:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
238 <filename> : replaced by the name of the buffer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
239 <author> : replaced by the user name and email address
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
240 <date> : replaced by the current date
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
241 <... string> : replaced by a prompted string (... is the prompt word)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242 <cursor> : final cursor position
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
243
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 Example:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 -----------------------------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
246 -- Title : <title string>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247 -- File : <filename>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
248 -- Author : <author>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
249 -- Created : <date>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
250 -- Description : <cursor>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
251 -----------------------------------------"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
252 :type 'string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
253 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
254
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
255 (defcustom vhdl-modify-date-prefix-string "-- Last modified : "
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
256 "*Prefix string of modification date in VHDL file header.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
257 If actualization of the modification date is called (menu, `\\[vhdl-modify]'),
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
258 this string is searched and the rest of the line replaced by the current date."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
259 :type 'string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
260 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
261
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
262 (defcustom vhdl-zero-string "'0'"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
263 "*String to use for a logic zero."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
264 :type 'string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
267 (defcustom vhdl-one-string "'1'"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
268 "*String to use for a logic one."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
269 :type 'string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
270 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
271
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
272
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
273 (defgroup vhdl-comment nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
274 "Customizations for comments."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
275 :group 'vhdl-electric)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
276
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
277 (defcustom vhdl-self-insert-comments t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
278 "*If non-nil, variables templates automatically insert help comments."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
279 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
280 :group 'vhdl-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
281
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
282 (defcustom vhdl-prompt-for-comments t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
283 "*If non-nil, various templates prompt for user definable comments."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
285 :group 'vhdl-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
287 (defcustom vhdl-comment-column 40
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288 "*Column to indent right-margin comments to.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289 Overrides local variable `comment-column'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
290 :type 'integer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291 :group 'vhdl-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
292
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293 (defcustom vhdl-end-comment-column 79
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
294 "*End of comment column."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
295 :type 'integer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296 :group 'vhdl-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298 (defvar end-comment-column 79
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 "*End of comment column.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
301
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
302 (defgroup vhdl-highlight nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
303 "Customizations for highlighting."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
304 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
305
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
306 (defcustom vhdl-highlight-names t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 "*If non-nil, unit names, subprogram names, and labels are highlighted."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
309 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
310
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
311 (defcustom vhdl-highlight-keywords t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
312 "*If non-nil, VHDL keywords and other predefined words are highlighted.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
313 That is, keywords, predefined types, predefined attributes, and predefined
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
314 enumeration values are highlighted."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
315 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
316 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
318 (defcustom vhdl-highlight-signals nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
319 "*If non-nil, signals of different classes are highlighted using colors.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
320 Signal classes are: clock, reset, status/control, data, and test."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
321 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
323
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
324 (defcustom vhdl-highlight-case-sensitive nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 "*If non-nil, case is considered for highlighting.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 Possible trade-off:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327 non-nil also upper-case VHDL words are highlighted, but case of signal names
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 is not considered (may lead to highlighting of unwanted words),
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329 nil only lower-case VHDL words are highlighted, but case of signal names
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330 is considered.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 Overrides local variable `font-lock-keywords-case-fold-search'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
334
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
335 (defcustom vhdl-use-default-colors nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336 "*If non-nil, the default colors are taken for syntax highlighting.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337 If nil, all colors are customized in VHDL Mode for better matching with the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
338 additional signal colors."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
339 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
340 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
342 (defcustom vhdl-use-default-faces nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
343 "*If non-nil, the default faces are taken for syntax highlighting.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
344 If nil, all faces are customized for better matching with the additional faces
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
345 used in VHDL Mode. This variable comes only into effect if no colors are used
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346 for highlighting or printing (i.e. variable `ps-print-color-p' is nil)."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
348 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351 (defgroup vhdl-signal-syntax nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352 "Customizations of signal syntax for highlighting."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 :group 'vhdl-highlight)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
355 (defcustom vhdl-signal-syntax-doc-string "
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
356 Must be of the form \"\\ \<\\\(...\\\)\\\>\", where ... specifies the actual syntax.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
357 (delete this space ^ , it's only a workaround to get this doc string.)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
358 The basic regexp elements are:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
359 [A-Z] any upper case letter
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
360 [A-Za-z] any letter
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
361 [0-9] any digit
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
362 \\w any letter or digit (corresponds to [A-Za-z0-9])
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363 [XY] letter \"X\" or \"Y\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 [^XY] neither letter \"X\" nor \"Y\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365 x letter \"x\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 * postfix operator for matching previous regexp element any times
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 + postfix operator for matching previous regexp element at least once
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368 ? postfix operator for matching previous regexp element at most once"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
369 "Common document string used for the custom variables below. Must be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
370 defined as custom variable due to a bug in XEmacs.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
372 (defcustom vhdl-clock-signal-syntax "\\<\\([A-Z]\\w*xC\\w*\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
373 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
374 "*Regular expression (regexp) for syntax of clock signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
375 vhdl-signal-syntax-doc-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
376 :type 'regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
377 :group 'vhdl-signal-syntax)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
378
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
379 (defcustom vhdl-reset-signal-syntax "\\<\\([A-Z]\\w*xR\\w*\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
380 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
381 "*Regular expression (regexp) for syntax of (asynchronous) reset signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382 vhdl-signal-syntax-doc-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383 :type 'regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
384 :group 'vhdl-signal-syntax)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
385
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
386 (defcustom vhdl-control-signal-syntax "\\<\\([A-Z]\\w*x[IS]\\w*\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
387 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
388 "*Regular expression (regexp) for syntax of status/control signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
389 vhdl-signal-syntax-doc-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
390 :type 'regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
391 :group 'vhdl-signal-syntax)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
392
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
393 (defcustom vhdl-data-signal-syntax "\\<\\([A-Z]\\w*xD\\w*\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
394 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
395 "*Regular expression (regexp) for syntax of data signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
396 vhdl-signal-syntax-doc-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397 :type 'regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
398 :group 'vhdl-signal-syntax)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
399
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400 (defcustom vhdl-test-signal-syntax "\\<\\([A-Z]\\w*xT\\w*\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
401 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
402 "*Regular expression (regexp) for syntax of test signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
403 vhdl-signal-syntax-doc-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
404 :type 'regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
405 :group 'vhdl-signal-syntax)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
406
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
407
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
408 (defgroup vhdl-menu nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
409 "Customizations for menues."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
410 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
411
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
412 (defcustom vhdl-source-file-menu t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
413 "*If non-nil, a menu of all source files in the current directory is created."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 :group 'vhdl-menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417 (defcustom vhdl-index-menu t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
418 "*If non-nil, an index menu for the current source file is created."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
419 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
420 :group 'vhdl-menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
421
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
422 (defcustom vhdl-hideshow-menu (not (string-match "XEmacs" emacs-version))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
423 "*If non-nil, hideshow menu and functionality is added.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
424 Hideshow allows hiding code of VHDL processes and blocks.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
425 (Does not work under XEmacs.)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
426 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
427 :group 'vhdl-menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
428
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
429
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
430 (defgroup vhdl-print nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
431 "Customizations for printing."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
432 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
434 (defcustom vhdl-print-two-column t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
435 "*If non-nil, code is printed in two columns and landscape format."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
436 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
437 :group 'vhdl-print)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
438
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
440 (defgroup vhdl-misc nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
441 "Miscellaneous customizations."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
442 :group 'vhdl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
443
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
444 (defcustom vhdl-intelligent-tab t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
445 "*If non-nil, `TAB' does indentation, word completion, and tab insertion.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
446 That is, if preceeding character is part of a word then complete word,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447 else if not at beginning of line then insert tab,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
448 else if last command was a `TAB' or `RET' then dedent one step,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
449 else indent current line (i.e. `TAB' is bound to `vhdl-tab').
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
450 If nil, TAB always indents current line (i.e. `TAB' is bound to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
451 `vhdl-indent-line')."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
452 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
453 :group 'vhdl-misc)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
454
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
455 (defcustom vhdl-template-key-binding-prefix "\C-t"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
456 "*`C-c' plus this key gives the key binding prefix for all VHDL templates.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
457 Default key binding prefix for templates is `C-c C-t' (example: architecture
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
458 `C-c C-t a'). If you have no own `C-c LETTER' bindings, you can shorten the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
459 template key binding prefix to `C-c' (example: architecture `C-c a') by
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460 assigning the empty character (\"\") to this variable. The syntax to enter
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461 control keys is \"\\C-t\"."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
462 :type 'sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
463 :group 'vhdl-misc)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
465 (defcustom vhdl-word-completion-in-minibuffer t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
466 "*If non-nil, word completion works in minibuffer (for template prompts)."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
467 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
468 :group 'vhdl-misc)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
469
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
470 (defcustom vhdl-underscore-is-part-of-word nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
471 "*If non-nil, the underscore character `_' is considered as part of word.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
472 An identifier containing underscores is then treated as a single word in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
473 select and move operations. All parts of an identifier separated by underscore
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
474 are treated as single words otherwise."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
475 :type 'boolean
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
476 :group 'vhdl-misc)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
477
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
478 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
479 ;; Other variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
480
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
481 (defvar vhdl-inhibit-startup-warnings-p nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
482 "*If non-nil, inhibits start up compatibility warnings.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
483
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
484 (defvar vhdl-strict-syntax-p nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
485 "*If non-nil, all syntactic symbols must be found in `vhdl-offsets-alist'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
486 If the syntactic symbol for a particular line does not match a symbol
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
487 in the offsets alist, an error is generated, otherwise no error is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
488 reported and the syntactic symbol is ignored.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
489
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
490 (defvar vhdl-echo-syntactic-information-p nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
491 "*If non-nil, syntactic info is echoed when the line is indented.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
492
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
493 (defconst vhdl-offsets-alist-default
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
494 '((string . -1000)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
495 (block-open . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
496 (block-close . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
497 (statement . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
498 (statement-cont . vhdl-lineup-statement-cont)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
499 (statement-block-intro . +)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
500 (statement-case-intro . +)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
501 (case-alternative . +)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
502 (comment . vhdl-lineup-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
503 (arglist-intro . +)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
504 (arglist-cont . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
505 (arglist-cont-nonempty . vhdl-lineup-arglist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
506 (arglist-close . vhdl-lineup-arglist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
507 (entity . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
508 (configuration . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
509 (package . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
510 (architecture . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
511 (package-body . 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
512 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
513 "Default settings for offsets of syntactic elements.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
514 Do not change this constant! See the variable `vhdl-offsets-alist' for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
515 more information.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
516
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
517 (defvar vhdl-offsets-alist (copy-alist vhdl-offsets-alist-default)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
518 "*Association list of syntactic element symbols and indentation offsets.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
519 As described below, each cons cell in this list has the form:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
520
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
521 (SYNTACTIC-SYMBOL . OFFSET)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
522
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
523 When a line is indented, vhdl-mode first determines the syntactic
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
524 context of the line by generating a list of symbols called syntactic
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
525 elements. This list can contain more than one syntactic element and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
526 the global variable `vhdl-syntactic-context' contains the context list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
527 for the line being indented. Each element in this list is actually a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
528 cons cell of the syntactic symbol and a buffer position. This buffer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
529 position is call the relative indent point for the line. Some
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
530 syntactic symbols may not have a relative indent point associated with
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
531 them.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
532
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
533 After the syntactic context list for a line is generated, vhdl-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
534 calculates the absolute indentation for the line by looking at each
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
535 syntactic element in the list. First, it compares the syntactic
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
536 element against the SYNTACTIC-SYMBOL's in `vhdl-offsets-alist'. When it
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
537 finds a match, it adds the OFFSET to the column of the relative indent
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
538 point. The sum of this calculation for each element in the syntactic
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
539 list is the absolute offset for line being indented.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
540
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
541 If the syntactic element does not match any in the `vhdl-offsets-alist',
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
542 an error is generated if `vhdl-strict-syntax-p' is non-nil, otherwise
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
543 the element is ignored.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
544
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
545 Actually, OFFSET can be an integer, a function, a variable, or one of
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
546 the following symbols: `+', `-', `++', or `--'. These latter
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
547 designate positive or negative multiples of `vhdl-basic-offset',
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
548 respectively: *1, *-1, *2, and *-2. If OFFSET is a function, it is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
549 called with a single argument containing the cons of the syntactic
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
550 element symbol and the relative indent point. The function should
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
551 return an integer offset.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
552
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
553 Here is the current list of valid syntactic element symbols:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
555 string -- inside multi-line string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
556 block-open -- statement block open
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
557 block-close -- statement block close
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
558 statement -- a VHDL statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
559 statement-cont -- a continuation of a VHDL statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
560 statement-block-intro -- the first line in a new statement block
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
561 statement-case-intro -- the first line in a case alternative block
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562 case-alternative -- a case statement alternative clause
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
563 comment -- a line containing only a comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
564 arglist-intro -- the first line in an argument list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
565 arglist-cont -- subsequent argument list lines when no
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
566 arguments follow on the same line as the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
567 the arglist opening paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
568 arglist-cont-nonempty -- subsequent argument list lines when at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
569 least one argument follows on the same
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
570 line as the arglist opening paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
571 arglist-close -- the solo close paren of an argument list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
572 entity -- inside an entity declaration
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
573 configuration -- inside a configuration declaration
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
574 package -- inside a package declaration
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
575 architecture -- inside an architecture body
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
576 package-body -- inside a package body
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
577 ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
578
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
579 (defvar vhdl-comment-only-line-offset 0
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
580 "*Extra offset for line which contains only the start of a comment.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
581 Can contain an integer or a cons cell of the form:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
582
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
583 (NON-ANCHORED-OFFSET . ANCHORED-OFFSET)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
584
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
585 Where NON-ANCHORED-OFFSET is the amount of offset given to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
586 non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
587 the amount of offset to give column-zero anchored comment-only lines.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
588 Just an integer as value is equivalent to (<val> . 0)")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
589
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
590 (defvar vhdl-special-indent-hook nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
591 "*Hook for user defined special indentation adjustments.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
592 This hook gets called after a line is indented by the mode.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594 (defvar vhdl-style-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 '(("IEEE"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 (vhdl-basic-offset . 4)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597 (vhdl-offsets-alist . ())
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
599 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600 "Styles of Indentation.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
601 Elements of this alist are of the form:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
602
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
603 (STYLE-STRING (VARIABLE . VALUE) [(VARIABLE . VALUE) ...])
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
604
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
605 where STYLE-STRING is a short descriptive string used to select a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
606 style, VARIABLE is any vhdl-mode variable, and VALUE is the intended
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
607 value for that variable when using the selected style.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
608
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
609 There is one special case when VARIABLE is `vhdl-offsets-alist'. In this
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
610 case, the VALUE is a list containing elements of the form:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
611
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
612 (SYNTACTIC-SYMBOL . VALUE)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
613
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
614 as described in `vhdl-offsets-alist'. These are passed directly to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
615 `vhdl-set-offset' so there is no need to set every syntactic symbol in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
616 your style, only those that are different from the default.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
617
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
618 ;; dynamically append the default value of most variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
619 (or (assoc "Default" vhdl-style-alist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
620 (let* ((varlist '(vhdl-inhibit-startup-warnings-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
621 vhdl-strict-syntax-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
622 vhdl-echo-syntactic-information-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
623 vhdl-basic-offset
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
624 vhdl-offsets-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
625 vhdl-comment-only-line-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
626 (default (cons "Default"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
627 (mapcar
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
628 (function
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
629 (lambda (var)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
630 (cons var (symbol-value var))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
631 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
632 varlist))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
633 (setq vhdl-style-alist (cons default vhdl-style-alist))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
634
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
635 (defvar vhdl-mode-hook nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
636 "*Hook called by `vhdl-mode'.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
637
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
638
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
639 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
640 ;; Emacs variant handling
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
641 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
642
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
643 ;; active regions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
644
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
645 (defun vhdl-keep-region-active ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
646 ;; do whatever is necessary to keep the region active in XEmacs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
647 ;; (formerly Lucid). ignore byte-compiler warnings you might see
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
648 (and (boundp 'zmacs-region-stays)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
649 (setq zmacs-region-stays t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
650
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
651 (defconst vhdl-emacs-features
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
652 (let ((major (and (boundp 'emacs-major-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
653 emacs-major-version))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
654 (minor (and (boundp 'emacs-minor-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
655 emacs-minor-version))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
656 flavor)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
657 ;; figure out version numbers if not already discovered
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
658 (and (or (not major) (not minor))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
659 (string-match "\\([0-9]+\\).\\([0-9]+\\)" emacs-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
660 (setq major (string-to-int (substring emacs-version
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
661 (match-beginning 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
662 (match-end 1)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
663 minor (string-to-int (substring emacs-version
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
664 (match-beginning 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
665 (match-end 2)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
666 (if (not (and major minor))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
667 (error "Cannot figure out the major and minor version numbers."))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
668 ;; calculate the major version
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
669 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
670 ((= major 18) (setq major 'v18)) ;Emacs 18
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
671 ((= major 4) (setq major 'v18)) ;Epoch 4
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
672 ((= major 19) (setq major 'v19 ;Emacs 19
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
673 flavor (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
674 ((string-match "Win-Emacs" emacs-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
675 'Win-Emacs)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
676 ((or (string-match "Lucid" emacs-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
677 (string-match "XEmacs" emacs-version))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
678 'XEmacs)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
679 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
680 t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
681 ((= major 20) (setq major 'v20 ;Emacs 20
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
682 flavor (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
683 ((string-match "Win-Emacs" emacs-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
684 'Win-Emacs)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
685 ((or (string-match "Lucid" emacs-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
686 (string-match "XEmacs" emacs-version))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
687 'XEmacs)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
688 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
689 t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
690 ;; I don't know
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
691 (t (error "Cannot recognize major version number: %s" major)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
692 ;; lets do some minimal sanity checking.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
693 (if (and (or
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
694 ;; Emacs 18 is brain dead
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
695 (eq major 'v18)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
696 ;; Lemacs before 19.6 had bugs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
697 (and (eq major 'v19) (eq flavor 'XEmacs) (< minor 6))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
698 ;; Emacs 19 before 19.21 had bugs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
699 (and (eq major 'v19) (eq flavor t) (< minor 21)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
700 (not vhdl-inhibit-startup-warnings-p))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
701 (with-output-to-temp-buffer "*vhdl-mode warnings*"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
702 (print (format
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
703 "The version of Emacs that you are running, %s,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
704 has known bugs in its syntax.c parsing routines which will affect the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
705 performance of vhdl-mode. You should strongly consider upgrading to the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
706 latest available version. vhdl-mode may continue to work, after a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
707 fashion, but strange indentation errors could be encountered."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
708 emacs-version))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
709 (list major flavor))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
710 "A list of features extant in the Emacs you are using.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
711 There are many flavors of Emacs out there, each with different
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
712 features supporting those needed by vhdl-mode. Here's the current
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 supported list, along with the values for this variable:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
714
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
715 Emacs 18/Epoch 4: (v18)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
716 XEmacs (formerly Lucid) 19: (v19 XEmacs)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
717 Win-Emacs 1.35: (V19 Win-Emacs)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
718 Emacs 19: (v19 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
719 Emacs 20: (v20 t).")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
720
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
721
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
722 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
723 ;; Bindings
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
724 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
725
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
726 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
727 ;; Key bindings
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
728
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
729 (defvar vhdl-template-map ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
730 "Keymap for VHDL templates.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
731
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
732 (if vhdl-template-map ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
733 (setq vhdl-template-map (make-sparse-keymap))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
734 ;; key bindings for VHDL templates
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
735 (define-key vhdl-template-map "\M-A" 'vhdl-alias)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
736 (define-key vhdl-template-map "a" 'vhdl-architecture)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
737 (define-key vhdl-template-map "A" 'vhdl-array)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
738 (define-key vhdl-template-map "\M-a" 'vhdl-assert)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
739 (define-key vhdl-template-map "b" 'vhdl-block)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
740 (define-key vhdl-template-map "c" 'vhdl-case)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
741 (define-key vhdl-template-map "\M-c" 'vhdl-component)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
742 (define-key vhdl-template-map "I" 'vhdl-component-instance)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
743 (define-key vhdl-template-map "\M-s" 'vhdl-concurrent-signal-assignment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
744 (define-key vhdl-template-map "\M-Cb"'vhdl-block-configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
745 (define-key vhdl-template-map "\M-Cc"'vhdl-component-configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
746 (define-key vhdl-template-map "\M-Cd"'vhdl-configuration-decl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
747 (define-key vhdl-template-map "\M-Cs"'vhdl-configuration-spec)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
748 (define-key vhdl-template-map "C" 'vhdl-constant)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
749 (define-key vhdl-template-map "d" 'vhdl-disconnect)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
750 (define-key vhdl-template-map "\M-e" 'vhdl-else)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
751 (define-key vhdl-template-map "E" 'vhdl-elsif)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
752 (define-key vhdl-template-map "e" 'vhdl-entity)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
753 (define-key vhdl-template-map "x" 'vhdl-exit)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
754 (define-key vhdl-template-map "f" 'vhdl-for)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
755 (define-key vhdl-template-map "F" 'vhdl-function)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
756 (define-key vhdl-template-map "g" 'vhdl-generate)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
757 (define-key vhdl-template-map "G" 'vhdl-generic)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
758 (define-key vhdl-template-map "h" 'vhdl-header)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
759 (define-key vhdl-template-map "i" 'vhdl-if)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
760 (define-key vhdl-template-map "L" 'vhdl-library)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
761 (define-key vhdl-template-map "l" 'vhdl-loop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
762 (define-key vhdl-template-map "m" 'vhdl-modify)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
763 (define-key vhdl-template-map "M" 'vhdl-map)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
764 (define-key vhdl-template-map "n" 'vhdl-next)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
765 (define-key vhdl-template-map "k" 'vhdl-package)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
766 (define-key vhdl-template-map "(" 'vhdl-paired-parens)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
767 (define-key vhdl-template-map "\M-p" 'vhdl-port)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
768 (define-key vhdl-template-map "p" 'vhdl-procedure)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
769 (define-key vhdl-template-map "P" 'vhdl-process)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
770 (define-key vhdl-template-map "R" 'vhdl-record)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
771 (define-key vhdl-template-map "r" 'vhdl-return-value)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
772 (define-key vhdl-template-map "\M-S" 'vhdl-selected-signal-assignment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
773 (define-key vhdl-template-map "s" 'vhdl-signal)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
774 (define-key vhdl-template-map "S" 'vhdl-subtype)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
775 (define-key vhdl-template-map "t" 'vhdl-type)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
776 (define-key vhdl-template-map "u" 'vhdl-use)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
777 (define-key vhdl-template-map "v" 'vhdl-variable)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
778 (define-key vhdl-template-map "W" 'vhdl-wait)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
779 (define-key vhdl-template-map "w" 'vhdl-while-loop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
780 (define-key vhdl-template-map "\M-w" 'vhdl-with)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
781 (define-key vhdl-template-map "\M-W" 'vhdl-clocked-wait)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
782 (define-key vhdl-template-map "Kb" 'vhdl-package-numeric-bit)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
783 (define-key vhdl-template-map "Kn" 'vhdl-package-numeric-std)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
784 (define-key vhdl-template-map "Ks" 'vhdl-package-std-logic-1164)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
785 (define-key vhdl-template-map "Kt" 'vhdl-package-textio)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
786 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
787
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
788 (defvar vhdl-mode-map ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
789 "Keymap for VHDL Mode.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
790
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
791 (if vhdl-mode-map ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
792 (setq vhdl-mode-map (make-sparse-keymap))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
793 ;; key bindings for templates
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
794 (define-key vhdl-mode-map
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
795 (concat "\C-c" vhdl-template-key-binding-prefix) vhdl-template-map)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
796 ;; standard key bindings
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
797 (define-key vhdl-mode-map "\M-a" 'vhdl-beginning-of-statement)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
798 (define-key vhdl-mode-map "\M-e" 'vhdl-end-of-statement)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
799 (define-key vhdl-mode-map "\M-\C-f" 'vhdl-forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
800 (define-key vhdl-mode-map "\M-\C-b" 'vhdl-backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
801 (define-key vhdl-mode-map "\M-\C-u" 'vhdl-backward-up-list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
802 ;(define-key vhdl-mode-map "\M-\C-d" 'vhdl-down-list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
803 (define-key vhdl-mode-map "\M-\C-a" 'vhdl-beginning-of-defun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
804 (define-key vhdl-mode-map "\M-\C-e" 'vhdl-end-of-defun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
805 (define-key vhdl-mode-map "\M-\C-h" 'vhdl-mark-defun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
806 (define-key vhdl-mode-map "\M-\C-q" 'vhdl-indent-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807 (define-key vhdl-mode-map "\177" 'backward-delete-char-untabify)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
808 (define-key vhdl-mode-map "\r" 'vhdl-return)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
809 (if vhdl-intelligent-tab
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
810 (define-key vhdl-mode-map "\t" 'vhdl-tab)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
811 (define-key vhdl-mode-map "\t" 'vhdl-indent-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
812 (define-key vhdl-mode-map " " 'vhdl-outer-space)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
813 ;; new key bindings for VHDL Mode, with no counterpart to BOCM
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
814 (define-key vhdl-mode-map "\C-c\C-e" 'vhdl-electric-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
815 (define-key vhdl-mode-map "\C-c\C-s" 'vhdl-stutter-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
816 (define-key vhdl-mode-map "\C-c\C-u" 'vhdl-fix-case-buffer)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
817 (define-key vhdl-mode-map "\C-c\C-f" 'font-lock-fontify-buffer)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
818 (define-key vhdl-mode-map "\C-c\C-x" 'vhdl-show-syntactic-information)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
819 (define-key vhdl-mode-map "\C-c\C-r" 'vhdl-regress-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
820 (define-key vhdl-mode-map "\C-c\C-i" 'vhdl-indent-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
821 (define-key vhdl-mode-map "\C-c\C-a" 'vhdl-align-noindent-region)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
822 (define-key vhdl-mode-map "\C-c\M-\C-a" 'vhdl-align-comment-region)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
823 (define-key vhdl-mode-map "\C-c\C-c" 'vhdl-comment-uncomment-region)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
824 (define-key vhdl-mode-map "\C-c-" 'vhdl-inline-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
825 (define-key vhdl-mode-map "\C-c\M--" 'vhdl-display-comment-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
826 (define-key vhdl-mode-map "\C-c\C-o" 'vhdl-open-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
827 (define-key vhdl-mode-map "\C-c\C-g" 'goto-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
828 (define-key vhdl-mode-map "\C-c\C-d" 'vhdl-kill-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
829 (define-key vhdl-mode-map "\C-c\C-h" 'vhdl-help)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
830 (define-key vhdl-mode-map "\C-c\C-v" 'vhdl-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
831 (define-key vhdl-mode-map "\C-c\C-b" 'vhdl-submit-bug-report)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
832 (define-key vhdl-mode-map "\C-c\C-k" 'vhdl-compile)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
833 (define-key vhdl-mode-map "\C-c\M-\C-k" 'vhdl-make)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
834 (define-key vhdl-mode-map "\M-\t" 'tab-to-tab-stop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
835 ;; key bindings for stuttering
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
836 (define-key vhdl-mode-map "-" 'vhdl-stutter-mode-dash)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
837 (define-key vhdl-mode-map "'" 'vhdl-stutter-mode-quote)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
838 (define-key vhdl-mode-map ";" 'vhdl-stutter-mode-semicolon)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
839 (define-key vhdl-mode-map "[" 'vhdl-stutter-mode-open-bracket)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
840 (define-key vhdl-mode-map "]" 'vhdl-stutter-mode-close-bracket)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
841 (define-key vhdl-mode-map "." 'vhdl-stutter-mode-period)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
842 (define-key vhdl-mode-map "," 'vhdl-stutter-mode-comma)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
843 (let ((c 97))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
844 (while (< c 123) ; for little a-z
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
845 (define-key vhdl-mode-map (char-to-string c) 'vhdl-stutter-mode-caps)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
846 (setq c (1+ c))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
847 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
848 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
849
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
850 ;; define special minibuffer keymap for enabling word completion in minibuffer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
851 ;; (useful in template generator prompts)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
852 (defvar vhdl-minibuffer-local-map (copy-keymap minibuffer-local-map)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
853 "Keymap for minibuffer used in VHDL Mode.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
854
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
855 (define-key vhdl-minibuffer-local-map "\t" 'vhdl-minibuffer-tab)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
856
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
857 (defvar vhdl-mode-syntax-table nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
858 "Syntax table used in vhdl-mode buffers.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
859
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
860 (if vhdl-mode-syntax-table ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
861 (setq vhdl-mode-syntax-table (make-syntax-table))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
862 ;; DO NOT TRY TO SET _ (UNDERSCORE) TO WORD CLASS!
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
863 ;; why not? (is left to the user here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
864 (if vhdl-underscore-is-part-of-word
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
865 (modify-syntax-entry ?_ "w" vhdl-mode-syntax-table))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
866 (modify-syntax-entry ?\" "\"" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
867 (modify-syntax-entry ?\$ "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
868 (modify-syntax-entry ?\% "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
869 (modify-syntax-entry ?\& "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
870 (modify-syntax-entry ?\' "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
871 (modify-syntax-entry ?\( "()" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
872 (modify-syntax-entry ?\) ")(" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
873 (modify-syntax-entry ?\* "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
874 (modify-syntax-entry ?\+ "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
875 (modify-syntax-entry ?\. "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
876 (modify-syntax-entry ?\/ "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
877 (modify-syntax-entry ?\: "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
878 (modify-syntax-entry ?\; "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
879 (modify-syntax-entry ?\< "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
880 (modify-syntax-entry ?\= "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
881 (modify-syntax-entry ?\> "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
882 (modify-syntax-entry ?\[ "(]" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
883 (modify-syntax-entry ?\\ "\\" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
884 (modify-syntax-entry ?\] ")[" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
885 (modify-syntax-entry ?\{ "(}" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
886 (modify-syntax-entry ?\| "." vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
887 (modify-syntax-entry ?\} "){" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
888 ;; add comment syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
889 (modify-syntax-entry ?\- ". 12" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
890 (modify-syntax-entry ?\n ">" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
891 (modify-syntax-entry ?\^M ">" vhdl-mode-syntax-table))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
892
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
893 (defvar vhdl-syntactic-context nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
894 "Buffer local variable containing syntactic analysis list.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
895 (make-variable-buffer-local 'vhdl-syntactic-context)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
896
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
897 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
898 ;; Abbrev hook bindings
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
899
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
900 (defvar vhdl-mode-abbrev-table nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
901 "Abbrev table in use in vhdl-mode buffers.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
902
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
903 (define-abbrev-table 'vhdl-mode-abbrev-table
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
904 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
905 ("--" "" vhdl-display-comment-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
906 ("abs" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
907 ("access" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
908 ("after" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
909 ("alias" "" vhdl-alias-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
910 ("all" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
911 ("and" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
912 ("arch" "" vhdl-architecture-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 ("architecture" "" vhdl-architecture-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
914 ("array" "" vhdl-array-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
915 ("assert" "" vhdl-assert-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
916 ("attr" "" vhdl-attribute-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
917 ("attribute" "" vhdl-attribute-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
918 ("begin" "" vhdl-default-indent-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
919 ("block" "" vhdl-block-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
920 ("body" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
921 ("buffer" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
922 ("bus" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
923 ("case" "" vhdl-case-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
924 ("comp" "" vhdl-component-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
925 ("component" "" vhdl-component-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
926 ("conc" "" vhdl-concurrent-signal-assignment-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
927 ("concurrent" "" vhdl-concurrent-signal-assignment-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
928 ("conf" "" vhdl-configuration-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
929 ("configuration" "" vhdl-configuration-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
930 ("cons" "" vhdl-constant-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
931 ("constant" "" vhdl-constant-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
932 ("disconnect" "" vhdl-disconnect-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
933 ("downto" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
934 ("else" "" vhdl-else-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
935 ("elseif" "" vhdl-elsif-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
936 ("elsif" "" vhdl-elsif-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
937 ("end" "" vhdl-default-indent-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
938 ("entity" "" vhdl-entity-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
939 ("exit" "" vhdl-exit-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
940 ("file" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
941 ("for" "" vhdl-for-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
942 ("func" "" vhdl-function-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
943 ("function" "" vhdl-function-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
944 ("gen" "" vhdl-generate-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
945 ("generate" "" vhdl-generate-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
946 ("generic" "" vhdl-generic-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
947 ("group" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
948 ("guarded" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
949 ("header" "" vhdl-header-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
950 ("if" "" vhdl-if-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
951 ("impure" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
952 ("in" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
953 ("inertial" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
954 ("inout" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
955 ("inst" "" vhdl-component-instance-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
956 ("instance" "" vhdl-component-instance-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
957 ("is" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
958 ("label" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
959 ("library" "" vhdl-library-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
960 ("linkage" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
961 ("literal" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
962 ("loop" "" vhdl-loop-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
963 ("map" "" vhdl-map-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
964 ("mod" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
965 ("modify" "" vhdl-modify-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
966 ("nand" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
967 ("new" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
968 ("next" "" vhdl-next-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
969 ("nor" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
970 ("not" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
971 ("null" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
972 ("of" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
973 ("on" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
974 ("open" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
975 ("or" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
976 ("others" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
977 ("out" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
978 ("pack" "" vhdl-package-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
979 ("package" "" vhdl-package-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
980 ("port" "" vhdl-port-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
981 ("postponed" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
982 ("procedure" "" vhdl-procedure-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
983 ("process" "" vhdl-process-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
984 ("pure" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
985 ("range" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
986 ("record" "" vhdl-record-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
987 ("register" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
988 ("reject" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
989 ("rem" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
990 ("report" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
991 ("ret" "" vhdl-return-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
992 ("return" "" vhdl-return-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
993 ("rol" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
994 ("ror" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
995 ("select" "" vhdl-selected-signal-assignment-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
996 ("severity" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
997 ("shared" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
998 ("sig" "" vhdl-signal-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
999 ("signal" "" vhdl-signal-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1000 ("sla" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1001 ("sll" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1002 ("sra" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1003 ("srl" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1004 ("sub" "" vhdl-subtype-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1005 ("subtype" "" vhdl-subtype-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1006 ("then" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1007 ("to" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1008 ("transport" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1009 ("type" "" vhdl-type-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1010 ("unaffected" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1011 ("units" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1012 ("until" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1013 ("use" "" vhdl-use-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1014 ("var" "" vhdl-variable-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1015 ("variable" "" vhdl-variable-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1016 ("wait" "" vhdl-wait-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1017 ("warning" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1018 ("when" "" vhdl-when-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1019 ("while" "" vhdl-while-loop-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1020 ("with" "" vhdl-selected-signal-assignment-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1021 ("xnor" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1022 ("xor" "" vhdl-default-hook 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1023 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1024
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1025
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1026 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1027 ;; Menues
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1028 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1029
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1031 ;; VHDL menu (using `easy-menu.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1032
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1033 ;; `customize-menu-create' is included in `cus-edit.el' version 1.9954,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1034 ;; which is not yet distributed with XEmacs 19.15
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1035 (defun vhdl-customize-menu-create (symbol &optional name)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1036 "Return a customize menu for customization group SYMBOL.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1037 If optional NAME is given, use that as the name of the menu.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1038 Otherwise the menu will be named `Customize'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1039 The format is suitable for use with `easy-menu-define'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1040 (unless name
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1041 (setq name "Customize"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1042 (if (memq 'XEmacs vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1043 ;; We can delay it under XEmacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1044 `(,name
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1045 :filter (lambda (&rest junk)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1046 (cdr (custom-menu-create ',symbol))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1047 ;; But we must create it now under Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1048 (cons name (cdr (custom-menu-create symbol)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1049
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1050 (defvar vhdl-mode-menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1051 (append
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1052 '("VHDL"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1053 ("Mode"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1054 ["Electric" vhdl-electric-mode :style toggle :selected vhdl-electric-mode]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1055 ["Stutter" vhdl-stutter-mode :style toggle :selected vhdl-stutter-mode]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1056 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1057 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1058 ("Compile"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1059 ["Compile Buffer" vhdl-compile t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1060 ["Stop Compilation" kill-compilation t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1061 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1062 ["Make" vhdl-make t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1063 ["Generate Makefile" vhdl-generate-makefile t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1064 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1065 ["Next Error" next-error t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1066 ["Previous Error" previous-error t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1067 ["First Error" first-error t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1068 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1069 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1070 ("Template"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1071 ("VHDL Construct 1"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1072 ["Alias" vhdl-alias t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1073 ["Architecture" vhdl-architecture t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1074 ["Array" vhdl-array t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1075 ["Assert" vhdl-assert t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1076 ["Attribute" vhdl-attribute t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1077 ["Block" vhdl-block t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1078 ["Case" vhdl-case t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1079 ["Component" vhdl-component t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1080 ["Concurrent (Signal Asst)" vhdl-concurrent-signal-assignment t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1081 ["Configuration (Block)" vhdl-block-configuration t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1082 ["Configuration (Comp)" vhdl-component-configuration t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1083 ["Configuration (Decl)" vhdl-configuration-decl t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1084 ["Configuration (Spec)" vhdl-configuration-spec t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1085 ["Constant" vhdl-constant t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1086 ["Disconnect" vhdl-disconnect t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1087 ["Else" vhdl-else t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1088 ["Elsif" vhdl-elsif t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1089 ["Entity" vhdl-entity t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1090 ["Exit" vhdl-exit t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1091 ["For (Loop)" vhdl-for t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1092 ["Function" vhdl-function t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1093 ["(For/If) Generate" vhdl-generate t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1094 ["Generic" vhdl-generic t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1095 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1096 ("VHDL Construct 2"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1097 ["If" vhdl-if t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1098 ["Instance" vhdl-component-instance t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1099 ["Library" vhdl-library t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1100 ["Loop" vhdl-loop t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1101 ["Map" vhdl-map t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1102 ["Next" vhdl-next t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1103 ["Package" vhdl-package t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1104 ["Port" vhdl-port t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1105 ["Procedure" vhdl-procedure t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1106 ["Process" vhdl-process t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1107 ["Record" vhdl-record t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1108 ["Return" vhdl-return-value t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1109 ["Select" vhdl-selected-signal-assignment t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1110 ["Signal" vhdl-signal t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1111 ["Subtype" vhdl-subtype t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1112 ["Type" vhdl-type t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1113 ["Use" vhdl-use t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1114 ["Variable" vhdl-variable t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1115 ["Wait" vhdl-wait t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1116 ["(Clocked Wait)" vhdl-clocked-wait t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1117 ["When" vhdl-when t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1118 ["While (Loop)" vhdl-while-loop t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1119 ["With" vhdl-with t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1120 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1121 ("Standard Package"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1122 ["numeric_bit" vhdl-package-numeric-bit t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1123 ["numeric_std" vhdl-package-numeric-std t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1124 ["std_logic_1164" vhdl-package-std-logic-1164 t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1125 ["textio" vhdl-package-textio t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1126 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1127 ["Header" vhdl-header t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1128 ["Modify (Date)" vhdl-modify t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1129 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1130 ("Comment"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1131 ["(Un)Comment Out Region" vhdl-comment-uncomment-region (mark)]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1132 ["Insert Inline Comment" vhdl-inline-comment t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1133 ["Insert Horizontal Line" vhdl-display-comment-line t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1134 ["Insert Display Comment" vhdl-display-comment t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1135 ["Fill Comment" fill-paragraph t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1136 ["Fill Comment Region" fill-region (mark)]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1137 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1138 ("Indent"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1139 ["Line" vhdl-indent-line t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1140 ["Region" indent-region (mark)]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1141 ["Buffer" vhdl-indent-buffer t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1142 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1143 ("Align"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1144 ["Region" vhdl-align-noindent-region (mark)]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1145 ["Comment Region" vhdl-align-comment-region (mark)]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1146 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1147 ("Line"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1148 ["Open" vhdl-open-line t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1149 ["Delete" vhdl-kill-line t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1150 ["Join" delete-indentation t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1151 ["Goto" goto-line t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1152 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1153 ("Move"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1154 ["Forward Statement" vhdl-end-of-statement t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1155 ["Backward Statement" vhdl-beginning-of-statement t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1156 ["Forward Expression" vhdl-forward-sexp t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1157 ["Backward Expression" vhdl-backward-sexp t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1158 ["Forward Function" vhdl-end-of-defun t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1159 ["Backward Function" vhdl-beginning-of-defun t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1160 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1161 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1162 ("Fix Case"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1163 ["Buffer" vhdl-fix-case-buffer t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1164 ["Region" vhdl-fix-case-region (mark)]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1165 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1166 ["Fontify Buffer" font-lock-fontify-buffer t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1167 ["Syntactic Info" vhdl-show-syntactic-information t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1168 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1169 ["Help" vhdl-help t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1170 ["Version" vhdl-version t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1171 ["Bug Report" vhdl-submit-bug-report t]
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1172 "--"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1173 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1174 (list (vhdl-customize-menu-create 'vhdl))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1175 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1176
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1177 (require 'easymenu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1178
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1179 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1180 ;; Index menu (using `imenu.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1181
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1182 (defvar vhdl-imenu-generic-expression
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1183 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1184 ("Entity"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1185 "^\\s-*\\(entity\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1186 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1187 ("Architecture"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1188 "^\\s-*\\(architecture\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\s-+of\\s-+\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1189 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1190 ("Configuration"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1191 "^\\s-*\\(configuration\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\s-+of\\s-+\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1192 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1193 ("Package Body"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1194 "^\\s-*\\(package body\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1195 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1196 ("Package"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1197 "^\\s-*\\(package\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1198 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1199 ("Type"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1200 "^\\s-*\\(sub\\)?type\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1201 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1202 ("Component"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203 "^\\s-*\\(component\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205 ("Function / Procedure"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206 "^\\s-*\\(procedure\\|function\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1207 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1208 ("Process / Block"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1209 "^\\s-*\\(\\(\\w\\|\\s_\\)+\\)\\s-*:\\(\\s-\\|\n\\)*\\(process\\|block\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1210 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1211 ("Instance"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1212 "^\\s-*\\(\\(\\w\\|\\s_\\)+\\s-*:\\(\\s-\\|\n\\)*\\(\\w\\|\\s_\\)+\\)\\(\\s-\\|\n\\)+\\(generic\\|port\\)\\s-+map\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1213 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1214 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1215 "Imenu generic expression for VHDL Mode. See `imenu-generic-expression'.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1216
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1217 (defun vhdl-add-index-menu ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1218 (make-local-variable 'imenu-generic-expression)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1219 (setq imenu-generic-expression vhdl-imenu-generic-expression)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1220 (imenu-add-to-menubar "Index"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1221
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1222 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1223 ;; Source file menu (using `easy-menu.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1225 (defvar vhdl-extlist '("[A-Za-z0-9_.]*.vhdl?$"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1226 (defvar vhdl-filelist-menu nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1227
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1228 (defun vhdl-add-source-files-menu ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1229 "Scan directory of current source file for all VHDL source files, and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1230 generate menu."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1232 (message "Scanning directory for source files ...")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233 (let (filelist menulist tmpextlist found
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1234 (newmap (current-local-map)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235 (cd (file-name-directory (buffer-file-name)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 ;; find files
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 (setq menulist '())
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238 (setq tmpextlist vhdl-extlist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239 (while tmpextlist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1240 (setq filelist (nreverse (directory-files
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241 (file-name-directory (buffer-file-name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242 nil (car tmpextlist) nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1243 ;; Create list for menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 (setq found nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 (while filelist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 (setq found t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1247 (setq menulist (cons (vector (car filelist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1248 (list 'find-file (car filelist)) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1249 menulist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1250 (setq filelist (cdr filelist)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1251 (setq menulist (vhdl-menu-split menulist 25))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252 (if found
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1253 (setq menulist (cons "--" menulist)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1254 (setq tmpextlist (cdr tmpextlist)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255 (setq menulist (cons ["*Rescan*" vhdl-add-source-files-menu t] menulist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1256 (setq menulist (cons "Sources" menulist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1257 ;; Create menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258 (easy-menu-add menulist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1259 (easy-menu-define vhdl-filelist-menu newmap
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1260 "VHDL source files menu" menulist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1261 ; (use-local-map (append (current-local-map) newmap))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1262 ; (use-local-map newmap)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1263 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1264 (message ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1265
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1266 (defun vhdl-menu-split (list n)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1267 "Split menu into several submenues, if number of elements > n."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1268 (if (> (length list) n)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1269 (let ((remain list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1270 (result '())
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1271 (sublist '())
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1272 (menuno 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1273 (i 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1274 (while remain
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1275 (setq sublist (cons (car remain) sublist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1276 (setq remain (cdr remain))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1277 (setq i (+ i 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1278 (if (= i n)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1279 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1280 (setq result (cons (cons (format "Sources %s" menuno)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1281 (nreverse sublist)) result))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1282 (setq i 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1283 (setq menuno (+ menuno 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1284 (setq sublist '()))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1285 (and sublist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1286 (setq result (cons (cons (format "Sources %s" menuno)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1287 (nreverse sublist)) result)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1288 (nreverse result))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1289 list))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1290
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1291
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1292 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1293 ;; VHDL Mode definition
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1294 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1295
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1296 (defun vhdl-mode ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1297 "Major mode for editing VHDL code.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1298
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1299 Usage:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1300 ------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1301
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1302 - TEMPLATE INSERTION (electrification) (`\\[vhdl-outer-space]'): After typing
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1303 a VHDL keyword and entering `\\[vhdl-outer-space]', you are prompted for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1304 arguments while a template is generated for that VHDL construct. Typing
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1305 `\\[vhdl-return]' (or `\\[keyboard-quit]' in yes-no queries) at the first
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1306 prompt aborts the current template generation. Typing `\\[just-one-space]'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1307 after a keyword inserts a space without calling the template generator.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1308 Automatic calling of the template generators (i.e. electrification) can be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1309 disabled (enabled) by setting the variable `vhdl-electric-mode' to nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1310 (non-nil) or by typing `\\[vhdl-electric-mode]' (toggles electrification
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1311 mode).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1312 Template generators can be called using the VHDL menu, the key bindings, or
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1313 by typing the keyword (first word of menu entry not in parenthesis) and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1314 `\\[vhdl-outer-space]'. The following abbreviations can also be used:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1315 arch, attr, conc, conf, comp, cons, func, inst, pack, ret, sig, sub, var.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1316
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1317 - HEADER INSERTION (`\\[vhdl-header]'): A customized header can be inserted
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1318 including the actual file name, user name, and current date as well as
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1319 prompted title strings. A custom header can be defined in a separate file
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1320 (see custom variable `vhdl-header-file').
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1321
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1322 - STUTTERING (double strike): Double striking of some keys inserts cumbersome
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1323 VHDL syntax elements. Stuttering can be disabled by variable
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1324 `vhdl-stutter-mode' and be toggled by typing `\\[vhdl-stutter-mode]'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1325 '' --> \" [ --> ( -- --> comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1326 ;; --> \" : \" [[ --> [ --CR --> comment-out code
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1327 ;;; --> \" := \" ] --> ) --- --> horizontal line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1328 .. --> \" => \" ]] --> ] ---- --> display comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1329 ,, --> \" <= \" aa --> A - zz --> Z
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1330
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1331 - WORD COMPLETION (`\\[vhdl-tab]'): Typing `\\[vhdl-tab]' after a (not
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1332 completed) word looks for a word in the buffer that starts alike and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1333 inserts it. Re-typing `\\[vhdl-tab]' toggles through alternative word
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1334 completions. This also works in the minibuffer (i.e. in template generator
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1335 prompts).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1336
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1337 Typing `\\[vhdl-tab]' after a non-word character indents the line if at the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1338 beginning of a line (i.e. no preceding non-blank characters), and inserts a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1339 tabulator stop otherwise. `\\[tab-to-tab-stop]' always inserts a tabulator
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1340 stop.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1341
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1342 - COMMENTS (`--', `---', `----', `--CR'):
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1343 `--' puts a single comment.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1344 `---' draws a horizontal line for separating code segments.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1345 `----' inserts a display comment, i.e. two horizontal lines with a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1346 comment in between.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1347 `--CR' comments out code on that line. Re-hitting CR comments out
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1348 following lines.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1349 `\\[vhdl-comment-uncomment-region]' comments out a region if not
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1350 commented out, uncomments out a region if already
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1351 commented out.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1352
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1353 You are prompted for comments after object definitions (i.e. signals,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1354 variables, constants, ports) and after subprogram and process specifications
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1355 if variable `vhdl-prompt-for-comments' is non-nil. Comments are
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1356 automatically inserted as additional labels (e.g. after begin statements)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1357 and help comments if `vhdl-self-insert-comments' is non-nil.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1358 Inline comments (i.e. comments after a piece of code on the same line) are
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1359 indented at least to `vhdl-comment-column'. Comments go at maximum to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1360 `vhdl-end-comment-column'. `\\[vhdl-return]' after a space in a comment will
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1361 open a new comment line. Typing beyond `vhdl-end-comment-column' in a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1362 comment automatically opens a new comment line. `\\[fill-paragraph]'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1363 re-fills multi-line comments.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1364
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1365 - INDENTATION: `\\[vhdl-tab]' indents a line if at the beginning of the line.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1366 The amount of indentation is specified by variable `vhdl-basic-offset'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1367 `\\[vhdl-indent-line]' always indents the current line (is bound to `TAB'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1368 if variable `vhdl-intelligent-tab' is nil). Indentation can be done for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1369 an entire region (`\\[indent-region]') or buffer (menu). Argument and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1370 port lists are indented normally (nil) or relative to the opening
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1371 parenthesis (non-nil) according to variable `vhdl-argument-list-indent'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1372 If variable `vhdl-indent-tabs-mode' is nil, spaces are used instead of tabs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1373 `\\[tabify]' and `\\[untabify]' allow to convert spaces to tabs and vice
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1374 versa.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1375
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1376 - ALIGNMENT: `\\[vhdl-align-noindent-region]' aligns port maps, signal and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1377 variable assignments, inline comments, some keywords, etc., on consecutive
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1378 lines relative to each other within a defined region.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1379 `\\[vhdl-align-comment-region]' only aligns inline comments (i.e. comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1380 that are at the end of a line of code). Some templates are automatically
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1381 aligned after generation if custom variable `vhdl-auto-align' is non-nil.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1382
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1383 - KEY BINDINGS: Key bindings (`C-c ...') exist for most commands (see in menu).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1384
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1385 - VHDL MENU: All commands can be called from the VHDL menu.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1386
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1387 - INDEX MENU: For each VHDL source file, an index of the contained entities,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1388 architectures, packages, procedures, processes, etc., is created as a menu.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1389 Selecting a meny entry causes the cursor to jump to the corresponding
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1390 position in the file. Controlled by variable `vhdl-index-menu'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1391
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1392 - SOURCE FILE MENU: A menu containing all VHDL source files in the directory
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1393 of the current file is generated. Selecting a menu entry loads the file.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1394 Controlled by variable `vhdl-source-file-menu'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1395
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1396 - SOURCE FILE COMPILATION: The syntax of the current buffer can be analyzed
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1397 by calling a VHDL compiler (menu, `\\[vhdl-compile]'). The compiler to be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1398 used is defined by variable `vhdl-compiler'. Currently supported are
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1399 `cadence', `ikos', `quickhdl', `synopsys', `vantage', `viewlogic', and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1400 `v-system'. Not all compilers are tested. Please contact me for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1401 incorporating additional VHDL compilers. An entire hierarchy of source
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1402 files can be compiled by the `make' command (menu, `\\[vhdl-make]').
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1403 This only works if an appropriate `Makefile' exists. Compiler options can
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1404 be defined by variable `vhdl-compiler-options'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1405
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1406 - KEYWORD CASE: Lower and upper case for keywords, predefined types, predefined
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1407 attributes, and predefined enumeration values is supported. If the variable
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1408 `vhdl-upper-case-keywords' is set to non-nil, keywords can be typed in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1409 lower case and are converted into upper case automatically (not for types,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1410 attributes, and enumeration values). The case of keywords, types,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1411 attributes, and enumeration values can be fixed for an entire region (menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1412 or buffer (`\\[vhdl-fix-case-buffer]') according to the variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1413 `vhdl-upper-case-{keywords,types,attributes,enum-values}'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1414
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1415 - HIGHLIGHTING (fontification): Keywords, predefined types, predefined
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1416 attributes, and predefined enumeration values (controlled by variable
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1417 `vhdl-highlight-keywords'), as well as comments, strings, and template
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1418 prompts are highlighted using different colors. Unit and subprogram names
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1419 as well as labels are highlighted if variable `vhdl-highlight-names' is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1420 non-nil. The default colors from `font-lock.el' are used if variable
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1421 `vhdl-use-default-colors' is non-nil. Otherwise, an optimized set of colors
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1422 is taken, which uses bright colors for signals and muted colors for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1423 everything else. Variable `vhdl-use-default-faces' does the same on
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1424 monochrome monitors.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1425
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1426 Signal highlighting allows distinction between clock, reset,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1427 status/control, data, and test signals according to some signal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1428 naming convention. Their syntax is defined by variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1429 `vhdl-{clock,reset,control,data,test}-signal-syntax'. Signal coloring
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1430 is controlled by the variable `vhdl-highlight-signals'. The default
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1431 signal naming convention is as follows:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1432
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1433 Signal attributes:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1434 C clock S control and status
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1435 R asynchronous reset D data and address
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1436 I synchronous reset T test
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1437
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1438 Syntax:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1439 signal name ::= \"[A-Z][a-zA-Z0-9]*x[CRISDT][a-zA-Z0-9]*\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1440 signal identifier -^^^^^^^^^^^^^^^^^
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1441 delimiter --------------------------^
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1442 above signal attributes -------------^^^^^^^^
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1443 additional attributes -----------------------^^^^^^^^^^^^
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1444
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1445 (`x' is used as delimiter because `_' is reserved by the VITAL standard.)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1446 Examples: ClkxCfast, ResetxRB, ClearxI, SelectDataxS, DataxD, ScanEnablexT.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1447
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1448 If all VHDL words are written in lower case (i.e. variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1449 `vhdl-upper-case-{keywords,types,attributes,enum-values}' are set to nil),
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1450 make highlighting case sensitive by setting variable
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1451 `vhdl-highlight-case-sensitive' to non-nil. This way, only names fulfilling
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1452 the above signal syntax including case are highlighted.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1453
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1454 - HIDE/SHOW: The code of entire VHDL processes or blocks can be hidden using
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1455 the `Hide/Show' menu or by pressing `S-mouse-2' within the code
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1456 (not in XEmacs).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1457
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1458 - PRINTING: Postscript printing with different fonts (`ps-print-color-p' is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1459 nil, default faces from `font-lock.el' used if `vhdl-use-default-faces' is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1460 non-nil) or colors (`ps-print-color-p' is non-nil) is possible using the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1461 standard Emacs postscript printing commands. Variable `vhdl-print-two-column'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1462 defines appropriate default settings for nice landscape two-column printing.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1463 The paper format can be set by variable `ps-paper-type'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1464
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1465 - CUSTOMIZATION: All variables can easily be customized using the `Customize'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1466 menu entry. For some variables, customization only takes effect after
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1467 re-starting Emacs. Customization can also be done globally (i.e. site-wide,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1468 read INSTALL file). Variables of VHDL Mode must NOT be set using the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1469 `vhdl-mode-hook' in the .emacs file anymore (delete them if they still are).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1470
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1471
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1472 Maintenance:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1473 ------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1474
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1475 To submit a bug report, enter `\\[vhdl-submit-bug-report]' within VHDL Mode.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1476 Add a description of the problem and include a reproducible test case.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1477
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1478 Questions and enhancement requests can be sent to <vhdl-mode@geocities.com>.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1479
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1480 The `vhdl-mode-announce' mailing list informs about new VHDL Mode releases.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1481 The `vhdl-mode-victims' mailing list informs about new VHDL Mode beta releases.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1482 You are kindly invited to participate in beta testing. Subscribe to above
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1483 mailing lists by sending an email to <vhdl-mode@geocities.com>.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1484
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1485 The archive with the latest version is located at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1486 <http://www.geocities.com/SiliconValley/Peaks/8287>.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1487
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1488
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1489 Bugs and Limitations:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1490 ---------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1491
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1492 - Index menu does not work under XEmacs (limitation of XEmacs ?!).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1493
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1494 - Re-indenting large regions or expressions can be slow.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1495
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1496 - Hideshow does not work under XEmacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1497
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1498 - Parsing compilation error messages for Ikos and Vantage VHDL compilers
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1499 does not work under XEmacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1500
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1501
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1502 Key bindings:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1503 -------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1504
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1505 \\{vhdl-mode-map}"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1506 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1507 (kill-all-local-variables)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1508 (set-syntax-table vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1509 (setq major-mode 'vhdl-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1510 (setq mode-name "VHDL")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1511 (setq local-abbrev-table vhdl-mode-abbrev-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1512 (use-local-map vhdl-mode-map)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1513 ;; set local variable values
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1514 (set (make-local-variable 'paragraph-start) "\\s-*\\(---\\|[a-zA-Z]\\|$\\)")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1515 (set (make-local-variable 'paragraph-separate) paragraph-start)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1516 (set (make-local-variable 'paragraph-ignore-fill-prefix) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1517 (set (make-local-variable 'require-final-newline) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1518 (set (make-local-variable 'parse-sexp-ignore-comments) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1519 (set (make-local-variable 'indent-line-function) 'vhdl-indent-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1520 (set (make-local-variable 'comment-start) "--")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1521 (set (make-local-variable 'comment-end) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1522 (set (make-local-variable 'comment-column) vhdl-comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1523 (set (make-local-variable 'end-comment-column) vhdl-end-comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1524 (set (make-local-variable 'comment-start-skip) "--+\\s-*")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1525 (set (make-local-variable 'dabbrev-case-fold-search) nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1526 (set (make-local-variable 'indent-tabs-mode) vhdl-indent-tabs-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1527
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1528 ;; setup the comment indent variable in a Emacs version portable way
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1529 ;; ignore any byte compiler warnings you might get here
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1530 (if (boundp 'comment-indent-function)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1531 (progn (make-local-variable 'comment-indent-function)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1532 (setq comment-indent-function 'vhdl-comment-indent)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1533
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1534 ;; initialize font locking
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1535 (require 'font-lock)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1536 (vhdl-font-lock-init)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1537 (make-local-variable 'font-lock-defaults)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1538 (setq font-lock-defaults (list 'vhdl-font-lock-keywords nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1539 (not vhdl-highlight-case-sensitive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1540 '((?\_ . "w"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1541 (turn-on-font-lock)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1542
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1543 ;; variables for source file compilation
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1544 (make-local-variable 'compile-command)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1545 (set (make-local-variable 'compilation-error-regexp-alist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1546 vhdl-compilation-error-regexp-alist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1547
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1548 ;; add menus
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1549 (if vhdl-index-menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1550 (if (or (not (consp font-lock-maximum-size))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1551 (> font-lock-maximum-size (buffer-size)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1552 (vhdl-add-index-menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1553 (message "Scanning buffer for index...buffer too big")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1554 (if vhdl-source-file-menu (vhdl-add-source-files-menu))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1555 (easy-menu-add vhdl-mode-menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1556 (easy-menu-define vhdl-mode-easy-menu vhdl-mode-map
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1557 "Menu keymap for VHDL Mode." vhdl-mode-menu)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1558 (run-hooks 'menu-bar-update-hook)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1559
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1560 ;; initialize hideshow and add menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1561 (if vhdl-hideshow-menu (hs-minor-mode))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1562
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1563 ;; initialize postscript printing
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1564 (vhdl-ps-init)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1565
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1566 (setq mode-name (if vhdl-electric-mode "Electric VHDL" "VHDL"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1567 (message "Type C-c C-h for VHDL Mode documentation.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1568
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1569 (run-hooks 'vhdl-mode-hook)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1570 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1571
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1572
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1573 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1574 ;; Keywords and predefined words in VHDL'93
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1575 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1576
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1577 ;; `regexp-opt' was not used at this place because it is not yet implemented
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1578 ;; in XEmacs and because it resulted in SLOWER regexps!!
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1579
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1580 (defconst vhdl-93-keywords-regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1581 (eval-when-compile
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1582 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1583 "\\<\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1584 (mapconcat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1585 'identity
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1586 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1587 "abs" "access" "after" "alias" "all" "and" "architecture" "array"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1588 "assert" "attribute"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1589 "begin" "block" "body" "buffer" "bus"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1590 "case" "component" "configuration" "constant"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1591 "disconnect" "downto"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1592 "else" "elsif" "end" "entity" "exit"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1593 "file" "for" "function"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1594 "generate" "generic" "group" "guarded"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1595 "if" "impure" "in" "inertial" "inout" "is"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1596 "label" "library" "linkage" "literal" "loop"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1597 "map" "mod"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1598 "nand" "new" "next" "nor" "not" "null"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1599 "of" "on" "open" "or" "others" "out"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1600 "package" "port" "postponed" "procedure" "process" "pure"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1601 "range" "record" "register" "reject" "rem" "report" "return"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1602 "rol" "ror"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1603 "select" "severity" "shared" "signal" "sla" "sll" "sra" "srl" "subtype"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1604 "then" "to" "transport" "type"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1605 "unaffected" "units" "until" "use"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1606 "variable"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1607 "wait" "warning" "when" "while" "with"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1608 "xnor" "xor"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1609 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1610 "\\|")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1611 "\\)\\>"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1612 "Regexp for VHDL'93 keywords.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1613
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1614 (defconst vhdl-93-types-regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1615 (eval-when-compile
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1616 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1617 "\\<\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1618 (mapconcat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1619 'identity
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1620 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1621 "boolean" "bit" "bit_vector" "character" "severity_level" "integer"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1622 "real" "time" "natural" "positive" "string" "text" "line"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1623 "unsigned" "signed"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1624 "std_logic" "std_logic_vector"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1625 "std_ulogic" "std_ulogic_vector"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1626 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1627 "\\|")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1628 "\\)\\>"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1629 "Regexp for VHDL'93 standardized types.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1630
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1631 (defconst vhdl-93-attributes-regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1632 (eval-when-compile
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1633 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1634 "\\<\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1635 (mapconcat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1636 'identity
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1637 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1638 "base" "left" "right" "high" "low" "pos" "val" "succ"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1639 "pred" "leftof" "rightof" "range" "reverse_range"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1640 "length" "delayed" "stable" "quiet" "transaction"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1641 "event" "active" "last_event" "last_active" "last_value"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1642 "driving" "driving_value" "ascending" "value" "image"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1643 "simple_name" "instance_name" "path_name"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1644 "foreign"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1645 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1646 "\\|")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1647 "\\)\\>"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1648 "Regexp for VHDL'93 standardized attributes.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1649
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1650 (defconst vhdl-93-enum-values-regexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1651 (eval-when-compile
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1652 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1653 "\\<\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1654 (mapconcat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1655 'identity
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1656 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1657 "true" "false"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1658 "note" "warning" "error" "failure"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1659 "fs" "ps" "ns" "us" "ms" "sec" "min" "hr"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1660 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1661 "\\|")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1662 "\\)\\>"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1663 "Regexp for VHDL'93 standardized enumeration values.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1664
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1665
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1666 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1667 ;; Syntax analysis and indentation
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1668 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1669
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1670 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1671 ;; Syntax analysis
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1672
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1673 ;; constant regular expressions for looking at various constructs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1674
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1675 (defconst vhdl-symbol-key "\\(\\w\\|\\s_\\)+"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1676 "Regexp describing a VHDL symbol.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1677 We cannot use just `word' syntax class since `_' cannot be in word
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1678 class. Putting underscore in word class breaks forward word movement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1679 behavior that users are familiar with.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1680
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1681 (defconst vhdl-case-header-key "case[( \t\n][^;=>]+[) \t\n]is"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1682 "Regexp describing a case statement header key.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1683
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1684 (defconst vhdl-label-key
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1685 (concat "\\(" vhdl-symbol-key "\\s-*:\\)[^=]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1686 "Regexp describing a VHDL label.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1687
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1688 ;; Macro definitions:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1689
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1690 (defmacro vhdl-point (position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1691 ;; Returns the value of point at certain commonly referenced POSITIONs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1692 ;; POSITION can be one of the following symbols:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1693 ;;
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1694 ;; bol -- beginning of line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1695 ;; eol -- end of line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1696 ;; bod -- beginning of defun
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1697 ;; boi -- back to indentation
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1698 ;; eoi -- last whitespace on line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1699 ;; ionl -- indentation of next line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1700 ;; iopl -- indentation of previous line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1701 ;; bonl -- beginning of next line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1702 ;; bopl -- beginning of previous line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1703 ;;
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1704 ;; This function does not modify point or mark.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1705 (or (and (eq 'quote (car-safe position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1706 (null (cdr (cdr position))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1707 (error "bad buffer position requested: %s" position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1708 (setq position (nth 1 position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1709 (` (let ((here (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1710 (,@ (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1711 ((eq position 'bol) '((beginning-of-line)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1712 ((eq position 'eol) '((end-of-line)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1713 ((eq position 'bod) '((save-match-data
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1714 (vhdl-beginning-of-defun))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1715 ((eq position 'boi) '((back-to-indentation)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1716 ((eq position 'eoi) '((end-of-line)(skip-chars-backward " \t")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1717 ((eq position 'bonl) '((forward-line 1)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1718 ((eq position 'bopl) '((forward-line -1)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1719 ((eq position 'iopl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1720 '((forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1721 (back-to-indentation)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1722 ((eq position 'ionl)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1723 '((forward-line 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1724 (back-to-indentation)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1725 (t (error "unknown buffer position requested: %s" position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1726 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1727 (prog1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1728 (point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1729 (goto-char here))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1730 ;; workaround for an Emacs18 bug -- blech! Well, at least it
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1731 ;; doesn't hurt for v19
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1732 (,@ nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1733 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1734
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1735 (defmacro vhdl-safe (&rest body)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1736 ;; safely execute BODY, return nil if an error occurred
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1737 (` (condition-case nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1738 (progn (,@ body))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1739 (error nil))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1740
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1741 (defmacro vhdl-add-syntax (symbol &optional relpos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1742 ;; a simple macro to append the syntax in symbol to the syntax list.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1743 ;; try to increase performance by using this macro
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1744 (` (setq vhdl-syntactic-context
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1745 (cons (cons (, symbol) (, relpos)) vhdl-syntactic-context))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1746
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1747 (defmacro vhdl-has-syntax (symbol)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1748 ;; a simple macro to return check the syntax list.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1749 ;; try to increase performance by using this macro
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1750 (` (assoc (, symbol) vhdl-syntactic-context)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1751
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1752 ;; Syntactic element offset manipulation:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1753
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1754 (defun vhdl-read-offset (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1755 ;; read new offset value for LANGELEM from minibuffer. return a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1756 ;; legal value only
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1757 (let ((oldoff (format "%s" (cdr-safe (assq langelem vhdl-offsets-alist))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1758 (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1759 (prompt "Offset: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1760 offset input interned)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1761 (while (not offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1762 (setq input (read-string prompt oldoff)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1763 offset (cond ((string-equal "+" input) '+)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1764 ((string-equal "-" input) '-)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1765 ((string-equal "++" input) '++)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1766 ((string-equal "--" input) '--)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1767 ((string-match "^-?[0-9]+$" input)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1768 (string-to-int input))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1769 ((fboundp (setq interned (intern input)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1770 interned)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1771 ((boundp interned) interned)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1772 ;; error, but don't signal one, keep trying
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1773 ;; to read an input value
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1774 (t (ding)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1775 (setq prompt errmsg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1776 nil))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1777 offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1778
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1779 (defun vhdl-set-offset (symbol offset &optional add-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1780 "Change the value of a syntactic element symbol in `vhdl-offsets-alist'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1781 SYMBOL is the syntactic element symbol to change and OFFSET is the new
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1782 offset for that syntactic element. Optional ADD says to add SYMBOL to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1783 `vhdl-offsets-alist' if it doesn't already appear there."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1784 (interactive
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1785 (let* ((langelem
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1786 (intern (completing-read
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1787 (concat "Syntactic symbol to change"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1788 (if current-prefix-arg " or add" "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1789 ": ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1790 (mapcar
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1791 (function
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1792 (lambda (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1793 (cons (format "%s" (car langelem)) nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1794 vhdl-offsets-alist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1795 nil (not current-prefix-arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1796 ;; initial contents tries to be the last element
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1797 ;; on the syntactic analysis list for the current
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1798 ;; line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1799 (let* ((syntax (vhdl-get-syntactic-context))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1800 (len (length syntax))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1801 (ic (format "%s" (car (nth (1- len) syntax)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1802 (if (memq 'v19 vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1803 (cons ic 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1804 ic))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1805 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1806 (offset (vhdl-read-offset langelem)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1807 (list langelem offset current-prefix-arg)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1808 ;; sanity check offset
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1809 (or (eq offset '+)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1810 (eq offset '-)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1811 (eq offset '++)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1812 (eq offset '--)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1813 (integerp offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1814 (fboundp offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1815 (boundp offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1816 (error "Offset must be int, func, var, or one of +, -, ++, --: %s"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1817 offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1818 (let ((entry (assq symbol vhdl-offsets-alist)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1819 (if entry
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1820 (setcdr entry offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1821 (if add-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1822 (setq vhdl-offsets-alist (cons (cons symbol offset) vhdl-offsets-alist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1823 (error "%s is not a valid syntactic symbol." symbol))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1824 (vhdl-keep-region-active))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1825
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1826 (defun vhdl-set-style (style &optional local)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1827 "Set vhdl-mode variables to use one of several different indentation styles.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1828 STYLE is a string representing the desired style and optional LOCAL is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1829 a flag which, if non-nil, means to make the style variables being
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1830 changed buffer local, instead of the default, which is to set the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1831 global variables. Interactively, the flag comes from the prefix
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1832 argument. The styles are chosen from the `vhdl-style-alist' variable."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1833 (interactive (list (completing-read "Use which VHDL indentation style? "
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1834 vhdl-style-alist nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1835 current-prefix-arg))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1836 (let ((vars (cdr (assoc style vhdl-style-alist))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1837 (or vars
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1838 (error "Invalid VHDL indentation style `%s'" style))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1839 ;; set all the variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1840 (mapcar
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1841 (function
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1842 (lambda (varentry)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1843 (let ((var (car varentry))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1844 (val (cdr varentry)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1845 (and local
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1846 (make-local-variable var))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1847 ;; special case for vhdl-offsets-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1848 (if (not (eq var 'vhdl-offsets-alist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1849 (set var val)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1850 ;; reset vhdl-offsets-alist to the default value first
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1851 (setq vhdl-offsets-alist (copy-alist vhdl-offsets-alist-default))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1852 ;; now set the langelems that are different
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1853 (mapcar
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1854 (function
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1855 (lambda (langentry)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1856 (let ((langelem (car langentry))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1857 (offset (cdr langentry)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1858 (vhdl-set-offset langelem offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1859 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1860 val))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1861 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1862 vars))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1863 (vhdl-keep-region-active))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1864
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1865 (defun vhdl-get-offset (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1866 ;; Get offset from LANGELEM which is a cons cell of the form:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1867 ;; (SYMBOL . RELPOS). The symbol is matched against
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1868 ;; vhdl-offsets-alist and the offset found there is either returned,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1869 ;; or added to the indentation at RELPOS. If RELPOS is nil, then
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1870 ;; the offset is simply returned.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1871 (let* ((symbol (car langelem))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1872 (relpos (cdr langelem))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1873 (match (assq symbol vhdl-offsets-alist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1874 (offset (cdr-safe match)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1875 ;; offset can be a number, a function, a variable, or one of the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1876 ;; symbols + or -
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1877 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1878 ((not match)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1879 (if vhdl-strict-syntax-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1880 (error "don't know how to indent a %s" symbol)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1881 (setq offset 0
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1882 relpos 0)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1883 ((eq offset '+) (setq offset vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1884 ((eq offset '-) (setq offset (- vhdl-basic-offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1885 ((eq offset '++) (setq offset (* 2 vhdl-basic-offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1886 ((eq offset '--) (setq offset (* 2 (- vhdl-basic-offset))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1887 ((and (not (numberp offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1888 (fboundp offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1889 (setq offset (funcall offset langelem)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1890 ((not (numberp offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1891 (setq offset (eval offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1892 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1893 (+ (if (and relpos
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1894 (< relpos (vhdl-point 'bol)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1895 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1896 (goto-char relpos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1897 (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1898 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1899 offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1900
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1901 ;; Syntactic support functions:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1902
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1903 ;; Returns `comment' if in a comment, `string' if in a string literal,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1904 ;; or nil if not in a literal at all. Optional LIM is used as the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1905 ;; backward limit of the search. If omitted, or nil, (point-min) is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1906 ;; used.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1907
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1908 (defun vhdl-in-literal (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1909 ;; Determine if point is in a VHDL literal.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1910 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1911 (let* ((lim (or lim (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1912 (state (parse-partial-sexp lim (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1913 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1914 ((nth 3 state) 'string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1915 ((nth 4 state) 'comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1916 (t nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1917 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1918
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1919 ;; This is the best we can do in Win-Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1920 (defun vhdl-win-il (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1921 ;; Determine if point is in a VHDL literal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1922 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1923 (let* ((here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1924 (state nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1925 (match nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1926 (lim (or lim (vhdl-point 'bod))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1927 (goto-char lim )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1928 (while (< (point) here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1929 (setq match
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1930 (and (re-search-forward "--\\|[\"']"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1931 here 'move)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1932 (buffer-substring (match-beginning 0) (match-end 0))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1933 (setq state
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1934 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1935 ;; no match
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1936 ((null match) nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1937 ;; looking at the opening of a VHDL style comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1938 ((string= "--" match)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1939 (if (<= here (progn (end-of-line) (point))) 'comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1940 ;; looking at the opening of a double quote string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1941 ((string= "\"" match)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1942 (if (not (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1943 ;; this seems to be necessary since the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1944 ;; re-search-forward will not work without it
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1945 (narrow-to-region (point) here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1946 (re-search-forward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1947 ;; this regexp matches a double quote
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1948 ;; which is preceded by an even number
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1949 ;; of backslashes, including zero
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1950 "\\([^\\]\\|^\\)\\(\\\\\\\\\\)*\"" here 'move)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1951 'string))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1952 ;; looking at the opening of a single quote string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1953 ((string= "'" match)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1954 (if (not (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1955 ;; see comments from above
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1956 (narrow-to-region (point) here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1957 (re-search-forward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1958 ;; this matches a single quote which is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1959 ;; preceded by zero or two backslashes.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1960 "\\([^\\]\\|^\\)\\(\\\\\\\\\\)?'"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1961 here 'move)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1962 'string))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1963 (t nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1964 ) ; end-while
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1965 state)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1966
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1967 (and (memq 'Win-Emacs vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1968 (fset 'vhdl-in-literal 'vhdl-win-il))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1969
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1970 ;; Skipping of "syntactic whitespace". Syntactic whitespace is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1971 ;; defined as lexical whitespace or comments. Search no farther back
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1972 ;; or forward than optional LIM. If LIM is omitted, (point-min) is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1973 ;; used for backward skipping, (point-max) is used for forward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1974 ;; skipping.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1975
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1976 (defun vhdl-forward-syntactic-ws (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1977 ;; Forward skip of syntactic whitespace.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1978 (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1979 (let* ((lim (or lim (point-max)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1980 (here lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1981 (hugenum (point-max)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1982 (narrow-to-region lim (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1983 (while (/= here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1984 (setq here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1985 (forward-comment hugenum))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1986 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1987
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1988 ;; This is the best we can do in Win-Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1989 (defun vhdl-win-fsws (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1990 ;; Forward skip syntactic whitespace for Win-Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1991 (let ((lim (or lim (point-max)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1992 stop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1993 (while (not stop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1994 (skip-chars-forward " \t\n\r\f" lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1995 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1996 ;; vhdl comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1997 ((looking-at "--") (end-of-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1998 ;; none of the above
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1999 (t (setq stop t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2000 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2001
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2002 (and (memq 'Win-Emacs vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2003 (fset 'vhdl-forward-syntactic-ws 'vhdl-win-fsws))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2004
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2005 (defun vhdl-backward-syntactic-ws (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2006 ;; Backward skip over syntactic whitespace.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2007 (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2008 (let* ((lim (or lim (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2009 (here lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2010 (hugenum (- (point-max))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2011 (if (< lim (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2012 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2013 (narrow-to-region lim (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2014 (while (/= here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2015 (setq here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2016 (forward-comment hugenum)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2017 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2018 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2019
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2020 ;; This is the best we can do in Win-Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2021 (defun vhdl-win-bsws (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2022 ;; Backward skip syntactic whitespace for Win-Emacs.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2023 (let ((lim (or lim (vhdl-point 'bod)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2024 stop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2025 (while (not stop)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2026 (skip-chars-backward " \t\n\r\f" lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2027 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2028 ;; vhdl comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2029 ((eq (vhdl-in-literal lim) 'comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2030 (skip-chars-backward "^-" lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2031 (skip-chars-backward "-" lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2032 (while (not (or (and (= (following-char) ?-)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2033 (= (char-after (1+ (point))) ?-))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2034 (<= (point) lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2035 (skip-chars-backward "^-" lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2036 (skip-chars-backward "-" lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2037 ;; none of the above
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2038 (t (setq stop t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2039 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2040
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2041 (and (memq 'Win-Emacs vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2042 (fset 'vhdl-backward-syntactic-ws 'vhdl-win-bsws))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2043
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2044 ;; Functions to help finding the correct indentation column:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2045
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2046 (defun vhdl-first-word (point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2047 "If the keyword at POINT is at boi, then return (current-column) at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2048 that point, else nil."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2049 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2050 (and (goto-char point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2051 (eq (point) (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2052 (current-column))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2053
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2054 (defun vhdl-last-word (point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2055 "If the keyword at POINT is at eoi, then return (current-column) at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2056 that point, else nil."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2057 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2058 (and (goto-char point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2059 (save-excursion (or (eq (progn (forward-sexp) (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2060 (vhdl-point 'eoi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2061 (looking-at "\\s-*\\(--\\)?")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2062 (current-column))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2063
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2064 ;; Core syntactic evaluation functions:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2065
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2066 (defconst vhdl-libunit-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2067 "\\b\\(architecture\\|configuration\\|entity\\|package\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2068
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2069 (defun vhdl-libunit-p ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2070 (and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2071 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2072 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2073 (skip-chars-forward " \t\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2074 (not (looking-at "is\\b[^_]")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2075 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2076 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2077 (and (not (looking-at "use\\b[^_]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2078 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2079 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2080 (vhdl-forward-syntactic-ws)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2081 (/= (following-char) ?:))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2082 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2083
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2084 (defconst vhdl-defun-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2085 "\\b\\(architecture\\|block\\|configuration\\|entity\\|package\\|process\\|procedure\\|function\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2086
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2087 (defun vhdl-defun-p ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2088 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2089 (if (looking-at "block\\|process")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2090 ;; "block", "process":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2091 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2092 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2093 (not (looking-at "end\\s-+\\w")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2094 ;; "architecture", "configuration", "entity",
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2095 ;; "package", "procedure", "function":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2096 t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2097
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2098 (defun vhdl-corresponding-defun ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2099 "If the word at the current position corresponds to a \"defun\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2100 keyword, then return a string that can be used to find the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2101 corresponding \"begin\" keyword, else return nil."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2102 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2103 (and (looking-at vhdl-defun-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2104 (vhdl-defun-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2105 (if (looking-at "block\\|process")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2106 ;; "block", "process":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2107 (buffer-substring (match-beginning 0) (match-end 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2108 ;; "architecture", "configuration", "entity", "package",
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2109 ;; "procedure", "function":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2110 "is"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2111
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2112 (defconst vhdl-begin-fwd-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2113 "\\b\\(is\\|begin\\|block\\|component\\|generate\\|then\\|else\\|loop\\|process\\|units\\|record\\|for\\)\\b\\([^_]\\|\\'\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2114 "A regular expression for searching forward that matches all known
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2115 \"begin\" keywords.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2116
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2117 (defconst vhdl-begin-bwd-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2118 "\\b\\(is\\|begin\\|block\\|component\\|generate\\|then\\|else\\|loop\\|process\\|units\\|record\\|for\\)\\b[^_]"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2119 "A regular expression for searching backward that matches all known
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2120 \"begin\" keywords.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2121
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2122 (defun vhdl-begin-p (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2123 "Return t if we are looking at a real \"begin\" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2124 Assumes that the caller will make sure that we are looking at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2125 vhdl-begin-fwd-re, and are not inside a literal, and that we are not in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2126 the middle of an identifier that just happens to contain a \"begin\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2127 keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2128 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2129 ;; "[architecture|case|configuration|entity|package|
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2130 ;; procedure|function] ... is":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2131 ((and (looking-at "i")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2132 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2133 ;; Skip backward over first sexp (needed to skip over a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2134 ;; procedure interface list, and is harmless in other
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2135 ;; situations). Note that we need "return" in the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2136 ;; following search list so that we don't run into
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2137 ;; semicolons in the function interface list.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2138 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2139 (let (foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2140 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2141 (re-search-backward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2142 ";\\|\\b\\(architecture\\|case\\|configuration\\|entity\\|package\\|procedure\\|return\\|is\\|begin\\|process\\|block\\)\\b[^_]"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2143 lim 'move))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2144 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2145 (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2146 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2147 (setq foundp t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2148 (and (/= (following-char) ?\;)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2149 (not (looking-at "is\\|begin\\|process\\|block")))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2150 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2151 ;; "begin", "then":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2152 ((looking-at "be\\|t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2153 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2154 ;; "else":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2155 ((and (looking-at "e")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2156 ;; make sure that the "else" isn't inside a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2157 ;; conditional signal assignment.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2158 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2159 (re-search-backward ";\\|\\bwhen\\b[^_]" lim 'move)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2160 (or (eq (following-char) ?\;)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2161 (eq (point) lim))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2162 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2163 ;; "block", "generate", "loop", "process",
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2164 ;; "units", "record":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2165 ((and (looking-at "bl\\|[glpur]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2166 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2167 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2168 (not (looking-at "end\\s-+\\w"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2169 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2170 ;; "component":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2171 ((and (looking-at "c")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2172 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2173 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2174 (not (looking-at "end\\s-+\\w")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2175 ;; look out for the dreaded entity class in an attribute
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2176 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2177 (vhdl-backward-syntactic-ws lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2178 (/= (preceding-char) ?:)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2179 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2180 ;; "for" (inside configuration declaration):
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2181 ((and (looking-at "f")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2182 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2183 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2184 (not (looking-at "end\\s-+\\w")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2185 (vhdl-has-syntax 'configuration))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2186 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2187 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2188
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2189 (defun vhdl-corresponding-mid (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2190 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2191 ((looking-at "is\\|block\\|process")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2192 "begin")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2193 ((looking-at "then")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2194 "<else>")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2195 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2196 "end")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2197
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2198 (defun vhdl-corresponding-end (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2199 "If the word at the current position corresponds to a \"begin\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2200 keyword, then return a vector containing enough information to find
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2201 the corresponding \"end\" keyword, else return nil. The keyword to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2202 search forward for is aref 0. The column in which the keyword must
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2203 appear is aref 1 or nil if any column is suitable.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2204 Assumes that the caller will make sure that we are not in the middle
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2205 of an identifier that just happens to contain a \"begin\" keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2206 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2207 (and (looking-at vhdl-begin-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2208 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2209 (not (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2210 (vhdl-begin-p lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2211 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2212 ;; "is", "generate", "loop":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2213 ((looking-at "[igl]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2214 (vector "end"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2215 (and (vhdl-last-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2216 (or (vhdl-first-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2217 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2218 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2219 (vhdl-backward-skip-label lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2220 (vhdl-first-word (point)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2221 ;; "begin", "else", "for":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2222 ((looking-at "be\\|[ef]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2223 (vector "end"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2224 (and (vhdl-last-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2225 (or (vhdl-first-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2226 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2227 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2228 (vhdl-backward-skip-label lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2229 (vhdl-first-word (point)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2230 ;; "component", "units", "record":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2231 ((looking-at "[cur]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2232 ;; The first end found will close the block
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2233 (vector "end" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2234 ;; "block", "process":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2235 ((looking-at "bl\\|p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2236 (vector "end"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2237 (or (vhdl-first-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2238 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2239 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2240 (vhdl-backward-skip-label lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2241 (vhdl-first-word (point))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2242 ;; "then":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2243 ((looking-at "t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2244 (vector "elsif\\|else\\|end\\s-+if"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2245 (and (vhdl-last-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2246 (or (vhdl-first-word (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2247 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2248 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2249 (vhdl-backward-skip-label lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2250 (vhdl-first-word (point)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2251 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2252
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2253 (defconst vhdl-end-fwd-re "\\b\\(end\\|else\\|elsif\\)\\b\\([^_]\\|\\'\\)")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2254
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2255 (defconst vhdl-end-bwd-re "\\b\\(end\\|else\\|elsif\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2256
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2257 (defun vhdl-end-p (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2258 "Return t if we are looking at a real \"end\" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2259 Assumes that the caller will make sure that we are looking at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2260 vhdl-end-fwd-re, and are not inside a literal, and that we are not in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2261 the middle of an identifier that just happens to contain an \"end\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2262 keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2263 (or (not (looking-at "else"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2264 ;; make sure that the "else" isn't inside a conditional signal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2265 ;; assignment.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2266 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2267 (re-search-backward ";\\|\\bwhen\\b[^_]" lim 'move)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2268 (or (eq (following-char) ?\;)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2269 (eq (point) lim)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2270
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2271 (defun vhdl-corresponding-begin (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2272 "If the word at the current position corresponds to an \"end\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2273 keyword, then return a vector containing enough information to find
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2274 the corresponding \"begin\" keyword, else return nil. The keyword to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2275 search backward for is aref 0. The column in which the keyword must
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2276 appear is aref 1 or nil if any column is suitable. The supplementary
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2277 keyword to search forward for is aref 2 or nil if this is not
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2278 required. If aref 3 is t, then the \"begin\" keyword may be found in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2279 the middle of a statement.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2280 Assumes that the caller will make sure that we are not in the middle
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2281 of an identifier that just happens to contain an \"end\" keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2282 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2283 (let (pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2284 (if (and (looking-at vhdl-end-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2285 (not (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2286 (vhdl-end-p lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2287 (if (looking-at "el")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2288 ;; "else", "elsif":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2289 (vector "if\\|elsif" (vhdl-first-word (point)) "then" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2290 ;; "end ...":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2291 (setq pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2292 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2293 (skip-chars-forward " \t\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2294 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2295 ;; "end if":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2296 ((looking-at "if\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2297 (vector "else\\|elsif\\|if"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2298 (vhdl-first-word pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2299 "else\\|then" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2300 ;; "end component":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2301 ((looking-at "component\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2302 (vector (buffer-substring (match-beginning 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2303 (match-end 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2304 (vhdl-first-word pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2305 nil nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2306 ;; "end units", "end record":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2307 ((looking-at "\\(units\\|record\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2308 (vector (buffer-substring (match-beginning 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2309 (match-end 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2310 (vhdl-first-word pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2311 nil t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2312 ;; "end block", "end process":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2313 ((looking-at "\\(block\\|process\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2314 (vector "begin" (vhdl-first-word pos) nil nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2315 ;; "end case":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2316 ((looking-at "case\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2317 (vector "case" (vhdl-first-word pos) "is" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2318 ;; "end generate":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2319 ((looking-at "generate\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2320 (vector "generate\\|for\\|if"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2321 (vhdl-first-word pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2322 "generate" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2323 ;; "end loop":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2324 ((looking-at "loop\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2325 (vector "loop\\|while\\|for"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2326 (vhdl-first-word pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2327 "loop" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2328 ;; "end for" (inside configuration declaration):
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2329 ((looking-at "for\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2330 (vector "for" (vhdl-first-word pos) nil nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2331 ;; "end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2332 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2333 (vector "begin\\|architecture\\|configuration\\|entity\\|package\\|procedure\\|function"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2334 (vhdl-first-word pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2335 ;; return an alist of (statement . keyword) mappings
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2336 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2337 ;; "begin ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2338 ("begin" . nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2339 ;; "architecture ... is ... begin ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2340 ("architecture" . "is")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2341 ;; "configuration ... is ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2342 ("configuration" . "is")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2343 ;; "entity ... is ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2344 ("entity" . "is")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2345 ;; "package ... is ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2346 ("package" . "is")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2347 ;; "procedure ... is ... begin ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2348 ("procedure" . "is")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2349 ;; "function ... is ... begin ... end [id]":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2350 ("function" . "is")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2351 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2352 nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2353 ))) ; "end ..."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2354 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2355
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2356 (defconst vhdl-leader-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2357 "\\b\\(block\\|component\\|process\\|for\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2358
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2359 (defun vhdl-end-of-leader ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2360 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2361 (cond ((looking-at "block\\|process")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2362 (if (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2363 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2364 (skip-chars-forward " \t\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2365 (= (following-char) ?\())
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2366 (forward-sexp 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2367 (forward-sexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2368 (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2369 ((looking-at "component")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2370 (forward-sexp 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2371 (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2372 ((looking-at "for")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2373 (forward-sexp 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2374 (skip-chars-forward " \t\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2375 (while (looking-at "[,:(]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2376 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2377 (skip-chars-forward " \t\n"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2378 (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2379 (t nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2380 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2381
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2382 (defconst vhdl-trailer-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2383 "\\b\\(is\\|then\\|generate\\|loop\\)\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2384
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2385 (defconst vhdl-statement-fwd-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2386 "\\b\\(if\\|for\\|while\\)\\b\\([^_]\\|\\'\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2387 "A regular expression for searching forward that matches all known
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2388 \"statement\" keywords.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2389
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2390 (defconst vhdl-statement-bwd-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2391 "\\b\\(if\\|for\\|while\\)\\b[^_]"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2392 "A regular expression for searching backward that matches all known
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2393 \"statement\" keywords.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2394
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2395 (defun vhdl-statement-p (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2396 "Return t if we are looking at a real \"statement\" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2397 Assumes that the caller will make sure that we are looking at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2398 vhdl-statement-fwd-re, and are not inside a literal, and that we are not in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2399 the middle of an identifier that just happens to contain a \"statement\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2400 keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2401 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2402 ;; "for" ... "generate":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2403 ((and (looking-at "f")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2404 ;; Make sure it's the start of a parameter specification.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2405 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2406 (forward-sexp 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2407 (skip-chars-forward " \t\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2408 (looking-at "in\\b[^_]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2409 ;; Make sure it's not an "end for".
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2410 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2411 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2412 (not (looking-at "end\\s-+\\w"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2413 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2414 ;; "if" ... "then", "if" ... "generate", "if" ... "loop":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2415 ((and (looking-at "i")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2416 ;; Make sure it's not an "end if".
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2417 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2418 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2419 (not (looking-at "end\\s-+\\w"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2420 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2421 ;; "while" ... "loop":
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2422 ((looking-at "w")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2423 t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2424 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2425
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2426 (defconst vhdl-case-alternative-re "when[( \t\n][^;=>]+=>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2427 "Regexp describing a case statement alternative key.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2428
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2429 (defun vhdl-case-alternative-p (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2430 "Return t if we are looking at a real case alternative.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2431 Assumes that the caller will make sure that we are looking at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2432 vhdl-case-alternative-re, and are not inside a literal, and that
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2433 we are not in the middle of an identifier that just happens to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2434 contain a \"when\" keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2435 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2436 (let (foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2437 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2438 (re-search-backward ";\\|<=" lim 'move))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2439 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2440 (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2441 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2442 (setq foundp t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2443 (or (eq (following-char) ?\;)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2444 (eq (point) lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2445 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2446
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2447 ;; Core syntactic movement functions:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2448
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2449 (defconst vhdl-b-t-b-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2450 (concat vhdl-begin-bwd-re "\\|" vhdl-end-bwd-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2451
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2452 (defun vhdl-backward-to-block (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2453 "Move backward to the previous \"begin\" or \"end\" keyword."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2454 (let (foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2455 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2456 (re-search-backward vhdl-b-t-b-re lim 'move))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2457 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2458 (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2459 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2460 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2461 ;; "begin" keyword:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2462 ((and (looking-at vhdl-begin-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2463 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2464 (vhdl-begin-p lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2465 (setq foundp 'begin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2466 ;; "end" keyword:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2467 ((and (looking-at vhdl-end-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2468 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2469 (vhdl-end-p lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2470 (setq foundp 'end))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2471 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2472 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2473 foundp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2474 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2475
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2476 (defun vhdl-forward-sexp (&optional count lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2477 "Move forward across one balanced expression (sexp).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2478 With COUNT, do it that many times."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2479 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2480 (let ((count (or count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2481 (case-fold-search t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2482 end-vec target)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2483 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2484 (while (> count 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2485 ;; skip whitespace
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2486 (skip-chars-forward " \t\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2487 ;; Check for an unbalanced "end" keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2488 (if (and (looking-at vhdl-end-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2489 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2490 (not (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2491 (vhdl-end-p lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2492 (not (looking-at "else")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2493 (error
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2494 "Containing expression ends prematurely in vhdl-forward-sexp"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2495 ;; If the current keyword is a "begin" keyword, then find the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2496 ;; corresponding "end" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2497 (if (setq end-vec (vhdl-corresponding-end lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2498 (let (
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2499 ;; end-re is the statement keyword to search for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2500 (end-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2501 (concat "\\b\\(" (aref end-vec 0) "\\)\\b\\([^_]\\|\\'\\)"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2502 ;; column is either the statement keyword target column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2503 ;; or nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2504 (column (aref end-vec 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2505 (eol (vhdl-point 'eol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2506 foundp literal placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2507 ;; Look for the statement keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2508 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2509 (re-search-forward end-re nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2510 (setq placeholder (match-end 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2511 (goto-char (match-beginning 0)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2512 ;; If we are in a literal, or not in the right target
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2513 ;; column and not on the same line as the begin, then
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2514 ;; try again.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2515 (if (or (and column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2516 (/= (current-indentation) column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2517 (> (point) eol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2518 (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2519 (setq literal (vhdl-in-literal lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2520 (if (eq literal 'comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2521 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2522 (forward-char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2523 ;; An "else" keyword corresponds to both the opening brace
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2524 ;; of the following sexp and the closing brace of the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2525 ;; previous sexp.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2526 (if (not (looking-at "else"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2527 (goto-char placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2528 (setq foundp t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2529 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2530 (if (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2531 (error "Unbalanced keywords in vhdl-forward-sexp"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2532 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2533 ;; If the current keyword is not a "begin" keyword, then just
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2534 ;; perform the normal forward-sexp.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2535 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2536 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2537 (setq count (1- count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2538 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2539 (setq target (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2540 (goto-char target)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2541 nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2542
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2543 (defun vhdl-backward-sexp (&optional count lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2544 "Move backward across one balanced expression (sexp).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2545 With COUNT, do it that many times. LIM bounds any required backward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2546 searches."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2547 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2548 (let ((count (or count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2549 (case-fold-search t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2550 begin-vec target)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2551 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2552 (while (> count 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2553 ;; Perform the normal backward-sexp, unless we are looking at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2554 ;; "else" - an "else" keyword corresponds to both the opening brace
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2555 ;; of the following sexp and the closing brace of the previous sexp.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2556 (if (and (looking-at "else\\b\\([^_]\\|\\'\\)")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2557 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2558 (not (vhdl-in-literal lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2559 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2560 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2561 (if (and (looking-at vhdl-begin-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2562 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2563 (not (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2564 (vhdl-begin-p lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2565 (error "Containing expression ends prematurely in vhdl-backward-sexp")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2566 ;; If the current keyword is an "end" keyword, then find the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2567 ;; corresponding "begin" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2568 (if (and (setq begin-vec (vhdl-corresponding-begin lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2569 (/= (preceding-char) ?_))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2570 (let (
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2571 ;; begin-re is the statement keyword to search for
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2572 (begin-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2573 (concat "\\b\\(" (aref begin-vec 0) "\\)\\b[^_]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2574 ;; column is either the statement keyword target column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2575 ;; or nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2576 (column (aref begin-vec 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2577 ;; internal-p controls where the statement keyword can
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2578 ;; be found.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2579 (internal-p (aref begin-vec 3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2580 (last-backward (point)) last-forward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2581 foundp literal keyword)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2582 ;; Look for the statement keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2583 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2584 (re-search-backward begin-re lim t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2585 (setq keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2586 (buffer-substring (match-beginning 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2587 (match-end 1))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2588 ;; If we are in a literal or in the wrong column,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2589 ;; then try again.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2590 (if (or (and column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2591 (and (/= (current-indentation) column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2592 ;; possibly accept current-column as
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2593 ;; well as current-indentation.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2594 (or (not internal-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2595 (/= (current-column) column))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2596 (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2597 (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2598 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2599 ;; If there is a supplementary keyword, then
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2600 ;; search forward for it.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2601 (if (and (setq begin-re (aref begin-vec 2))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2602 (or (not (listp begin-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2603 ;; If begin-re is an alist, then find the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2604 ;; element corresponding to the actual
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2605 ;; keyword that we found.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2606 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2607 (setq begin-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2608 (assoc keyword begin-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2609 (and begin-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2610 (setq begin-re (cdr begin-re))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2611 (and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2612 (setq begin-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2613 (concat "\\b\\(" begin-re "\\)\\b[^_]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2614 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2615 (setq last-forward (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2616 ;; Look for the supplementary keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2617 ;; (bounded by the backward search start
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2618 ;; point).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2619 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2620 (re-search-forward begin-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2621 last-backward t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2622 (goto-char (match-beginning 1)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2623 ;; If we are in a literal, then try again.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2624 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2625 (setq literal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2626 (vhdl-in-literal last-forward)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2627 (if (eq literal 'comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2628 (goto-char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2629 (min (vhdl-point 'eol) last-backward))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2630 (forward-char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2631 ;; We have found the supplementary keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2632 ;; Save the position of the keyword in foundp.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2633 (setq foundp (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2634 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2635 foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2636 ;; If the supplementary keyword was found, then
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2637 ;; move point to the supplementary keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2638 (goto-char foundp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2639 ;; If there was no supplementary keyword, then
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2640 ;; point is already at the statement keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2641 (setq foundp t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2642 ) ; end of the search for the statement keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2643 (if (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2644 (error "Unbalanced keywords in vhdl-backward-sexp"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2645 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2646 (setq count (1- count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2647 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2648 (setq target (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2649 (goto-char target)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2650 nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2651
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2652 (defun vhdl-backward-up-list (&optional count limit)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2653 "Move backward out of one level of blocks.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2654 With argument, do this that many times."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2655 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2656 (let ((count (or count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2657 target)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2658 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2659 (while (> count 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2660 (if (looking-at vhdl-defun-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2661 (error "Unbalanced blocks"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2662 (vhdl-backward-to-block limit)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2663 (setq count (1- count)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2664 (setq target (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2665 (goto-char target)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2666
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2667 (defun vhdl-end-of-defun (&optional count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2668 "Move forward to the end of a VHDL defun."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2669 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2670 (let ((case-fold-search t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2671 (vhdl-beginning-of-defun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2672 (if (not (looking-at "block\\|process"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2673 (re-search-forward "\\bis\\b"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2674 (vhdl-forward-sexp)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2675
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2676 (defun vhdl-mark-defun ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2677 "Put mark at end of this \"defun\", point at beginning."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2678 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2679 (let ((case-fold-search t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2680 (push-mark)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2681 (vhdl-beginning-of-defun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2682 (push-mark)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2683 (if (not (looking-at "block\\|process"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2684 (re-search-forward "\\bis\\b"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2685 (vhdl-forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2686 (exchange-point-and-mark)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2687
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2688 (defun vhdl-beginning-of-libunit ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2689 "Move backward to the beginning of a VHDL library unit.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2690 Returns the location of the corresponding begin keyword, unless search
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2691 stops due to beginning or end of buffer."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2692 ;; Note that if point is between the "libunit" keyword and the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2693 ;; corresponding "begin" keyword, then that libunit will not be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2694 ;; recognised, and the search will continue backwards. If point is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2695 ;; at the "begin" keyword, then the defun will be recognised. The
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2696 ;; returned point is at the first character of the "libunit" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2697 (let ((last-forward (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2698 (last-backward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2699 ;; Just in case we are actually sitting on the "begin"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2700 ;; keyword, allow for the keyword and an extra character,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2701 ;; as this will be used when looking forward for the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2702 ;; "begin" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2703 (save-excursion (forward-word 1) (1+ (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2704 foundp literal placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2705 ;; Find the "libunit" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2706 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2707 (re-search-backward vhdl-libunit-re nil 'move))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2708 ;; If we are in a literal, or not at a real libunit, then try again.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2709 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2710 (vhdl-in-literal (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2711 (not (vhdl-libunit-p)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2712 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2713 ;; Find the corresponding "begin" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2714 (setq last-forward (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2715 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2716 (re-search-forward "\\bis\\b[^_]" last-backward t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2717 (setq placeholder (match-beginning 0)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2718 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2719 (setq literal (vhdl-in-literal last-forward)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2720 ;; It wasn't a real keyword, so keep searching.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2721 (if (eq literal 'comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2722 (goto-char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2723 (min (vhdl-point 'eol) last-backward))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2724 (forward-char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2725 ;; We have found the begin keyword, loop will exit.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2726 (setq foundp placeholder)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2727 ;; Go back to the libunit keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2728 (goto-char last-forward)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2729 foundp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2730
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2731 (defun vhdl-beginning-of-defun (&optional count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2732 "Move backward to the beginning of a VHDL defun.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2733 With argument, do it that many times.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2734 Returns the location of the corresponding begin keyword, unless search
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2735 stops due to beginning or end of buffer."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2736 ;; Note that if point is between the "defun" keyword and the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2737 ;; corresponding "begin" keyword, then that defun will not be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2738 ;; recognised, and the search will continue backwards. If point is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2739 ;; at the "begin" keyword, then the defun will be recognised. The
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2740 ;; returned point is at the first character of the "defun" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2741 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2742 (let ((count (or count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2743 (case-fold-search t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2744 (last-forward (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2745 foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2746 (while (> count 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2747 (setq foundp nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2748 (goto-char last-forward)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2749 (let ((last-backward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2750 ;; Just in case we are actually sitting on the "begin"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2751 ;; keyword, allow for the keyword and an extra character,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2752 ;; as this will be used when looking forward for the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2753 ;; "begin" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2754 (save-excursion (forward-word 1) (1+ (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2755 begin-string literal)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2756 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2757 (re-search-backward vhdl-defun-re nil 'move))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2758 ;; If we are in a literal, then try again.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2759 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2760 (vhdl-in-literal (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2761 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2762 (if (setq begin-string (vhdl-corresponding-defun))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2763 ;; This is a real defun keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2764 ;; Find the corresponding "begin" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2765 ;; Look for the begin keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2766 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2767 ;; Save the search start point.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2768 (setq last-forward (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2769 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2770 (search-forward begin-string last-backward t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2771 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2772 (save-match-data
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2773 (setq literal (vhdl-in-literal last-forward))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2774 ;; It wasn't a real keyword, so keep searching.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2775 (if (eq literal 'comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2776 (goto-char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2777 (min (vhdl-point 'eol) last-backward))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2778 (forward-char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2779 ;; We have found the begin keyword, loop will exit.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2780 (setq foundp (match-beginning 0)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2781 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2782 ;; Go back to the defun keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2783 (goto-char last-forward)) ; end search for begin keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2784 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2785 ) ; end of the search for the defun keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2786 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2787 (setq count (1- count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2788 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2789 (vhdl-keep-region-active)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2790 foundp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2791
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2792 (defun vhdl-beginning-of-statement (&optional count lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2793 "Go to the beginning of the innermost VHDL statement.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2794 With prefix arg, go back N - 1 statements. If already at the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2795 beginning of a statement then go to the beginning of the preceding
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2796 one. If within a string or comment, or next to a comment (only
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2797 whitespace between), move by sentences instead of statements.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2798
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2799 When called from a program, this function takes 2 optional args: the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2800 prefix arg, and a buffer position limit which is the farthest back to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2801 search."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2802 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2803 (let ((count (or count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2804 (case-fold-search t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2805 (lim (or lim (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2806 (here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2807 state)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2808 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2809 (goto-char lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2810 (setq state (parse-partial-sexp (point) here nil nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2811 (if (and (interactive-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2812 (or (nth 3 state)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2813 (nth 4 state)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2814 (looking-at (concat "[ \t]*" comment-start-skip))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2815 (forward-sentence (- count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2816 (while (> count 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2817 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2818 (setq count (1- count))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2819 ;; its possible we've been left up-buf of lim
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2820 (goto-char (max (point) lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2821 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2822 (vhdl-keep-region-active))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2823
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2824 (defconst vhdl-e-o-s-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2825 (concat ";\\|" vhdl-begin-fwd-re "\\|" vhdl-statement-fwd-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2826
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2827 (defun vhdl-end-of-statement ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2828 "Very simple implementation."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2829 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2830 (re-search-forward vhdl-e-o-s-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2831
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2832 (defconst vhdl-b-o-s-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2833 (concat ";\\|\(\\|\)\\|\\bwhen\\b[^_]\\|"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2834 vhdl-begin-bwd-re "\\|" vhdl-statement-bwd-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2835
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2836 (defun vhdl-beginning-of-statement-1 (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2837 ;; move to the start of the current statement, or the previous
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2838 ;; statement if already at the beginning of one.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2839 (let ((lim (or lim (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2840 (here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2841 (pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2842 donep)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2843 ;; go backwards one balanced expression, but be careful of
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2844 ;; unbalanced paren being reached
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2845 (if (not (vhdl-safe (progn (backward-sexp) t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2846 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2847 (backward-up-list 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2848 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2849 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2850 (setq donep t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2851 (while (and (not donep)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2852 (not (bobp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2853 ;; look backwards for a statement boundary
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2854 (re-search-backward vhdl-b-o-s-re lim 'move))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2855 (if (or (= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2856 (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2857 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2858 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2859 ;; If we are looking at an open paren, then stop after it
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2860 ((eq (following-char) ?\()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2861 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2862 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2863 (setq donep t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2864 ;; If we are looking at a close paren, then skip it
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2865 ((eq (following-char) ?\))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2866 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2867 (setq pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2868 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2869 (if (< (point) lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2870 (progn (goto-char pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2871 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2872 (setq donep t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2873 ;; If we are looking at a semicolon, then stop
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2874 ((eq (following-char) ?\;)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2875 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2876 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2877 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2878 (setq donep t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2879 ;; If we are looking at a "begin", then stop
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2880 ((and (looking-at vhdl-begin-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2881 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2882 (vhdl-begin-p nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2883 ;; If it's a leader "begin", then find the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2884 ;; right place
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2885 (if (looking-at vhdl-leader-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2886 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2887 ;; set a default stop point at the begin
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2888 (setq pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2889 ;; is the start point inside the leader area ?
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2890 (goto-char (vhdl-end-of-leader))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2891 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2892 (if (< (point) here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2893 ;; start point was not inside leader area
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2894 ;; set stop point at word after leader
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2895 (setq pos (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2896 (forward-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2897 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2898 (setq pos (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2899 (goto-char pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2900 (setq donep t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2901 ;; If we are looking at a "statement", then stop
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2902 ((and (looking-at vhdl-statement-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2903 (/= (preceding-char) ?_)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2904 (vhdl-statement-p nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2905 (setq donep t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2906 ;; If we are looking at a case alternative key, then stop
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2907 ((and (looking-at vhdl-case-alternative-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2908 (vhdl-case-alternative-p lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2909 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2910 ;; set a default stop point at the when
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2911 (setq pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2912 ;; is the start point inside the case alternative key ?
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2913 (looking-at vhdl-case-alternative-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2914 (goto-char (match-end 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2915 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2916 (if (< (point) here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2917 ;; start point was not inside the case alternative key
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2918 ;; set stop point at word after case alternative keyleader
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2919 (setq pos (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2920 (goto-char pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2921 (setq donep t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2922 ;; Bogus find, continue
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2923 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2924 (backward-char)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2925 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2926
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2927 ;; Defuns for calculating the current syntactic state:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2928
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2929 (defun vhdl-get-library-unit (bod placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2930 ;; If there is an enclosing library unit at bod, with it's \"begin\"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2931 ;; keyword at placeholder, then return the library unit type.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2932 (let ((here (vhdl-point 'bol)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2933 (if (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2934 (goto-char placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2935 (vhdl-safe (vhdl-forward-sexp 1 bod))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2936 (<= here (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2937 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2938 (goto-char bod)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2939 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2940 ((looking-at "e") 'entity)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2941 ((looking-at "a") 'architecture)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2942 ((looking-at "c") 'configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2943 ((looking-at "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2944 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2945 (goto-char bod)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2946 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2947 (vhdl-forward-syntactic-ws here)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2948 (if (looking-at "body\\b[^_]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2949 'package-body 'package))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2950 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2951
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2952 (defun vhdl-get-block-state (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2953 ;; Finds and records all the closest opens.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2954 ;; lim is the furthest back we need to search (it should be the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2955 ;; previous libunit keyword).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2956 (let ((here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2957 (lim (or lim (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2958 keyword sexp-start sexp-mid sexp-end
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2959 preceding-sexp containing-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2960 containing-begin containing-mid containing-paren)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2961 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2962 ;; Find the containing-paren, and use that as the limit
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2963 (if (setq containing-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2964 (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2965 (narrow-to-region lim (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2966 (vhdl-safe (scan-lists (point) -1 1))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2967 (setq lim containing-paren))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2968 ;; Look backwards for "begin" and "end" keywords.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2969 (while (and (> (point) lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2970 (not containing-sexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2971 (setq keyword (vhdl-backward-to-block lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2972 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2973 ((eq keyword 'begin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2974 ;; Found a "begin" keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2975 (setq sexp-start (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2976 (setq sexp-mid (vhdl-corresponding-mid lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2977 (setq sexp-end (vhdl-safe
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2978 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2979 (vhdl-forward-sexp 1 lim) (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2980 (if (and sexp-end (<= sexp-end here))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2981 ;; we want to record this sexp, but we only want to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2982 ;; record the last-most of any of them before here
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2983 (or preceding-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2984 (setq preceding-sexp sexp-start))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2985 ;; we're contained in this sexp so put sexp-start on
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2986 ;; front of list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2987 (setq containing-sexp sexp-start)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2988 (setq containing-mid sexp-mid)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2989 (setq containing-begin t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2990 ((eq keyword 'end)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2991 ;; Found an "end" keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2992 (forward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2993 (setq sexp-end (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2994 (setq sexp-mid nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2995 (setq sexp-start
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2996 (or (vhdl-safe (vhdl-backward-sexp 1 lim) (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2997 (progn (backward-sexp) (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2998 ;; we want to record this sexp, but we only want to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2999 ;; record the last-most of any of them before here
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3000 (or preceding-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3001 (setq preceding-sexp sexp-start)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3002 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3003 ;; Check if the containing-paren should be the containing-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3004 (if (and containing-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3005 (or (null containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3006 (< containing-sexp containing-paren)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3007 (setq containing-sexp containing-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3008 preceding-sexp nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3009 containing-begin nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3010 containing-mid nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3011 (vector containing-sexp preceding-sexp containing-begin containing-mid)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3012 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3013
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3014
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3015 (defconst vhdl-s-c-a-re
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3016 (concat vhdl-case-alternative-re "\\|" vhdl-case-header-key))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3017
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3018 (defun vhdl-skip-case-alternative (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3019 ;; skip forward over case/when bodies, with optional maximal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3020 ;; limit. if no next case alternative is found, nil is returned and point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3021 ;; is not moved
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3022 (let ((lim (or lim (point-max)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3023 (here (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3024 donep foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3025 (while (and (< (point) lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3026 (not donep))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3027 (if (and (re-search-forward vhdl-s-c-a-re lim 'move)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3028 (save-match-data
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3029 (not (vhdl-in-literal)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3030 (/= (match-beginning 0) here))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3031 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3032 (goto-char (match-beginning 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3033 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3034 ((and (looking-at "case")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3035 (re-search-forward "\\bis[^_]" lim t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3036 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3037 (vhdl-forward-sexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3038 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3039 (setq donep t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3040 foundp t))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3041 (if (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3042 (goto-char here))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3043 foundp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3044
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3045 (defun vhdl-backward-skip-label (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3046 ;; skip backward over a label, with optional maximal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3047 ;; limit. if label is not found, nil is returned and point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3048 ;; is not moved
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3049 (let ((lim (or lim (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3050 placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3051 (if (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3052 (vhdl-backward-syntactic-ws lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3053 (and (eq (preceding-char) ?:)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3054 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3055 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3056 (setq placeholder (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3057 (looking-at vhdl-label-key))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3058 (goto-char placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3059 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3060
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3061 (defun vhdl-forward-skip-label (&optional lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3062 ;; skip forward over a label, with optional maximal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3063 ;; limit. if label is not found, nil is returned and point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3064 ;; is not moved
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3065 (let ((lim (or lim (point-max))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3066 (if (looking-at vhdl-label-key)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3067 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3068 (goto-char (match-end 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3069 (vhdl-forward-syntactic-ws lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3070 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3071
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3072 (defun vhdl-get-syntactic-context ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3073 ;; guess the syntactic description of the current line of VHDL code.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3074 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3075 (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3076 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3077 (let* ((indent-point (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3078 (case-fold-search t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3079 vec literal containing-sexp preceding-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3080 containing-begin containing-mid containing-leader
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3081 char-before-ip char-after-ip begin-after-ip end-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3082 placeholder lim library-unit
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3083 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3084
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3085 ;; Reset the syntactic context
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3086 (setq vhdl-syntactic-context nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3087
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3088 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3089 ;; Move to the start of the previous library unit, and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3090 ;; record the position of the "begin" keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3091 (setq placeholder (vhdl-beginning-of-libunit))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3092 ;; The position of the "libunit" keyword gives us a gross
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3093 ;; limit point.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3094 (setq lim (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3095 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3096
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3097 ;; If there is a previous library unit, and we are enclosed by
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3098 ;; it, then set the syntax accordingly.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3099 (and placeholder
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3100 (setq library-unit (vhdl-get-library-unit lim placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3101 (vhdl-add-syntax library-unit lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3102
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3103 ;; Find the surrounding state.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3104 (if (setq vec (vhdl-get-block-state lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3105 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3106 (setq containing-sexp (aref vec 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3107 (setq preceding-sexp (aref vec 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3108 (setq containing-begin (aref vec 2))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3109 (setq containing-mid (aref vec 3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3110 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3111
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3112 ;; set the limit on the farthest back we need to search
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3113 (setq lim (if containing-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3114 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3115 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3116 ;; set containing-leader if required
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3117 (if (looking-at vhdl-leader-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3118 (setq containing-leader (vhdl-end-of-leader)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3119 (vhdl-point 'bol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3120 (point-min)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3121
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3122 ;; cache char before and after indent point, and move point to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3123 ;; the most likely position to perform the majority of tests
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3124 (goto-char indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3125 (skip-chars-forward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3126 (setq literal (vhdl-in-literal lim))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3127 (setq char-after-ip (following-char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3128 (setq begin-after-ip (and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3129 (not literal)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3130 (looking-at vhdl-begin-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3131 (vhdl-begin-p)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3132 (setq end-after-ip (and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3133 (not literal)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3134 (looking-at vhdl-end-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3135 (vhdl-end-p)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3136 (vhdl-backward-syntactic-ws lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3137 (setq char-before-ip (preceding-char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3138 (goto-char indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3139 (skip-chars-forward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3140
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3141 ;; now figure out syntactic qualities of the current line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3142 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3143 ;; CASE 1: in a string or comment.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3144 ((memq literal '(string comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3145 (vhdl-add-syntax literal (vhdl-point 'bopl)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3146 ;; CASE 2: Line is at top level.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3147 ((null containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3148 ;; Find the point to which indentation will be relative
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3149 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3150 (if (null preceding-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3151 ;; CASE 2X.1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3152 ;; no preceding-sexp -> use the preceding statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3153 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3154 ;; CASE 2X.2
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3155 ;; if there is a preceding-sexp then indent relative to it
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3156 (goto-char preceding-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3157 ;; if not at boi, then the block-opening keyword is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3158 ;; probably following a label, so we need a different
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3159 ;; relpos
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3160 (if (/= (point) (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3161 ;; CASE 2X.3
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3162 (vhdl-beginning-of-statement-1 lim)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3163 ;; v-b-o-s could have left us at point-min
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3164 (and (bobp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3165 ;; CASE 2X.4
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3166 (vhdl-forward-syntactic-ws indent-point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3167 (setq placeholder (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3168 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3169 ;; CASE 2A : we are looking at a block-open
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3170 (begin-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3171 (vhdl-add-syntax 'block-open placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3172 ;; CASE 2B: we are looking at a block-close
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3173 (end-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3174 (vhdl-add-syntax 'block-close placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3175 ;; CASE 2C: we are looking at a top-level statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3176 ((progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3177 (vhdl-backward-syntactic-ws lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3178 (or (bobp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3179 (= (preceding-char) ?\;)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3180 (vhdl-add-syntax 'statement placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3181 ;; CASE 2D: we are looking at a top-level statement-cont
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3182 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3183 (vhdl-beginning-of-statement-1 lim)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3184 ;; v-b-o-s could have left us at point-min
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3185 (and (bobp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3186 ;; CASE 2D.1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3187 (vhdl-forward-syntactic-ws indent-point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3188 (vhdl-add-syntax 'statement-cont (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3189 )) ; end CASE 2
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3190 ;; CASE 3: line is inside parentheses. Most likely we are
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3191 ;; either in a subprogram argument (interface) list, or a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3192 ;; continued expression containing parentheses.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3193 ((null containing-begin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3194 (vhdl-backward-syntactic-ws containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3195 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3196 ;; CASE 3A: we are looking at the arglist closing paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3197 ((eq char-after-ip ?\))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3198 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3199 (vhdl-add-syntax 'arglist-close (vhdl-point 'boi)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3200 ;; CASE 3B: we are looking at the first argument in an empty
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3201 ;; argument list.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3202 ((eq char-before-ip ?\()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3203 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3204 (vhdl-add-syntax 'arglist-intro (vhdl-point 'boi)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3205 ;; CASE 3C: we are looking at an arglist continuation line,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3206 ;; but the preceding argument is on the same line as the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3207 ;; opening paren. This case includes multi-line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3208 ;; expression paren groupings.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3209 ((and (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3210 (goto-char (1+ containing-sexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3211 (skip-chars-forward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3212 (not (eolp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3213 (not (looking-at "--")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3214 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3215 (vhdl-beginning-of-statement-1 containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3216 (skip-chars-backward " \t(")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3217 (<= (point) containing-sexp)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3218 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3219 (vhdl-add-syntax 'arglist-cont-nonempty (vhdl-point 'boi)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3220 ;; CASE 3D: we are looking at just a normal arglist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3221 ;; continuation line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3222 (t (vhdl-beginning-of-statement-1 containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3223 (vhdl-forward-syntactic-ws indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3224 (vhdl-add-syntax 'arglist-cont (vhdl-point 'boi)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3225 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3226 ;; CASE 4: A block mid open
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3227 ((and begin-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3228 (looking-at containing-mid))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3229 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3230 ;; If the \"begin\" keyword is a trailer, then find v-b-o-s
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3231 (if (looking-at vhdl-trailer-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3232 ;; CASE 4.1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3233 (progn (forward-sexp) (vhdl-beginning-of-statement-1 nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3234 (vhdl-backward-skip-label (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3235 (vhdl-add-syntax 'block-open (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3236 ;; CASE 5: block close brace
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3237 (end-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3238 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3239 ;; If the \"begin\" keyword is a trailer, then find v-b-o-s
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3240 (if (looking-at vhdl-trailer-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3241 ;; CASE 5.1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3242 (progn (forward-sexp) (vhdl-beginning-of-statement-1 nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3243 (vhdl-backward-skip-label (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3244 (vhdl-add-syntax 'block-close (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3245 ;; CASE 6: A continued statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3246 ((and (/= char-before-ip ?\;)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3247 ;; check it's not a trailer begin keyword, or a begin
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3248 ;; keyword immediately following a label.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3249 (not (and begin-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3250 (or (looking-at vhdl-trailer-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3251 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3252 (vhdl-backward-skip-label containing-sexp)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3253 ;; check it's not a statement keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3254 (not (and (looking-at vhdl-statement-fwd-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3255 (vhdl-statement-p)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3256 ;; see if the b-o-s is before the indent point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3257 (> indent-point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3258 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3259 (vhdl-beginning-of-statement-1 containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3260 ;; If we ended up after a leader, then this will
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3261 ;; move us forward to the start of the first
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3262 ;; statement. Note that a containing sexp here is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3263 ;; always a keyword, not a paren, so this will
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3264 ;; have no effect if we hit the containing-sexp.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3265 (vhdl-forward-syntactic-ws indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3266 (setq placeholder (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3267 ;; check it's not a block-intro
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3268 (/= placeholder containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3269 ;; check it's not a case block-intro
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3270 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3271 (goto-char placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3272 (or (not (looking-at vhdl-case-alternative-re))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3273 (> (match-end 0) indent-point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3274 ;; Make placeholder skip a label, but only if it puts us
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3275 ;; before the indent point at the start of a line.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3276 (let ((new placeholder))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3277 (if (and (> indent-point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3278 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3279 (goto-char placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3280 (vhdl-forward-skip-label indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3281 (setq new (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3282 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3283 (goto-char new)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3284 (eq new (progn (back-to-indentation) (point)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3285 (setq placeholder new)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3286 (vhdl-add-syntax 'statement-cont placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3287 (if begin-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3288 (vhdl-add-syntax 'block-open)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3289 ;; Statement. But what kind?
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3290 ;; CASE 7: A case alternative key
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3291 ((and (looking-at vhdl-case-alternative-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3292 (vhdl-case-alternative-p containing-sexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3293 ;; for a case alternative key, we set relpos to the first
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3294 ;; non-whitespace char on the line containing the "case"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3295 ;; keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3296 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3297 ;; If the \"begin\" keyword is a trailer, then find v-b-o-s
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3298 (if (looking-at vhdl-trailer-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3299 (progn (forward-sexp) (vhdl-beginning-of-statement-1 nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3300 (vhdl-add-syntax 'case-alternative (vhdl-point 'boi)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3301 ;; CASE 8: statement catchall
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3302 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3303 ;; we know its a statement, but we need to find out if it is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3304 ;; the first statement in a block
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3305 (if containing-leader
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3306 (goto-char containing-leader)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3307 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3308 ;; Note that a containing sexp here is always a keyword,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3309 ;; not a paren, so skip over the keyword.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3310 (forward-sexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3311 ;; move to the start of the first statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3312 (vhdl-forward-syntactic-ws indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3313 (setq placeholder (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3314 ;; we want to ignore case alternatives keys when skipping forward
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3315 (let (incase-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3316 (while (looking-at vhdl-case-alternative-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3317 (setq incase-p (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3318 ;; we also want to skip over the body of the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3319 ;; case/when statement if that doesn't put us at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3320 ;; after the indent-point
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3321 (while (vhdl-skip-case-alternative indent-point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3322 ;; set up the match end
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3323 (looking-at vhdl-case-alternative-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3324 (goto-char (match-end 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3325 ;; move to the start of the first case alternative statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3326 (vhdl-forward-syntactic-ws indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3327 (setq placeholder (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3328 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3329 ;; CASE 8A: we saw a case/when statement so we must be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3330 ;; in a switch statement. find out if we are at the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3331 ;; statement just after a case alternative key
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3332 ((and incase-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3333 (= (point) indent-point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3334 ;; relpos is the "when" keyword
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3335 (vhdl-add-syntax 'statement-case-intro incase-p))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3336 ;; CASE 8B: any old statement
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3337 ((< (point) indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3338 ;; relpos is the first statement of the block
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3339 (vhdl-add-syntax 'statement placeholder)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3340 (if begin-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3341 (vhdl-add-syntax 'block-open)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3342 ;; CASE 8C: first statement in a block
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3343 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3344 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3345 ;; If the \"begin\" keyword is a trailer, then find v-b-o-s
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3346 (if (looking-at vhdl-trailer-re)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3347 (progn (forward-sexp) (vhdl-beginning-of-statement-1 nil)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3348 (vhdl-backward-skip-label (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3349 (vhdl-add-syntax 'statement-block-intro (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3350 (if begin-after-ip
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3351 (vhdl-add-syntax 'block-open)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3352 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3353 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3354
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3355 ;; now we need to look at any modifiers
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3356 (goto-char indent-point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3357 (skip-chars-forward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3358 (if (looking-at "--")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3359 (vhdl-add-syntax 'comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3360 ;; return the syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3361 vhdl-syntactic-context))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3362
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3363 ;; Standard indentation line-ups:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3364
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3365 (defun vhdl-lineup-arglist (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3366 ;; lineup the current arglist line with the arglist appearing just
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3367 ;; after the containing paren which starts the arglist.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3368 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3369 (let* ((containing-sexp
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3370 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3371 ;; arglist-cont-nonempty gives relpos ==
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3372 ;; to boi of containing-sexp paren. This
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3373 ;; is good when offset is +, but bad
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3374 ;; when it is vhdl-lineup-arglist, so we
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3375 ;; have to special case a kludge here.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3376 (if (memq (car langelem) '(arglist-intro arglist-cont-nonempty))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3377 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3378 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3379 (backward-up-list 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3380 (skip-chars-forward " \t" (vhdl-point 'eol)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3381 (goto-char (cdr langelem)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3382 (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3383 (cs-curcol (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3384 (goto-char (cdr langelem))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3385 (current-column))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3386 (if (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3387 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3388 (looking-at "[ \t]*)"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3389 (progn (goto-char (match-end 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3390 (backward-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3391 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3392 (vhdl-forward-syntactic-ws)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3393 (- (current-column) cs-curcol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3394 (goto-char containing-sexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3395 (or (eolp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3396 (let ((eol (vhdl-point 'eol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3397 (here (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3398 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3399 (skip-chars-forward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3400 (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3401 (vhdl-forward-syntactic-ws)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3402 (if (< (point) eol)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3403 (goto-char here))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3404 (- (current-column) cs-curcol)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3405 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3406
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3407 (defun vhdl-lineup-arglist-intro (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3408 ;; lineup an arglist-intro line to just after the open paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3409 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3410 (let ((cs-curcol (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3411 (goto-char (cdr langelem))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3412 (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3413 (ce-curcol (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3414 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3415 (backward-up-list 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3416 (skip-chars-forward " \t" (vhdl-point 'eol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3417 (current-column))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3418 (- ce-curcol cs-curcol -1))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3419
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3420 (defun vhdl-lineup-comment (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3421 ;; support old behavior for comment indentation. we look at
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3422 ;; vhdl-comment-only-line-offset to decide how to indent comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3423 ;; only-lines
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3424 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3425 (back-to-indentation)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3426 ;; at or to the right of comment-column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3427 (if (>= (current-column) comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3428 (vhdl-comment-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3429 ;; otherwise, indent as specified by vhdl-comment-only-line-offset
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3430 (if (not (bolp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3431 (or (car-safe vhdl-comment-only-line-offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3432 vhdl-comment-only-line-offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3433 (or (cdr-safe vhdl-comment-only-line-offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3434 (car-safe vhdl-comment-only-line-offset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3435 -1000 ;jam it against the left side
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3436 )))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3437
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3438 (defun vhdl-lineup-statement-cont (langelem)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3439 ;; line up statement-cont after the assignment operator
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3440 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3441 (let* ((relpos (cdr langelem))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3442 (assignp (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3443 (goto-char (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3444 (and (re-search-forward "\\(<\\|:\\)="
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3445 (vhdl-point 'eol) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3446 (- (point) (vhdl-point 'boi)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3447 (curcol (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3448 (goto-char relpos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3449 (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3450 foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3451 (while (and (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3452 (< (point) (vhdl-point 'eol)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3453 (re-search-forward "\\(<\\|:\\)=\\|(" (vhdl-point 'eol) 'move)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3454 (if (vhdl-in-literal (cdr langelem))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3455 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3456 (if (= (preceding-char) ?\()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3457 ;; skip over any parenthesized expressions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3458 (goto-char (min (vhdl-point 'eol)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3459 (scan-lists (point) 1 1)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3460 ;; found an assignment operator (not at eol)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3461 (setq foundp (not (looking-at "\\s-*$"))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3462 (if (not foundp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3463 ;; there's no assignment operator on the line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3464 vhdl-basic-offset
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3465 ;; calculate indentation column after assign and ws, unless
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3466 ;; our line contains an assignment operator
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3467 (if (not assignp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3468 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3469 (forward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3470 (skip-chars-forward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3471 (setq assignp 0)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3472 (- (current-column) assignp curcol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3473 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3474
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3475 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3476 ;; Indentation commands
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3477
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3478 (defun vhdl-tab (&optional pre-arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3479 "If preceeding character is part of a word then dabbrev-expand,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3480 else if right of non whitespace on line then tab-to-tab-stop,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3481 else if last command was a tab or return then dedent one step,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3482 else indent `correctly'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3483 (interactive "*P")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3484 (cond ((= (char-syntax (preceding-char)) ?w)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3485 (let ((case-fold-search nil)) (dabbrev-expand pre-arg)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3486 ((> (current-column) (current-indentation))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3487 (tab-to-tab-stop))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3488 ((and (or (eq last-command 'vhdl-tab)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3489 (eq last-command 'vhdl-return))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3490 (/= 0 (current-indentation)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3491 (backward-delete-char-untabify vhdl-basic-offset nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3492 ((vhdl-indent-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3493 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3494 (setq this-command 'vhdl-tab)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3495 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3496
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3497 (defun vhdl-untab ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3498 "Delete backwards to previous tab stop."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3499 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3500 (backward-delete-char-untabify vhdl-basic-offset nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3501 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3502
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3503 (defun vhdl-return ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3504 "newline-and-indent or indent-new-comment-line if in comment and preceding
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3505 character is a space."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3506 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3507 (if (and (= (preceding-char) ? ) (vhdl-in-comment-p))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3508 (indent-new-comment-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3509 (newline-and-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3510 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3511 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3512
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3513 (defun vhdl-indent-line ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3514 "Indent the current line as VHDL code. Returns the amount of
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3515 indentation change."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3516 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3517 (let* ((syntax (vhdl-get-syntactic-context))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3518 (pos (- (point-max) (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3519 (indent (apply '+ (mapcar 'vhdl-get-offset syntax)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3520 (shift-amt (- (current-indentation) indent)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3521 (and vhdl-echo-syntactic-information-p
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3522 (message "syntax: %s, indent= %d" syntax indent))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3523 (if (zerop shift-amt)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3524 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3525 (delete-region (vhdl-point 'bol) (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3526 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3527 (indent-to indent))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3528 (if (< (point) (vhdl-point 'boi))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3529 (back-to-indentation)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3530 ;; If initial point was within line's indentation, position after
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3531 ;; the indentation. Else stay at same point in text.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3532 (if (> (- (point-max) pos) (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3533 (goto-char (- (point-max) pos)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3534 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3535 (run-hooks 'vhdl-special-indent-hook)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3536 shift-amt))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3537
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3538 (defun vhdl-indent-buffer ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3539 "Indent whole buffer as VHDL code."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3540 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3541 (indent-region (point-min) (point-max) nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3542 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3543
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3544 (defun vhdl-indent-sexp (&optional endpos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3545 "Indent each line of the list starting just after point.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3546 If optional arg ENDPOS is given, indent each line, stopping when
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3547 ENDPOS is encountered."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3548 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3549 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3550 (let ((beg (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3551 (end (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3552 (vhdl-forward-sexp nil endpos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3553 (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3554 (indent-region beg end nil))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3555
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3556 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3557 ;; Miscellaneous commands
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3558
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3559 (defun vhdl-show-syntactic-information ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3560 "Show syntactic information for current line."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3561 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3562 (message "syntactic analysis: %s" (vhdl-get-syntactic-context))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3563 (vhdl-keep-region-active))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3564
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3565 ;; Verification and regression functions:
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3566
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3567 (defun vhdl-regress-line (&optional arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3568 "Check syntactic information for current line."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3569 (interactive "P")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3570 (let ((expected (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3571 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3572 (if (search-backward " -- ((" (vhdl-point 'bol) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3573 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3574 (forward-char 4)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3575 (read (current-buffer))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3576 (actual (vhdl-get-syntactic-context))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3577 (expurgated))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3578 ;; remove the library unit symbols
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3579 (mapcar
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3580 (function
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3581 (lambda (elt)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3582 (if (memq (car elt) '(entity configuration package
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3583 package-body architecture))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3584 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3585 (setq expurgated (append expurgated (list elt))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3586 actual)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3587 (if (and (not arg) expected (listp expected))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3588 (if (not (equal expected expurgated))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3589 (error "Should be: %s, is: %s" expected expurgated))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3590 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3591 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3592 (if (not (looking-at "^\\s-*\\(--.*\\)?$"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3593 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3594 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3595 (if (search-backward " -- ((" (vhdl-point 'bol) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3596 (kill-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3597 (insert " -- ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3598 (insert (format "%s" expurgated)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3599 (vhdl-keep-region-active))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3600
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3601
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3602 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3603 ;; Alignment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3604 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3605
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3606 (defvar vhdl-align-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3607 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3608 ;; after some keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3609 (vhdl-mode "\\<\\(alias\\|constant\\|signal\\|subtype\\|type\\|variable\\)[ \t]"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3610 "\\<\\(alias\\|constant\\|signal\\|subtype\\|type\\|variable\\)\\([ \t]+\\)" 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3611 ;; before ':'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3612 (vhdl-mode ":[^=]" "[^ \t]\\([ \t]*\\):[^=]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3613 ;; after ':'
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3614 (vhdl-mode ":[^=]" ":\\([ \t]*\\)[^=]" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3615 ;; after direction specifications
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3616 (vhdl-mode ":[ \t]*\\(in\\|out\\|inout\\|buffer\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3617 ":[ \t]*\\(in\\|out\\|inout\\|buffer\\)\\([ \t]+\\)" 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3618 ;; before "<=", "=>", and ":="
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3619 (vhdl-mode "<=" "[^ \t]\\([ \t]*\\)<=" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3620 (vhdl-mode "=>" "[^ \t]\\([ \t]*\\)=>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3621 (vhdl-mode ":=" "[^ \t]\\([ \t]*\\):=" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3622 ;; after "<=", "=>", and ":="
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3623 (vhdl-mode "<=" "<=\\([ \t]*\\)" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3624 (vhdl-mode "=>" "=>\\([ \t]*\\)" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3625 (vhdl-mode ":=" ":=\\([ \t]*\\)" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3626 ;; before some keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3627 (vhdl-mode "[ \t]after\\>" "[^ \t]\\([ \t]+\\)after\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3628 (vhdl-mode "[ \t]\\(fs\\|ps\\|ns\\|us\\|ms\\|sec\\|min\\|hr\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3629 "[^ \t]\\([ \t]+\\)\\(fs\\|ps\\|ns\\|us\\|ms\\|sec\\|min\\|hr\\)\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3630 (vhdl-mode "[ \t]when\\>" "[^ \t]\\([ \t]+\\)when\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3631 (vhdl-mode "[ \t]else\\>" "[^ \t]\\([ \t]+\\)else\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3632 (vhdl-mode "[ \t]is\\>" "[^ \t]\\([ \t]+\\)is\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3633 (vhdl-mode "[ \t]of\\>" "[^ \t]\\([ \t]+\\)of\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3634 (vhdl-mode "[ \t]use\\>" "[^ \t]\\([ \t]+\\)use\\>" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3635 ;; before comments (two steps required for correct insertion of two spaces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3636 (vhdl-mode "--" "[^ \t]\\([ \t]*\\)--" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3637 (vhdl-mode "--" "[^ \t][ \t]\\([ \t]*\\)--" 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3638 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3639 "The format of this alist is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3640 (MODES [or MODE] REGEXP ALIGN-PATTERN SUBEXP).
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3641 It is searched in order. If REGEXP is found anywhere in the first
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3642 line of a region to be aligned, ALIGN-PATTERN will be used for that
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3643 region. ALIGN-PATTERN must include the whitespace to be expanded or
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3644 contracted. It may also provide regexps for the text surrounding the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3645 whitespace. SUBEXP specifies which sub-expression of
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3646 ALIGN-PATTERN matches the white space to be expanded/contracted.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3647
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3648 (defvar vhdl-align-try-all-clauses t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3649 "If REGEXP is not found on the first line of the region that clause
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3650 is ignored. If this variable is non-nil, then the clause is tried anyway.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3651
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3652 (defun vhdl-align (begin end spacing &optional alignment-list quick)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3653 "Attempt to align a range of lines based on the content of the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3654 lines. The definition of 'alignment-list' determines the matching
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3655 order and the manner in which the lines are aligned. If ALIGNMENT-LIST
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3656 is not specified 'vhdl-align-alist' is used. If QUICK is non-nil, no
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3657 indentation is done before aligning."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3658 (interactive "r\np")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3659 (if (not alignment-list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3660 (setq alignment-list vhdl-align-alist))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3661 (if (not spacing)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3662 (setq spacing 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3663 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3664 (let (bol indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3665 (goto-char end)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3666 (setq end (point-marker))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3667 (goto-char begin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3668 (setq bol
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3669 (setq begin (progn (beginning-of-line) (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3670 (untabify bol end)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3671 (if quick
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3672 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3673 (indent-region bol end nil))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3674 (let ((copy (copy-alist alignment-list)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3675 (while copy
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3676 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3677 (goto-char begin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3678 (let (element
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3679 (eol (save-excursion (progn (end-of-line) (point)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3680 (setq element (nth 0 copy))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3681 (if (and (or (and (listp (car element))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3682 (memq major-mode (car element)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3683 (eq major-mode (car element)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3684 (or vhdl-align-try-all-clauses
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3685 (re-search-forward (car (cdr element)) eol t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3686 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3687 (vhdl-align-region begin end (car (cdr (cdr element)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3688 (car (cdr (cdr (cdr element)))) spacing)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3689 (setq copy (cdr copy)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3690
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3691 (defun vhdl-align-region (begin end match &optional substr spacing)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3692 "Align a range of lines from BEGIN to END. The regular expression
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3693 MATCH must match exactly one fields: the whitespace to be
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3694 contracted/expanded. The alignment column will equal the
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3695 rightmost column of the widest whitespace block. SPACING is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3696 the amount of extra spaces to add to the calculated maximum required.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3697 SPACING defaults to 1 so that at least one space is inserted after
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3698 the token in MATCH."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3699 (if (not spacing)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3700 (setq spacing 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3701 (if (not substr)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3702 (setq substr 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3703 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3704 (let (distance (max 0) (lines 0) bol eol width)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3705 ;; Determine the greatest whitespace distance to the alignment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3706 ;; character
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3707 (goto-char begin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3708 (setq eol (progn (end-of-line) (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3709 bol (setq begin (progn (beginning-of-line) (point))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3710 (while (< bol end)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3711 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3712 (if (re-search-forward match eol t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3713 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3714 (setq distance (- (match-beginning substr) bol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3715 (if (> distance max)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3716 (setq max distance)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3717 (forward-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3718 (setq bol (point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3719 eol (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3720 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3721 (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3722 (setq lines (1+ lines)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3723 ;; Now insert enough maxs to push each assignment operator to
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3724 ;; the same column. We need to use 'lines' as a counter, since
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3725 ;; the location of the mark may change
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3726 (goto-char (setq bol begin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3727 (setq eol (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3728 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3729 (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3730 (while (> lines 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3731 (if (re-search-forward match eol t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3732 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3733 (setq width (- (match-end substr) (match-beginning substr)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3734 (setq distance (- (match-beginning substr) bol))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3735 (goto-char (match-beginning substr))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3736 (delete-char width)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3737 (insert-char ? (+ (- max distance) spacing))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3738 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3739 (forward-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3740 (setq bol (point)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3741 eol (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3742 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3743 (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3744 (setq lines (1- lines))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3745 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3746
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3747 (defun vhdl-align-comment-region (begin end spacing)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3748 "Aligns inline comments within a region relative to first comment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3749 (interactive "r\nP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3750 (vhdl-align begin end (or spacing 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3751 `((vhdl-mode "--" "[^ \t]\\([ \t]*\\)--" 1)) t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3752
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3753 (defun vhdl-align-noindent-region (begin end spacing)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3754 "Align without indentation."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3755 (interactive "r\nP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3756 (vhdl-align begin end spacing nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3757 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3758
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3759
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3760 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3761 ;; VHDL electrification
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3762 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3763
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3764 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3765 ;; Stuttering
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3766
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3767 (defun vhdl-stutter-mode-caps (count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3768 "Double first letters of a word replaced by a single capital of the letter."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3769 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3770 (if vhdl-stutter-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3771 (if (and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3772 (= (preceding-char) last-input-char) ; doubled
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3773 (or (= (point) 2) ; beginning of buffer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3774 (/= (char-syntax (char-after (- (point) 2))) ?w) ;not mid-word
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3775 (< (char-after (- (point) 2)) ?A))) ;alfa-numeric
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3776 (progn (delete-char -1) (insert-char (- last-input-char 32) count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3777 (self-insert-command count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3778 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3779 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3780
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3781 (defun vhdl-stutter-mode-close-bracket (count) " ']' --> ')', ')]' --> ']'"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3782 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3783 (if (and vhdl-stutter-mode (= count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3784 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3785 (if (= (preceding-char) 41) ; close-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3786 (progn (delete-char -1) (insert-char 93 1)) ; close-bracket
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3787 (insert-char 41 1) ; close-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3788 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3789 (blink-matching-open))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3790 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3791 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3792
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3793 (defun vhdl-stutter-mode-semicolon (count) " ';;' --> ' : ', ': ;' --> ' := '"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3794 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3795 (if (and vhdl-stutter-mode (= count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3796 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3797 (cond ((= (preceding-char) last-input-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3798 (progn (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3799 (if (not (eq (preceding-char) ? )) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3800 (insert ": ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3801 ((and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3802 (eq last-command 'vhdl-stutter-mode-colon) (= (preceding-char) ? ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3803 (progn (delete-char -1) (insert "= ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3804 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3805 (insert-char 59 1)) ; semi-colon
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3806 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3807 (setq this-command 'vhdl-stutter-mode-colon))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3808 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3809 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3810
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3811 (defun vhdl-stutter-mode-open-bracket (count) " '[' --> '(', '([' --> '['"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3812 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3813 (if (and vhdl-stutter-mode (= count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3814 (if (= (preceding-char) 40) ; open-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3815 (progn (delete-char -1) (insert-char 91 1)) ; open-bracket
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3816 (insert-char 40 1)) ; open-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3817 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3818 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3819
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3820 (defun vhdl-stutter-mode-quote (count) " '' --> \""
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3821 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3822 (if (and vhdl-stutter-mode (= count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3823 (if (= (preceding-char) last-input-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3824 (progn (delete-backward-char 1) (insert-char 34 1)) ; double-quote
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3825 (insert-char 39 1)) ; single-quote
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3826 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3827 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3828
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3829 (defun vhdl-stutter-mode-comma (count) " ',,' --> ' <= '"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3830 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3831 (if (and vhdl-stutter-mode (= count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3832 (cond ((= (preceding-char) last-input-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3833 (progn (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3834 (if (not (eq (preceding-char) ? )) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3835 (insert "<= ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3836 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3837 (insert-char 44 1))) ; comma
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3838 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3839 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3840
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3841 (defun vhdl-stutter-mode-period (count) " '..' --> ' => '"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3842 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3843 (if (and vhdl-stutter-mode (= count 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3844 (cond ((= (preceding-char) last-input-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3845 (progn (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3846 (if (not (eq (preceding-char) ? )) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3847 (insert "=> ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3848 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3849 (insert-char 46 1))) ; period
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3850 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3851 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3852
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3853 (defun vhdl-paired-parens ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3854 "Insert a pair of round parentheses, placing point between them."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3855 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3856 (insert "()")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3857 (backward-char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3858 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3859
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3860 (defun vhdl-stutter-mode-dash (count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3861 "-- starts a comment, --- draws a horizontal line,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3862 ---- starts a display comment"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3863 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3864 (if vhdl-stutter-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3865 (cond ((and abbrev-start-location (= abbrev-start-location (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3866 (setq abbrev-start-location nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3867 (goto-char last-abbrev-location)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3868 (beginning-of-line nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3869 (vhdl-display-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3870 ((/= (preceding-char) ?-) ; standard dash (minus)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3871 (self-insert-command count))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3872 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3873 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3874 (message "Enter - for horiz. line, CR for commenting-out code, else 1st char of comment")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3875 (let ((next-input (read-char)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3876 (if (= next-input ?-) ; triple dash
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3877 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3878 (vhdl-display-comment-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3879 (message
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3880 "Enter - for display comment, else continue with coding")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3881 (let ((next-input (read-char)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3882 (if (= next-input ?-) ; four dashes
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3883 (vhdl-display-comment t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3884 (setq unread-command-events ;pushback the char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3885 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3886 (vhdl-character-to-event-hack next-input)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3887 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3888 (setq unread-command-events ;pushback the char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3889 (list (vhdl-character-to-event-hack next-input)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3890 (vhdl-inline-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3891 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3892 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3893 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3894
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3895 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3896 ;; VHDL templates
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3897
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3898 (defun vhdl-alias ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3899 "Insert alias declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3900 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3901 (vhdl-insert-keyword "ALIAS ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3902 (if (equal (vhdl-field "name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3903 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3904 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3905 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3906 (vhdl-insert-keyword " IS ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3907 (vhdl-field "name" ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3908 (vhdl-declaration-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3909 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3910
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3911 (defun vhdl-architecture ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3912 "Insert architecture template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3913 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3914 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3915 (vhdl-architecture-name)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3916 (position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3917 (entity-exists)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3918 (string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3919 (case-fold-search t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3920 (vhdl-insert-keyword "ARCHITECTURE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3921 (if (equal (setq vhdl-architecture-name (vhdl-field "name")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3922 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3923 (vhdl-insert-keyword " OF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3924 (setq position (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3925 (setq entity-exists
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3926 (re-search-backward "entity \\(\\(\\w\\|\\s_\\)+\\) is" nil t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3927 (setq string (match-string 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3928 (goto-char position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3929 (if (and entity-exists (not (equal string "")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3930 (insert string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3931 (vhdl-field "entity name"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3932 (vhdl-insert-keyword " IS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3933 (vhdl-begin-end (cons vhdl-architecture-name margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3934 (vhdl-block-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3935 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3936
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3937
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3938 (defun vhdl-array ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3939 "Insert array type definition."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3940 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3941 (vhdl-insert-keyword "ARRAY (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3942 (if (equal (vhdl-field "range") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3943 (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3944 (vhdl-insert-keyword ") OF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3945 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3946 (vhdl-insert-keyword ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3947 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3948
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3949 (defun vhdl-assert ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3950 "Inserts a assertion statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3951 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3952 (vhdl-insert-keyword "ASSERT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3953 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3954 (if (equal (vhdl-field "condition (negated)") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3955 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3956 (if vhdl-conditions-in-parenthesis (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3957 (vhdl-insert-keyword " REPORT \"")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3958 (vhdl-field "string-expression" "\" ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3959 (vhdl-insert-keyword "SEVERITY ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3960 (if (equal (vhdl-field "[note | warning | error | failure]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3961 (delete-char -10))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3962 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3963 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3964
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3965 (defun vhdl-attribute ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3966 "Inserts an attribute declaration or specification."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3967 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3968 (vhdl-insert-keyword "ATTRIBUTE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3969 (if (y-or-n-p "declaration (or specification)? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3970 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3971 (vhdl-field "name" " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3972 (vhdl-field "type" ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3973 (vhdl-declaration-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3974 (vhdl-field "name")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3975 (vhdl-insert-keyword " OF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3976 (vhdl-field "entity name" " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3977 (vhdl-field "entity class")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3978 (vhdl-insert-keyword " IS ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3979 (vhdl-field "expression" ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3980 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3981
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3982 (defun vhdl-block ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3983 "Insert a block template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3984 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3985 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3986 (vhdl-insert-keyword " : BLOCK ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3987 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3988 (let* ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3989 (name (vhdl-field "label")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3990 (if (equal name "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3991 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3992 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3993 (insert "(")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3994 (if (equal (vhdl-field "[guard expression]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3995 (delete-char -2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3996 (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3997 (vhdl-begin-end (cons (concat (vhdl-case-keyword "BLOCK ") name) margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3998 (vhdl-block-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3999 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4000
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4001 (defun vhdl-block-configuration ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4002 "Insert a block configuration statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4003 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4004 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4005 (vhdl-insert-keyword "FOR ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4006 (if (equal (setq name (vhdl-field "block specification")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4007 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4008 (vhdl-insert-keyword "\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4009 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4010 (vhdl-insert-keyword "END FOR;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4011 (end-of-line 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4012 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4013 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4014
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4015 (defun vhdl-case ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4016 "Inserts a case statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4017 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4018 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4019 (name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4020 (vhdl-insert-keyword "CASE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4021 (if (equal (setq name (vhdl-field "expression")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4022 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4023 (vhdl-insert-keyword " IS\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4024 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4025 (vhdl-insert-keyword "END CASE;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4026 ; (if vhdl-self-insert-comments (insert " -- " name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4027 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4028 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4029 (vhdl-insert-keyword "WHEN => ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4030 (backward-char 4)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4031 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4032
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4033 (defun vhdl-component ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4034 "Inserts a component declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4035 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4036 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4037 (vhdl-insert-keyword "COMPONENT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4038 (if (equal (vhdl-field "name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4039 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4040 (insert "\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4041 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4042 (vhdl-insert-keyword "END COMPONENT;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4043 (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4044 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4045 (vhdl-insert-keyword "GENERIC (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4046 (vhdl-get-generic t t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4047 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4048 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4049 (vhdl-insert-keyword "PORT (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4050 (vhdl-get-port t t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4051 (forward-line 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4052 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4053
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4054 (defun vhdl-component-configuration ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4055 "Inserts a component configuration (uses `vhdl-configuration-spec' since
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4056 these are almost equivalent)."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4057 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4058 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4059 (vhdl-configuration-spec)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4060 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4061 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4062 (vhdl-insert-keyword "END FOR;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4063 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4064
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4065 (defun vhdl-component-instance ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4066 "Inserts a component instantiation statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4067 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4068 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4069 (if (equal (vhdl-field "instance label") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4070 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4071 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4072 (vhdl-field "component name" "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4073 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4074 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4075 (vhdl-insert-keyword "GENERIC MAP (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4076 (if (equal (vhdl-field "[association list]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4077 (progn (goto-char position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4078 (kill-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4079 (insert ")\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4080 (indent-to (+ margin vhdl-basic-offset))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4081 (vhdl-insert-keyword "PORT MAP (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4082 (vhdl-field "association list" ");")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4083 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4084
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4085 (defun vhdl-concurrent-signal-assignment ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4086 "Inserts a concurrent signal assignment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4087 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4088 (if (equal (vhdl-field "target signal") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4089 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4090 (insert " <= ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4091 ; (if (not (equal (vhdl-field "[GUARDED] [TRANSPORT]") ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4092 ; (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4093 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4094 (start (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4095 (vhdl-field "waveform")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4096 (vhdl-insert-keyword " WHEN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4097 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4098 (while (not (equal (vhdl-field "[condition]") ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4099 (if vhdl-conditions-in-parenthesis (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4100 (vhdl-insert-keyword " ELSE")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4101 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4102 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4103 (vhdl-field "waveform")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4104 (vhdl-insert-keyword " WHEN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4105 (if vhdl-conditions-in-parenthesis (insert "(")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4106 (delete-char -6)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4107 (if vhdl-conditions-in-parenthesis (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4108 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4109 (if vhdl-auto-align (vhdl-align start (point) 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4110 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4111
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4112 (defun vhdl-configuration ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4113 "Inserts a configuration specification if within an architecture,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4114 a block or component configuration if within a configuration declaration,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4115 a configuration declaration if not within a design unit."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4116 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4117 (cond ((equal (car (car (cdr (vhdl-get-syntactic-context)))) 'architecture)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4118 (vhdl-configuration-spec))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4119 ((equal (car (car (cdr (vhdl-get-syntactic-context)))) 'configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4120 (if (y-or-n-p "block configuration (or component configuration)? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4121 (vhdl-block-configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4122 (vhdl-component-configuration)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4123 (t (vhdl-configuration-decl)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4124 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4125
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4126 (defun vhdl-configuration-spec ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4127 "Inserts a configuration specification."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4128 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4129 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4130 (vhdl-insert-keyword "FOR ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4131 (if (equal (vhdl-field "(component names | ALL)" " : ") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4132 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4133 (vhdl-field "component type" "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4134 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4135 (vhdl-insert-keyword "USE ENTITY ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4136 (vhdl-field "library name" ".")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4137 (vhdl-field "entity name" "(")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4138 (if (equal (vhdl-field "[architecture name]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4139 (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4140 (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4141 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4142 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4143 (vhdl-insert-keyword "GENERIC MAP (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4144 (if (equal (vhdl-field "[association list]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4145 (progn (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4146 (indent-to (+ margin vhdl-basic-offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4147 (insert ")\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4148 (indent-to (+ margin vhdl-basic-offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4149 (vhdl-insert-keyword "PORT MAP (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4150 (if (equal (vhdl-field "[association list]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4151 (progn (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4152 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4153 (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4154 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4155 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4156
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4157 (defun vhdl-configuration-decl ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4158 "Inserts a configuration declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4159 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4160 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4161 (position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4162 (entity-exists)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4163 (string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4164 (name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4165 (vhdl-insert-keyword "CONFIGURATION ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4166 (if (equal (setq name (vhdl-field "name")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4167 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4168 (vhdl-insert-keyword " OF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4169 (setq position (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4170 (setq entity-exists
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4171 (re-search-backward "entity \\(\\(\\w\\|\\s_\\)*\\) is" nil t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4172 (setq string (match-string 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4173 (goto-char position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4174 (if (and entity-exists (not (equal string "")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4175 (insert string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4176 (vhdl-field "entity name"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4177 (vhdl-insert-keyword " IS\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4178 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4179 (vhdl-insert-keyword "END ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4180 (insert name ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4181 (end-of-line 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4182 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4183 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4184
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4185 (defun vhdl-constant ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4186 "Inserts a constant declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4187 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4188 (vhdl-insert-keyword "CONSTANT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4189 (let ((in-arglist (string-match "arglist"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4190 (format "%s" (car (car (vhdl-get-syntactic-context)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4191 (if (not in-arglist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4192 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4193 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4194 (setq in-arglist (looking-at ".*("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4195 (goto-char opoint)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4196 (if (equal (vhdl-field "name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4197 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4198 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4199 (if in-arglist (vhdl-insert-keyword "IN "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4200 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4201 (if in-arglist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4202 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4203 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4204 (insert " := ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4205 (if (equal (vhdl-field "[initialization]" ";") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4206 (progn (goto-char position) (kill-line) (insert ";")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4207 (vhdl-declaration-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4208 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4209
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4210 (defun vhdl-default ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4211 "Insert nothing."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4212 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4213 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4214 (unexpand-abbrev)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4215 (backward-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4216 (vhdl-case-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4217 (forward-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4218 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4219
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4220 (defun vhdl-default-indent ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4221 "Insert nothing and indent."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4222 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4223 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4224 (unexpand-abbrev)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4225 (backward-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4226 (vhdl-case-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4227 (forward-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4228 (vhdl-indent-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4229 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4230
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4231 (defun vhdl-disconnect ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4232 "Insert a disconnect statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4233 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4234 (vhdl-insert-keyword "DISCONNECT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4235 (if (equal (vhdl-field "guarded signal specification") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4236 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4237 (vhdl-insert-keyword " AFTER ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4238 (vhdl-field "time expression" ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4239 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4240
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4241 (defun vhdl-else ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4242 "Insert an else statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4243 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4244 (let ((margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4245 (vhdl-insert-keyword "ELSE")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4246 (if (not (equal 'block-close (car (car (vhdl-get-syntactic-context)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4247 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4248 (vhdl-indent-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4249 (setq margin (current-indentation))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4250 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4251 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4252 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4253
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4254 (defun vhdl-elsif ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4255 "Insert an elsif statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4256 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4257 (let ((margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4258 (vhdl-insert-keyword "ELSIF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4259 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4260 (if (equal (vhdl-field "condition") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4261 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4262 (if vhdl-conditions-in-parenthesis (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4263 (vhdl-indent-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4264 (setq margin (current-indentation))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4265 (vhdl-insert-keyword " THEN\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4266 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4267 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4268
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4269 (defun vhdl-entity ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4270 "Insert an entity template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4271 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4272 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4273 (vhdl-entity-name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4274 (vhdl-insert-keyword "ENTITY ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4275 (if (equal (setq vhdl-entity-name (vhdl-field "entity name")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4276 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4277 (vhdl-insert-keyword " IS\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4278 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4279 (vhdl-insert-keyword "END ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4280 (insert vhdl-entity-name ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4281 (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4282 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4283 (vhdl-entity-body)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4284 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4285
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4286 (defun vhdl-entity-body ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4287 "Insert an entity body."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4288 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4289 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4290 (if vhdl-additional-empty-lines (insert "\n"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4291 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4292 (vhdl-insert-keyword "GENERIC (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4293 (if (vhdl-get-generic t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4294 (if vhdl-additional-empty-lines (insert "\n")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4295 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4296 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4297 (vhdl-insert-keyword "PORT (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4298 (if (vhdl-get-port t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4299 (if vhdl-additional-empty-lines (insert "\n")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4300 (end-of-line 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4301 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4302
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4303 (defun vhdl-exit ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4304 "Insert an exit statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4305 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4306 (vhdl-insert-keyword "EXIT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4307 (if (string-equal (vhdl-field "[loop label]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4308 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4309 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4310 (vhdl-insert-keyword " WHEN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4311 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4312 (if (equal (vhdl-field "[condition]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4313 (progn (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4314 (kill-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4315 (if vhdl-conditions-in-parenthesis (insert ")"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4316 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4317 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4318
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4319 (defun vhdl-for ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4320 "Inserts a block or component configuration if within a configuration
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4321 declaration, a for loop otherwise."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4322 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4323 (if (equal (car (car (cdr (vhdl-get-syntactic-context)))) 'configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4324 (if (y-or-n-p "block configuration (or component configuration)? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4325 (vhdl-block-configuration)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4326 (vhdl-component-configuration))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4327 (vhdl-for-loop)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4328
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4329 (defun vhdl-for-loop ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4330 "Insert a for loop template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4331 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4332 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4333 (vhdl-insert-keyword " : FOR ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4334 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4335 (let* ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4336 (name (vhdl-field "[label]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4337 (named (not (string-equal name "")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4338 (index))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4339 (if (not named) (delete-char 3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4340 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4341 (if (equal (setq index (vhdl-field "loop variable")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4342 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4343 (vhdl-insert-keyword " IN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4344 (vhdl-field "range")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4345 (vhdl-insert-keyword " LOOP\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4346 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4347 (vhdl-insert-keyword "END LOOP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4348 (if named (insert " " name ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4349 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4350 (if vhdl-self-insert-comments (insert " -- " index)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4351 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4352 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4353 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4354
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4355 (defun vhdl-function ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4356 "Insert function specification or body template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4357 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4358 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4359 (name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4360 (vhdl-insert-keyword "FUNCTION ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4361 (if (equal (setq name (vhdl-field "name")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4362 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4363 (vhdl-get-arg-list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4364 (vhdl-insert-keyword " RETURN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4365 (vhdl-field "type" " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4366 (if (y-or-n-p "insert body? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4367 (progn (vhdl-insert-keyword "IS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4368 (vhdl-begin-end (cons name margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4369 (vhdl-block-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4370 (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4371 (insert ";\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4372 (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4373 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4374
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4375 (defun vhdl-generate ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4376 "Insert a generate template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4377 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4378 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4379 (vhdl-insert-keyword " GENERATE")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4380 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4381 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4382 (label (vhdl-field "label"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4383 (string))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4384 (if (equal label "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4385 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4386 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4387 (setq string (vhdl-field "(FOR | IF)"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4388 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4389 (if (equal (upcase string) "IF")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4390 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4391 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4392 (vhdl-field "condition")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4393 (if vhdl-conditions-in-parenthesis (insert ")")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4394 (vhdl-field "loop variable")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4395 (vhdl-insert-keyword " IN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4396 (vhdl-field "range"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4397 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4398 (insert "\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4399 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4400 (vhdl-insert-keyword "END GENERATE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4401 (insert label ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4402 (end-of-line 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4403 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4404 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4405
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4406 (defun vhdl-generic ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4407 "Insert generic declaration, or generic map in instantiation statements."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4408 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4409 (vhdl-insert-keyword "GENERIC (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4410 (cond ((equal (car (car (cdr (vhdl-get-syntactic-context)))) 'entity)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4411 (vhdl-get-generic nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4412 ((or (equal 'statement-cont (car (car (vhdl-get-syntactic-context))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4413 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4414 (and (backward-word 2) (skip-chars-backward " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4415 (eq (preceding-char) ?:))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4416 (delete-char -1) (vhdl-map))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4417 (t (vhdl-get-generic nil t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4418
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4419 (defun vhdl-header ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4420 "Insert a VHDL file header."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4421 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4422 (let (eot)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4423 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4424 (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4425 (widen)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4426 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4427 (if vhdl-header-file
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4428 (setq eot (car (cdr (insert-file-contents vhdl-header-file))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4429 ; insert default header
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4430 (insert "\
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4431 -------------------------------------------------------------------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4432 -- Title : <title string>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4433 -- Project : <project string>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4434 -------------------------------------------------------------------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4435 -- File : <filename>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4436 -- Author : <author>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4437 -- Created : <date>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4438 -- Last modified : <date>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4439 -------------------------------------------------------------------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4440 -- Description :
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4441 -- <cursor>
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4442 -------------------------------------------------------------------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4443 -- Modification history :
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4444 -- <date> : created
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4445 -------------------------------------------------------------------------------
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4446
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4447 ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4448 (setq eot (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4449 (narrow-to-region (point-min) eot)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4450 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4451 (while (search-forward "<filename>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4452 (replace-match (buffer-name) t t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4453 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4454 (while (search-forward "<author>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4455 (replace-match "" t t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4456 (insert (user-full-name) " <" user-mail-address ">"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4457 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4458 ;; Replace <RCS> with $, so that RCS for the source is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4459 ;; not over-enthusiastic with replacements
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4460 (while (search-forward "<RCS>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4461 (replace-match "$" nil t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4462 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4463 (while (search-forward "<date>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4464 (replace-match "" t t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4465 (vhdl-insert-date))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4466 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4467 (let (string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4468 (while (re-search-forward "<\\(\\w*\\) string>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4469 (setq string (read-string (concat (match-string 1) ": ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4470 (replace-match string t t)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4471 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4472 (if (search-forward "<cursor>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4473 (replace-match "" t t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4474
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4475 (defun vhdl-if ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4476 "Insert an if statement template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4477 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4478 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4479 (vhdl-insert-keyword "IF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4480 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4481 (if (equal (vhdl-field "condition") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4482 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4483 (if vhdl-conditions-in-parenthesis (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4484 (vhdl-insert-keyword " THEN\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4485 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4486 (vhdl-insert-keyword "END IF;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4487 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4488 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4489 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4490
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4491 (defun vhdl-library ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4492 "Insert a library specification."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4493 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4494 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4495 (lib-name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4496 (vhdl-insert-keyword "LIBRARY ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4497 (if (equal (setq lib-name (vhdl-field "library name")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4498 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4499 (insert ";\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4500 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4501 (vhdl-insert-keyword "USE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4502 (insert lib-name)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4503 (vhdl-insert-keyword "..ALL;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4504 (backward-char 5)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4505 (if (equal (vhdl-field "package name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4506 (progn (vhdl-kill-entire-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4507 (end-of-line -0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4508 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4509 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4510
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4511 (defun vhdl-loop ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4512 "Insert a loop template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4513 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4514 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4515 (vhdl-insert-keyword " : LOOP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4516 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4517 (let* ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4518 (name (vhdl-field "[label]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4519 (named (not (string-equal name ""))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4520 (if (not named) (delete-char 3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4521 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4522 (insert "\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4523 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4524 (vhdl-insert-keyword "END LOOP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4525 (insert (if named (concat " " name ";") ?;))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4526 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4527 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4528 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4529
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4530 (defun vhdl-map ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4531 "Insert a map specification."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4532 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4533 (vhdl-insert-keyword "MAP (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4534 (if (equal (vhdl-field "[association list]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4535 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4536 (insert ")")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4537 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4538
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4539 (defun vhdl-modify ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4540 "Actualize modification date."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4541 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4542 (goto-char (point-min))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4543 (if (search-forward vhdl-modify-date-prefix-string nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4544 (progn (kill-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4545 (vhdl-insert-date))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4546 (message (concat "Modification date prefix string \""
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4547 vhdl-modify-date-prefix-string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4548 "\" not found!"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4549 (beep)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4550
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4551 (defun vhdl-next ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4552 "Inserts a next statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4553 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4554 (vhdl-insert-keyword "NEXT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4555 (if (string-equal (vhdl-field "[loop label]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4556 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4557 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4558 (vhdl-insert-keyword " WHEN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4559 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4560 (if (equal (vhdl-field "[condition]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4561 (progn (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4562 (kill-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4563 (if vhdl-conditions-in-parenthesis (insert ")"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4564 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4565 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4566
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4567 (defun vhdl-package ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4568 "Insert a package specification or body."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4569 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4570 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4571 (name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4572 (vhdl-insert-keyword "PACKAGE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4573 (if (y-or-n-p "body? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4574 (vhdl-insert-keyword "BODY "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4575 (setq name (vhdl-field "name" " is\n\n"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4576 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4577 (vhdl-insert-keyword "END ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4578 (insert name ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4579 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4580 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4581 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4582
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4583 (defun vhdl-port ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4584 "Insert a port declaration, or port map in instantiation statements."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4585 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4586 (vhdl-insert-keyword "PORT (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4587 (cond ((equal (car (car (cdr (vhdl-get-syntactic-context)))) 'entity)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4588 (vhdl-get-port nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4589 ((or (equal 'statement-cont (car (car (vhdl-get-syntactic-context))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4590 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4591 (and (backward-word 2) (skip-chars-backward " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4592 (eq (preceding-char) ?:))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4593 (delete-char -1) (vhdl-map))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4594 (t (vhdl-get-port nil t))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4595
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4596 (defun vhdl-procedure ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4597 "Insert a procedure specification or body template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4598 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4599 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4600 (name))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4601 (vhdl-insert-keyword "PROCEDURE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4602 (if (equal (setq name (vhdl-field "name")) "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4603 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4604 (vhdl-get-arg-list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4605 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4606 (if (y-or-n-p "insert body? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4607 (progn (vhdl-insert-keyword "IS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4608 (vhdl-begin-end (cons name margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4609 (vhdl-block-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4610 (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4611 (insert ";\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4612 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4613 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4614
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4615 (defun vhdl-process ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4616 "Insert a process template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4617 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4618 (let ((clocked))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4619 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4620 (vhdl-insert-keyword "PROCESS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4621 (setq clocked (y-or-n-p "clocked process? "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4622 (goto-char position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4623 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4624 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4625 (let* ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4626 (finalline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4627 (name (vhdl-field "[label]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4628 (named (not (string-equal name "")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4629 (clock) (reset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4630 (case-fold-search t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4631 (if (not named) (delete-char 3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4632 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4633 (insert " (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4634 (if (not clocked)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4635 (if (equal (vhdl-field "[sensitivity list]" ")") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4636 (delete-char -3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4637 (setq clock (vhdl-field "clock name" ", "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4638 (setq reset (vhdl-field "reset name" ")")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4639 (vhdl-begin-end (cons (concat (vhdl-case-keyword "PROCESS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4640 (if named (concat " " name))) margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4641 (if clocked (vhdl-clock-async-reset clock reset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4642 (if vhdl-prompt-for-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4643 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4644 (setq finalline (vhdl-current-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4645 (if (and (re-search-backward "\\<begin\\>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4646 (re-search-backward "\\<process\\>" nil t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4647 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4648 (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4649 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4650 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4651 (insert "-- purpose: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4652 (if (equal (vhdl-field "description") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4653 (vhdl-kill-entire-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4654 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4655 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4656 (insert "-- type: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4657 (insert (if clocked "memorizing" "memoryless") "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4658 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4659 (insert "-- inputs: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4660 (if clocked
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4661 (insert clock ", " reset ", "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4662 (if (and (equal (vhdl-field "signal names") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4663 clocked)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4664 (delete-char -2))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4665 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4666 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4667 (insert "-- outputs: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4668 (vhdl-field "signal names")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4669 (setq finalline (+ finalline 4)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4670 (goto-line finalline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4671 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4672 )))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4673
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4674 (defun vhdl-record ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4675 "Insert a record type declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4676 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4677 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4678 (start (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4679 (first t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4680 (vhdl-insert-keyword "RECORD\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4681 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4682 (if (equal (vhdl-field "identifiers") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4683 (progn (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4684 (delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4685 (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4686 (while (or first (not (equal (vhdl-field "[identifiers]") "")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4687 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4688 (vhdl-field "type" ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4689 (vhdl-declaration-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4690 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4691 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4692 (setq first nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4693 (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4694 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4695 (vhdl-insert-keyword "END RECORD;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4696 (if vhdl-auto-align (vhdl-align start (point) 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4697 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4698
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4699 (defun vhdl-return-value ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4700 "Insert a return statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4701 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4702 (vhdl-insert-keyword "RETURN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4703 (if (equal (vhdl-field "[expression]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4704 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4705 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4706 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4707
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4708 (defun vhdl-selected-signal-assignment ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4709 "Insert a selected signal assignment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4710 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4711 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4712 (start (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4713 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4714 (vhdl-insert-keyword " SELECT")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4715 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4716 (vhdl-insert-keyword "WITH ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4717 (if (equal (vhdl-field "selector expression") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4718 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4719 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4720 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4721 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4722 (vhdl-field "target signal" " <= ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4723 ; (vhdl-field "[GUARDED] [TRANSPORT]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4724 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4725 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4726 (while (not (equal (vhdl-field "[waveform]") ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4727 (vhdl-insert-keyword " WHEN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4728 (vhdl-field "choices" ",")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4729 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4730 (indent-to (+ margin vhdl-basic-offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4731 (if (not (equal (vhdl-field "[alternative waveform]") ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4732 (vhdl-insert-keyword " WHEN OTHERS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4733 (fixup-whitespace)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4734 (delete-char -2))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4735 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4736 (if vhdl-auto-align (vhdl-align start (point) 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4737 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4738
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4739 (defun vhdl-signal ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4740 "Insert a signal declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4741 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4742 (vhdl-insert-keyword "SIGNAL ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4743 (let ((in-arglist (string-match "arglist"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4744 (format "%s" (car (car (vhdl-get-syntactic-context)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4745 (if (not in-arglist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4746 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4747 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4748 (setq in-arglist (looking-at ".*("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4749 (goto-char opoint)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4750 (if (equal (vhdl-field "names") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4751 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4752 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4753 (if in-arglist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4754 (progn (vhdl-field "direction")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4755 (insert " ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4756 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4757 (if in-arglist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4758 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4759 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4760 (insert " := ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4761 (if (equal (vhdl-field "[initialization]" ";") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4762 (progn (goto-char position) (kill-line) (insert ";")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4763 (vhdl-declaration-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4764 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4765
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4766 (defun vhdl-subtype ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4767 "Insert a subtype declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4768 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4769 (vhdl-insert-keyword "SUBTYPE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4770 (if (equal (vhdl-field "name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4771 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4772 (vhdl-insert-keyword " IS ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4773 (vhdl-field "type" " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4774 (if (equal (vhdl-field "[RANGE value range | ( index range )]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4775 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4776 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4777 (vhdl-declaration-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4778 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4779
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4780 (defun vhdl-type ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4781 "Insert a type declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4782 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4783 (vhdl-insert-keyword "TYPE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4784 (if (equal (vhdl-field "name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4785 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4786 (vhdl-insert-keyword " IS ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4787 (let ((definition (upcase (vhdl-field "(scalar type | ARRAY | RECORD | ACCESS | FILE)"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4788 (cond ((equal definition "ARRAY")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4789 (kill-word -1) (vhdl-array))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4790 ((equal definition "RECORD")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4791 (kill-word -1) (vhdl-record))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4792 ((equal definition "ACCESS")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4793 (insert " ") (vhdl-field "type" ";"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4794 ((equal definition "FILE")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4795 (vhdl-insert-keyword " OF ") (vhdl-field "type" ";"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4796 (t (insert ";")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4797 (vhdl-declaration-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4798 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4799
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4800 (defun vhdl-use ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4801 "Insert a use clause."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4802 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4803 (vhdl-insert-keyword "USE ..ALL;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4804 (backward-char 6)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4805 (if (equal (vhdl-field "library name") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4806 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4807 (forward-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4808 (vhdl-field "package name")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4809 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4810 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4811
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4812 (defun vhdl-variable ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4813 "Insert a variable declaration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4814 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4815 (vhdl-insert-keyword "VARIABLE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4816 (let ((in-arglist (string-match "arglist"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4817 (format "%s" (car (car (vhdl-get-syntactic-context)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4818 (if (not in-arglist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4819 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4820 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4821 (setq in-arglist (looking-at ".*("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4822 (goto-char opoint)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4823 (if (equal (vhdl-field "names") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4824 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4825 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4826 (if in-arglist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4827 (progn (vhdl-field "direction")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4828 (insert " ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4829 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4830 (if in-arglist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4831 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4832 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4833 (insert " := ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4834 (if (equal (vhdl-field "[initialization]" ";") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4835 (progn (goto-char position) (kill-line) (insert ";")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4836 (vhdl-declaration-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4837 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4838
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4839 (defun vhdl-wait ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4840 "Insert a wait statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4841 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4842 (vhdl-insert-keyword "WAIT ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4843 (if (equal (vhdl-field
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4844 "[ON sensitivity list] [UNTIL condition] [FOR time expression]")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4845 "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4846 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4847 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4848 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4849
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4850 (defun vhdl-when ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4851 "Indent correctly if within a case statement."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4852 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4853 (let ((position (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4854 (margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4855 (if (and (re-search-forward "\\<end\\>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4856 (looking-at "\\s-*\\<case\\>"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4857 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4858 (setq margin (current-indentation))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4859 (goto-char position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4860 (delete-horizontal-space)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4861 (indent-to (+ margin vhdl-basic-offset)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4862 (goto-char position)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4863 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4864 (vhdl-insert-keyword "WHEN ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4865 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4866
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4867 (defun vhdl-while-loop ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4868 "Insert a while loop template."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4869 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4870 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4871 (vhdl-insert-keyword " : WHILE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4872 (goto-char position))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4873 (let* ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4874 (name (vhdl-field "[label]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4875 (named (not (string-equal name ""))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4876 (if (not named) (delete-char 3))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4877 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4878 (if vhdl-conditions-in-parenthesis (insert "("))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4879 (if (equal (vhdl-field "condition") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4880 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4881 (if vhdl-conditions-in-parenthesis (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4882 (vhdl-insert-keyword " LOOP\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4883 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4884 (vhdl-insert-keyword "END LOOP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4885 (insert (if named (concat " " name ";") ?;))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4886 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4887 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4888 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4889
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4890 (defun vhdl-with ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4891 "Insert a with statement (i.e. selected signal assignment)."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4892 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4893 (vhdl-selected-signal-assignment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4894 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4895
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4896 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4897 ;; Custom functions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4898
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4899 (defun vhdl-clocked-wait ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4900 "Insert a wait statement for rising clock edge."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4901 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4902 (vhdl-insert-keyword "WAIT UNTIL ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4903 (let* ((clock (vhdl-field "clock name")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4904 (insert "'event")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4905 (vhdl-insert-keyword " AND ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4906 (insert clock)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4907 (insert " = " vhdl-one-string ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4908 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4909
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4910 (defun vhdl-clock-async-reset (clock reset)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4911 "Insert a template reacting on asynchronous reset and rising clock edge
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4912 for inside a memorizing processes."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4913 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4914 (let* ( (margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4915 (opoint))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4916 (if vhdl-self-insert-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4917 (insert "-- activities triggered by asynchronous reset (active low)\n"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4918 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4919 (vhdl-insert-keyword "IF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4920 (insert reset " = " vhdl-zero-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4921 (vhdl-insert-keyword " THEN\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4922 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4923 (setq opoint (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4924 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4925 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4926 (if vhdl-self-insert-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4927 (insert "-- activities triggered by rising edge of clock\n"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4928 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4929 (vhdl-insert-keyword "ELSIF ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4930 (insert clock "'event")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4931 (vhdl-insert-keyword " AND ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4932 (insert clock " = " vhdl-one-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4933 (vhdl-insert-keyword " THEN\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4934 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4935 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4936 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4937 (vhdl-insert-keyword "END IF;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4938 ; (if vhdl-self-insert-comments (insert " -- " clock))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4939 (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4940 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4941
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4942 (defun vhdl-standard-package (library package)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4943 "Insert specification of a standard package."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4944 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4945 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4946 (vhdl-insert-keyword "LIBRARY ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4947 (insert library ";\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4948 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4949 (vhdl-insert-keyword "USE ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4950 (insert library "." package)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4951 (vhdl-insert-keyword ".ALL;")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4952 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4953
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4954 (defun vhdl-package-numeric-bit ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4955 "Insert specification of 'numeric_bit' package."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4956 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4957 (vhdl-standard-package "ieee" "numeric_bit"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4958
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4959 (defun vhdl-package-numeric-std ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4960 "Insert specification of 'numeric_std' package."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4961 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4962 (vhdl-standard-package "ieee" "numeric_std"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4963
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4964 (defun vhdl-package-std-logic-1164 ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4965 "Insert specification of 'std_logic_1164' package."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4966 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4967 (vhdl-standard-package "ieee" "std_logic_1164"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4968
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4969 (defun vhdl-package-textio ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4970 "Insert specification of 'textio' package."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4971 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4972 (vhdl-standard-package "std" "textio"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4973
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4974 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4975 ;; Comment functions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4976
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4977 (defun vhdl-comment-indent ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4978 (let* ((opoint (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4979 (col (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4980 (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4981 (if (re-search-forward "--" opoint t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4982 (- (current-column) 2) ;Existing comment at bol stays there.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4983 (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4984 (skip-chars-backward " \t")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4985 (max comment-column ;else indent to comment column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4986 (1+ (current-column))) ;except leave at least one space.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4987 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4988 (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4989 col
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4990 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4991
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4992 (defun vhdl-inline-comment ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4993 "Start a comment at the end of the line.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4994 if on line with code, indent at least comment-column.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4995 if starting after end-comment-column, start a new line."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4996 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4997 (if (> (current-column) end-comment-column) (newline-and-indent))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4998 (if (or (looking-at "\\s-*$") ;end of line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4999 (and (not unread-command-events) ; called with key binding or menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5000 (not (end-of-line))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5001 (let ((margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5002 (while (= (preceding-char) ?-) (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5003 (setq margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5004 (delete-horizontal-space)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5005 (if (bolp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5006 (progn (indent-to margin) (insert "--"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5007 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5008 (indent-to comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5009 (insert "--"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5010 (if (not unread-command-events) (insert " ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5011 ; else code following current point implies commenting out code
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5012 (let (next-input code)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5013 (while (= (preceding-char) ?-) (delete-char -2))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5014 (while (= (setq next-input (read-char)) 13) ; CR
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5015 (insert "--"); or have a space after it?
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5016 (forward-char -2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5017 (forward-line 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5018 (message "Enter CR if commenting out a line of code.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5019 (setq code t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5020 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5021 (if (not code) (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5022 ; (indent-to comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5023 (insert "--") ;hardwire to 1 space or use vhdl-basic-offset?
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5024 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5025 (setq unread-command-events
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5026 (list (vhdl-character-to-event-hack next-input))) ;pushback the char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5027 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5028
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5029 (defun vhdl-display-comment (&optional line-exists)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5030 "Add 2 comment lines at the current indent, making a display comment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5031 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5032 (if (not line-exists)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5033 (vhdl-display-comment-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5034 (let* ((col (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5035 (len (- end-comment-column col)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5036 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5037 (insert-char ? col)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5038 (insert-char ?- len)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5039 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5040 (insert-char ? col)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5041 (end-of-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5042 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5043 (insert "-- ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5044 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5045
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5046 (defun vhdl-display-comment-line ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5047 "Displays one line of dashes."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5048 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5049 (while (= (preceding-char) ?-) (delete-char -2))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5050 (let* ((col (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5051 (len (- end-comment-column col)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5052 (insert-char ?- len)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5053 (insert-char ?\n 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5054 (insert-char ? col)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5055 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5056
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5057 (defun vhdl-declaration-comment ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5058 (if vhdl-prompt-for-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5059 (let ((position (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5060 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5061 (indent-to comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5062 (insert "-- ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5063 (if (equal (vhdl-field "comment") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5064 (progn (goto-char position) (kill-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5065 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5066
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5067 (defun vhdl-block-comment ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5068 (if vhdl-prompt-for-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5069 (let ((finalline (vhdl-current-line))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5070 (case-fold-search t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5071 (beginning-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5072 (if (re-search-backward "\\<\\(architecture\\|block\\|function\\|procedure\\|process\\)\\>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5073 (let ((margin))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5074 (back-to-indentation)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5075 (setq margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5076 (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5077 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5078 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5079 (insert "-- purpose: ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5080 (if (equal (vhdl-field "description") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5081 (vhdl-kill-entire-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5082 (setq finalline (+ finalline 1)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5083 (goto-line finalline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5084 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5085 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5086
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5087 (defun vhdl-comment-uncomment-region (beg end &optional arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5088 "Comment out region if not commented out, uncomment out region if already
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5089 commented out."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5090 (interactive "r\nP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5091 (goto-char beg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5092 (if (looking-at comment-start)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5093 (comment-region beg end -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5094 (comment-region beg end)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5095 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5096
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5097 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5098 ;; Help functions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5099
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5100 (defun vhdl-outer-space (count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5101 "Expand abbreviations and self-insert space(s), do indent-new-comment-line
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5102 if in comment and past end-comment-column."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5103 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5104 (if (or (and (>= (preceding-char) ?a) (<= (preceding-char) ?z))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5105 (and (>= (preceding-char) ?A) (<= (preceding-char) ?Z)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5106 (expand-abbrev))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5107 (if (not (vhdl-in-comment-p))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5108 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5109 (if (< (current-column) end-comment-column)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5110 (self-insert-command count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5111 (while (> (current-column) end-comment-column) (forward-word -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5112 (while (> (preceding-char) ? ) (forward-word -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5113 (delete-horizontal-space)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5114 (indent-new-comment-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5115 (end-of-line nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5116 (insert-char ? count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5117 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5118
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5119 (defun vhdl-field (prompt &optional following-string)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5120 "Prompt for string and insert it in buffer with optional following-string."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5121 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5122 (insert "<" prompt ">")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5123 (let ((string (read-from-minibuffer (concat prompt ": ") ""
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5124 vhdl-minibuffer-local-map)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5125 (delete-region opoint (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5126 (insert string (or following-string ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5127 (if vhdl-upper-case-keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5128 (vhdl-fix-case-region-1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5129 opoint (point) t vhdl-93-keywords-regexp))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5130 string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5131 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5132
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5133 (defun vhdl-in-comment-p ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5134 "Check if point is to right of beginning comment delimiter."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5135 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5136 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5137 (save-excursion ; finds an unquoted comment
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5138 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5139 (re-search-forward "^\\([^\"]*\"[^\"]*\"\\)*[^\"]*--" opoint t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5140 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5141
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5142 (defun vhdl-in-string-p ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5143 "Check if point is in a string."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5144 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5145 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5146 (save-excursion ; preceeded by odd number of string delimiters?
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5147 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5148 (equal
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5149 opoint
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5150 (re-search-forward "^\\([^\"]*\"[^\"]*\"\\)*[^\"]*\"[^\"]*" opoint t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5151 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5152
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5153 (defun vhdl-begin-end (list)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5154 "Insert a begin ... end pair with optional name after the end.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5155 Point is left between them."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5156 (let ((return)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5157 (name (car list))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5158 (margin (cdr list)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5159 (if vhdl-additional-empty-lines
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5160 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5161 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5162 (indent-to (+ margin vhdl-basic-offset))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5163 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5164 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5165 (vhdl-insert-keyword "BEGIN")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5166 (if vhdl-self-insert-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5167 (insert (and name (concat " -- " name))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5168 (insert "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5169 (indent-to (+ margin vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5170 (setq return (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5171 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5172 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5173 (vhdl-insert-keyword "END")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5174 (insert (and name (concat " " name)) ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5175 (goto-char return)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5176 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5177
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5178 (defun vhdl-get-arg-list ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5179 "Read from user a procedure or function argument list."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5180 (insert " (")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5181 (let ((margin (current-column)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5182 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5183 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5184 (back-to-indentation)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5185 (setq margin (+ (current-column) vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5186 (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5187 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5188 (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5189 (let (not-empty interface)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5190 (setq interface (vhdl-field "[CONSTANT] [SIGNAL] [VARIABLE]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5191 (if (not (equal interface ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5192 (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5193 (while (not (string-equal (vhdl-field "[names]") ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5194 (setq not-empty t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5195 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5196 (if (not (equal (vhdl-field "[direction]") ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5197 (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5198 (vhdl-field "type" ";\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5199 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5200 (setq interface (vhdl-field "[CONSTANT] [SIGNAL] [VARIABLE]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5201 (if (not (equal interface ""))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5202 (insert " ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5203 (if not-empty
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5204 (progn (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5205 (delete-char -2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5206 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5207 (progn (insert "\n") (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5208 (insert ")"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5209 (if vhdl-argument-list-indent
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5210 (backward-delete-char 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5211 (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5212 (backward-delete-char 3)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5213 ; (while (string-match "[,;]$" args)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5214 ; (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5215 ; (indent-to margin) (setq args (vhdl-field "next argument")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5216 ; (insert 41) ;close-paren
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5217 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5218
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5219 (defun vhdl-get-port (optional &optional no-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5220 "Read from user a port spec argument list."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5221 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5222 (start (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5223 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5224 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5225 (back-to-indentation)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5226 (setq margin (+ (current-column) vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5227 (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5228 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5229 (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5230 (let ((vhdl-ports (vhdl-field "[names]")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5231 (if (string-equal vhdl-ports "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5232 (if optional
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5233 (progn (vhdl-kill-entire-line) (forward-line -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5234 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5235 (progn (vhdl-kill-entire-line) (forward-line -1))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5236 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5237 nil )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5238 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5239 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5240 (let ((semicolon-pos))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5241 (while (not (string-equal "" vhdl-ports))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5242 (vhdl-field "direction")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5243 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5244 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5245 (setq semicolon-pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5246 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5247 (if (not no-comment)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5248 (vhdl-declaration-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5249 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5250 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5251 (setq vhdl-ports (vhdl-field "[names]" " : ")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5252 (goto-char semicolon-pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5253 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5254 (progn (insert "\n") (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5255 (insert ")")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5256 (forward-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5257 (if (= (following-char) ? )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5258 (delete-char 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5259 (forward-line 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5260 (vhdl-kill-entire-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5261 (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5262 (if vhdl-auto-align (vhdl-align start (point) 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5263 t))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5264
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5265 (defun vhdl-get-generic (optional &optional no-value )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5266 "Read from user a generic spec argument list."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5267 (let ((margin (current-column))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5268 (start (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5269 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5270 (let ((opoint (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5271 (back-to-indentation)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5272 (setq margin (+ (current-column) vhdl-basic-offset))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5273 (goto-char opoint)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5274 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5275 (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5276 (let ((vhdl-generic))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5277 (if no-value
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5278 (setq vhdl-generic (vhdl-field "[names]"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5279 (setq vhdl-generic (vhdl-field "[name]")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5280 (if (string-equal vhdl-generic "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5281 (if optional
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5282 (progn (vhdl-kill-entire-line) (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5283 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5284 (progn (vhdl-kill-entire-line) (end-of-line -0))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5285 (progn (undo 0) (insert " "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5286 nil )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5287 (insert " : ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5288 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5289 (let ((semicolon-pos))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5290 (while (not(string-equal "" vhdl-generic))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5291 (vhdl-field "type")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5292 (if no-value
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5293 (progn (setq semicolon-pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5294 (insert ";"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5295 (insert " := ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5296 (if (equal (vhdl-field "[value]") "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5297 (delete-char -4))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5298 (setq semicolon-pos (point))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5299 (insert ";")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5300 (vhdl-declaration-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5301 (newline)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5302 (indent-to margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5303 (if no-value
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5304 (setq vhdl-generic (vhdl-field "[names]" " : "))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5305 (setq vhdl-generic (vhdl-field "[name]" " : "))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5306 (goto-char semicolon-pos)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5307 (if (not vhdl-argument-list-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5308 (progn (insert "\n") (indent-to margin)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5309 (insert ")")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5310 (forward-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5311 (if (= (following-char) ? )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5312 (delete-char 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5313 (forward-line 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5314 (vhdl-kill-entire-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5315 (end-of-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5316 (if vhdl-auto-align (vhdl-align start (point) 1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5317 t))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5318
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5319 (defun vhdl-insert-date ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5320 "Insert date in appropriate format."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5321 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5322 (insert
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5323 (cond
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5324 ((eq vhdl-date-format 'american) (format-time-string "%m/%d/%Y" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5325 ((eq vhdl-date-format 'european) (format-time-string "%d.%m.%Y" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5326 ((eq vhdl-date-format 'scientific) (format-time-string "%Y/%m/%d" nil))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5327 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5328
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5329 (defun vhdl-insert-keyword (keyword)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5330 (insert (if vhdl-upper-case-keywords (upcase keyword) (downcase keyword)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5331 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5332
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5333 (defun vhdl-case-keyword (keyword)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5334 (if vhdl-upper-case-keywords (upcase keyword) (downcase keyword))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5335 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5336
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5337 (defun vhdl-case-word (num)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5338 (if vhdl-upper-case-keywords (upcase-word num) (downcase-word num))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5339 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5340
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5341 (defun vhdl-fix-case-region-1 (beg end upper-case word-regexp &optional count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5342 "Convert all words matching word-regexp in region to lower or upper case,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5343 depending on parameter upper-case."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5344 (let ((case-fold-search t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5345 (case-replace nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5346 (busy-counter 0))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5347 (modify-syntax-entry ?_ "w" vhdl-mode-syntax-table)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5348 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5349 (goto-char beg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5350 (while (re-search-forward word-regexp end t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5351 (or (vhdl-in-comment-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5352 (vhdl-in-string-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5353 (if upper-case
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5354 (upcase-word -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5355 (downcase-word -1)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5356 (if (and count
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5357 (/= busy-counter (setq busy-counter
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5358 (+ (* count 25) (/ (* 25 (- (point) beg)) (- end beg))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5359 (message (format "Fixing case ... (%2d%s)" busy-counter "%%"))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5360 (goto-char end))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5361 (if (not vhdl-underscore-is-part-of-word)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5362 (modify-syntax-entry ?_ "_" vhdl-mode-syntax-table))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5363 (message "")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5364 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5365
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5366 (defun vhdl-fix-case-region (beg end &optional arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5367 "Convert all VHDL words in region to lower or upper case, depending on
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5368 variables vhdl-upper-case-{keywords,types,attributes,enum-values}."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5369 (interactive "r\nP")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5370 (vhdl-fix-case-region-1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5371 beg end vhdl-upper-case-keywords vhdl-93-keywords-regexp 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5372 (vhdl-fix-case-region-1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5373 beg end vhdl-upper-case-types vhdl-93-types-regexp 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5374 (vhdl-fix-case-region-1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5375 beg end vhdl-upper-case-attributes vhdl-93-attributes-regexp 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5376 (vhdl-fix-case-region-1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5377 beg end vhdl-upper-case-enum-values vhdl-93-enum-values-regexp 3)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5378 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5379
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5380 (defun vhdl-fix-case-buffer ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5381 "Convert all VHDL words in buffer to lower or upper case, depending on
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5382 variables vhdl-upper-case-{keywords,types,attributes,enum-values}."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5383 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5384 (vhdl-fix-case-region (point-min) (point-max))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5385 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5386
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5387 (defun vhdl-minibuffer-tab (&optional prefix-arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5388 "If preceeding character is part of a word then dabbrev-expand,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5389 else if right of non whitespace on line then tab-to-tab-stop,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5390 else indent line in proper way for current major mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5391 (used for word completion in VHDL minibuffer)."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5392 (interactive "P")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5393 (cond ((= (char-syntax (preceding-char)) ?w)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5394 (let ((case-fold-search nil)) (dabbrev-expand prefix-arg)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5395 ((> (current-column) (current-indentation))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5396 (tab-to-tab-stop))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5397 (t
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5398 (if (eq indent-line-function 'indent-to-left-margin)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5399 (insert-tab prefix-arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5400 (if prefix-arg
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5401 (funcall indent-line-function prefix-arg)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5402 (funcall indent-line-function))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5403
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5404 (defun vhdl-help ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5405 "Display help information in '*Help*' buffer ."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5406 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5407 (with-output-to-temp-buffer "*Help*"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5408 (princ mode-name)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5409 (princ " mode:\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5410 (princ (documentation major-mode))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5411 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5412 (set-buffer standard-output)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5413 (help-mode))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5414 (print-help-return-message)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5415
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5416 (defun vhdl-current-line ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5417 "Return the line number of the line containing point."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5418 (save-restriction
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5419 (widen)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5420 (save-excursion
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5421 (beginning-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5422 (1+ (count-lines 1 (point)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5423 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5424
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5425 (defun vhdl-kill-entire-line ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5426 "Delete entire line."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5427 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5428 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5429 (kill-line -0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5430 (delete-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5431 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5432
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5433 (defun vhdl-open-line ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5434 "Open a new line and indent."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5435 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5436 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5437 (newline-and-indent)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5438 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5439
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5440 (defun vhdl-kill-line ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5441 "Kill current line."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5442 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5443 (vhdl-kill-entire-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5444 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5445
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5446 (defun vhdl-character-to-event-hack (char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5447 (if (memq 'XEmacs vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5448 (character-to-event char)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5449 char))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5450
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5451 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5452 ;; Abbrev hooks
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5453
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5454 (defun vhdl-electric-mode ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5455 "Toggle VHDL Electric mode."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5456 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5457 (setq vhdl-electric-mode (not vhdl-electric-mode))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5458 (setq mode-name (if vhdl-electric-mode "Electric VHDL" "VHDL"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5459 (force-mode-line-update)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5460 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5461
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5462 (defun vhdl-stutter-mode ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5463 "Toggle VHDL Stuttering mode."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5464 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5465 (setq vhdl-stutter-mode (not vhdl-stutter-mode))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5466 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5467
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5468 (defun vhdl-hooked-abbrev (fun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5469 "Do function, if syntax says abbrev is a keyword, invoked by hooked abbrev,
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5470 but not if inside a comment or quote)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5471 (if (or (vhdl-in-comment-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5472 (vhdl-in-string-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5473 (save-excursion (forward-word -1) (looking-at "end")))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5474 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5475 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5476 (unexpand-abbrev)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5477 (delete-char -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5478 (if (not vhdl-electric-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5479 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5480 (insert " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5481 (unexpand-abbrev)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5482 (backward-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5483 (vhdl-case-word 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5484 (delete-char 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5485 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5486 (let ((invoke-char last-command-char) (abbrev-mode -1))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5487 (funcall fun)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5488 (if (= invoke-char ?-) (setq abbrev-start-location (point)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5489 ;; delete CR which is still in event queue
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5490 (if (memq 'XEmacs vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5491 (enqueue-eval-event 'delete-char -1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5492 (setq unread-command-events ; push back a delete char
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5493 (list (vhdl-character-to-event-hack ?\177))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5494 ))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5495
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5496 (defun vhdl-alias-hook () "hooked version of vhdl-alias."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5497 (vhdl-hooked-abbrev 'vhdl-alias))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5498 (defun vhdl-architecture-hook () "hooked version of vhdl-architecture."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5499 (vhdl-hooked-abbrev 'vhdl-architecture))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5500 (defun vhdl-array-hook () "hooked version of vhdl-array."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5501 (vhdl-hooked-abbrev 'vhdl-array))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5502 (defun vhdl-assert-hook () "hooked version of vhdl-assert."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5503 (vhdl-hooked-abbrev 'vhdl-assert))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5504 (defun vhdl-attribute-hook () "hooked version of vhdl-attribute."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5505 (vhdl-hooked-abbrev 'vhdl-attribute))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5506 (defun vhdl-block-hook () "hooked version of vhdl-block."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5507 (vhdl-hooked-abbrev 'vhdl-block))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5508 (defun vhdl-case-hook () "hooked version of vhdl-case."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5509 (vhdl-hooked-abbrev 'vhdl-case))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5510 (defun vhdl-component-hook () "hooked version of vhdl-component."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5511 (vhdl-hooked-abbrev 'vhdl-component))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5512 (defun vhdl-component-instance-hook ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5513 "hooked version of vhdl-component-instance."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5514 (vhdl-hooked-abbrev 'vhdl-component-instance))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5515 (defun vhdl-concurrent-signal-assignment-hook ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5516 "hooked version of vhdl-concurrent-signal-assignment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5517 (vhdl-hooked-abbrev 'vhdl-concurrent-signal-assignment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5518 (defun vhdl-configuration-hook ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5519 "hooked version of vhdl-configuration."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5520 (vhdl-hooked-abbrev 'vhdl-configuration))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5521 (defun vhdl-constant-hook () "hooked version of vhdl-constant."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5522 (vhdl-hooked-abbrev 'vhdl-constant))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5523 (defun vhdl-disconnect-hook () "hooked version of vhdl-disconnect."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5524 (vhdl-hooked-abbrev 'vhdl-disconnect))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5525 (defun vhdl-display-comment-hook () "hooked version of vhdl-display-comment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5526 (vhdl-hooked-abbrev 'vhdl-display-comment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5527 (defun vhdl-else-hook () "hooked version of vhdl-else."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5528 (vhdl-hooked-abbrev 'vhdl-else))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5529 (defun vhdl-elsif-hook () "hooked version of vhdl-elsif."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5530 (vhdl-hooked-abbrev 'vhdl-elsif))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5531 (defun vhdl-entity-hook () "hooked version of vhdl-entity."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5532 (vhdl-hooked-abbrev 'vhdl-entity))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5533 (defun vhdl-exit-hook () "hooked version of vhdl-exit."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5534 (vhdl-hooked-abbrev 'vhdl-exit))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5535 (defun vhdl-for-hook () "hooked version of vhdl-for."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5536 (vhdl-hooked-abbrev 'vhdl-for))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5537 (defun vhdl-function-hook () "hooked version of vhdl-function."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5538 (vhdl-hooked-abbrev 'vhdl-function))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5539 (defun vhdl-generate-hook () "hooked version of vhdl-generate."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5540 (vhdl-hooked-abbrev 'vhdl-generate))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5541 (defun vhdl-generic-hook () "hooked version of vhdl-generic."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5542 (vhdl-hooked-abbrev 'vhdl-generic))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5543 (defun vhdl-library-hook () "hooked version of vhdl-library."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5544 (vhdl-hooked-abbrev 'vhdl-library))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5545 (defun vhdl-header-hook () "hooked version of vhdl-header."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5546 (vhdl-hooked-abbrev 'vhdl-header))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5547 (defun vhdl-if-hook () "hooked version of vhdl-if."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5548 (vhdl-hooked-abbrev 'vhdl-if))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5549 (defun vhdl-loop-hook () "hooked version of vhdl-loop."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5550 (vhdl-hooked-abbrev 'vhdl-loop))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5551 (defun vhdl-map-hook () "hooked version of vhdl-map."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5552 (vhdl-hooked-abbrev 'vhdl-map))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5553 (defun vhdl-modify-hook () "hooked version of vhdl-modify."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5554 (vhdl-hooked-abbrev 'vhdl-modify))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5555 (defun vhdl-next-hook () "hooked version of vhdl-next."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5556 (vhdl-hooked-abbrev 'vhdl-next))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5557 (defun vhdl-package-hook () "hooked version of vhdl-package."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5558 (vhdl-hooked-abbrev 'vhdl-package))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5559 (defun vhdl-port-hook () "hooked version of vhdl-port."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5560 (vhdl-hooked-abbrev 'vhdl-port))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5561 (defun vhdl-procedure-hook () "hooked version of vhdl-procedure."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5562 (vhdl-hooked-abbrev 'vhdl-procedure))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5563 (defun vhdl-process-hook () "hooked version of vhdl-process."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5564 (vhdl-hooked-abbrev 'vhdl-process))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5565 (defun vhdl-record-hook () "hooked version of vhdl-record."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5566 (vhdl-hooked-abbrev 'vhdl-record))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5567 (defun vhdl-return-hook () "hooked version of vhdl-return-value."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5568 (vhdl-hooked-abbrev 'vhdl-return-value))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5569 (defun vhdl-selected-signal-assignment-hook ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5570 "hooked version of vhdl-selected-signal-assignment."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5571 (vhdl-hooked-abbrev 'vhdl-selected-signal-assignment))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5572 (defun vhdl-signal-hook () "hooked version of vhdl-signal."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5573 (vhdl-hooked-abbrev 'vhdl-signal))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5574 (defun vhdl-subtype-hook () "hooked version of vhdl-subtype."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5575 (vhdl-hooked-abbrev 'vhdl-subtype))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5576 (defun vhdl-type-hook () "hooked version of vhdl-type."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5577 (vhdl-hooked-abbrev 'vhdl-type))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5578 (defun vhdl-use-hook () "hooked version of vhdl-use."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5579 (vhdl-hooked-abbrev 'vhdl-use))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5580 (defun vhdl-variable-hook () "hooked version of vhdl-variable."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5581 (vhdl-hooked-abbrev 'vhdl-variable))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5582 (defun vhdl-wait-hook () "hooked version of vhdl-wait."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5583 (vhdl-hooked-abbrev 'vhdl-wait))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5584 (defun vhdl-when-hook () "hooked version of vhdl-when."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5585 (vhdl-hooked-abbrev 'vhdl-when))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5586 (defun vhdl-while-loop-hook () "hooked version of vhdl-while-loop."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5587 (vhdl-hooked-abbrev 'vhdl-while-loop))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5588 (defun vhdl-and-hook () "hooked version of vhdl-and."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5589 (vhdl-hooked-abbrev 'vhdl-and))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5590 (defun vhdl-or-hook () "hooked version of vhdl-or."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5591 (vhdl-hooked-abbrev 'vhdl-or))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5592 (defun vhdl-nand-hook () "hooked version of vhdl-nand."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5593 (vhdl-hooked-abbrev 'vhdl-nand))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5594 (defun vhdl-nor-hook () "hooked version of vhdl-nor."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5595 (vhdl-hooked-abbrev 'vhdl-nor))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5596 (defun vhdl-xor-hook () "hooked version of vhdl-xor."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5597 (vhdl-hooked-abbrev 'vhdl-xor))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5598 (defun vhdl-xnor-hook () "hooked version of vhdl-xnor."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5599 (vhdl-hooked-abbrev 'vhdl-xnor))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5600 (defun vhdl-not-hook () "hooked version of vhdl-not."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5601 (vhdl-hooked-abbrev 'vhdl-not))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5602
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5603 (defun vhdl-default-hook () "hooked version of vhdl-default."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5604 (vhdl-hooked-abbrev 'vhdl-default))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5605 (defun vhdl-default-indent-hook () "hooked version of vhdl-default-indent."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5606 (vhdl-hooked-abbrev 'vhdl-default-indent))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5607
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5608
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5609 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5610 ;; Font locking
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5611 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5612 ;; (using `font-lock.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5613
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5614 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5615 ;; Syntax definitions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5616
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5617 (defvar vhdl-font-lock-keywords nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5618 "Regular expressions to highlight in VHDL Mode.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5619
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5620 (defconst vhdl-font-lock-keywords-0
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5621 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5622 ;; highlight template prompts
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5623 '("\\(^\\|[ (.\t]\\)\\(<[^ =].*[^ =]>\\)\\([ .]\\|$\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5624 2 vhdl-font-lock-prompt-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5625
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5626 ;; highlight character literals
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5627 '("'\\(.\\)'" 1 'font-lock-string-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5628 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5629 "For consideration as a value of `vhdl-font-lock-keywords'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5630 This does highlighting of template prompts and character literals.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5631
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5632 (defconst vhdl-font-lock-keywords-1
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5633 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5634 ;; highlight names of units, subprograms, and components when declared
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5635 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5636 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5637 "^\\s-*\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5638 "architecture\\|configuration\\|entity\\|package\\(\\s-+body\\|\\)\\|"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5639 "function\\|procedure\\|component"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5640 "\\)\\s-+\\(\\w+\\)")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5641 3 'font-lock-function-name-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5642
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5643 ;; highlight labels of common constructs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5644 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5645 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5646 "^\\s-*\\(\\w+\\)\\s-*:\\(\\s-\\|\n\\)*\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5647 "assert\\|block\\|case\\|exit\\|for\\|if\\|loop\\|"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5648 "next\\|null\\|process\\| with\\|while\\|"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5649 "\\w+\\(\\s-\\|\n\\)+\\(generic\\|port\\)\\s-+map"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5650 "\\)\\>")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5651 1 'font-lock-function-name-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5652
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5653 ;; highlight entity names of architectures and configurations
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5654 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5655 "^\\s-*\\(architecture\\|configuration\\)\\s-+\\w+\\s-+of\\s-+\\(\\w+\\)"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5656 2 'font-lock-function-name-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5657
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5658 ;; highlight names and labels at end of constructs
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5659 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5660 (concat
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5661 "^\\s-*end\\s-+\\("
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5662 "\\(block\\|case\\|component\\|for\\|generate\\|if\\|loop\\|"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5663 "process\\|record\\|units\\)\\>\\|"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5664 "\\)\\s-*\\(\\w*\\)")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5665 3 'font-lock-function-name-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5666 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5667 "For consideration as a value of `vhdl-font-lock-keywords'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5668 This does highlighting of names and labels.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5669
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5670 (defconst vhdl-font-lock-keywords-2
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5671 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5672 ;; highlight keywords, and types, standardized attributes, enumeration values
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5673 (list (concat "'" vhdl-93-attributes-regexp)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5674 1 'vhdl-font-lock-attribute-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5675 (list vhdl-93-types-regexp 1 'font-lock-type-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5676 (list vhdl-93-enum-values-regexp 1 'vhdl-font-lock-value-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5677 (list vhdl-93-keywords-regexp 1 'font-lock-keyword-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5678 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5679 "For consideration as a value of `vhdl-font-lock-keywords'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5680 This does highlighting of comments, keywords, and standard types.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5681
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5682 (defconst vhdl-font-lock-keywords-3
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5683 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5684 ;; highlight clock signals.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5685 (cons vhdl-clock-signal-syntax 'vhdl-font-lock-clock-signal-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5686 (cons vhdl-reset-signal-syntax 'vhdl-font-lock-reset-signal-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5687 (cons vhdl-control-signal-syntax 'vhdl-font-lock-control-signal-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5688 (cons vhdl-data-signal-syntax 'vhdl-font-lock-data-signal-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5689 (cons vhdl-test-signal-syntax 'vhdl-font-lock-test-signal-face)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5690 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5691 "For consideration as a value of `vhdl-font-lock-keywords'.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5692 This does highlighting of signal names with specific syntax.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5693
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5694 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5695 ;; Font and color definitions
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5696
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5697 (defvar vhdl-font-lock-prompt-face 'vhdl-font-lock-prompt-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5698 "Face name to use for prompts.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5699
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5700 (defvar vhdl-font-lock-attribute-face 'vhdl-font-lock-attribute-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5701 "Face name to use for attributes.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5702
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5703 (defvar vhdl-font-lock-value-face 'vhdl-font-lock-value-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5704 "Face name to use for enumeration values.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5705
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5706 (defvar vhdl-font-lock-clock-signal-face 'vhdl-font-lock-clock-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5707 "Face name to use for clock signals.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5708
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5709 (defvar vhdl-font-lock-reset-signal-face 'vhdl-font-lock-reset-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5710 "Face name to use for reset signals.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5711
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5712 (defvar vhdl-font-lock-control-signal-face 'vhdl-font-lock-control-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5713 "Face name to use for control signals.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5714
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5715 (defvar vhdl-font-lock-data-signal-face 'vhdl-font-lock-data-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5716 "Face name to use for data signals.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5717
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5718 (defvar vhdl-font-lock-test-signal-face 'vhdl-font-lock-test-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5719 "Face name to use for test signals.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5720
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5721 (defface vhdl-font-lock-prompt-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5722 '((((class color) (background light)) (:foreground "Red"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5723 (((class color) (background dark)) (:foreground "Red"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5724 (t (:inverse-video t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5725 "Font Lock mode face used to highlight prompts."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5726 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5727
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5728 (defface vhdl-font-lock-attribute-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5729 '((((class color) (background light)) (:foreground "CadetBlue"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5730 (((class color) (background dark)) (:foreground "CadetBlue"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5731 (t (:italic t :bold t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5732 "Font Lock mode face used to highlight attributes."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5733 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5734
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5735 (defface vhdl-font-lock-value-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5736 '((((class color) (background light)) (:foreground "DarkGoldenrod"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5737 (((class color) (background dark)) (:foreground "DarkGoldenrod"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5738 (t (:italic t :bold t)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5739 "Font Lock mode face used to highlight enumeration values."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5740 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5741
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5742 (defface vhdl-font-lock-clock-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5743 '((((class color) (background light)) (:foreground "LimeGreen"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5744 (((class color) (background dark)) (:foreground "LimeGreen"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5745 (t ()))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5746 "Font Lock mode face used to highlight clock signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5747 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5748
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5749 (defface vhdl-font-lock-reset-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5750 '((((class color) (background light)) (:foreground "Red"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5751 (((class color) (background dark)) (:foreground "Red"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5752 (t ()))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5753 "Font Lock mode face used to highlight reset signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5754 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5755
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5756 (defface vhdl-font-lock-control-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5757 '((((class color) (background light)) (:foreground "Blue"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5758 (((class color) (background dark)) (:foreground "Blue"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5759 (t ()))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5760 "Font Lock mode face used to highlight control signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5761 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5762
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5763 (defface vhdl-font-lock-data-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5764 '((((class color) (background light)) (:foreground "Black"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5765 (((class color) (background dark)) (:foreground "Black"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5766 (t ()))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5767 "Font Lock mode face used to highlight data signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5768 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5769
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5770 (defface vhdl-font-lock-test-signal-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5771 '((((class color) (background light)) (:foreground "Gold"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5772 (((class color) (background dark)) (:foreground "Gold"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5773 (t ()))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5774 "Font Lock mode face used to highlight test signals."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5775 :group 'font-lock-highlighting-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5776
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5777 ;; Custom color definitions for existing faces
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5778 (defun vhdl-set-face-foreground ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5779 (set-face-foreground 'font-lock-comment-face "IndianRed")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5780 (set-face-foreground 'font-lock-function-name-face "MediumOrchid")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5781 (set-face-foreground 'font-lock-keyword-face "SlateBlue")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5782 (set-face-foreground 'font-lock-string-face "RosyBrown")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5783 (set-face-foreground 'font-lock-type-face "ForestGreen")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5784 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5785
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5786 (defun vhdl-set-face-grayscale ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5787 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5788 (set-face-bold-p 'font-lock-comment-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5789 (set-face-inverse-video-p 'font-lock-comment-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5790 (set-face-italic-p 'font-lock-comment-face t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5791 (set-face-underline-p 'font-lock-comment-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5792
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5793 (set-face-bold-p 'font-lock-function-name-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5794 (set-face-inverse-video-p 'font-lock-function-name-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5795 (set-face-italic-p 'font-lock-function-name-face t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5796 (set-face-underline-p 'font-lock-function-name-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5797
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5798 (set-face-bold-p 'font-lock-keyword-face t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5799 (set-face-inverse-video-p 'font-lock-keyword-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5800 (set-face-italic-p 'font-lock-keyword-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5801 (set-face-underline-p 'font-lock-keyword-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5802
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5803 (set-face-bold-p 'font-lock-string-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5804 (set-face-inverse-video-p 'font-lock-string-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5805 (set-face-italic-p 'font-lock-string-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5806 (set-face-underline-p 'font-lock-string-face t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5807
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5808 (set-face-bold-p 'font-lock-type-face t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5809 (set-face-inverse-video-p 'font-lock-type-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5810 (set-face-italic-p 'font-lock-type-face t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5811 (set-face-underline-p 'font-lock-type-face nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5812 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5813
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5814 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5815 ;; Font lock initialization
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5816
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5817 (defun vhdl-font-lock-init ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5818 "Initializes fontification."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5819 (setq vhdl-font-lock-keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5820 (append vhdl-font-lock-keywords-0
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5821 (if vhdl-highlight-names vhdl-font-lock-keywords-1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5822 (if vhdl-highlight-keywords vhdl-font-lock-keywords-2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5823 (if (and vhdl-highlight-signals (x-display-color-p))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5824 vhdl-font-lock-keywords-3)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5825 (if (x-display-color-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5826 (if (not vhdl-use-default-colors) (vhdl-set-face-foreground))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5827 (if (not vhdl-use-default-faces) (vhdl-set-face-grayscale))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5828 ))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5829
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5830 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5831 ;; Fontification for postscript printing
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5832
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5833 (defun vhdl-ps-init ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5834 "Initializes face and page settings for postscript printing."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5835 (require 'ps-print)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5836 (unless (or vhdl-use-default-faces
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5837 ps-print-color-p)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5838 (set (make-local-variable 'ps-bold-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5839 '(font-lock-keyword-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5840 font-lock-type-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5841 vhdl-font-lock-attribute-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5842 vhdl-font-lock-value-face))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5843 (set (make-local-variable 'ps-italic-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5844 '(font-lock-comment-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5845 font-lock-function-name-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5846 font-lock-type-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5847 vhdl-font-lock-prompt-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5848 vhdl-font-lock-attribute-face
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5849 vhdl-font-lock-value-face))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5850 (set (make-local-variable 'ps-underlined-faces)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5851 '(font-lock-string-face))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5852 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5853 ;; define page settings, so that a line containing 79 characters (default)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5854 ;; fits into one column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5855 (if vhdl-print-two-column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5856 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5857 (set (make-local-variable 'ps-landscape-mode) t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5858 (set (make-local-variable 'ps-number-of-columns) 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5859 (set (make-local-variable 'ps-font-size) 7.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5860 (set (make-local-variable 'ps-header-title-font-size) 10.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5861 (set (make-local-variable 'ps-header-font-size) 9.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5862 (set (make-local-variable 'ps-header-offset) 12.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5863 (if (eq ps-paper-type 'letter)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5864 (progn
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5865 (set (make-local-variable 'ps-inter-column) 40.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5866 (set (make-local-variable 'ps-left-margin) 40.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5867 (set (make-local-variable 'ps-right-margin) 40.0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5868 )))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5869
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5870
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5871 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5872 ;; Hideshow
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5873 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5874 ;; (using `hideshow.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5875
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5876 (defun vhdl-forward-sexp-function (&optional count)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5877 "Find begin and end of VHDL process or block (for hideshow)."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5878 (interactive "p")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5879 (let (name
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5880 (case-fold-search t))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5881 (end-of-line)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5882 (if (< count 0)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5883 (re-search-backward "\\s-*\\(\\w\\|\\s_\\)+\\s-*:\\s-*\\(process\\|block\\)\\>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5884 (re-search-forward "\\s-*\\<end\\s-+\\(process\\|block\\)\\>" nil t)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5885 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5886
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5887 (require 'hideshow)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5888
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5889 (unless (assq 'vhdl-mode hs-special-modes-alist)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5890 (setq hs-special-modes-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5891 (cons
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5892 '(vhdl-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5893 "\\s-*\\(\\w\\|\\s_\\)+\\s-*:\\s-*\\(process\\|PROCESS\\|block\\|BLOCK\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5894 "\\s-*\\<\\(end\\|END\\)\\s-+\\(process\\|PROCESS\\|block\\|BLOCK\\)\\>"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5895 "-- "
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5896 vhdl-forward-sexp-function)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5897 hs-special-modes-alist)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5898
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5899
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5900 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5901 ;; Compilation
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5902 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5903 ;; (using `compile.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5904
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5905 (defvar vhdl-compile-commands
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5906 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5907 (cadence "cv -file" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5908 (ikos "analyze" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5909 (quickhdl "qvhcom" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5910 (synopsys "vhdlan" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5911 (vantage "analyze -libfile vsslib.ini -src" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5912 (viewlogic "analyze -libfile vsslib.ini -src" nil)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5913 (v-system "vcom" "vmake > Makefile")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5914 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5915 "Commands to be called in the shell for compilation (syntax analysis) of a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5916 single buffer and `Makefile' generation for different tools. First item is tool
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5917 identifier, second item is shell command for compilation, and third item is
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5918 shell command for `Makefile' generation. A tool is specified by assigning a
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5919 tool identifier to variable `vhdl-compiler'.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5920
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5921 (defvar vhdl-compilation-error-regexp-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5922 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5923 ;; Cadence Design Systems: cv -file test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5924 ;; duluth: *E,430 (test.vhd,13): identifier (POSITIV) is not declared
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5925 '("duluth: \\*E,[0-9]+ (\\(.+\\),\\([0-9]+\\)):" 1 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5926
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5927 ;; Ikos Voyager: analyze test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5928 ;; E L4/C5: this library unit is inaccessible
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5929 ; Xemacs does not support error messages without included file name
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5930 (if (not (memq 'XEmacs vhdl-emacs-features))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5931 '("E L\\([0-9]+\\)/C[0-9]+:" nil 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5932 '("E L\\([0-9]+\\)/C[0-9]+:" 2 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5933 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5934
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5935 ;; QuickHDL, Mentor Graphics: qvhcom test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5936 ;; ERROR: test.vhd(24): near "dnd": expecting: END
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5937 '("ERROR: \\(.+\\)(\\([0-9]+\\)):" 1 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5938
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5939 ;; Synopsys, VHDL Analyzer: vhdlan test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5940 ;; **Error: vhdlan,703 test.vhd(22): OTHERS is not legal in this context.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5941 '("\\*\\*Error: vhdlan,[0-9]+ \\(.+\\)(\\([0-9]+\\)):" 1 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5942
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5943 ;; Vantage Analysis Systems: analyze -libfile vsslib.ini -src test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5944 ;; **Error: LINE 499 *** No aggregate value is valid in this context.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5945 ; Xemacs does not support error messages without included file name
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5946 (if (not (memq 'XEmacs vhdl-emacs-features))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5947 '("\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5948 '("\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" 2 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5949 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5950
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5951 ;; Viewlogic: analyze -libfile vsslib.ini -src test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5952 ;; **Error: LINE 499 *** No aggregate value is valid in this context.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5953 ;; same regexp as for Vantage
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5954
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5955 ;; V-System, Model Technology: vcom test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5956 ;; ERROR: test.vhd(14): Unknown identifier: positiv
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5957 ;; same regexp as for QuickHDL
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5958
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5959 ) "Alist that specifies how to match errors in VHDL compiler output.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5960
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5961 (defvar compilation-file-regexp-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5962 '(
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5963 ;; Ikos Voyager: analyze -libfile vsslib.ini -src test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5964 ;; analyze sdrctl.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5965 ("^analyze +\\(.+ +\\)*\\(.+\\)$" 2)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5966
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5967 ;; Vantage Analysis Systems: analyze -libfile vsslib.ini -src test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5968 ;; Compiling "pcu.vhd" line 1...
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5969 (" *Compiling \"\\(.+\\)\" " 1)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5970
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5971 ;; Viewlogic: analyze -libfile vsslib.ini -src test.vhd
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5972 ;; Compiling "pcu.vhd" line 1...
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5973 ;; same regexp as for Vantage
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5974
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5975 ) "Alist specifying how to match lines that indicate a new current file.
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5976 Used for compilers with no file name in the error messages.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5977
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5978 (defun vhdl-compile ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5979 "Compile current buffer using the VHDL compiler specified in
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5980 `vhdl-compiler'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5981 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5982 (let ((command-list vhdl-compile-commands)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5983 command)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5984 (while command-list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5985 (if (eq vhdl-compiler (car (car command-list)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5986 (setq command (car (cdr (car command-list)))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5987 (setq command-list (cdr command-list)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5988 (if command
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5989 (compile (concat command " " vhdl-compiler-options
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5990 (if (not (string-equal vhdl-compiler-options "")) " ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5991 (file-name-nondirectory (buffer-file-name)))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5992
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5993 (defun vhdl-make ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5994 "Call make command for compilation of all updated source files
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5995 (requires `Makefile')."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5996 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5997 (compile "make"))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5998
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5999 (defun vhdl-generate-makefile ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6000 "Generate new `Makefile'."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6001 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6002 (let ((command-list vhdl-compile-commands)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6003 command)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6004 (while command-list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6005 (if (eq vhdl-compiler (car (car command-list)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6006 (setq command (car (cdr (cdr (car command-list))))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6007 (setq command-list (cdr command-list)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6008 (if command
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6009 (compile command )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6010 (message (format "Not implemented for `%s'!" vhdl-compiler))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6011 (beep))))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6012
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6013
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6014 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6015 ;; Bug reports
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6016 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6017 ;; (using `reporter.el')
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6018
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6019 (defconst vhdl-version "3.19"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6020 "VHDL Mode version number.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6021
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6022 (defconst vhdl-mode-help-address "vhdl-mode@geocities.com"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6023 "Address for VHDL Mode bug reports.")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6024
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6025 (defun vhdl-version ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6026 "Echo the current version of VHDL Mode in the minibuffer."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6027 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6028 (message "Using VHDL Mode version %s" vhdl-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6029 (vhdl-keep-region-active))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6030
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6031 ;; get reporter-submit-bug-report when byte-compiling
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6032 (and (fboundp 'eval-when-compile)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6033 (eval-when-compile
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6034 (require 'reporter)))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6035
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6036 (defun vhdl-submit-bug-report ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6037 "Submit via mail a bug report on VHDL Mode."
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6038 (interactive)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6039 ;; load in reporter
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6040 (and
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6041 (y-or-n-p "Do you want to submit a report on VHDL Mode? ")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6042 (require 'reporter)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6043 (reporter-submit-bug-report
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6044 vhdl-mode-help-address
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6045 (concat "VHDL Mode " vhdl-version)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6046 (list
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6047 ;; report all important variables
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6048 'vhdl-basic-offset
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6049 'vhdl-offsets-alist
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6050 'vhdl-comment-only-line-offset
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6051 'tab-width
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6052 'vhdl-electric-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6053 'vhdl-stutter-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6054 'vhdl-indent-tabs-mode
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6055 'vhdl-compiler
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6056 'vhdl-compiler-options
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6057 'vhdl-upper-case-keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6058 'vhdl-upper-case-types
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6059 'vhdl-upper-case-attributes
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6060 'vhdl-upper-case-enum-values
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6061 'vhdl-auto-align
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6062 'vhdl-additional-empty-lines
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6063 'vhdl-argument-list-indent
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6064 'vhdl-conditions-in-parenthesis
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6065 'vhdl-date-format
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6066 'vhdl-header-file
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6067 'vhdl-modify-date-prefix-string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6068 'vhdl-zero-string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6069 'vhdl-one-string
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6070 'vhdl-self-insert-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6071 'vhdl-prompt-for-comments
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6072 'vhdl-comment-column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6073 'vhdl-end-comment-column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6074 'vhdl-highlight-names
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6075 'vhdl-highlight-keywords
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6076 'vhdl-highlight-signals
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6077 'vhdl-highlight-case-sensitive
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6078 'vhdl-use-default-colors
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6079 'vhdl-use-default-faces
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6080 'vhdl-clock-signal-syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6081 'vhdl-reset-signal-syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6082 'vhdl-control-signal-syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6083 'vhdl-data-signal-syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6084 'vhdl-test-signal-syntax
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6085 'vhdl-source-file-menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6086 'vhdl-index-menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6087 'vhdl-hideshow-menu
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6088 'vhdl-print-two-column
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6089 'vhdl-intelligent-tab
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6090 'vhdl-template-key-binding-prefix
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6091 'vhdl-word-completion-in-minibuffer
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6092 'vhdl-underscore-is-part-of-word
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6093 'vhdl-mode-hook
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6094 )
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6095 (function
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6096 (lambda ()
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6097 (insert
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6098 (if vhdl-special-indent-hook
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6099 (concat "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6100 "vhdl-special-indent-hook is set to '"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6101 (format "%s" vhdl-special-indent-hook)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6102 ".\nPerhaps this is your problem?\n"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6103 "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6104 "\n")
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6105 (format "vhdl-emacs-features: %s\n" vhdl-emacs-features)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6106 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6107 nil
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6108 "Dear VHDL Mode maintainers,"
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6109 )))
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6110
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6111
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6112 ;; ############################################################################
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6113
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6114 (provide 'vhdl-mode)
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6115
5d82beffb498 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6116 ;;; vhdl-mode.el ends here