;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
(interactive)
(describe-variable
'fortran-tab-mode-string))))
- "String to appear in mode line in TAB format buffers."
+ "String to appear in mode line in TAB format buffers.
+See Info node `(emacs)ForIndent Cont'."
:type 'string
:group 'fortran-indent)
(put 'fortran-tab-mode-string 'risky-local-variable t)
(defcustom fortran-comment-line-start "C"
"Delimiter inserted to start new full-line comment.
-You might want to change this to \"*\", for instance."
+You might want to change this to \"*\", for instance; or \"!\" to
+allow trailing comments on a line."
:version "21.1"
:type 'string
:group 'fortran-comment)
column 6 by \\[fortran-split-line] to begin a continuation line.
Also, if \\[fortran-indent-line] finds this at the beginning of a
line, it will convert the line into a continuation line of the
-appropriate style. Normally $."
+appropriate style. Normally \"$\"."
:type 'string
:group 'fortran)
(put 'fortran-continuation-string 'safe-local-variable
'paren) "\\>")
;; Builtin operators.
(concat "\\." (regexp-opt
- '("and" "or" "not" "lt" "le" "eq" "ge"
- "gt" "ne" "true" "false")
+ '("and" "eq" "eqv" "false" "ge" "gt" "le" "lt" "ne"
+ "neqv" "not" "or" "true")
'paren) "\\.")
;; do/goto keywords and targets, and goto tags.
'("\\<\\(do\\|go *to\\)\\>[ \t]*\\([0-9]+\\)?"
nil t ((?/ . "$/") ("_$" . "w"))
fortran-beginning-of-subprogram
(font-lock-syntactic-keywords
- . (fortran-font-lock-syntactic-keywords))))
+ . fortran-font-lock-syntactic-keywords)))
(set (make-local-variable 'imenu-case-fold-search) t)
(set (make-local-variable 'imenu-generic-expression)
fortran-imenu-generic-expression)
(fortran-check-end-prog-re)))
(forward-line)
(beginning-of-line 2)
- (catch 'ok
- (while (re-search-forward fortran-end-prog-re nil 'move)
- (if (fortran-check-end-prog-re)
- (throw 'ok t))))
- (goto-char (match-beginning 0))
- (forward-line)))))
+ (when (catch 'ok
+ (while (re-search-forward fortran-end-prog-re nil 'move)
+ (if (fortran-check-end-prog-re)
+ (throw 'ok t))))
+ (goto-char (match-beginning 0))
+ (forward-line))))))
(defun fortran-previous-statement ()
"Move point to beginning of the previous Fortran statement.
((and (looking-at fortran-end-prog-re1)
(fortran-check-end-prog-re))
;; Previous END resets indent to minimum.
- (setq icol fortran-minimum-statement-indent)))))
+ (setq icol fortran-minimum-statement-indent))
+ ;; Previous statement was a numbered DO loop without a
+ ;; closing CONTINUE or END DO, so we indented the
+ ;; terminator like the loop body.
+ ((and fortran-check-all-num-for-matching-do
+ (not (looking-at "\\(continue\\|end[ \t]*do\\)\\>"))
+ (progn
+ (beginning-of-line)
+ (and (looking-at "[ \t]*[0-9]+")
+ (fortran-check-for-matching-do))))
+ (setq icol (- icol fortran-do-indent))))))
(save-excursion
(beginning-of-line)
(cond ((looking-at "[ \t]*$"))
6
(+ icol fortran-continuation-indent))))
(first-statement)
+ ;; The terminating statement is actually part of the
+ ;; loop body, so unless it is a CONTINUE or END DO, we
+ ;; indent it like the loop body (see above).
((and fortran-check-all-num-for-matching-do
- (looking-at "[ \t]*[0-9]+")
+ (looking-at "[ \t]*[0-9]+[ \t]*\
+\\(continue\\|end[ \t]*do\\)\\>")
(fortran-check-for-matching-do))
(setq icol (- icol fortran-do-indent)))
(t