Mercurial > emacs
changeset 107930:470fef5038b3
Close bug#1835.
* progmodes/fortran.el (fortran-match-and-skip-declaration):
New function.
(fortran-font-lock-keywords-3): Use it. (Bug#1835)
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Fri, 09 Apr 2010 19:12:03 -0700 |
parents | b8bbaa0c915f |
children | db7a670d5832 |
files | lisp/ChangeLog lisp/progmodes/fortran.el |
diffstat | 2 files changed, 29 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Thu Apr 08 18:20:45 2010 -0700 +++ b/lisp/ChangeLog Fri Apr 09 19:12:03 2010 -0700 @@ -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
--- a/lisp/progmodes/fortran.el Thu Apr 08 18:20:45 2010 -0700 +++ b/lisp/progmodes/fortran.el Fri Apr 09 19:12:03 2010 -0700 @@ -403,6 +403,28 @@ '("^ *\\([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 @@ ;; 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