diff options
author | Glenn Morris <rgm@gnu.org> | 2010-04-09 19:12:03 -0700 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2010-04-09 19:12:03 -0700 |
commit | 119850e9279ac597b11abd92e56c1989e72f7b04 (patch) | |
tree | bdbae563d613e73694e2afaf29d066fe4c329a11 | |
parent | 16207c0a480063e5c88f57bd0c088d32783dc603 (diff) | |
download | emacs-119850e9279ac597b11abd92e56c1989e72f7b04.tar.gz |
Close bug#1835.
* progmodes/fortran.el (fortran-match-and-skip-declaration):
New function.
(fortran-font-lock-keywords-3): Use it. (Bug#1835)
-rw-r--r-- | lisp/ChangeLog | 6 | ||||
-rw-r--r-- | lisp/progmodes/fortran.el | 24 |
2 files changed, 29 insertions, 1 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1870690f89b..6e06f5ec72b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2010-04-10 Glenn Morris <rgm@gnu.org> + + * progmodes/fortran.el (fortran-match-and-skip-declaration): + New function. + (fortran-font-lock-keywords-3): Use it. (Bug#1835) + 2010-04-07 Kenichi Handa <handa@m17n.org> * language/indian.el (malayalam-composable-pattern): Fix previous diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el index 6ba9fac608d..03f3bbc7af7 100644 --- a/lisp/progmodes/fortran.el +++ b/lisp/progmodes/fortran.el @@ -403,6 +403,28 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?" '("^ *\\([0-9]+\\)" . font-lock-constant-face))) "Medium level highlighting for Fortran mode.") +;; See bug#1835. Never really looked into _why_ this matters... +(defun fortran-match-and-skip-declaration (limit) + "Like `font-lock-match-c-style-declaration-item-and-skip-to-next'. +The only difference is, it returns t in a case when the default returns nil." + (when (looking-at "[ \n\t*]*\\(\\sw+\\)[ \t\n]*\\(((?\\)?") + (when (and (match-end 2) (> (- (match-end 2) (match-beginning 2)) 1)) + (let ((pos (point))) + (skip-chars-backward " \t\n") + (skip-syntax-backward "w") + (unless (looking-at "\\(\\sw+\\)[ \t\n]*\\sw+[ \t\n]*\\(((?\\)?") + (goto-char pos) + (looking-at "[ \n\t*]*\\(\\sw+\\)[ \t\n]*\\(((?\\)?")))) + (save-match-data + (condition-case nil + (save-restriction + (narrow-to-region (point-min) limit) + (goto-char (match-end 1)) + (while (not (looking-at "[ \t\n]*\\(\\(,\\)\\|;\\|\\'\\)")) + (goto-char (or (scan-sexps (point) 1) (point-max)))) + (goto-char (match-end 2))) + (error t))))) + (defvar fortran-font-lock-keywords-3 (append fortran-font-lock-keywords-1 @@ -412,7 +434,7 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?" ;; Type specifier. '(1 font-lock-type-face) ;; Declaration item (or just /.../ block name). - `(font-lock-match-c-style-declaration-item-and-skip-to-next + `(fortran-match-and-skip-declaration ;; Start after any *(...) expression. (condition-case nil (and (match-beginning ,(1+ (regexp-opt-depth |