annotate lisp/progmodes/f90.el @ 20279:69a6030e443a

(kill-region): Detect read-only text by getting an error trying to delete it. Handle the cases where we can, and can't, get the killed text from the undo list with much the same code.
author Karl Heuer <kwzh@gnu.org>
date Wed, 19 Nov 1997 21:36:56 +0000
parents 860e27fcf4b1
children 90f306f86f5d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13064
diff changeset
1 ;;; f90.el --- Fortran-90 mode (free format)
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
3 ;; Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
5 ;; Author: Torbj\"orn Einarsson <T.Einarsson@clab.ericsson.se>
18213
94f007fc6138 (f90-looking-at-where-or-forall): Recognize where/forall
Karl Heuer <kwzh@gnu.org>
parents: 17413
diff changeset
6 ;; Last Change: May 29 1997
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: fortran, f90, languages
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
9 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
14 ;; any later version.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
24 ;; Boston, MA 02111-1307, USA.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
27
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; Smart mode for editing F90 programs in FREE FORMAT.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; Knows about continuation lines, named structured statements, and other
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; new features in F90 including HPF (High Performance Fortran) structures.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; The basic feature is to provide an accurate indentation of F90 programs.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; In addition, there are many more features like automatic matching of all
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; end statements, an auto-fill function to break long lines, a join-lines
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; function which joins continued lines etc etc.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; To facilitate typing, a fairly complete list of abbreviations is provided.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; For example, `i is short-hand for integer (if abbrev-mode is on).
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; There are two separate features for highlighting the code.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; 1) Upcasing or capitalizing of all keywords.
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
40 ;; 2) Colors/fonts using font-lock-mode. (only when using X-windows)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; Automatic upcase of downcase of keywords is controlled by the parameter
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; f90-auto-keyword-case.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; The indentations of lines starting with ! is determined by the first of the
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
45 ;; following matches (the values in the left column are the default values):
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
46
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
47 ;; start-string/regexp indent variable holding start-string/regexp
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
48 ;; !!! 0
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
49 ;; !hpf\\$ (re) 0 f90-directive-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
50 ;; !!$ 0 f90-comment-region
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
51 ;; ! (re) as code f90-indented-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
52 ;; default comment-column
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
53
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
54 ;; Ex: Here is the result of 3 different settings of f90-indented-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
55 ;; f90-indented-comment-re !-indentation !!-indentation
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
56 ;; ! as code as code
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
57 ;; !! comment-column as code
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
58 ;; ![^!] as code comment-column
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; Trailing comments are indented to comment-column with indent-for-comment M-;
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; f90-comment-region (C-c;) toggles insertion of f90-comment-region in region.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; One common convention for free vs. fixed format is that free-format files
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; have the ending .f90 while the fixed format files have the ending .f.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; To make f90-mode work, put this file in, for example, your directory
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; ~/lisp, and be sure that you have the following in your .emacs-file
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; (setq load-path (append load-path '("~/lisp")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; (autoload 'f90-mode "f90"
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; "Major mode for editing Fortran 90 code in free format." t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; (setq auto-mode-alist (append auto-mode-alist
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; (list '("\\.f90$" . f90-mode))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; Once you have entered f90-mode, you may get more info by using
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; the command describe-mode (C-h m). For online help describing various
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; functions use C-h f <Name of function you want described>
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; To customize the f90-mode for your taste, use, for example:
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; (you don't have to specify values for all the parameters below)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;(setq f90-mode-hook
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; '(lambda () (setq f90-do-indent 3
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; f90-if-indent 3
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; f90-type-indent 3
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; f90-program-indent 2
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; f90-continuation-indent 5
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; f90-comment-region "!!$"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
84 ;; f90-directive-comment-re "!hpf\\$"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
85 ;; f90-indented-comment-re "!"
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; f90-break-delimiters "[-+\\*/,><=% \t]"
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; f90-break-before-delimiters t
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; f90-beginning-ampersand t
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; f90-smart-end 'blink
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; f90-auto-keyword-case nil
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; f90-leave-line-no nil
11501
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
92 ;; f90-startup-message t
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
93 ;; indent-tabs-mode nil
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
94 ;; f90-font-lock-keywords f90-font-lock-keywords-2
11501
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
95 ;; )
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;; ;;The rest is not default.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; (abbrev-mode 1) ; turn on abbreviation mode
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
98 ;; (turn-on-font-lock) ; for highlighting
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
99 ;; (f90-add-imenu-menu) ; extra menu with functions etc.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; (if f90-auto-keyword-case ; change case of all keywords on startup
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; (f90-change-keywords f90-auto-keyword-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; ))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; in your .emacs file (the shown values are the defaults). You can also
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; change the values of the lists f90-keywords etc.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; The auto-fill and abbreviation minor modes are accessible from the menu,
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
106 ;; or by using M-x auto-fill-mode and M-x abbrev-mode, respectively.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; Remarks
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; 1) Line numbers are by default left-justified. If f90-leave-line-no is
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; non-nil, the line numbers are never touched.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; 2) Multi-; statements like > do i=1,20 ; j=j+i ; end do < are not handled
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; correctly, but I imagine them to be rare.
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
113 ;; 3) Regexps for hilit19 are no longer supported.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; 4) For FIXED FORMAT code, use the ordinary fortran mode.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; 5) This mode does not work under emacs-18.x.
11501
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
116 ;; 6) Preprocessor directives, i.e., lines starting with # are left-justified
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
117 ;; and are untouched by all case-changing commands. There is, at present, no
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
118 ;; mechanism for treating multi-line directives (continued by \ ).
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
119 ;; 7) f77 do-loops do 10 i=.. ; ; 10 continue are not correctly indented.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
120 ;; You are urged to use f90-do loops (with labels if you wish).
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
121 ;; 8) The highlighting mode under XEmacs is not as complete as under Emacs.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; List of user commands
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; f90-previous-statement f90-next-statement
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; f90-beginning-of-subprogram f90-end-of-subprogram f90-mark-subprogram
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; f90-comment-region
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; f90-indent-line f90-indent-new-line
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; f90-indent-region (can be called by calling indent-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; f90-indent-subprogram
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; f90-break-line f90-join-lines
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;; f90-fill-region
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;; f90-insert-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; f90-upcase-keywords f90-upcase-region-keywords
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;; f90-downcase-keywords f90-downcase-region-keywords
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; f90-capitalize-keywords f90-capitalize-region-keywords
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
136 ;; f90-add-imenu-menu
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
137 ;; f90-font-lock-1, f90-font-lock-2, f90-font-lock-3, f90-font-lock-4
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; Thanks to all the people who have tested the mode. Special thanks to Jens
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;; Bloch Helmers for encouraging me to write this code, for creative
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;; suggestions as well as for the lists of hpf-commands.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;; Also thanks to the authors of the fortran and pascal modes, on which some
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; of this code is built.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
145 ;;; Code:
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
146
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
147 (defconst bug-f90-mode "T.Einarsson@clab.ericsson.se"
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 "Address of mailing list for F90 mode bugs.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;; User options
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
151
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
152 (defgroup f90 nil
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
153 "Fortran-90 mode"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
154 :group 'fortran)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
156 (defgroup f90-indent nil
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
157 "Fortran-90 indentation"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
158 :prefix "f90-"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
159 :group 'f90)
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
160
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
162 (defcustom f90-do-indent 3
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
163 "*Extra indentation applied to DO blocks."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
164 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
165 :group 'f90-indent)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
167 (defcustom f90-if-indent 3
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
168 "*Extra indentation applied to IF, SELECT CASE, WHERE and FORALL blocks."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
169 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
170 :group 'f90-indent)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
172 (defcustom f90-type-indent 3
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
173 "*Extra indentation applied to TYPE, INTERFACE and BLOCK DATA blocks."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
174 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
175 :group 'f90-indent)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
177 (defcustom f90-program-indent 2
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
178 "*Extra indentation applied to PROGRAM/MODULE/SUBROUTINE/FUNCTION blocks."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
179 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
180 :group 'f90-indent)
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
181
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
182 (defcustom f90-continuation-indent 5
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
183 "*Extra indentation applied to F90 continuation lines."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
184 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
185 :group 'f90-indent)
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
186
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
187 (defcustom f90-comment-region "!!$"
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 "*String inserted by \\[f90-comment-region]\
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
189 at start of each line in region."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
190 :type 'string
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
191 :group 'f90-indent)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
193 (defcustom f90-indented-comment-re "!"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
194 "*Regexp saying which comments to be indented like code."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
195 :type 'regexp
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
196 :group 'f90-indent)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
198 (defcustom f90-directive-comment-re "!hpf\\$"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
199 "*Regexp of comment-like directive like \"!HPF\\\\$\", not to be indented."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
200 :type 'regexp
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
201 :group 'f90-indent)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
203 (defcustom f90-beginning-ampersand t
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
204 "*t makes automatic insertion of \& at beginning of continuation line."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
205 :type 'boolean
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
206 :group 'f90)
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
207
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
208 (defcustom f90-smart-end 'blink
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 "*From an END statement, check and fill the end using matching block start.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 Allowed values are 'blink, 'no-blink, and nil, which determine
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
211 whether to blink the matching beginning."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
212 :type '(choice (const blink) (const no-blink) (const nil))
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
213 :group 'f90)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
215 (defcustom f90-break-delimiters "[-+\\*/><=,% \t]"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
216 "*Regexp holding list of delimiters at which lines may be broken."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
217 :type 'regexp
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
218 :group 'f90)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
220 (defcustom f90-break-before-delimiters t
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
221 "*Non-nil causes `f90-do-auto-fill' to break lines before delimiters."
19832
860e27fcf4b1 (f90-break-before-delimiters): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 18213
diff changeset
222 :type 'boolean
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
223 :group 'f90)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
225 (defcustom f90-auto-keyword-case nil
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 "*Automatic case conversion of keywords.
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
227 The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
228 :type '(choice (const downcase-word) (const upcase-word)
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
229 (const capitalize-word) (const nil))
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
230 :group 'f90)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
232 (defcustom f90-leave-line-no nil
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
233 "*If nil, left-justify linenumbers."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
234 :type 'boolean
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
235 :group 'f90)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
237 (defcustom f90-startup-message t
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
238 "*Non-nil displays a startup message when F90 mode is first called."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
239 :type 'boolean
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16444
diff changeset
240 :group 'f90)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
242 (defconst f90-keywords-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
243 ;;("allocate" "allocatable" "assign" "assignment" "backspace" "block"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
244 ;;"call" "case" "character" "close" "common" "complex" "contains"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
245 ;;"continue" "cycle" "data" "deallocate" "dimension" "do" "double" "else"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
246 ;;"elseif" "elsewhere" "end" "enddo" "endfile" "endif" "entry" "equivalence"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
247 ;;"exit" "external" "forall" "format" "function" "goto" "if" "implicit"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
248 ;;"include" "inquire" "integer" "intent" "interface" "intrinsic" "logical"
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
249 ;;"module" "namelist" "none" "nullify" "only" "open" "operator" "optional" "parameter"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
250 ;;"pause" "pointer" "precision" "print" "private" "procedure" "program"
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
251 ;;"public" "read" "real" "recursive" "result" "return" "rewind" "save" "select"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
252 ;;"sequence" "stop" "subroutine" "target" "then" "type" "use" "where"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
253 ;;"while" "write")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
254 (concat
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
255 "\\<\\(a\\(llocat\\(able\\|e\\)\\|ssign\\(\\|ment\\)\\)\\|b\\(ackspace\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
256 "lock\\)\\|c\\(a\\(ll\\|se\\)\\|haracter\\|lose\\|o\\(m\\(mon\\|plex\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
257 "nt\\(ains\\|inue\\)\\)\\|ycle\\)\\|d\\(ata\\|eallocate\\|imension\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
258 "o\\(\\|uble\\)\\)\\|e\\(lse\\(\\|if\\|where\\)\\|n\\(d\\(\\|do\\|file\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
259 "if\\)\\|try\\)\\|quivalence\\|x\\(it\\|ternal\\)\\)\\|f\\(or\\(all\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
260 "mat\\)\\|unction\\)\\|goto\\|i\\(f\\|mplicit\\|n\\(clude\\|quire\\|t\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
261 "e\\(ger\\|nt\\|rface\\)\\|rinsic\\)\\)\\)\\|logical\\|module\\|n\\("
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
262 "amelist\\|one\\|ullify\\)\\|o\\(nly\\|p\\(en\\|erator\\|tional\\)\\)\\|p\\(a\\("
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
263 "rameter\\|use\\)\\|ointer\\|r\\(ecision\\|i\\(nt\\|vate\\)\\|o\\("
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
264 "cedure\\|gram\\)\\)\\|ublic\\)\\|re\\(a[dl]\\|cursive\\|sult\\|turn\\|wind\\)\\|"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
265 "s\\(ave\\|e\\(lect\\|quence\\)\\|top\\|ubroutine\\)\\|t\\(arget\\|hen\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
266 "ype\\)\\|use\\|w\\(h\\(ere\\|ile\\)\\|rite\\)\\)\\>")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
267 "Regexp for F90 keywords.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
268
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
269 (defconst f90-keywords-level-3-re
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
270 ;; ("allocate" "allocatable" "assign" "assignment" "backspace" "close"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
271 ;; "deallocate" "dimension" "endfile" "entry" "equivalence" "external"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
272 ;; "inquire" "intent" "intrinsic" "nullify" "only" "open" "operator"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
273 ;; "optional" "parameter" "pause" "pointer" "print" "private" "public"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
274 ;; "read" "recursive" "result" "rewind" "save" "select" "sequence"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
275 ;; "target" "write")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
276 (concat
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
277 "\\<\\(a\\(llocat\\(able\\|e\\)\\|ssign\\(\\|ment\\)\\)\\|backspace\\|"
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
278 "close\\|d\\(eallocate\\|imension\\)\\|e\\(n\\(dfile\\|try\\)\\|"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
279 "quivalence\\|xternal\\)\\|"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
280 "in\\(quire\\|t\\(ent\\|rinsic\\)\\)\\|nullify\\|"
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
281 "o\\(nly\\|p\\(en\\|erator\\|tional\\)\\)\\|"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
282 "p\\(a\\(rameter\\|use\\)\\|ointer\\|ri\\(nt\\|vate\\)\\|ublic\\)\\|re\\("
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
283 "ad\\|cursive\\|sult\\|wind\\)\\|s\\(ave\\|e\\(lect\\|quence\\)\\)\\|target\\|"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
284 "write\\)\\>")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
285 "Keyword-regexp for font-lock level >= 3.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
286
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
288 (defconst f90-procedures-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
289 ;; ("abs" "achar" "acos" "adjustl" "adjustr" "aimag" "aint" "all" "allocated"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
290 ;; "anint" "any" "asin" "associated" "atan" "atan2" "bit_size" "btest"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
291 ;; "ceiling" "char" "cmplx" "conjg" "cos" "cosh" "count" "cshift"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
292 ;; "date_and_time" "dble" "digits" "dim" "dot_product" "dprod" "eoshift"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
293 ;; "epsilon" "exp" "exponent" "floor" "fraction" "huge" "iachar" "iand"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
294 ;; "ibclr" "ibits" "ibset" "ichar" "ieor" "index" "int" "ior" "ishft"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
295 ;; "ishftc" "kind" "lbound" "len" "len_trim" "lge" "lgt" "lle" "llt" "log"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
296 ;; "logical" "log10" "matmul" "max" "maxexponent" "maxloc" "maxval" "merge"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
297 ;; "min" "minexponent" "minloc" "minval" "mod" "modulo" "mvbits" "nearest"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
298 ;; "nint" "not" "pack" "precision" "present" "product" "radix"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
299 ;; "random_number" "random_seed" "range" "real" "repeat" "reshape"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
300 ;; "rrspacing" "scale" "scan" "selected_int_kind" "selected_real_kind"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
301 ;; "set_exponent" "shape" "sign" "sin" "sinh" "size" "spacing" "spread"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
302 ;; "sqrt" "sum" "system_clock" "tan" "tanh" "tiny" "transfer" "transpose"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
303 ;; "trim" "ubound" "unpack" "verify")
14040
187735b53d52 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
304 ;; A left parenthesis to avoid highlighting non-procedures.
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
305 ;; Real is taken out here to avoid highlighting declarations.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
306 (concat
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
307 "\\<\\(a\\(bs\\|c\\(har\\|os\\)\\|djust[lr]\\|i\\(mag\\|nt\\)\\|ll\\(\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
308 "ocated\\)\\|n\\(int\\|y\\)\\|s\\(in\\|sociated\\)\\|tan2?\\)\\|b\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
309 "it_size\\|test\\)\\|c\\(eiling\\|har\\|mplx\\|o\\(njg\\|sh?\\|unt\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
310 "shift\\)\\|d\\(ate_and_time\\|ble\\|i\\(gits\\|m\\)\\|ot_product\\|prod"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
311 "\\)\\|e\\(oshift\\|psilon\\|xp\\(\\|onent\\)\\)\\|f\\(loor\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
312 "raction\\)\\|huge\\|i\\(a\\(char\\|nd\\)\\|b\\(clr\\|its\\|set\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
313 "char\\|eor\\|n\\(dex\\|t\\)\\|or\\|shftc?\\)\\|kind\\|l\\(bound\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
314 "en\\(\\|_trim\\)\\|g[et]\\|l[et]\\|og\\(\\|10\\|ical\\)\\)\\|m\\(a\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
315 "tmul\\|x\\(\\|exponent\\|loc\\|val\\)\\)\\|erge\\|in\\(\\|exponent\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
316 "loc\\|val\\)\\|od\\(\\|ulo\\)\\|vbits\\)\\|n\\(earest\\|int\\|ot\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
317 "p\\(ack\\|r\\(e\\(cision\\|sent\\)\\|oduct\\)\\)\\|r\\(a\\(dix\\|n\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
318 "dom_\\(number\\|seed\\)\\|ge\\)\\)\\|e\\(peat\\|shape\\)\\|rspacing\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
319 "s\\(ca\\(le\\|n\\)\\|e\\(lected_\\(int_kind\\|real_kind\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
320 "t_exponent\\)\\|hape\\|i\\(gn\\|nh?\\|ze\\)\\|p\\(acing\\|read\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
321 "qrt\\|um\\|ystem_clock\\)\\|t\\(anh?\\|iny\\|r\\(ans\\(fer\\|pose\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
322 "im\\)\\)\\|u\\(bound\\|npack\\)\\|verify\\)[ \t]*(")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
323 "Regexp whose first part matches F90 intrinsic procedures.")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
325 (defconst f90-operators-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
326 ;; "and" "or" "not" "eqv" "neqv" "eq" "ne" "lt" "le" "gt" "ge" "true" "false"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
327 (concat
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
328 "\\.\\(and\\|eqv?\\|false\\|g[et]\\|l[et]\\|n\\(e\\(\\|qv\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
329 "ot\\)\\|or\\|true\\)\\.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
330 "Regexp matching intrinsic operators.")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
332 (defconst f90-hpf-keywords-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
333 ;; Intrinsic procedures
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
334 ;; ("all_prefix" "all_scatter" "all_suffix" "any_prefix" "any_scatter"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
335 ;; "any_suffix" "copy_prefix" "copy_scatter" "copy_suffix" "count_prefix"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
336 ;; "count_scatter" "count_suffix" "grade_down" "grade_up" "hpf_alignment"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
337 ;; "hpf_template" "hpf_distribution" "iall" "iall_prefix" "iall_scatter"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
338 ;; "iall_suffix" "iany" "iany_prefix" "iany_scatter" "iany_suffix" "iparity"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
339 ;; "iparity_prefix" "iparity_scatter" "iparity_suffix" "leadz"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
340 ;; "maxval_prefix" "maxval_scatter" "maxval_suffix" "minval_prefix"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
341 ;; "minval_scatter" "minval_suffix" "parity" "parity_prefix"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
342 ;; "parity_scatter" "parity_suffix" "popcnt" "poppar" "product_prefix"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
343 ;; "product_scatter" "product_suffix" "sum_prefix" "sum_scatter"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
344 ;; "sum_suffix" "ilen" "number_of_processors" "processors_shape")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
345 ;; Directives
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
346 ;; ("align" "distribute" "dynamic" "inherit" "template" "processors"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
347 ;; "realign" "redistribute" "independent")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
348 ;; Keywords
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
349 ;; ("pure" "extrinsic" "new" "with" "onto" "block" "cyclic")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
350 (concat
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
351 "\\<\\(a\\(l\\(ign\\|l_\\(prefix\\|s\\(catter\\|uffix\\)\\)\\)\\|ny_\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
352 "prefix\\|s\\(catter\\|uffix\\)\\)\\)\\|block\\|c\\(o\\(py_\\(prefix\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
353 "s\\(catter\\|uffix\\)\\)\\|unt_\\(prefix\\|s\\(catter\\|uffix\\)\\)\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
354 "yclic\\)\\|d\\(istribute\\|ynamic\\)\\|extrinsic\\|grade_\\(down\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
355 "up\\)\\|hpf_\\(alignment\\|distribution\\|template\\)\\|i\\(a\\(ll\\(\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
356 "_\\(prefix\\|s\\(catter\\|uffix\\)\\)\\)\\|ny\\(\\|_\\(prefix\\|s\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
357 "catter\\|uffix\\)\\)\\)\\)\\|len\\|n\\(dependent\\|herit\\)\\|parity\\(\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
358 "_\\(prefix\\|s\\(catter\\|uffix\\)\\)\\)\\)\\|leadz\\|m\\(axval_\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
359 "prefix\\|s\\(catter\\|uffix\\)\\)\\|inval_\\(prefix\\|s\\(catter\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
360 "uffix\\)\\)\\)\\|n\\(ew\\|umber_of_processors\\)\\|onto\\|p\\(arity\\(\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
361 "_\\(prefix\\|s\\(catter\\|uffix\\)\\)\\)\\|op\\(cnt\\|par\\)\\|ro\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
362 "cessors\\(\\|_shape\\)\\|duct_\\(prefix\\|s\\(catter\\|uffix\\)\\)\\)\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
363 "ure\\)\\|re\\(align\\|distribute\\)\\|sum_\\(prefix\\|s\\(catter\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
364 "uffix\\)\\)\\|template\\|with\\)\\>")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
365 "Regexp for all HPF keywords, procedures and directives.")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 ;; Highlighting patterns
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
369 (defvar f90-font-lock-keywords-1
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
370 (list ; Emacs
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
371 '("\\<\\(end[ \t]*\\(program\\|module\\|function\\|subroutine\\|type\\)\\)\\>[ \t]*\\(\\sw+\\)?"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
372 (1 font-lock-keyword-face) (3 font-lock-function-name-face nil t))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
373 '("\\<\\(program\\|call\\|module\\|subroutine\\|function\\|use\\)\\>[ \t]*\\(\\sw+\\)?"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
374 (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
375 ;; Special highlighting of "module procedure foo-list"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
376 '("\\<\\(module[ \t]*procedure\\)\\>" (1 font-lock-keyword-face t))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
377 ;; Highlight definition of new type
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
378 '("\\<\\(type\\)[ \t]*\\(,.*::[ \t]*\\|[ \t]+\\)\\(\\sw+\\)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
379 (1 font-lock-keyword-face) (3 font-lock-function-name-face))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
380 "\\<\\(\\(end[ \t]*\\)?\\(interface\\|block[ \t]*data\\)\\|contains\\)\\>")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
381 "This does fairly subdued highlighting of comments and function calls.")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
383 (defvar f90-font-lock-keywords-2
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
384 (append f90-font-lock-keywords-1
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
385 (list
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
386 ;; Variable declarations (avoid the real function call)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
387 '("^[ \t0-9]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\\|logical\\|type[ \t]*(\\sw+)\\)\\(.*::\\|[ \t]*(.*)\\)?\\([^!\n]*\\)"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
388 (1 font-lock-type-face) (4 font-lock-variable-name-face))
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
389 ;; do, if, select, where, and forall constructs
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
390 '("\\<\\(end[ \t]*\\(do\\|if\\|select\\|forall\\|where\\)\\)\\>\\([ \t]+\\(\\sw+\\)\\)?"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
391 (1 font-lock-keyword-face) (3 font-lock-reference-face nil t))
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
392 '("^[ \t0-9]*\\(\\(\\sw+\\)[ \t]*:[ \t]*\\)?\\(\\(if\\|do\\([ \t]*while\\)?\\|select[ \t]*case\\|where\\|forall\\)\\)\\>"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
393 (2 font-lock-reference-face nil t) (3 font-lock-keyword-face))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
394 ;; implicit declaration
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
395 '("\\<\\(implicit\\)[ \t]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\\|logical\\|type[ \t]*(\\sw+)\\|none\\)\\>" (1 font-lock-keyword-face) (2 font-lock-type-face))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
396 '("\\<\\(namelist\\|common\\)[ \t]*\/\\(\\sw+\\)?\/" (1 font-lock-keyword-face) (2 font-lock-reference-face nil t))
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
397 "\\<else\\([ \t]*if\\|where\\)?\\>"
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
398 "\\<\\(then\\|continue\\|format\\|include\\|stop\\|return\\)\\>"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
399 '("\\<\\(exit\\|cycle\\)[ \t]*\\(\\sw+\\)?\\>"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
400 (1 font-lock-keyword-face) (2 font-lock-reference-face nil t))
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
401 '("\\<\\(case\\)[ \t]*\\(default\\|(\\)" . 1)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
402 '("\\<\\(do\\|go *to\\)\\>[ \t]*\\([0-9]+\\)"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
403 (1 font-lock-keyword-face) (2 font-lock-reference-face))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
404 ;; line numbers (lines whose first character after number is letter)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
405 '("^[ \t]*\\([0-9]+\\)[ \t]*[a-z]+" (1 font-lock-reference-face t))))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
406 "Highlights declarations, do-loops and other constructions")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
408 (defvar f90-font-lock-keywords-3
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
409 (append f90-font-lock-keywords-2
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
410 (list
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
411 f90-keywords-level-3-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
412 f90-operators-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
413 (if (string-match "XEmacs" emacs-version)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
414 (append (list f90-procedures-re) '(1 font-lock-keyword-face t))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
415 (list f90-procedures-re '(1 font-lock-keyword-face t)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
416 "\\<real\\>" ; Avoid overwriting real defs.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
417 ))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
418 "Highlights all F90 keywords and intrinsic procedures.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
419
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
420 (defvar f90-font-lock-keywords-4
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
421 (append f90-font-lock-keywords-3
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
422 (list f90-hpf-keywords-re))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
423 "Highlights all F90 and HPF keywords.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
424
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
425 (defvar f90-font-lock-keywords
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
426 f90-font-lock-keywords-2
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
427 "*Default expressions to highlight in F90 mode.")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 ;; syntax table
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (defvar f90-mode-syntax-table nil
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 "Syntax table in use in F90 mode buffers.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (if f90-mode-syntax-table
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (setq f90-mode-syntax-table (make-syntax-table))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (modify-syntax-entry ?\! "<" f90-mode-syntax-table) ; beg. comment
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (modify-syntax-entry ?\n ">" f90-mode-syntax-table) ; end comment
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (modify-syntax-entry ?_ "w" f90-mode-syntax-table) ; underscore in names
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (modify-syntax-entry ?\' "\"" f90-mode-syntax-table) ; string quote
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (modify-syntax-entry ?\" "\"" f90-mode-syntax-table) ; string quote
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (modify-syntax-entry ?\` "w" f90-mode-syntax-table) ; for abbrevs
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (modify-syntax-entry ?\r " " f90-mode-syntax-table) ; return is whitespace
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (modify-syntax-entry ?+ "." f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (modify-syntax-entry ?- "." f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (modify-syntax-entry ?= "." f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 (modify-syntax-entry ?* "." f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (modify-syntax-entry ?/ "." f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (modify-syntax-entry ?\\ "/" f90-mode-syntax-table)) ; escape chars
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 ;; keys
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (defvar f90-mode-map ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 "Keymap used in F90 mode.")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
453
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (if f90-mode-map
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (setq f90-mode-map (make-sparse-keymap))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (define-key f90-mode-map "`" 'f90-abbrev-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 (define-key f90-mode-map "\C-c;" 'f90-comment-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 (define-key f90-mode-map "\C-\M-a" 'f90-beginning-of-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (define-key f90-mode-map "\C-\M-e" 'f90-end-of-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 (define-key f90-mode-map "\C-\M-h" 'f90-mark-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 (define-key f90-mode-map "\C-\M-q" 'f90-indent-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (define-key f90-mode-map "\C-j" 'f90-indent-new-line) ; LFD equals C-j
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 (define-key f90-mode-map "\r" 'newline)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 (define-key f90-mode-map "\C-c\r" 'f90-break-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 ;; (define-key f90-mode-map [M-return] 'f90-break-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (define-key f90-mode-map "\C-c\C-d" 'f90-join-lines)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (define-key f90-mode-map "\C-c\C-f" 'f90-fill-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (define-key f90-mode-map "\C-c\C-p" 'f90-previous-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 (define-key f90-mode-map "\C-c\C-n" 'f90-next-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 (define-key f90-mode-map "\C-c\C-w" 'f90-insert-end)
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
472 (define-key f90-mode-map "\t" 'f90-indent-line)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
473 (define-key f90-mode-map "," 'f90-electric-insert)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
474 (define-key f90-mode-map "+" 'f90-electric-insert)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
475 (define-key f90-mode-map "-" 'f90-electric-insert)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
476 (define-key f90-mode-map "*" 'f90-electric-insert)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
477 (define-key f90-mode-map "/" 'f90-electric-insert))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
478
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
479
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 ;; menus
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
481 (if (string-match "XEmacs" emacs-version)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
482 (defvar f90-xemacs-menu
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
483 '("F90"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
484 ["Indent Subprogram" f90-indent-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
485 ["Mark Subprogram" f90-mark-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
486 ["Beginning of Subprogram" f90-beginning-of-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
487 ["End of Subprogram" f90-end-of-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
488 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
489 ["(Un)Comment Region" f90-comment-region t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
490 ["Indent Region" indent-region t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
491 ["Fill Region" f90-fill-region t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
492 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
493 ["Break Line at Point" f90-break-line t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
494 ["Join with Next Line" f90-join-lines t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
495 ["Insert Newline" newline t]
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
496 ["Insert Block End" f90-insert-end t]
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
497 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
498 ["Upcase Keywords (buffer)" f90-upcase-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
499 ["Upcase Keywords (region)" f90-upcase-region-keywords
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
500 t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
501 ["Capitalize Keywords (buffer)" f90-capitalize-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
502 ["Capitalize Keywords (region)"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
503 f90-capitalize-region-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
504 ["Downcase Keywords (buffer)" f90-downcase-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
505 ["Downcase Keywords (region)"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
506 f90-downcase-region-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
507 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
508 ["Toggle abbrev-mode" abbrev-mode t]
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
509 ["Toggle auto-fill" auto-fill-mode t])
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
510 "XEmacs menu for F90 mode.")
10613
3df8ec7c2ace Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 10612
diff changeset
511 ;; Emacs
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
512
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
513 (defvar f90-change-case-menu
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
514 (let ((map (make-sparse-keymap "Change Keyword Case")))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
515
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
516 (define-key map [dkr] (cons "Downcase Keywords (region)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
517 'f90-downcase-region-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
518 (put 'f90-downcase-region-keywords 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
519
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
520 (define-key map [ckr] (cons "Capitalize Keywords (region)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
521 'f90-capitalize-region-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
522 (put 'f90-capitalize-region-keywords 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
523
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
524 (define-key map [ukr] (cons "Upcase Keywords (region)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
525 'f90-upcase-region-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
526 (put 'f90-upcase-region-keywords 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
527
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
528 (define-key map [line] (list "-----------------"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
529
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
530 (define-key map [dkb] (cons "Downcase Keywords (buffer)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
531 'f90-downcase-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
532
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
533 (define-key map [ckb] (cons "Capitalize Keywords (buffer)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
534 'f90-capitalize-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
535
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
536 (define-key map [ukb] (cons "Upcase Keywords (buffer)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
537 'f90-upcase-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
538 map)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
539 "Submenu for change of case.")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
540 (defalias 'f90-change-case-menu f90-change-case-menu)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
541
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
542 ;; font-lock-menu and function calls
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
543 (defalias 'f90-font-lock-on 'font-lock-mode)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
544 (defalias 'f90-font-lock-off 'font-lock-mode)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
545 (put 'f90-font-lock-on 'menu-enable 'font-lock-mode)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
546 (put 'f90-font-lock-off 'menu-enable '(not font-lock-mode))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
547
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
548 (defun f90-font-lock-1 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
549 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
550 "Set font-lock-keywords to f90-font-lock-keywords-1."
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
551 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
552 (setq font-lock-keywords f90-font-lock-keywords-1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
553 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
554
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
555 (defun f90-font-lock-2 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
556 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
557 "Set font-lock-keywords to f90-font-lock-keywords-2."
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
558 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
559 (setq font-lock-keywords f90-font-lock-keywords-2)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
560 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
561
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
562 (defun f90-font-lock-3 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
563 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
564 "Set font-lock-keywords to f90-font-lock-keywords-3."
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
565 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
566 (setq font-lock-keywords f90-font-lock-keywords-3)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
567 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
568
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
569 (defun f90-font-lock-4 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
570 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
571 "Set font-lock-keywords to f90-font-lock-keywords-4."
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
572 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
573 (setq font-lock-keywords f90-font-lock-keywords-4)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
574 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
575
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
576 (defvar f90-font-lock-menu
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
577 (let ((map (make-sparse-keymap "f90-font-lock-menu")))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
578 (define-key map [h4] (cons "Maximum highlighting (level 4)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
579 'f90-font-lock-4))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
580 (define-key map [h3] (cons "Heavy highlighting (level 3)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
581 'f90-font-lock-3))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
582 (define-key map [h2] (cons "Default highlighting (level 2)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
583 'f90-font-lock-2))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
584 (define-key map [h1] (cons "Light highlighting (level 1)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
585 'f90-font-lock-1))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
586 (define-key map [line] (list "-----------------"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
587 (define-key map [floff] (cons "Turn off font-lock-mode"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
588 'f90-font-lock-on))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
589 (define-key map [flon] (cons "Turn on font-lock-mode"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
590 'f90-font-lock-off))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
591 map)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
592 "Submenu for highlighting using font-lock-mode.")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
593 (defalias 'f90-font-lock-menu f90-font-lock-menu)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
594
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (define-key f90-mode-map [menu-bar] (make-sparse-keymap))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (define-key f90-mode-map [menu-bar f90]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (cons "F90" (make-sparse-keymap "f90")))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
598
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
599 (define-key f90-mode-map [menu-bar f90 f90-imenu-menu]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
600 '("Add imenu Menu" . f90-add-imenu-menu))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (define-key f90-mode-map [menu-bar f90 abbrev-mode]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 '("Toggle abbrev-mode" . abbrev-mode))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
603 (define-key f90-mode-map [menu-bar f90 auto-fill-mode]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
604 '("Toggle auto-fill" . auto-fill-mode))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
605 (define-key f90-mode-map [menu-bar f90 line1]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
606 '("----"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
607 (define-key f90-mode-map [menu-bar f90 f90-change-case-menu]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
608 (cons "Change Keyword Case" 'f90-change-case-menu))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
609 (define-key f90-mode-map [menu-bar f90 f90-font-lock-menu]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
610 (cons "Highlighting" 'f90-font-lock-menu))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
611 (define-key f90-mode-map [menu-bar f90 line2]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
612 '("----"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
613
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (define-key f90-mode-map [menu-bar f90 f90-insert-end]
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
615 '("Insert Block End" . f90-insert-end))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (define-key f90-mode-map [menu-bar f90 f90-join-lines]
12030
649ecab4ba11 Fix capitalization and punctuation in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11559
diff changeset
617 '("Join with Next Line" . f90-join-lines))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (define-key f90-mode-map [menu-bar f90 f90-break-line]
12030
649ecab4ba11 Fix capitalization and punctuation in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11559
diff changeset
619 '("Break Line at Point" . f90-break-line))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
620
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
621 (define-key f90-mode-map [menu-bar f90 line3]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
622 '("----"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
623
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 (define-key f90-mode-map [menu-bar f90 f90-fill-region]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 '("Fill Region" . f90-fill-region))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
626 (put 'f90-fill-region 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
627
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (define-key f90-mode-map [menu-bar f90 indent-region]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 '("Indent Region" . indent-region))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
630
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 (define-key f90-mode-map [menu-bar f90 f90-comment-region]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 '("(Un)Comment Region" . f90-comment-region))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
633 (put 'f90-comment-region 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
634
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
635 (define-key f90-mode-map [menu-bar f90 line4]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
636 '("----"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
637
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 (define-key f90-mode-map [menu-bar f90 f90-end-of-subprogram]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 '("End of Subprogram" . f90-end-of-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 (define-key f90-mode-map [menu-bar f90 f90-beginning-of-subprogram]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 '("Beginning of Subprogram" . f90-beginning-of-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (define-key f90-mode-map [menu-bar f90 f90-mark-subprogram]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 '("Mark Subprogram" . f90-mark-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 (define-key f90-mode-map [menu-bar f90 f90-indent-subprogram]
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
645 '("Indent Subprogram" . f90-indent-subprogram))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
646 )
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
647
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
648 ;; Regexps for finding program structures.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (defconst f90-blocks-re
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 "\\(block[ \t]*data\\|do\\|if\\|interface\\|function\\|module\\|\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 program\\|select\\|subroutine\\|type\\|where\\|forall\\)\\>")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (defconst f90-program-block-re
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 "\\(program\\|module\\|subroutine\\|function\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (defconst f90-else-like-re
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
655 "\\(else\\([ \t]*if\\|where\\)?\\|case[ \t]*\\(default\\|(\\)\\)")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (defconst f90-end-if-re
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 "end[ \t]*\\(if\\|select\\|where\\|forall\\)\\>")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (defconst f90-end-type-re
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
659 "end[ \t]*\\(type\\|interface\\|block[ \t]*data\\)")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
660 (defconst f90-type-def-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
661 "\\<\\(type\\)[ \t]*\\(,.*::[ \t]*\\|[ \t]+\\)\\(\\sw+\\)")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 (defconst f90-no-break-re "\\(\\*\\*\\|//\\|=>\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 ;; A temporary position to make region operators faster
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (defvar f90-cache-position nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (make-variable-buffer-local 'f90-cache-position)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
666 ;; A flag to tell whether f90-imenu is turned on.
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
667 (defvar f90-imenu nil)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
668 (make-variable-buffer-local 'f90-imenu)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
669
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
670
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
671 ;; Imenu support
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
672 (defvar f90-imenu-generic-expression
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
673 (let ((good-char "[^!\"\&\n \t]") (not-e "[^e!\n\"\& \t]")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
674 (not-n "[^n!\n\"\& \t]") (not-d "[^d!\n\"\& \t]"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
675 (list
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
676 '(nil "^[ \t0-9]*program[ \t]+\\(\\sw+\\)" 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
677 '("Modules" "^[ \t0-9]*module[ \t]+\\(\\sw+\\)[ \t]*\\(!\\|$\\)" 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
678 '("Types" "^[ \t0-9]*type[ \t]+\\(\\sw+\\)" 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
679 (list
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
680 "Procedures"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
681 (concat
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
682 "^[ \t0-9]*"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
683 "\\("
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
684 ;; At least three non-space characters before function/subroutine
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
685 ;; Check that the last three non-space characters don't spell E N D
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
686 "[^!\"\&\n]*\\("
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
687 not-e good-char good-char "\\|"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
688 good-char not-n good-char "\\|"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
689 good-char good-char not-d "\\)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
690 "\\|"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
691 ;; Less than three non-space characters before function/subroutine
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
692 good-char "?" good-char "?"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
693 "\\)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
694 "[ \t]*\\(function\\|subroutine\\)[ \t]+\\(\\sw+\\)")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
695 4)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
696 "imenu generic expression for F90 mode.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
697
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
698 (defun f90-add-imenu-menu ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
699 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
700 "Add an imenu menu to the menubar."
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
701 (if (not f90-imenu)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
702 (progn
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
703 (imenu-add-to-menubar "F90-imenu")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
704 (redraw-frame (selected-frame))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
705 (setq f90-imenu t))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
706 (message "%s" "F90-imenu already exists.")))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
707 (put 'f90-add-imenu-menu 'menu-enable '(not f90-imenu))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
708
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
709
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
710 ;; When compiling under GNU Emacs, load imenu during compilation. If
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
711 ;; you have 19.22 or earlier, comment this out, or get imenu.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
712 (and (fboundp 'eval-when-compile)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
713 (eval-when-compile
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
714 (if (not (string-match "XEmacs" emacs-version))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
715 (require 'imenu))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
716 ()))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 ;; abbrevs have generally two letters, except standard types `c, `i, `r, `t
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 (defvar f90-mode-abbrev-table nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (if f90-mode-abbrev-table
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (let ((ac abbrevs-changed))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 (define-abbrev-table 'f90-mode-abbrev-table ())
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (define-abbrev f90-mode-abbrev-table "`al" "allocate" nil)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
725 (define-abbrev f90-mode-abbrev-table "`ab" "allocatable" nil)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (define-abbrev f90-mode-abbrev-table "`as" "assignment" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (define-abbrev f90-mode-abbrev-table "`ba" "backspace" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (define-abbrev f90-mode-abbrev-table "`bd" "block data" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (define-abbrev f90-mode-abbrev-table "`c" "character" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (define-abbrev f90-mode-abbrev-table "`cl" "close" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 (define-abbrev f90-mode-abbrev-table "`cm" "common" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (define-abbrev f90-mode-abbrev-table "`cx" "complex" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (define-abbrev f90-mode-abbrev-table "`cn" "contains" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (define-abbrev f90-mode-abbrev-table "`cy" "cycle" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (define-abbrev f90-mode-abbrev-table "`de" "deallocate" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (define-abbrev f90-mode-abbrev-table "`df" "define" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (define-abbrev f90-mode-abbrev-table "`di" "dimension" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 (define-abbrev f90-mode-abbrev-table "`dw" "do while" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (define-abbrev f90-mode-abbrev-table "`el" "else" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (define-abbrev f90-mode-abbrev-table "`eli" "else if" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 (define-abbrev f90-mode-abbrev-table "`elw" "elsewhere" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (define-abbrev f90-mode-abbrev-table "`eq" "equivalence" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (define-abbrev f90-mode-abbrev-table "`ex" "external" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (define-abbrev f90-mode-abbrev-table "`ey" "entry" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (define-abbrev f90-mode-abbrev-table "`fl" "forall" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (define-abbrev f90-mode-abbrev-table "`fo" "format" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (define-abbrev f90-mode-abbrev-table "`fu" "function" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (define-abbrev f90-mode-abbrev-table "`fa" ".false." nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (define-abbrev f90-mode-abbrev-table "`im" "implicit none" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 (define-abbrev f90-mode-abbrev-table "`in " "include" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 (define-abbrev f90-mode-abbrev-table "`i" "integer" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 (define-abbrev f90-mode-abbrev-table "`it" "intent" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 (define-abbrev f90-mode-abbrev-table "`if" "interface" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 (define-abbrev f90-mode-abbrev-table "`lo" "logical" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 (define-abbrev f90-mode-abbrev-table "`mo" "module" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 (define-abbrev f90-mode-abbrev-table "`na" "namelist" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 (define-abbrev f90-mode-abbrev-table "`nu" "nullify" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (define-abbrev f90-mode-abbrev-table "`op" "optional" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 (define-abbrev f90-mode-abbrev-table "`pa" "parameter" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (define-abbrev f90-mode-abbrev-table "`po" "pointer" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 (define-abbrev f90-mode-abbrev-table "`pr" "print" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (define-abbrev f90-mode-abbrev-table "`pi" "private" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (define-abbrev f90-mode-abbrev-table "`pm" "program" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (define-abbrev f90-mode-abbrev-table "`pu" "public" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (define-abbrev f90-mode-abbrev-table "`r" "real" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (define-abbrev f90-mode-abbrev-table "`rc" "recursive" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 (define-abbrev f90-mode-abbrev-table "`rt" "return" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (define-abbrev f90-mode-abbrev-table "`rw" "rewind" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (define-abbrev f90-mode-abbrev-table "`se" "select" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 (define-abbrev f90-mode-abbrev-table "`sq" "sequence" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 (define-abbrev f90-mode-abbrev-table "`su" "subroutine" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 (define-abbrev f90-mode-abbrev-table "`ta" "target" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 (define-abbrev f90-mode-abbrev-table "`tr" ".true." nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (define-abbrev f90-mode-abbrev-table "`t" "type" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 (define-abbrev f90-mode-abbrev-table "`wh" "where" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 (define-abbrev f90-mode-abbrev-table "`wr" "write" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 (setq abbrevs-changed ac)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 ;;;###autoload
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 (defun f90-mode ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 "Major mode for editing Fortran 90 code in free format.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 \\[f90-indent-new-line] corrects current indentation and creates new\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 indented line.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 \\[f90-indent-line] indents the current line correctly.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 \\[f90-indent-subprogram] indents the current subprogram.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 Type `? or `\\[help-command] to display a list of built-in\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 abbrevs for F90 keywords.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 Key definitions:
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 \\{f90-mode-map}
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 Variables controlling indentation style and extra features:
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 f90-do-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 Extra indentation within do blocks. (default 3)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 f90-if-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 Extra indentation within if/select case/where/forall blocks. (default 3)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 f90-type-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 Extra indentation within type/interface/block-data blocks. (default 3)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 f90-program-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 Extra indentation within program/module/subroutine/function blocks.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (default 2)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 f90-continuation-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 Extra indentation applied to continuation lines. (default 5)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 f90-comment-region
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 String inserted by \\[f90-comment-region] at start of each line in
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 region. (default \"!!!$\")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
810 f90-indented-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
811 Regexp determining the type of comment to be intended like code.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
812 (default \"!\")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
813 f90-directive-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
814 Regexp of comment-like directive like \"!HPF\\\\$\", not to be indented.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
815 (default \"!hpf\\\\$\")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 f90-break-delimiters
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 Regexp holding list of delimiters at which lines may be broken.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 (default \"[-+*/><=,% \\t]\")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 f90-break-before-delimiters
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 Non-nil causes `f90-do-auto-fill' to break lines before delimiters.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (default t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 f90-beginning-ampersand
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 Automatic insertion of \& at beginning of continuation lines. (default t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 f90-smart-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 From an END statement, check and fill the end using matching block start.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 Allowed values are 'blink, 'no-blink, and nil, which determine
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 whether to blink the matching beginning.) (default 'blink)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 f90-auto-keyword-case
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 Automatic change of case of keywords. (default nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 The possibilities are 'downcase-word, 'upcase-word, 'capitalize-word.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 f90-leave-line-no
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 Do not left-justify line numbers. (default nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 f90-startup-message
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 Set to nil to inhibit message first time F90 mode is used. (default t)
15207
5be55ce2c9fa (f90-hilit-patterns): Avoid using undefined variables.
Richard M. Stallman <rms@gnu.org>
parents: 15052
diff changeset
835 f90-keywords-re
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 List of keywords used for highlighting/upcase-keywords etc.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 Turning on F90 mode calls the value of the variable `f90-mode-hook'
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 with no args, if that value is non-nil."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 (kill-all-local-variables)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 (setq major-mode 'f90-mode)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 (setq mode-name "F90")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (setq local-abbrev-table f90-mode-abbrev-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 (set-syntax-table f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 (use-local-map f90-mode-map)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (make-local-variable 'indent-line-function)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (setq indent-line-function 'f90-indent-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 (make-local-variable 'indent-region-function)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (setq indent-region-function 'f90-indent-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 (make-local-variable 'require-final-newline)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (setq require-final-newline t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 (make-local-variable 'comment-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (setq comment-start "!")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 (make-local-variable 'comment-start-skip)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (setq comment-start-skip "!+ *")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 (make-local-variable 'comment-indent-function)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (setq comment-indent-function 'f90-comment-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (make-local-variable 'abbrev-all-caps)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 (setq abbrev-all-caps t)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
861 (make-local-variable 'normal-auto-fill-function)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
862 (setq normal-auto-fill-function 'f90-do-auto-fill)
11501
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
863 (setq indent-tabs-mode nil)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 ;; Setting up things for font-lock
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
865 (if (string-match "XEmacs" emacs-version)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
866 (progn
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
867 (put 'f90-mode 'font-lock-keywords-case-fold-search t)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
868 (if (and current-menubar
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
869 (not (assoc "F90" current-menubar)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
870 (progn
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
871 (set-buffer-menubar (copy-sequence current-menubar))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
872 (add-submenu nil f90-xemacs-menu)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
873 (make-local-variable 'font-lock-keywords)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
874 (setq font-lock-keywords f90-font-lock-keywords))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
875 ;; Emacs
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
876 (make-local-variable 'font-lock-defaults)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
877 (setq font-lock-defaults '(f90-font-lock-keywords nil t))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
878
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
879 ;; Tell imenu how to handle f90.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
880 (make-local-variable 'imenu-generic-expression)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
881 (setq imenu-generic-expression f90-imenu-generic-expression))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (run-hooks 'f90-mode-hook)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 (if f90-startup-message
10644
ce2d2fe2fa79 (f90-mode-version): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents: 10613
diff changeset
884 (message "Emacs F90 mode; please report bugs to %s" bug-f90-mode))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 (setq f90-startup-message nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 ;; inline-functions
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 (defsubst f90-get-beg-of-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 (save-excursion (beginning-of-line) (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (defsubst f90-get-end-of-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 (save-excursion (end-of-line) (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (defsubst f90-in-string ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 (let ((beg-pnt
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 (if (and f90-cache-position (> (point) f90-cache-position))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 f90-cache-position
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 (point-min))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 (nth 3 (parse-partial-sexp beg-pnt (point)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 (defsubst f90-in-comment ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 (let ((beg-pnt
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 (if (and f90-cache-position (> (point) f90-cache-position))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 f90-cache-position
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (point-min))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 (nth 4 (parse-partial-sexp beg-pnt (point)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (defsubst f90-line-continued ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 (let ((bol (f90-get-beg-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 (while (f90-in-comment)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 (search-backward "!" bol)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (skip-chars-backward "!"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 (skip-chars-backward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 (= (preceding-char) ?&))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (defsubst f90-current-indentation ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 "Return indentation of current line.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 Line-numbers are considered whitespace characters."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 (current-column)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (defsubst f90-indent-to (col &optional no-line-number)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 "Indent current line to column COL.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 If no-line-number nil, jump over a possible line-number."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (if (not no-line-number)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 (skip-chars-forward " \t0-9"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (delete-horizontal-space)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (if (zerop (current-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (indent-to col)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (indent-to col 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (defsubst f90-match-piece (arg)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (if (match-beginning arg)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (buffer-substring (match-beginning arg) (match-end arg))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (defsubst f90-get-present-comment-type ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (let ((type nil) (eol (f90-get-end-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (if (f90-in-comment)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (re-search-forward "[!]+" eol)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 (while (f90-in-string)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 (re-search-forward "[!]+" eol))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (setq type (buffer-substring (match-beginning 0) (match-end 0)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 type)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 (defsubst f90-equal-symbols (a b)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 "Compare strings neglecting case and allowing for nil value."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 (let ((a-local (if a (downcase a) nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 (b-local (if b (downcase b) nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 (equal a-local b-local)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
958 ;; XEmacs 19.11 & 19.12 gives back a single char when matching an empty regular
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
959 ;; expression. Therefore, the next 2 functions are longer than necessary.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 (defsubst f90-looking-at-do ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 "Return (\"do\" name) if a do statement starts after point.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 Name is nil if the statement has no label."
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
964 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(do\\)\\>")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
965 (let (label
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
966 (struct (f90-match-piece 3)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
967 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
968 (setq label (f90-match-piece 1)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
969 (list struct label))))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
970
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
971 (defsubst f90-looking-at-select-case ()
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
972 "Return (\"select\" name) if a select-case statement starts after point.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
973 Name is nil if the statement has no label."
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
974 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(select\\)[ \t]*case[ \t]*(")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
975 (let (label
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
976 (struct (f90-match-piece 3)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
977 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
978 (setq label (f90-match-piece 1)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
979 (list struct label))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 (defsubst f90-looking-at-if-then ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 "Return (\"if\" name) if an if () then statement starts after point.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 Name is nil if the statement has no label."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (let (struct (label nil))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
986 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(if\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 (setq struct (f90-match-piece 3))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
989 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (setq label (f90-match-piece 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (goto-char (scan-lists (point) 1 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 (skip-chars-forward " \t")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
993 (if (or (looking-at "then\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (if (f90-line-continued)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 (f90-next-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 (skip-chars-forward " \t0-9&")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
998 (looking-at "then\\>"))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 (list struct label)))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 (defsubst f90-looking-at-where-or-forall ()
18213
94f007fc6138 (f90-looking-at-where-or-forall): Recognize where/forall
Karl Heuer <kwzh@gnu.org>
parents: 17413
diff changeset
1002 "Return (kind name) if a where or forall block starts after point.
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1003 Name is nil if the statement has no label."
18213
94f007fc6138 (f90-looking-at-where-or-forall): Recognize where/forall
Karl Heuer <kwzh@gnu.org>
parents: 17413
diff changeset
1004 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)")
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1005 (let (label
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1006 (struct (f90-match-piece 3)))
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1007 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1008 (setq label (f90-match-piece 1)))
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1009 (list struct label))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 (defsubst f90-looking-at-type-like ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 "Return (kind name) at the start of a type/interface/block-data block.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 Name is non-nil only for type."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 (cond
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1015 ((looking-at f90-type-def-re)
11501
a56d6a86fa85 (f90-keywords): "only" added to keyword list.
Karl Heuer <kwzh@gnu.org>
parents: 10882
diff changeset
1016 (list (f90-match-piece 1) (f90-match-piece 3)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1017 ((looking-at "\\(interface\\|block[\t]*data\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 (list (f90-match-piece 1) nil))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 (defsubst f90-looking-at-program-block-start ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 "Return (kind name) if a program block with name name starts after point."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 (cond
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1023 ((looking-at "\\(program\\)[ \t]+\\(\\sw+\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 (list (f90-match-piece 1) (f90-match-piece 2)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 ((and (not (looking-at "module[ \t]*procedure\\>"))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1026 (looking-at "\\(module\\)[ \t]+\\(\\sw+\\)\\>"))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 (list (f90-match-piece 1) (f90-match-piece 2)))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1028 ((and (not (looking-at "end[ \t]*\\(function\\|subroutine\\)"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1029 (looking-at "[^!\"\&\n]*\\(function\\|subroutine\\)[ \t]+\\(\\sw+\\)"))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 (list (f90-match-piece 1) (f90-match-piece 2)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 (defsubst f90-looking-at-program-block-end ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 "Return list of type and name of end of block."
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1034 (if (looking-at (concat "end[ \t]*" f90-blocks-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1035 "?\\([ \t]+\\(\\sw+\\)\\)?\\>"))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 (list (f90-match-piece 1) (f90-match-piece 3))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 (defsubst f90-comment-indent ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (cond ((looking-at "!!!") 0)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1040 ((and f90-directive-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1041 (looking-at f90-directive-comment-re)) 0)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 ((looking-at (regexp-quote f90-comment-region)) 0)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1043 ((looking-at f90-indented-comment-re)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 (f90-calculate-indent))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 (t (skip-chars-backward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 (max (if (bolp) 0 (1+ (current-column))) comment-column))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 (defsubst f90-present-statement-cont ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 "Return continuation properties of present statement."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (let (pcont cont)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 (setq pcont (if (f90-previous-statement) (f90-line-continued) nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 (setq cont (f90-line-continued))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 (cond ((and (not pcont) (not cont)) 'single)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 ((and (not pcont) cont) 'begin)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 ((and pcont (not cont)) 'end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 ((and pcont cont) 'middle)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 (t (error)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (defsubst f90-indent-line-no ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 (if f90-leave-line-no
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 (if (and (not (zerop (skip-chars-forward " \t")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (looking-at "[0-9]"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (delete-horizontal-space)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 (skip-chars-forward " \t0-9"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 (defsubst f90-no-block-limit ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 (let ((eol (f90-get-end-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 (not (or (looking-at "end")
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1072 (looking-at "\\(do\\|if\\|else\\(if\\|where\\)?\
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1073 \\|select[ \t]*case\\|case\\|where\\|forall\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (looking-at "\\(program\\|module\\|interface\\|\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 block[ \t]*data\\)\\>")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1076 (looking-at "\\(contains\\|\\sw+[ \t]*:\\)")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1077 (looking-at f90-type-def-re)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 (re-search-forward "\\(function\\|subroutine\\)" eol t))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (defsubst f90-update-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 (let (bol eol)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1082 (if f90-auto-keyword-case
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 (progn (setq bol (f90-get-beg-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 eol (f90-get-end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (if f90-auto-keyword-case
15244
be4d30237fe6 Delete the hilit19 support--it doesn't work.
Karl Heuer <kwzh@gnu.org>
parents: 15207
diff changeset
1086 (f90-change-keywords f90-auto-keyword-case bol eol))))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1088 (defun f90-electric-insert ()
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1089 (interactive)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1090 "Calls f90-do-auto-fill at each operator insertion."
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1091 (self-insert-command 1)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1092 (f90-update-line)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1093 (if auto-fill-function (f90-do-auto-fill)))
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1094
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 (defun f90-get-correct-indent ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 "Get correct indent for a line starting with line number.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 Does not check type and subprogram indentation."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 (let ((epnt (f90-get-end-of-line)) icol cont)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 (while (and (f90-previous-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 (or (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 (setq cont (f90-present-statement-cont))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 (or (eq cont 'end) (eq cont 'middle)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 (looking-at "[ \t]*[0-9]"))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (setq icol (current-indentation))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 (if (re-search-forward "\\(if\\|do\\|select\\|where\\|forall\\)"
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 (f90-get-end-of-line) t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 (beginning-of-line) (skip-chars-forward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (cond ((f90-looking-at-do)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (setq icol (+ icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 ((or (f90-looking-at-if-then)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 (f90-looking-at-where-or-forall)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 (setq icol (+ icol f90-if-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (end-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (while (re-search-forward
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1119 "\\(if\\|do\\|select\\|where\\|forall\\)" epnt t)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 (cond ((f90-looking-at-do)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 (setq icol (+ icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 ((or (f90-looking-at-if-then)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (f90-looking-at-where-or-forall)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (setq icol (+ icol f90-if-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 ((looking-at f90-end-if-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (setq icol (- icol f90-if-indent)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1129 ((looking-at "end[ \t]*do\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 (setq icol (- icol f90-do-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 (end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 icol)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 (defun f90-calculate-indent ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 "Calculate the indent column based on previous statements."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (let (icol cont (case-fold-search t) (pnt (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 (if (not (f90-previous-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 (setq icol 0)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 (setq cont (f90-present-statement-cont))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 (if (eq cont 'end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 (while (not (eq 'begin (f90-present-statement-cont)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 (f90-previous-statement)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (cond ((eq cont 'begin)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 (setq icol (+ (f90-current-indentation)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 f90-continuation-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 ((eq cont 'middle) (setq icol(current-indentation)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 (t (setq icol (f90-current-indentation))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 (skip-chars-forward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (if (looking-at "[0-9]")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 (setq icol (f90-get-correct-indent))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 (cond ((or (f90-looking-at-if-then)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 (f90-looking-at-where-or-forall)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 (f90-looking-at-select-case)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 (looking-at f90-else-like-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 (setq icol (+ icol f90-if-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 ((f90-looking-at-do)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 (setq icol (+ icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 ((f90-looking-at-type-like)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 (setq icol (+ icol f90-type-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 ((or (f90-looking-at-program-block-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 (looking-at "contains[ \t]*\\($\\|!\\)"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 (setq icol (+ icol f90-program-indent)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 (goto-char pnt)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 (cond ((looking-at "[ \t]*$"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 ((looking-at "[ \t]*#") ; Check for cpp directive.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 (setq icol 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 (t
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 (cond ((or (looking-at f90-else-like-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 (looking-at f90-end-if-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 (setq icol (- icol f90-if-indent)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1176 ((looking-at "end[ \t]*do\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 (setq icol (- icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 ((looking-at f90-end-type-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 (setq icol (- icol f90-type-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 ((or (looking-at "contains[ \t]*\\(!\\|$\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 (setq icol (- icol f90-program-indent))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 ))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 icol))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 ;; Statement = statement line, a line which is neither blank, nor a comment.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 (defun f90-previous-statement ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 "Move point to beginning of the previous F90 statement.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 Return nil if no previous statement is found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 (let (not-first-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 (while (and (setq not-first-statement (zerop (forward-line -1)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1194 (looking-at "[ \t0-9]*\\(!\\|$\\|#\\)")))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 not-first-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 (defun f90-next-statement ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 "Move point to beginning of the next F90 statement.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 Return nil if no later statement is found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 (let (not-last-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 (while (and (setq not-last-statement
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 (and (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 (not (eobp))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 (looking-at "[ \t0-9]*\\(!\\|$\\)")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 not-last-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 (defun f90-beginning-of-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 "Move point to the beginning of subprogram.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 Return (type name) or nil if not found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 (let ((count 1) (case-fold-search t) matching-beg)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 (if (setq matching-beg (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 (setq count (- count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 (while (and (not (zerop count))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 (re-search-backward f90-program-block-re nil 'move))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 (cond
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 ((setq matching-beg (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 (setq count (- count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 ((f90-looking-at-program-block-end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 (setq count (+ count 1)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 (if (zerop count)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 matching-beg
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 (message "No beginning-found.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 (defun f90-end-of-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 "Move point to the end of subprogram.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 Return (type name) or nil if not found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 (let ((count 1) (case-fold-search t) matching-end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 (if (setq matching-end (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 (setq count (1- count)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 (while (and (not (zerop count))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 (re-search-forward f90-program-block-re nil 'move))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 (cond ((f90-looking-at-program-block-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 (setq count (+ count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 ((setq matching-end (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 (setq count (1- count ))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 (end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 (forward-line 1)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 (if (zerop count)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 matching-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 (message "No end found.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 (defun f90-mark-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 "Put mark at end of F90 subprogram, point at beginning.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 Marks are pushed and highlight (grey shadow) is turned on."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 (let ((pos (point)) program)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 (f90-end-of-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 (push-mark (point) t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 (goto-char pos)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 (setq program (f90-beginning-of-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 ;; The keywords in the preceding lists assume case-insensitivity.
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1264 (if (string-match "XEmacs" emacs-version)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 (zmacs-activate-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 (setq mark-active t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 (setq deactivate-mark nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 program))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 (defun f90-comment-region (beg-region end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 "Comment/uncomment every line in the region.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 Insert f90-comment-region at the beginning of every line in the region
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 or, if already present, remove it."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 (let ((end (make-marker)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 (set-marker end end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 (goto-char beg-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 (if (looking-at (regexp-quote f90-comment-region))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 (delete-region (point) (match-end 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 (insert f90-comment-region))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 (while (and (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 (< (point) (marker-position end)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 (if (looking-at (regexp-quote f90-comment-region))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 (delete-region (point) (match-end 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 (insert f90-comment-region)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 (set-marker end nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 (defun f90-indent-line (&optional no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 "Indent current line as F90 code."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 (let (indent (no-line-number nil) (pos (make-marker)) (case-fold-search t))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 (set-marker pos (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 (beginning-of-line) ; Digits after & \n are not line-no
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 (if (save-excursion (and (f90-previous-statement) (f90-line-continued)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 (progn (setq no-line-number t) (skip-chars-forward " \t"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 (f90-indent-line-no))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 (if (looking-at "!")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 (setq indent (f90-comment-indent))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1300 (if (and (looking-at "end") f90-smart-end)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1301 (f90-match-end))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 (setq indent (f90-calculate-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 (if (zerop (- indent (current-column)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 nil
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 (f90-indent-to indent no-line-number))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 ;; If initial point was within line's indentation,
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 ;; position after the indentation. Else stay at same point in text.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 (if (< (point) (marker-position pos))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 (goto-char (marker-position pos)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 (if (not no-update) (f90-update-line))
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1311 (if auto-fill-function (f90-do-auto-fill))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 (set-marker pos nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 (defun f90-indent-new-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 "Reindent the current F90 line, insert a newline and indent the newline.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 An abbrev before point is expanded if `abbrev-mode' is non-nil.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 If run in the middle of a line, the line is not broken."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 (let (string cont (case-fold-search t))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 (if abbrev-mode (expand-abbrev))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 (beginning-of-line) ; Reindent where likely to be needed.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 (f90-indent-line-no)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 (if (or (looking-at "\\(end\\|else\\|!\\)"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 (f90-indent-line 'no-update))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 (delete-horizontal-space) ;Destroy trailing whitespace
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 (setq string (f90-in-string))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 (setq cont (f90-line-continued))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 (if (and string (not cont)) (insert "&"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 (f90-update-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 (newline)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 (if (or string (and cont f90-beginning-ampersand)) (insert "&"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 (f90-indent-line 'no-update)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 (defun f90-indent-region (beg-region end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 "Indent every line in region by forward parsing."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 (let ((end-region-mark (make-marker)) (save-point (point-marker))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 (block-list nil) ind-lev ind-curr ind-b cont
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 struct beg-struct end-struct)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 (set-marker end-region-mark end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 (goto-char beg-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 ;; first find a line which is not a continuation line or comment
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 (beginning-of-line)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1346 (while (and (looking-at "[ \t]*[0-9]*\\(!\\|#\\|[ \t]*$\\)")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 (progn (f90-indent-line 'no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 (zerop (forward-line 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 (< (point) end-region-mark)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 (setq cont (f90-present-statement-cont))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 (while (and (or (eq cont 'middle) (eq cont 'end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 (f90-previous-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 (setq cont (f90-present-statement-cont)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 ;; process present line for beginning of block
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 (setq f90-cache-position (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 (f90-indent-line 'no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 (setq ind-lev (f90-current-indentation))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 (setq ind-curr ind-lev)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 (setq struct nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 (setq ind-b (cond ((setq struct (f90-looking-at-do)) f90-do-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 ((or (setq struct (f90-looking-at-if-then))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 (setq struct (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 (setq struct (f90-looking-at-where-or-forall))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 (looking-at f90-else-like-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 f90-if-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 ((setq struct (f90-looking-at-type-like))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 f90-type-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 ((or(setq struct (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 (looking-at "contains[ \t]*\\($\\|!\\)"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 (if ind-b (setq ind-lev (+ ind-lev ind-b)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 (if struct (setq block-list (cons struct block-list)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 (while (and (f90-line-continued) (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 (< (point) end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 (if (not (zerop (- (current-indentation)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 (+ ind-curr f90-continuation-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 (f90-indent-to (+ ind-curr f90-continuation-indent) 'no-line-no)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 ;; process all following lines
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 (while (and (zerop (forward-line 1)) (< (point) end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 (f90-indent-line-no)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 (setq f90-cache-position (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 (cond ((looking-at "[ \t]*$") (setq ind-curr 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 ((looking-at "[ \t]*#") (setq ind-curr 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 ((looking-at "!") (setq ind-curr (f90-comment-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 ((f90-no-block-limit) (setq ind-curr ind-lev))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 ((looking-at f90-else-like-re) (setq ind-curr
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (- ind-lev f90-if-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 ((looking-at "contains[ \t]*\\($\\|!\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 (setq ind-curr (- ind-lev f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 ((setq ind-b
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 (cond ((setq struct (f90-looking-at-do)) f90-do-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 ((or (setq struct (f90-looking-at-if-then))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 (setq struct (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 (setq struct (f90-looking-at-where-or-forall)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 f90-if-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 ((setq struct (f90-looking-at-type-like))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 f90-type-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 ((setq struct (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 (setq ind-curr ind-lev)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 (if ind-b (setq ind-lev (+ ind-lev ind-b)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 (setq block-list (cons struct block-list)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 ((setq end-struct (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 (setq beg-struct (car block-list)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 block-list (cdr block-list))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 (if f90-smart-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 (f90-block-match (car beg-struct)(car (cdr beg-struct))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 (car end-struct)(car (cdr end-struct)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 (setq ind-b
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (cond ((looking-at f90-end-if-re) f90-if-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 ((looking-at "end[ \t]*do\\>") f90-do-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 ((looking-at f90-end-type-re) f90-type-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 ((f90-looking-at-program-block-end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 (if ind-b (setq ind-lev (- ind-lev ind-b)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 (setq ind-curr ind-lev))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 (t (setq ind-curr ind-lev)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 ;; do the indentation if necessary
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 (if (not (zerop (- ind-curr (current-column))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 (f90-indent-to ind-curr))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 (while (and (f90-line-continued) (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 (< (point) end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 (if (not (zerop (- (current-indentation)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 (+ ind-curr f90-continuation-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 (f90-indent-to (+ ind-curr f90-continuation-indent) 'no-line-no))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 ;; restore point etc
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 (setq f90-cache-position nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 (goto-char save-point)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 (set-marker end-region-mark nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 (set-marker save-point nil)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1434 (if (string-match "XEmacs" emacs-version)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 (zmacs-deactivate-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 (deactivate-mark))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 (defun f90-indent-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 "Properly indent the subprogram which contains point."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 (let (program)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 (setq program (f90-mark-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 (if program
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 (progn
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1446 (message "Indenting %s %s..."
14526
e2db2835838d (f90-indent-subprogram, f90-match-end): Pass proper format string to message.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1447 (car program) (car (cdr program)))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 (f90-indent-region (point) (mark))
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1449 (message "Indenting %s %s...done"
14526
e2db2835838d (f90-indent-subprogram, f90-match-end): Pass proper format string to message.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1450 (car program) (car (cdr program))))
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1451 (message "Indenting the whole file...")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 (f90-indent-region (point) (mark))
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1453 (message "Indenting the whole file...done")))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 ;; autofill and break-line
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 (defun f90-break-line (&optional no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 "Break line at point, insert continuation marker(s) and indent."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 (let (ctype)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 (cond ((f90-in-string)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 (insert "&") (newline) (insert "&"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 ((f90-in-comment)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 (setq ctype (f90-get-present-comment-type))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1464 (newline)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1465 (insert ctype))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1466 (t (insert "&")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 (if (not no-update) (f90-update-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 (newline)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1469 (if f90-beginning-ampersand (insert "&")))))
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1470 (f90-indent-line))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 (defun f90-find-breakpoint ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 "From fill-column, search backward for break-delimiter."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 (let ((bol (f90-get-beg-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 (re-search-backward f90-break-delimiters bol)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 (if f90-break-before-delimiters
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 (progn (backward-char)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 (if (not (looking-at f90-no-break-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 (forward-char)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 (if (looking-at f90-no-break-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 (forward-char 2)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 (forward-char)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 (defun f90-do-auto-fill ()
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1485 "Break line if non-white characters beyond fill-column. Also, update line. "
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 (interactive)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1487 ;; Break the line before or after the last delimiter (non-word char) if
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1488 ;; position is beyond fill-column.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 ;; Will not break **, //, or => (specified by f90-no-break-re).
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1490 (f90-update-line)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1491 (while (> (current-column) fill-column)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1492 (let ((pos-mark (point-marker)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1493 (move-to-column fill-column)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1494 (if (not (f90-in-string))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1495 (f90-find-breakpoint))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1496 (f90-break-line)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1497 (goto-char pos-mark)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1498 (set-marker pos-mark nil))))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1499
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 (defun f90-join-lines ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 "Join present line with next line, if this line ends with \&."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 (let (pos (oldpos (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 (skip-chars-backward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 (cond ((= (preceding-char) ?&)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 (delete-char -1)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 (setq pos (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 (forward-line 1)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 (skip-chars-forward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 (if (looking-at "\&") (delete-char 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 (delete-region pos (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 (if (not (f90-in-string))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 (progn (delete-horizontal-space) (insert " ")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 (if (and auto-fill-function
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 (> (save-excursion (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 (current-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 fill-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 (f90-do-auto-fill))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 (goto-char oldpos)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 t))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 (defun f90-fill-region (beg-region end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 "Fill every line in region by forward parsing. Join lines if possible."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 (let ((end-region-mark (make-marker))
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1528 (f90-smart-end nil) (f90-auto-keyword-case nil) (go-on t)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1529 (auto-fill-function nil))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 (set-marker end-region-mark end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 (goto-char beg-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 (while go-on
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 ;; join as much as possible
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1534 (while (f90-join-lines))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 ;; chop the line if necessary
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536 (while (> (save-excursion (end-of-line) (current-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 fill-column)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 (move-to-column fill-column)
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1539 (f90-find-breakpoint)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1540 (f90-break-line 'no-update))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 (setq go-on (and (< (point) (marker-position end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 (zerop (forward-line 1))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 (setq f90-cache-position (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 (setq f90-cache-position nil)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1545 (if (string-match "XEmacs" emacs-version)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 (zmacs-deactivate-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 (deactivate-mark))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 (defun f90-block-match (beg-block beg-name end-block end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 "Match end-struct with beg-struct and complete end-block if possible.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 Leave point at the end of line."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 (search-forward "end" (f90-get-end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 (catch 'no-match
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 (if (not (f90-equal-symbols beg-block end-block))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 (if end-block
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 (message "END %s does not match %s." end-block beg-block)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 (throw 'no-match nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 (message "Inserting %s." beg-block)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 (insert (concat " " beg-block)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 (search-forward end-block))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 (if (not (f90-equal-symbols beg-name end-name))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 (cond ((and beg-name (not end-name))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 (message "Inserting %s." beg-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 (insert (concat " " beg-name)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 ((and beg-name end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 (message "Replacing %s with %s." end-name beg-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 (search-forward end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 (replace-match beg-name))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 ((and (not beg-name) end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 (message "Deleting %s." end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 (search-forward end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 (replace-match "")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 (if end-name (search-forward end-name)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1576 (if (not (looking-at "[ \t]*!")) (delete-horizontal-space))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 (defun f90-match-end ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 "From an end foo statement, find the corresponding foo including name."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 (let ((count 1) (top-of-window (window-start)) (matching-beg nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 (end-point (point)) (case-fold-search t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 beg-name end-name beg-block end-block end-struct)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 (if (save-excursion (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 (setq end-struct (f90-looking-at-program-block-end)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 (setq end-block (car end-struct))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 (setq end-name (car (cdr end-struct)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 (beginning-of-line)
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1591 (while
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1592 (and (not (zerop count))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1593 (let ((stop nil) notexist)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1594 (while (not stop)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1595 (setq notexist
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1596 (not (re-search-backward
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1597 (concat "\\(" f90-blocks-re "\\)") nil t)))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1598 (if notexist
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1599 (setq stop t)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1600 (setq stop
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1601 (not (or (f90-in-string)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1602 (f90-in-comment))))))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1603 (not notexist)))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 (cond ((setq matching-beg
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606 (cond
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 ((f90-looking-at-do))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608 ((f90-looking-at-if-then))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 ((f90-looking-at-where-or-forall))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 ((f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 ((f90-looking-at-type-like))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 ((f90-looking-at-program-block-start))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 (setq count (- count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 ((looking-at (concat "end[ \t]*" f90-blocks-re "\\b"))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1615 (setq count (+ count 1)))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 (if (not (zerop count))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 (message "No matching beginning.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 (f90-update-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 (if (eq f90-smart-end 'blink)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 (if (< (point) top-of-window)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1621 (message "Matches %s: %s"
14526
e2db2835838d (f90-indent-subprogram, f90-match-end): Pass proper format string to message.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1622 (what-line)
e2db2835838d (f90-indent-subprogram, f90-match-end): Pass proper format string to message.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1623 (buffer-substring
e2db2835838d (f90-indent-subprogram, f90-match-end): Pass proper format string to message.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1624 (progn (beginning-of-line) (point))
e2db2835838d (f90-indent-subprogram, f90-match-end): Pass proper format string to message.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1625 (progn (end-of-line) (point))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 (sit-for 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 (setq beg-block (car matching-beg))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 (setq beg-name (car (cdr matching-beg)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629 (goto-char end-point)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 (f90-block-match beg-block beg-name end-block end-name)))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 (defun f90-insert-end ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634 "Inserts an complete end statement matching beginning of present block."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 (let ((f90-smart-end (if f90-smart-end f90-smart-end 'blink)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637 (insert "end")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 (f90-indent-new-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640 ;; abbrevs and keywords
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1641
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 (defun f90-abbrev-start ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643 "Typing `\\[help-command] or `? lists all the F90 abbrevs.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1644 Any other key combination is executed normally."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 (interactive)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1646 (let (e c)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647 (insert last-command-char)
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1648 (if (string-match "XEmacs" emacs-version)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1649 (progn
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1650 (setq e (next-command-event))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1651 (setq c (event-to-character e)))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1652 (setq c (read-event)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1653 ;; insert char if not equal to `?'
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1654 (if (or (= c ??) (eq c help-char))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 (f90-abbrev-help)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1656 (if (string-match "XEmacs" emacs-version)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1657 (setq unread-command-event e)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658 (setq unread-command-events (list c))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 (defun f90-abbrev-help ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 "List the currently defined abbrevs in F90 mode."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 (message "Listing abbrev table...")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664 (display-buffer (f90-prepare-abbrev-list-buffer))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665 (message "Listing abbrev table...done"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 (defun f90-prepare-abbrev-list-buffer ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 (set-buffer (get-buffer-create "*Abbrevs*"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 (erase-buffer)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671 (insert-abbrev-table-description 'f90-mode-abbrev-table t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 (goto-char (point-min))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 (set-buffer-modified-p nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 (edit-abbrevs-mode))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 (get-buffer-create "*Abbrevs*"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 (defun f90-upcase-keywords ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 "Upcase all F90 keywords in the buffer."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 (f90-change-keywords 'upcase-word))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 (defun f90-capitalize-keywords ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683 "Capitalize all F90 keywords in the buffer."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 (f90-change-keywords 'capitalize-word))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 (defun f90-downcase-keywords ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 "Downcase all F90 keywords in the buffer."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 (f90-change-keywords 'downcase-word))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 (defun f90-upcase-region-keywords (beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693 "Upcase all F90 keywords in the region."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695 (f90-change-keywords 'upcase-word beg end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697 (defun f90-capitalize-region-keywords (beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698 "Capitalize all F90 keywords in the region."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 (f90-change-keywords 'capitalize-word beg end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 (defun f90-downcase-region-keywords (beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 "Downcase all F90 keywords in the region."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705 (f90-change-keywords 'downcase-word beg end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707 ;; Change the keywords according to argument.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 (defun f90-change-keywords (change-word &optional beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710 (setq beg (if beg beg (point-min)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711 (setq end (if end end (point-max)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 (let ((keyword-re
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1713 (concat "\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1714 f90-keywords-re "\\|" f90-procedures-re "\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1715 f90-hpf-keywords-re "\\|" f90-operators-re "\\)"))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1716 (ref-point (point-min)) state
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1717 (modified (buffer-modified-p)) saveword back-point)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 (goto-char beg)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1719 (unwind-protect
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1720 (while (re-search-forward keyword-re end t)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1721 (if (progn
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1722 (setq state (parse-partial-sexp ref-point (point)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1723 (or (nth 3 state) (nth 4 state)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1724 (save-excursion ; Check for cpp directive.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1725 (beginning-of-line)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1726 (skip-chars-forward " \t0-9")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1727 (looking-at "#"))))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1728 ()
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1729 (setq ref-point (point)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1730 back-point (save-excursion (backward-word 1) (point)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1731 (setq saveword (buffer-substring back-point ref-point))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1732 (funcall change-word -1)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1733 (or (string= saveword (buffer-substring back-point ref-point))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1734 (setq modified t))))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1735 (or modified (set-buffer-modified-p nil))))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1736
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737 (provide 'f90)
10613
3df8ec7c2ace Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 10612
diff changeset
1738
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 ;;; f90.el ends here