annotate lisp/progmodes/f90.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents bbe0c369b955
children ab359f81e2cc
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>
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
6 ;; Last Change: Dec 29 1998
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
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
370 (list
15863
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
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
378 '("\\<\\(type\\)[ \t]*\\(.*::[ \t]*\\|[ \t]+\\)\\(\\sw+\\)"
15863
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+\\)\\)?"
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
391 (1 font-lock-keyword-face) (3 font-lock-constant-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\\)\\)\\>"
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
393 (2 font-lock-constant-face nil t) (3 font-lock-keyword-face))
13064
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))
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
396 '("\\<\\(namelist\\|common\\)[ \t]*\/\\(\\sw+\\)?\/" (1 font-lock-keyword-face) (2 font-lock-constant-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+\\)?\\>"
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
400 (1 font-lock-keyword-face) (2 font-lock-constant-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]+\\)"
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
403 (1 font-lock-keyword-face) (2 font-lock-constant-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)
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
405 '("^[ \t]*\\([0-9]+\\)[ \t]*[a-z]+" (1 font-lock-constant-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
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
413 (list f90-procedures-re '(1 font-lock-keyword-face t))
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
414 "\\<real\\>" ; Avoid overwriting real defs.
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
415 ))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
416 "Highlights all F90 keywords and intrinsic procedures.")
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 (defvar f90-font-lock-keywords-4
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
419 (append f90-font-lock-keywords-3
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
420 (list f90-hpf-keywords-re))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
421 "Highlights all F90 and HPF keywords.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
422
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
423 (defvar f90-font-lock-keywords
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
424 f90-font-lock-keywords-2
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
425 "*Default expressions to highlight in F90 mode.")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 ;; syntax table
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (defvar f90-mode-syntax-table nil
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 "Syntax table in use in F90 mode buffers.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (if f90-mode-syntax-table
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 (setq f90-mode-syntax-table (make-syntax-table))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (modify-syntax-entry ?\! "<" f90-mode-syntax-table) ; beg. comment
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (modify-syntax-entry ?\n ">" f90-mode-syntax-table) ; end comment
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (modify-syntax-entry ?_ "w" f90-mode-syntax-table) ; underscore in names
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (modify-syntax-entry ?\' "\"" f90-mode-syntax-table) ; string quote
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (modify-syntax-entry ?\" "\"" f90-mode-syntax-table) ; string quote
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (modify-syntax-entry ?\` "w" f90-mode-syntax-table) ; for abbrevs
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (modify-syntax-entry ?\r " " f90-mode-syntax-table) ; return is whitespace
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (modify-syntax-entry ?+ "." f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (modify-syntax-entry ?- "." f90-mode-syntax-table)
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)) ; escape chars
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 ;; keys
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (defvar f90-mode-map ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 "Keymap used in F90 mode.")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
451
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (if f90-mode-map
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (setq f90-mode-map (make-sparse-keymap))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 (define-key f90-mode-map "`" 'f90-abbrev-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (define-key f90-mode-map "\C-c;" 'f90-comment-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (define-key f90-mode-map "\C-\M-a" 'f90-beginning-of-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 (define-key f90-mode-map "\C-\M-e" 'f90-end-of-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 (define-key f90-mode-map "\C-\M-h" 'f90-mark-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (define-key f90-mode-map "\C-\M-q" 'f90-indent-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 (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
462 (define-key f90-mode-map "\r" 'newline)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (define-key f90-mode-map "\C-c\r" 'f90-break-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 ;; (define-key f90-mode-map [M-return] 'f90-break-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 (define-key f90-mode-map "\C-c\C-d" 'f90-join-lines)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (define-key f90-mode-map "\C-c\C-f" 'f90-fill-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (define-key f90-mode-map "\C-c\C-p" 'f90-previous-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (define-key f90-mode-map "\C-c\C-n" 'f90-next-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (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
470 (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
471 (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
472 (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
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))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
476
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
477
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 ;; menus
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
479 (if (string-match "XEmacs" emacs-version)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
480 (defvar f90-xemacs-menu
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
481 '("F90"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
482 ["Indent Subprogram" f90-indent-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
483 ["Mark Subprogram" f90-mark-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
484 ["Beginning of Subprogram" f90-beginning-of-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
485 ["End of Subprogram" f90-end-of-subprogram t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
486 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
487 ["(Un)Comment Region" f90-comment-region t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
488 ["Indent Region" indent-region t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
489 ["Fill Region" f90-fill-region t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
490 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
491 ["Break Line at Point" f90-break-line t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
492 ["Join with Next Line" f90-join-lines t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
493 ["Insert Newline" newline t]
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
494 ["Insert Block End" f90-insert-end t]
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
495 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
496 ["Upcase Keywords (buffer)" f90-upcase-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
497 ["Upcase Keywords (region)" f90-upcase-region-keywords
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
498 t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
499 ["Capitalize Keywords (buffer)" f90-capitalize-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
500 ["Capitalize Keywords (region)"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
501 f90-capitalize-region-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
502 ["Downcase Keywords (buffer)" f90-downcase-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
503 ["Downcase Keywords (region)"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
504 f90-downcase-region-keywords t]
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
505 "-----"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
506 ["Toggle abbrev-mode" abbrev-mode t]
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
507 ["Toggle auto-fill" auto-fill-mode t])
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
508 "XEmacs menu for F90 mode.")
10613
3df8ec7c2ace Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 10612
diff changeset
509 ;; Emacs
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
510
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
511 (defvar f90-change-case-menu
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
512 (let ((map (make-sparse-keymap "Change Keyword Case")))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
513
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
514 (define-key map [dkr] (cons "Downcase Keywords (region)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
515 'f90-downcase-region-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
516 (put 'f90-downcase-region-keywords 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
517
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
518 (define-key map [ckr] (cons "Capitalize Keywords (region)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
519 'f90-capitalize-region-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
520 (put 'f90-capitalize-region-keywords 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
521
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
522 (define-key map [ukr] (cons "Upcase Keywords (region)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
523 'f90-upcase-region-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
524 (put 'f90-upcase-region-keywords 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
525
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
526 (define-key map [line] (list "-----------------"))
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 [dkb] (cons "Downcase Keywords (buffer)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
529 'f90-downcase-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
530
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
531 (define-key map [ckb] (cons "Capitalize Keywords (buffer)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
532 'f90-capitalize-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
533
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
534 (define-key map [ukb] (cons "Upcase Keywords (buffer)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
535 'f90-upcase-keywords))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
536 map)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
537 "Submenu for change of case.")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
538 (defalias 'f90-change-case-menu f90-change-case-menu)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
539
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
540 ;; font-lock-menu and function calls
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
541 (defalias 'f90-font-lock-on 'font-lock-mode)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
542 (defalias 'f90-font-lock-off 'font-lock-mode)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
543 (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
544 (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
545
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
546 (defun f90-font-lock-1 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
547 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
548 "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
549 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
550 (setq font-lock-keywords f90-font-lock-keywords-1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
551 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
552
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
553 (defun f90-font-lock-2 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
554 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
555 "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
556 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
557 (setq font-lock-keywords f90-font-lock-keywords-2)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
558 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
559
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
560 (defun f90-font-lock-3 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
561 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
562 "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
563 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
564 (setq font-lock-keywords f90-font-lock-keywords-3)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
565 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
566
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
567 (defun f90-font-lock-4 ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
568 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
569 "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
570 (font-lock-mode 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
571 (setq font-lock-keywords f90-font-lock-keywords-4)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
572 (font-lock-fontify-buffer))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
573
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
574 (defvar f90-font-lock-menu
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
575 (let ((map (make-sparse-keymap "f90-font-lock-menu")))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
576 (define-key map [h4] (cons "Maximum highlighting (level 4)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
577 'f90-font-lock-4))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
578 (define-key map [h3] (cons "Heavy highlighting (level 3)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
579 'f90-font-lock-3))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
580 (define-key map [h2] (cons "Default highlighting (level 2)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
581 'f90-font-lock-2))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
582 (define-key map [h1] (cons "Light highlighting (level 1)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
583 'f90-font-lock-1))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
584 (define-key map [line] (list "-----------------"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
585 (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
586 'f90-font-lock-on))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
587 (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
588 'f90-font-lock-off))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
589 map)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
590 "Submenu for highlighting using font-lock-mode.")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
591 (defalias 'f90-font-lock-menu f90-font-lock-menu)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
592
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (define-key f90-mode-map [menu-bar] (make-sparse-keymap))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (define-key f90-mode-map [menu-bar f90]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (cons "F90" (make-sparse-keymap "f90")))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
596
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
597 (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
598 '("Add imenu Menu" . f90-add-imenu-menu))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 (define-key f90-mode-map [menu-bar f90 abbrev-mode]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 '("Toggle abbrev-mode" . abbrev-mode))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
601 (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
602 '("Toggle auto-fill" . auto-fill-mode))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
603 (define-key f90-mode-map [menu-bar f90 line1]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
604 '("----"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
605 (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
606 (cons "Change Keyword Case" 'f90-change-case-menu))
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-font-lock-menu]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
608 (cons "Highlighting" 'f90-font-lock-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 line2]
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
610 '("----"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
611
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 (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
613 '("Insert Block End" . f90-insert-end))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (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
615 '("Join with Next Line" . f90-join-lines))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (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
617 '("Break Line at Point" . f90-break-line))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
618
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
619 (define-key f90-mode-map [menu-bar f90 line3]
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
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 (define-key f90-mode-map [menu-bar f90 f90-fill-region]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 '("Fill Region" . f90-fill-region))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
624 (put 'f90-fill-region 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
625
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 (define-key f90-mode-map [menu-bar f90 indent-region]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 '("Indent Region" . indent-region))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
628
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 (define-key f90-mode-map [menu-bar f90 f90-comment-region]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 '("(Un)Comment Region" . f90-comment-region))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
631 (put 'f90-comment-region 'menu-enable 'mark-active)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
632
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
633 (define-key f90-mode-map [menu-bar f90 line4]
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
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (define-key f90-mode-map [menu-bar f90 f90-end-of-subprogram]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 '("End of Subprogram" . f90-end-of-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 (define-key f90-mode-map [menu-bar f90 f90-beginning-of-subprogram]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 '("Beginning of Subprogram" . f90-beginning-of-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 (define-key f90-mode-map [menu-bar f90 f90-mark-subprogram]
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 '("Mark Subprogram" . f90-mark-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (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
643 '("Indent Subprogram" . f90-indent-subprogram))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
644 )
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
645
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
646 ;; Regexps for finding program structures.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 (defconst f90-blocks-re
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 "\\(block[ \t]*data\\|do\\|if\\|interface\\|function\\|module\\|\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 program\\|select\\|subroutine\\|type\\|where\\|forall\\)\\>")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (defconst f90-program-block-re
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 "\\(program\\|module\\|subroutine\\|function\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (defconst f90-else-like-re
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
653 "\\(else\\([ \t]*if\\|where\\)?\\|case[ \t]*\\(default\\|(\\)\\)")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (defconst f90-end-if-re
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 "end[ \t]*\\(if\\|select\\|where\\|forall\\)\\>")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (defconst f90-end-type-re
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
657 "end[ \t]*\\(type\\|interface\\|block[ \t]*data\\)")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
658 (defconst f90-type-def-re
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
659 "\\<\\(type\\)\\([^(\n]*\\)\\(::\\)?[ \t]*\\b\\(\\sw+\\)")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 (defconst f90-no-break-re "\\(\\*\\*\\|//\\|=>\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 ;; A temporary position to make region operators faster
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 (defvar f90-cache-position nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (make-variable-buffer-local 'f90-cache-position)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
664 ;; 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
665 (defvar f90-imenu nil)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
666 (make-variable-buffer-local 'f90-imenu)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
667
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
668
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
669 ;; Imenu support
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
670 (defvar f90-imenu-generic-expression
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
671 (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
672 (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
673 (list
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
674 '(nil "^[ \t0-9]*program[ \t]+\\(\\sw+\\)" 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
675 '("Modules" "^[ \t0-9]*module[ \t]+\\(\\sw+\\)[ \t]*\\(!\\|$\\)" 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
676 '("Types" "^[ \t0-9]*type[ \t]+\\(\\sw+\\)" 1)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
677 (list
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
678 "Procedures"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
679 (concat
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
680 "^[ \t0-9]*"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
681 "\\("
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
682 ;; At least three non-space characters before function/subroutine
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
683 ;; 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
684 "[^!\"\&\n]*\\("
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
685 not-e good-char good-char "\\|"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
686 good-char not-n good-char "\\|"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
687 good-char good-char not-d "\\)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
688 "\\|"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
689 ;; Less than three non-space characters before function/subroutine
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
690 good-char "?" good-char "?"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
691 "\\)"
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
692 "[ \t]*\\(function\\|subroutine\\)[ \t]+\\(\\sw+\\)")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
693 4)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
694 "imenu generic expression for F90 mode.")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
695
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
696 (defun f90-add-imenu-menu ()
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
697 (interactive)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
698 "Add an imenu menu to the menubar."
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
699 (if (not f90-imenu)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
700 (progn
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
701 (imenu-add-to-menubar "F90-imenu")
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
702 (redraw-frame (selected-frame))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
703 (setq f90-imenu t))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
704 (message "%s" "F90-imenu already exists.")))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
705 (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
706
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
707
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
708 ;; When compiling under GNU Emacs, load imenu during compilation. If
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
709 ;; you have 19.22 or earlier, comment this out, or get imenu.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
710 (and (fboundp 'eval-when-compile)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
711 (eval-when-compile
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
712 (if (not (string-match "XEmacs" emacs-version))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
713 (require 'imenu))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
714 ()))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 ;; abbrevs have generally two letters, except standard types `c, `i, `r, `t
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (defvar f90-mode-abbrev-table nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (if f90-mode-abbrev-table
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (let ((ac abbrevs-changed))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (define-abbrev-table 'f90-mode-abbrev-table ())
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (define-abbrev f90-mode-abbrev-table "`al" "allocate" nil)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
723 (define-abbrev f90-mode-abbrev-table "`ab" "allocatable" nil)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (define-abbrev f90-mode-abbrev-table "`as" "assignment" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (define-abbrev f90-mode-abbrev-table "`ba" "backspace" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (define-abbrev f90-mode-abbrev-table "`bd" "block data" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (define-abbrev f90-mode-abbrev-table "`c" "character" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (define-abbrev f90-mode-abbrev-table "`cl" "close" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (define-abbrev f90-mode-abbrev-table "`cm" "common" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (define-abbrev f90-mode-abbrev-table "`cx" "complex" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 (define-abbrev f90-mode-abbrev-table "`cn" "contains" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (define-abbrev f90-mode-abbrev-table "`cy" "cycle" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (define-abbrev f90-mode-abbrev-table "`de" "deallocate" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (define-abbrev f90-mode-abbrev-table "`df" "define" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (define-abbrev f90-mode-abbrev-table "`di" "dimension" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (define-abbrev f90-mode-abbrev-table "`dw" "do while" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (define-abbrev f90-mode-abbrev-table "`el" "else" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 (define-abbrev f90-mode-abbrev-table "`eli" "else if" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (define-abbrev f90-mode-abbrev-table "`elw" "elsewhere" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (define-abbrev f90-mode-abbrev-table "`eq" "equivalence" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 (define-abbrev f90-mode-abbrev-table "`ex" "external" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (define-abbrev f90-mode-abbrev-table "`ey" "entry" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (define-abbrev f90-mode-abbrev-table "`fl" "forall" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (define-abbrev f90-mode-abbrev-table "`fo" "format" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (define-abbrev f90-mode-abbrev-table "`fu" "function" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (define-abbrev f90-mode-abbrev-table "`fa" ".false." nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (define-abbrev f90-mode-abbrev-table "`im" "implicit none" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (define-abbrev f90-mode-abbrev-table "`in " "include" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (define-abbrev f90-mode-abbrev-table "`i" "integer" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 (define-abbrev f90-mode-abbrev-table "`it" "intent" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 (define-abbrev f90-mode-abbrev-table "`if" "interface" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 (define-abbrev f90-mode-abbrev-table "`lo" "logical" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 (define-abbrev f90-mode-abbrev-table "`mo" "module" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 (define-abbrev f90-mode-abbrev-table "`na" "namelist" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 (define-abbrev f90-mode-abbrev-table "`nu" "nullify" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 (define-abbrev f90-mode-abbrev-table "`op" "optional" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 (define-abbrev f90-mode-abbrev-table "`pa" "parameter" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (define-abbrev f90-mode-abbrev-table "`po" "pointer" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 (define-abbrev f90-mode-abbrev-table "`pr" "print" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (define-abbrev f90-mode-abbrev-table "`pi" "private" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 (define-abbrev f90-mode-abbrev-table "`pm" "program" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (define-abbrev f90-mode-abbrev-table "`pu" "public" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (define-abbrev f90-mode-abbrev-table "`r" "real" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (define-abbrev f90-mode-abbrev-table "`rc" "recursive" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (define-abbrev f90-mode-abbrev-table "`rt" "return" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (define-abbrev f90-mode-abbrev-table "`rw" "rewind" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 (define-abbrev f90-mode-abbrev-table "`se" "select" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (define-abbrev f90-mode-abbrev-table "`sq" "sequence" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (define-abbrev f90-mode-abbrev-table "`su" "subroutine" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 (define-abbrev f90-mode-abbrev-table "`ta" "target" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 (define-abbrev f90-mode-abbrev-table "`tr" ".true." nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 (define-abbrev f90-mode-abbrev-table "`t" "type" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 (define-abbrev f90-mode-abbrev-table "`wh" "where" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (define-abbrev f90-mode-abbrev-table "`wr" "write" nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 (setq abbrevs-changed ac)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 ;;;###autoload
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 (defun f90-mode ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 "Major mode for editing Fortran 90 code in free format.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 \\[f90-indent-new-line] corrects current indentation and creates new\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 indented line.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 \\[f90-indent-line] indents the current line correctly.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 \\[f90-indent-subprogram] indents the current subprogram.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 Type `? or `\\[help-command] to display a list of built-in\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 abbrevs for F90 keywords.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 Key definitions:
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 \\{f90-mode-map}
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 Variables controlling indentation style and extra features:
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 f90-do-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 Extra indentation within do blocks. (default 3)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 f90-if-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 Extra indentation within if/select case/where/forall blocks. (default 3)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 f90-type-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 Extra indentation within type/interface/block-data blocks. (default 3)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 f90-program-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 Extra indentation within program/module/subroutine/function blocks.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (default 2)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 f90-continuation-indent
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 Extra indentation applied to continuation lines. (default 5)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 f90-comment-region
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 String inserted by \\[f90-comment-region] at start of each line in
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 region. (default \"!!!$\")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
808 f90-indented-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
809 Regexp determining the type of comment to be intended like code.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
810 (default \"!\")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
811 f90-directive-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
812 Regexp of comment-like directive like \"!HPF\\\\$\", not to be indented.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
813 (default \"!hpf\\\\$\")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 f90-break-delimiters
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 Regexp holding list of delimiters at which lines may be broken.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 (default \"[-+*/><=,% \\t]\")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 f90-break-before-delimiters
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 Non-nil causes `f90-do-auto-fill' to break lines before delimiters.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 (default t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 f90-beginning-ampersand
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 Automatic insertion of \& at beginning of continuation lines. (default t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 f90-smart-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 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
824 Allowed values are 'blink, 'no-blink, and nil, which determine
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 whether to blink the matching beginning.) (default 'blink)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 f90-auto-keyword-case
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 Automatic change of case of keywords. (default nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 The possibilities are 'downcase-word, 'upcase-word, 'capitalize-word.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 f90-leave-line-no
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 Do not left-justify line numbers. (default nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 f90-startup-message
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 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
833 f90-keywords-re
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 List of keywords used for highlighting/upcase-keywords etc.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 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
837 with no args, if that value is non-nil."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 (kill-all-local-variables)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 (setq major-mode 'f90-mode)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 (setq mode-name "F90")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 (setq local-abbrev-table f90-mode-abbrev-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 (set-syntax-table f90-mode-syntax-table)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (use-local-map f90-mode-map)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 (make-local-variable 'indent-line-function)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 (setq indent-line-function 'f90-indent-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (make-local-variable 'indent-region-function)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (setq indent-region-function 'f90-indent-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 (make-local-variable 'require-final-newline)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (setq require-final-newline t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 (make-local-variable 'comment-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (setq comment-start "!")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 (make-local-variable 'comment-start-skip)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (setq comment-start-skip "!+ *")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 (make-local-variable 'comment-indent-function)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (setq comment-indent-function 'f90-comment-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 (make-local-variable 'abbrev-all-caps)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (setq abbrev-all-caps t)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
859 (make-local-variable 'normal-auto-fill-function)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
860 (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
861 (setq indent-tabs-mode nil)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 ;; 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
863 (if (string-match "XEmacs" emacs-version)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
864 (progn
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
865 (put 'f90-mode 'font-lock-keywords-case-fold-search t)
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
866 (if (and (featurep 'menubar)
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
867 current-menubar
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
868 (not (assoc "F90" current-menubar)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
869 (progn
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
870 (set-buffer-menubar (copy-sequence current-menubar))
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
871 (add-submenu nil f90-xemacs-menu)))))
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
872 ;; XEmacs: (Don't need a special case, since both emacsen work alike -sb)
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
873 (make-local-variable 'font-lock-defaults)
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
874 (setq font-lock-defaults
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
875 '((f90-font-lock-keywords f90-font-lock-keywords-1
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
876 f90-font-lock-keywords-2
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
877 f90-font-lock-keywords-3
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
878 f90-font-lock-keywords-4)
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
879 nil t))
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
880 ;; Tell imenu how to handle f90.
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
881 (set (make-local-variable 'imenu-case-fold-search) t)
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
882 (make-local-variable 'imenu-generic-expression)
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
883 (setq imenu-generic-expression f90-imenu-generic-expression)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (run-hooks 'f90-mode-hook)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 (if f90-startup-message
10644
ce2d2fe2fa79 (f90-mode-version): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents: 10613
diff changeset
886 (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
887 (setq f90-startup-message nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 ;; inline-functions
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 (defsubst f90-get-beg-of-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (save-excursion (beginning-of-line) (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 (defsubst f90-get-end-of-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (save-excursion (end-of-line) (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 (defsubst f90-in-string ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 (let ((beg-pnt
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 (if (and f90-cache-position (> (point) f90-cache-position))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 f90-cache-position
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 (point-min))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 (nth 3 (parse-partial-sexp beg-pnt (point)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 (defsubst f90-in-comment ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (let ((beg-pnt
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (if (and f90-cache-position (> (point) f90-cache-position))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 f90-cache-position
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 (point-min))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (nth 4 (parse-partial-sexp beg-pnt (point)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 (defsubst f90-line-continued ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 (let ((bol (f90-get-beg-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (while (f90-in-comment)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 (search-backward "!" bol)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 (skip-chars-backward "!"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 (skip-chars-backward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (= (preceding-char) ?&))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 (defsubst f90-current-indentation ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 "Return indentation of current line.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 Line-numbers are considered whitespace characters."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (current-column)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 (defsubst f90-indent-to (col &optional no-line-number)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 "Indent current line to column COL.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 If no-line-number nil, jump over a possible line-number."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (if (not no-line-number)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (skip-chars-forward " \t0-9"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (delete-horizontal-space)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (if (zerop (current-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (indent-to col)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (indent-to col 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (defsubst f90-match-piece (arg)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 (if (match-beginning arg)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (buffer-substring (match-beginning arg) (match-end arg))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (defsubst f90-get-present-comment-type ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (let ((type nil) (eol (f90-get-end-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (if (f90-in-comment)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 (beginning-of-line)
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 (while (f90-in-string)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 (re-search-forward "[!]+" eol))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (setq type (buffer-substring (match-beginning 0) (match-end 0)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 type)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 (defsubst f90-equal-symbols (a b)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 "Compare strings neglecting case and allowing for nil value."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 (let ((a-local (if a (downcase a) nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 (b-local (if b (downcase b) nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 (equal a-local b-local)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
960 ;; 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
961 ;; expression. Therefore, the next 2 functions are longer than necessary.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 (defsubst f90-looking-at-do ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 "Return (\"do\" name) if a do statement starts after point.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 Name is nil if the statement has no label."
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
966 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(do\\)\\>")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
967 (let (label
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
968 (struct (f90-match-piece 3)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
969 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
970 (setq label (f90-match-piece 1)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
971 (list struct label))))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
972
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
973 (defsubst f90-looking-at-select-case ()
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
974 "Return (\"select\" name) if a select-case statement starts after point.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
975 Name is nil if the statement has no label."
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
976 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(select\\)[ \t]*case[ \t]*(")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
977 (let (label
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
978 (struct (f90-match-piece 3)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
979 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
980 (setq label (f90-match-piece 1)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
981 (list struct label))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 (defsubst f90-looking-at-if-then ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 "Return (\"if\" name) if an if () then statement starts after point.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 Name is nil if the statement has no label."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (let (struct (label nil))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
988 (if (looking-at "\\(\\(\\sw+\\)[ \t]*\:\\)?[ \t]*\\(if\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (setq struct (f90-match-piece 3))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
991 (if (looking-at "\\(\\sw+\\)[ \t]*\:")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 (setq label (f90-match-piece 1)))
22228
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
993 (let ((pos (scan-lists (point) 1 0)))
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
994 (and pos (goto-char pos)))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (skip-chars-forward " \t")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
996 (if (or (looking-at "then\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 (if (f90-line-continued)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 (f90-next-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 (skip-chars-forward " \t0-9&")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1001 (looking-at "then\\>"))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 (list struct label)))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 (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
1005 "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
1006 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
1007 (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
1008 (let (label
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1009 (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
1010 (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
1011 (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
1012 (list struct label))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 (defsubst f90-looking-at-type-like ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 "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
1016 Name is non-nil only for type."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (cond
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1018 ((looking-at f90-type-def-re)
23997
bbe0c369b955 1999-01-05 Dave Love <fx@gnu.org>
Dave Love <fx@gnu.org>
parents: 22228
diff changeset
1019 (list (f90-match-piece 1) (f90-match-piece 4)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1020 ((looking-at "\\(interface\\|block[\t]*data\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (list (f90-match-piece 1) nil))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 (defsubst f90-looking-at-program-block-start ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 "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
1025 (cond
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1026 ((looking-at "\\(program\\)[ \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)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 ((and (not (looking-at "module[ \t]*procedure\\>"))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1029 (looking-at "\\(module\\)[ \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)))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1031 ((and (not (looking-at "end[ \t]*\\(function\\|subroutine\\)"))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1032 (looking-at "[^!\"\&\n]*\\(function\\|subroutine\\)[ \t]+\\(\\sw+\\)"))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 (list (f90-match-piece 1) (f90-match-piece 2)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (defsubst f90-looking-at-program-block-end ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 "Return list of type and name of end of block."
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1037 (if (looking-at (concat "end[ \t]*" f90-blocks-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1038 "?\\([ \t]+\\(\\sw+\\)\\)?\\>"))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (list (f90-match-piece 1) (f90-match-piece 3))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 (defsubst f90-comment-indent ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 (cond ((looking-at "!!!") 0)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1043 ((and f90-directive-comment-re
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1044 (looking-at f90-directive-comment-re)) 0)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 ((looking-at (regexp-quote f90-comment-region)) 0)
22228
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
1046 ((and (looking-at f90-indented-comment-re)
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
1047 ;; Don't attempt to indent trailing comment as code.
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
1048 (save-excursion
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
1049 (skip-chars-backward " \t")
a12c92c5f4e9 (f90-comment-indent): Don't attempt to indent trailing comment as
Dave Love <fx@gnu.org>
parents: 20953
diff changeset
1050 (bolp)))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 (f90-calculate-indent))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 (t (skip-chars-backward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 (max (if (bolp) 0 (1+ (current-column))) comment-column))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 (defsubst f90-present-statement-cont ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 "Return continuation properties of present statement."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 (let (pcont cont)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 (setq pcont (if (f90-previous-statement) (f90-line-continued) nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (setq cont (f90-line-continued))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 (cond ((and (not pcont) (not cont)) 'single)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 ((and (not pcont) cont) 'begin)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 ((and pcont (not cont)) 'end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 ((and pcont cont) 'middle)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (t (error)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (defsubst f90-indent-line-no ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 (if f90-leave-line-no
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (if (and (not (zerop (skip-chars-forward " \t")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 (looking-at "[0-9]"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 (delete-horizontal-space)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 (skip-chars-forward " \t0-9"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 (defsubst f90-no-block-limit ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 (let ((eol (f90-get-end-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 (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
1079 (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
1080 \\|select[ \t]*case\\|case\\|where\\|forall\\)\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 (looking-at "\\(program\\|module\\|interface\\|\
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 block[ \t]*data\\)\\>")
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1083 (looking-at "\\(contains\\|\\sw+[ \t]*:\\)")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1084 (looking-at f90-type-def-re)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (re-search-forward "\\(function\\|subroutine\\)" eol t))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 (defsubst f90-update-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 (let (bol eol)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1089 (if f90-auto-keyword-case
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 (progn (setq bol (f90-get-beg-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 eol (f90-get-end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 (if f90-auto-keyword-case
15244
be4d30237fe6 Delete the hilit19 support--it doesn't work.
Karl Heuer <kwzh@gnu.org>
parents: 15207
diff changeset
1093 (f90-change-keywords f90-auto-keyword-case bol eol))))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094
16444
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1095 (defun f90-electric-insert ()
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1096 (interactive)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1097 "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
1098 (self-insert-command 1)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1099 (f90-update-line)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1100 (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
1101
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 (defun f90-get-correct-indent ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 "Get correct indent for a line starting with line number.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 Does not check type and subprogram indentation."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (let ((epnt (f90-get-end-of-line)) icol cont)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 (while (and (f90-previous-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 (or (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 (setq cont (f90-present-statement-cont))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 (or (eq cont 'end) (eq cont 'middle)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (looking-at "[ \t]*[0-9]"))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (setq icol (current-indentation))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 (if (re-search-forward "\\(if\\|do\\|select\\|where\\|forall\\)"
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 (f90-get-end-of-line) t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (beginning-of-line) (skip-chars-forward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (cond ((f90-looking-at-do)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (setq icol (+ icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 ((or (f90-looking-at-if-then)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 (f90-looking-at-where-or-forall)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 (setq icol (+ icol f90-if-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (end-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (while (re-search-forward
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1126 "\\(if\\|do\\|select\\|where\\|forall\\)" epnt t)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (cond ((f90-looking-at-do)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 (setq icol (+ icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 ((or (f90-looking-at-if-then)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 (f90-looking-at-where-or-forall)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (setq icol (+ icol f90-if-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 ((looking-at f90-end-if-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 (setq icol (- icol f90-if-indent)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1136 ((looking-at "end[ \t]*do\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 (setq icol (- icol f90-do-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 icol)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 (defun f90-calculate-indent ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 "Calculate the indent column based on previous statements."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 (let (icol cont (case-fold-search t) (pnt (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 (if (not (f90-previous-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 (setq icol 0)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 (setq cont (f90-present-statement-cont))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 (if (eq cont 'end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 (while (not (eq 'begin (f90-present-statement-cont)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (f90-previous-statement)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 (cond ((eq cont 'begin)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 (setq icol (+ (f90-current-indentation)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 f90-continuation-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 ((eq cont 'middle) (setq icol(current-indentation)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 (t (setq icol (f90-current-indentation))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 (skip-chars-forward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 (if (looking-at "[0-9]")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 (setq icol (f90-get-correct-indent))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 (cond ((or (f90-looking-at-if-then)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 (f90-looking-at-where-or-forall)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (f90-looking-at-select-case)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 (looking-at f90-else-like-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 (setq icol (+ icol f90-if-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 ((f90-looking-at-do)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 (setq icol (+ icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 ((f90-looking-at-type-like)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 (setq icol (+ icol f90-type-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 ((or (f90-looking-at-program-block-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 (looking-at "contains[ \t]*\\($\\|!\\)"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 (setq icol (+ icol f90-program-indent)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 (goto-char pnt)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 (cond ((looking-at "[ \t]*$"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 ((looking-at "[ \t]*#") ; Check for cpp directive.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 (setq icol 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 (t
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 (cond ((or (looking-at f90-else-like-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 (looking-at f90-end-if-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 (setq icol (- icol f90-if-indent)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1183 ((looking-at "end[ \t]*do\\>")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 (setq icol (- icol f90-do-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 ((looking-at f90-end-type-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 (setq icol (- icol f90-type-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 ((or (looking-at "contains[ \t]*\\(!\\|$\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 (setq icol (- icol f90-program-indent))))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 ))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 icol))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 ;; Statement = statement line, a line which is neither blank, nor a comment.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 (defun f90-previous-statement ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 "Move point to beginning of the previous F90 statement.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 Return nil if no previous statement is found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 (let (not-first-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 (while (and (setq not-first-statement (zerop (forward-line -1)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1201 (looking-at "[ \t0-9]*\\(!\\|$\\|#\\)")))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 not-first-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 (defun f90-next-statement ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 "Move point to beginning of the next F90 statement.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 Return nil if no later statement is found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 (let (not-last-statement)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 (while (and (setq not-last-statement
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 (and (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 (not (eobp))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 (looking-at "[ \t0-9]*\\(!\\|$\\)")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 not-last-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 (defun f90-beginning-of-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 "Move point to the beginning of subprogram.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 Return (type name) or nil if not found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 (let ((count 1) (case-fold-search t) matching-beg)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 (if (setq matching-beg (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 (setq count (- count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 (while (and (not (zerop count))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 (re-search-backward f90-program-block-re nil 'move))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 (cond
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 ((setq matching-beg (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 (setq count (- count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 ((f90-looking-at-program-block-end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 (setq count (+ count 1)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 (if (zerop count)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 matching-beg
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 (message "No beginning-found.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 (defun f90-end-of-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 "Move point to the end of subprogram.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 Return (type name) or nil if not found."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 (let ((count 1) (case-fold-search t) matching-end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 (if (setq matching-end (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 (setq count (1- count)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 (while (and (not (zerop count))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 (re-search-forward f90-program-block-re nil 'move))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 (cond ((f90-looking-at-program-block-start)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 (setq count (+ count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 ((setq matching-end (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 (setq count (1- count ))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 (end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 (forward-line 1)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 (if (zerop count)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 matching-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 (message "No end found.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 (defun f90-mark-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 "Put mark at end of F90 subprogram, point at beginning.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 Marks are pushed and highlight (grey shadow) is turned on."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 (let ((pos (point)) program)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 (f90-end-of-subprogram)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 (push-mark (point) t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 (goto-char pos)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 (setq program (f90-beginning-of-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 ;; The keywords in the preceding lists assume case-insensitivity.
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1271 (if (string-match "XEmacs" emacs-version)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 (zmacs-activate-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 (setq mark-active t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 (setq deactivate-mark nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 program))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 (defun f90-comment-region (beg-region end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 "Comment/uncomment every line in the region.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 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
1280 or, if already present, remove it."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 (let ((end (make-marker)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 (set-marker end end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 (goto-char beg-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 (if (looking-at (regexp-quote f90-comment-region))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 (delete-region (point) (match-end 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 (insert f90-comment-region))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 (while (and (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 (< (point) (marker-position end)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 (if (looking-at (regexp-quote f90-comment-region))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 (delete-region (point) (match-end 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 (insert f90-comment-region)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 (set-marker end nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 (defun f90-indent-line (&optional no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 "Indent current line as F90 code."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 (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
1300 (set-marker pos (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 (beginning-of-line) ; Digits after & \n are not line-no
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 (if (save-excursion (and (f90-previous-statement) (f90-line-continued)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 (progn (setq no-line-number t) (skip-chars-forward " \t"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 (f90-indent-line-no))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 (if (looking-at "!")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 (setq indent (f90-comment-indent))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1307 (if (and (looking-at "end") f90-smart-end)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1308 (f90-match-end))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 (setq indent (f90-calculate-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 (if (zerop (- indent (current-column)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 nil
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 (f90-indent-to indent no-line-number))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 ;; If initial point was within line's indentation,
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 ;; position after the indentation. Else stay at same point in text.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 (if (< (point) (marker-position pos))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 (goto-char (marker-position pos)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 (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
1318 (if auto-fill-function (f90-do-auto-fill))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 (set-marker pos nil)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 (defun f90-indent-new-line ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 "Reindent the current F90 line, insert a newline and indent the newline.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 An abbrev before point is expanded if `abbrev-mode' is non-nil.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 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
1325 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 (let (string cont (case-fold-search t))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 (if abbrev-mode (expand-abbrev))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 (beginning-of-line) ; Reindent where likely to be needed.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 (f90-indent-line-no)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 (if (or (looking-at "\\(end\\|else\\|!\\)"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 (f90-indent-line 'no-update))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 (delete-horizontal-space) ;Destroy trailing whitespace
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 (setq string (f90-in-string))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 (setq cont (f90-line-continued))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 (if (and string (not cont)) (insert "&"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 (f90-update-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 (newline)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 (if (or string (and cont f90-beginning-ampersand)) (insert "&"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 (f90-indent-line 'no-update)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 (defun f90-indent-region (beg-region end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 "Indent every line in region by forward parsing."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 (let ((end-region-mark (make-marker)) (save-point (point-marker))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 (block-list nil) ind-lev ind-curr ind-b cont
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 struct beg-struct end-struct)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 (set-marker end-region-mark end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 (goto-char beg-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 ;; first find a line which is not a continuation line or comment
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 (beginning-of-line)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1353 (while (and (looking-at "[ \t]*[0-9]*\\(!\\|#\\|[ \t]*$\\)")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 (progn (f90-indent-line 'no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 (zerop (forward-line 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 (< (point) end-region-mark)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 (setq cont (f90-present-statement-cont))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 (while (and (or (eq cont 'middle) (eq cont 'end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 (f90-previous-statement))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 (setq cont (f90-present-statement-cont)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 ;; process present line for beginning of block
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 (setq f90-cache-position (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 (f90-indent-line 'no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 (setq ind-lev (f90-current-indentation))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 (setq ind-curr ind-lev)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 (setq struct nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 (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
1369 ((or (setq struct (f90-looking-at-if-then))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 (setq struct (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 (setq struct (f90-looking-at-where-or-forall))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 (looking-at f90-else-like-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 f90-if-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 ((setq struct (f90-looking-at-type-like))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 f90-type-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 ((or(setq struct (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 (looking-at "contains[ \t]*\\($\\|!\\)"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 (if ind-b (setq ind-lev (+ ind-lev ind-b)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 (if struct (setq block-list (cons struct block-list)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 (while (and (f90-line-continued) (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 (< (point) end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 (if (not (zerop (- (current-indentation)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 (+ ind-curr f90-continuation-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 (f90-indent-to (+ ind-curr f90-continuation-indent) 'no-line-no)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 ;; process all following lines
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 (while (and (zerop (forward-line 1)) (< (point) end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (f90-indent-line-no)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 (setq f90-cache-position (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 (cond ((looking-at "[ \t]*$") (setq ind-curr 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 ((looking-at "[ \t]*#") (setq ind-curr 0))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 ((looking-at "!") (setq ind-curr (f90-comment-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 ((f90-no-block-limit) (setq ind-curr ind-lev))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 ((looking-at f90-else-like-re) (setq ind-curr
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 (- ind-lev f90-if-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 ((looking-at "contains[ \t]*\\($\\|!\\)")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 (setq ind-curr (- ind-lev f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 ((setq ind-b
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 (cond ((setq struct (f90-looking-at-do)) f90-do-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 ((or (setq struct (f90-looking-at-if-then))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 (setq struct (f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 (setq struct (f90-looking-at-where-or-forall)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 f90-if-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 ((setq struct (f90-looking-at-type-like))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 f90-type-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 ((setq struct (f90-looking-at-program-block-start))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 (setq ind-curr ind-lev)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 (if ind-b (setq ind-lev (+ ind-lev ind-b)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 (setq block-list (cons struct block-list)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 ((setq end-struct (f90-looking-at-program-block-end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (setq beg-struct (car block-list)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 block-list (cdr block-list))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 (if f90-smart-end
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 (f90-block-match (car beg-struct)(car (cdr beg-struct))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 (car end-struct)(car (cdr end-struct)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 (setq ind-b
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 (cond ((looking-at f90-end-if-re) f90-if-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 ((looking-at "end[ \t]*do\\>") f90-do-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 ((looking-at f90-end-type-re) f90-type-indent)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 ((f90-looking-at-program-block-end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 f90-program-indent)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 (if ind-b (setq ind-lev (- ind-lev ind-b)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 (setq ind-curr ind-lev))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 (t (setq ind-curr ind-lev)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 ;; do the indentation if necessary
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 (if (not (zerop (- ind-curr (current-column))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 (f90-indent-to ind-curr))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 (while (and (f90-line-continued) (zerop (forward-line 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 (< (point) end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 (if (not (zerop (- (current-indentation)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 (+ ind-curr f90-continuation-indent))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 (f90-indent-to (+ ind-curr f90-continuation-indent) 'no-line-no))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 ;; restore point etc
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 (setq f90-cache-position nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 (goto-char save-point)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 (set-marker end-region-mark nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 (set-marker save-point nil)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1441 (if (string-match "XEmacs" emacs-version)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 (zmacs-deactivate-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 (deactivate-mark))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 (defun f90-indent-subprogram ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 "Properly indent the subprogram which contains point."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 (let (program)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 (setq program (f90-mark-subprogram))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 (if program
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 (progn
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1453 (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
1454 (car program) (car (cdr program)))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 (f90-indent-region (point) (mark))
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1456 (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
1457 (car program) (car (cdr program))))
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1458 (message "Indenting the whole file...")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 (f90-indent-region (point) (mark))
14533
2eb6c03dcb86 (f90-indent-subprogram): Fix message.
Karl Heuer <kwzh@gnu.org>
parents: 14526
diff changeset
1460 (message "Indenting the whole file...done")))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 ;; autofill and break-line
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 (defun f90-break-line (&optional no-update)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 "Break line at point, insert continuation marker(s) and indent."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 (let (ctype)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 (cond ((f90-in-string)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 (insert "&") (newline) (insert "&"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 ((f90-in-comment)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 (setq ctype (f90-get-present-comment-type))
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1471 (newline)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1472 (insert ctype))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1473 (t (insert "&")
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 (if (not no-update) (f90-update-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 (newline)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1476 (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
1477 (f90-indent-line))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 (defun f90-find-breakpoint ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 "From fill-column, search backward for break-delimiter."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 (let ((bol (f90-get-beg-of-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 (re-search-backward f90-break-delimiters bol)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 (if f90-break-before-delimiters
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 (progn (backward-char)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 (if (not (looking-at f90-no-break-re))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 (forward-char)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 (if (looking-at f90-no-break-re)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 (forward-char 2)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 (forward-char)))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 (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
1492 "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
1493 (interactive)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1494 ;; 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
1495 ;; position is beyond fill-column.
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 ;; 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
1497 (f90-update-line)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1498 (while (> (current-column) fill-column)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1499 (let ((pos-mark (point-marker)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1500 (move-to-column fill-column)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1501 (if (not (f90-in-string))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1502 (f90-find-breakpoint))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1503 (f90-break-line)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1504 (goto-char pos-mark)
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1505 (set-marker pos-mark nil))))
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1506
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 (defun f90-join-lines ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 "Join present line with next line, if this line ends with \&."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 (let (pos (oldpos (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 (skip-chars-backward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 (cond ((= (preceding-char) ?&)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 (delete-char -1)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 (setq pos (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 (forward-line 1)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 (skip-chars-forward " \t")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 (if (looking-at "\&") (delete-char 1))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 (delete-region pos (point))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 (if (not (f90-in-string))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 (progn (delete-horizontal-space) (insert " ")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 (if (and auto-fill-function
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 (> (save-excursion (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 (current-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 fill-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 (f90-do-auto-fill))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 (goto-char oldpos)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529 t))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 (defun f90-fill-region (beg-region end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 "Fill every line in region by forward parsing. Join lines if possible."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 (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
1535 (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
1536 (auto-fill-function nil))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 (set-marker end-region-mark end-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 (goto-char beg-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539 (while go-on
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 ;; 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
1541 (while (f90-join-lines))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 ;; chop the line if necessary
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 (while (> (save-excursion (end-of-line) (current-column))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 fill-column)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 (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
1546 (f90-find-breakpoint)
f32ed369901c (f90-no-block-limit): Fixed bug for indentation of
Richard M. Stallman <rms@gnu.org>
parents: 15863
diff changeset
1547 (f90-break-line 'no-update))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 (setq go-on (and (< (point) (marker-position end-region-mark))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 (zerop (forward-line 1))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 (setq f90-cache-position (point)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 (setq f90-cache-position nil)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1552 (if (string-match "XEmacs" emacs-version)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 (zmacs-deactivate-region)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 (deactivate-mark))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 (defun f90-block-match (beg-block beg-name end-block end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 "Match end-struct with beg-struct and complete end-block if possible.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 Leave point at the end of line."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 (search-forward "end" (f90-get-end-of-line))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 (catch 'no-match
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 (if (not (f90-equal-symbols beg-block end-block))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 (if end-block
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 (message "END %s does not match %s." end-block beg-block)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 (end-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 (throw 'no-match nil))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 (message "Inserting %s." beg-block)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 (insert (concat " " beg-block)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 (search-forward end-block))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 (if (not (f90-equal-symbols beg-name end-name))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 (cond ((and beg-name (not end-name))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 (message "Inserting %s." beg-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 (insert (concat " " beg-name)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 ((and beg-name end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 (message "Replacing %s with %s." end-name beg-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 (search-forward end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 (replace-match beg-name))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 ((and (not beg-name) end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 (message "Deleting %s." end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 (search-forward end-name)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 (replace-match "")))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 (if end-name (search-forward end-name)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1583 (if (not (looking-at "[ \t]*!")) (delete-horizontal-space))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 (defun f90-match-end ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 "From an end foo statement, find the corresponding foo including name."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 (let ((count 1) (top-of-window (window-start)) (matching-beg nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 (end-point (point)) (case-fold-search t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 beg-name end-name beg-block end-block end-struct)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 (if (save-excursion (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 (setq end-struct (f90-looking-at-program-block-end)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593 (progn
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 (setq end-block (car end-struct))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 (setq end-name (car (cdr end-struct)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 (beginning-of-line)
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1598 (while
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1599 (and (not (zerop count))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1600 (let ((stop nil) notexist)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1601 (while (not stop)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1602 (setq notexist
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1603 (not (re-search-backward
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1604 (concat "\\(" f90-blocks-re "\\)") nil t)))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1605 (if notexist
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1606 (setq stop t)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1607 (setq stop
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1608 (not (or (f90-in-string)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1609 (f90-in-comment))))))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1610 (not notexist)))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 (beginning-of-line) (skip-chars-forward " \t0-9")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 (cond ((setq matching-beg
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 (cond
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 ((f90-looking-at-do))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 ((f90-looking-at-if-then))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 ((f90-looking-at-where-or-forall))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 ((f90-looking-at-select-case))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 ((f90-looking-at-type-like))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 ((f90-looking-at-program-block-start))))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 (setq count (- count 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 ((looking-at (concat "end[ \t]*" f90-blocks-re "\\b"))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1622 (setq count (+ count 1)))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 (if (not (zerop count))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 (message "No matching beginning.")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 (f90-update-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 (if (eq f90-smart-end 'blink)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 (if (< (point) top-of-window)
15863
f11b2bfc1275 new version from Torbj?Einarsson.
Erik Naggum <erik@naggum.no>
parents: 15244
diff changeset
1628 (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
1629 (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
1630 (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
1631 (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
1632 (progn (end-of-line) (point))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 (sit-for 1)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634 (setq beg-block (car matching-beg))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 (setq beg-name (car (cdr matching-beg)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 (goto-char end-point)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637 (beginning-of-line)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 (f90-block-match beg-block beg-name end-block end-name)))))))
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 (defun f90-insert-end ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1641 "Inserts an complete end statement matching beginning of present block."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643 (let ((f90-smart-end (if f90-smart-end f90-smart-end 'blink)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1644 (insert "end")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 (f90-indent-new-line)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1646
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647 ;; abbrevs and keywords
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649 (defun f90-abbrev-start ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650 "Typing `\\[help-command] or `? lists all the F90 abbrevs.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651 Any other key combination is executed normally."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 (interactive)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1653 (let (e c)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654 (insert last-command-char)
15052
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1655 (if (string-match "XEmacs" emacs-version)
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1656 (progn
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1657 (setq e (next-command-event))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1658 (setq c (event-to-character e)))
1abb847e6bff (f90-keywords-re): Added operator and result.
Karl Heuer <kwzh@gnu.org>
parents: 14533
diff changeset
1659 (setq c (read-event)))
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1660 ;; insert char if not equal to `?'
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1661 (if (or (= c ??) (eq c help-char))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662 (f90-abbrev-help)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1663 (if (string-match "XEmacs" emacs-version)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1664 (setq unread-command-event e)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665 (setq unread-command-events (list c))))))
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-abbrev-help ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 "List the currently defined abbrevs in F90 mode."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 (message "Listing abbrev table...")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671 (display-buffer (f90-prepare-abbrev-list-buffer))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 (message "Listing abbrev table...done"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 (defun f90-prepare-abbrev-list-buffer ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676 (set-buffer (get-buffer-create "*Abbrevs*"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 (erase-buffer)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 (insert-abbrev-table-description 'f90-mode-abbrev-table t)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 (goto-char (point-min))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 (set-buffer-modified-p nil)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 (edit-abbrevs-mode))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 (get-buffer-create "*Abbrevs*"))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 (defun f90-upcase-keywords ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 "Upcase all F90 keywords in the buffer."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 (f90-change-keywords 'upcase-word))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 (defun f90-capitalize-keywords ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 "Capitalize all F90 keywords in the buffer."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 (f90-change-keywords 'capitalize-word))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 (defun f90-downcase-keywords ()
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695 "Downcase all F90 keywords in the buffer."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 (interactive)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697 (f90-change-keywords 'downcase-word))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 (defun f90-upcase-region-keywords (beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 "Upcase all F90 keywords in the region."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 (f90-change-keywords 'upcase-word beg end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704 (defun f90-capitalize-region-keywords (beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705 "Capitalize all F90 keywords in the region."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707 (f90-change-keywords 'capitalize-word beg end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 (defun f90-downcase-region-keywords (beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710 "Downcase all F90 keywords in the region."
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711 (interactive "*r")
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 (f90-change-keywords 'downcase-word beg end))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1713
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1714 ;; Change the keywords according to argument.
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715 (defun f90-change-keywords (change-word &optional beg end)
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716 (save-excursion
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 (setq beg (if beg beg (point-min)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 (setq end (if end end (point-max)))
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1719 (let ((keyword-re
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1720 (concat "\\("
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1721 f90-keywords-re "\\|" f90-procedures-re "\\|"
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1722 f90-hpf-keywords-re "\\|" f90-operators-re "\\)"))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1723 (ref-point (point-min)) state
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1724 (modified (buffer-modified-p)) saveword back-point)
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1725 (goto-char beg)
13064
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1726 (unwind-protect
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1727 (while (re-search-forward keyword-re end t)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1728 (if (progn
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1729 (setq state (parse-partial-sexp ref-point (point)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1730 (or (nth 3 state) (nth 4 state)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1731 (save-excursion ; Check for cpp directive.
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1732 (beginning-of-line)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1733 (skip-chars-forward " \t0-9")
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1734 (looking-at "#"))))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1735 ()
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1736 (setq ref-point (point)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1737 back-point (save-excursion (backward-word 1) (point)))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1738 (setq saveword (buffer-substring back-point ref-point))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1739 (funcall change-word -1)
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1740 (or (string= saveword (buffer-substring back-point ref-point))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1741 (setq modified t))))
fac71043649d Major revision.
Karl Heuer <kwzh@gnu.org>
parents: 12030
diff changeset
1742 (or modified (set-buffer-modified-p nil))))))
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 (provide 'f90)
10613
3df8ec7c2ace Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 10612
diff changeset
1745
10612
8f3da98bd144 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746 ;;; f90.el ends here