]> git.eshelyaron.com Git - emacs.git/commitdiff
Close bug#1835.
authorGlenn Morris <rgm@gnu.org>
Sat, 10 Apr 2010 02:12:03 +0000 (19:12 -0700)
committerGlenn Morris <rgm@gnu.org>
Sat, 10 Apr 2010 02:12:03 +0000 (19:12 -0700)
* progmodes/fortran.el (fortran-match-and-skip-declaration):
New function.
(fortran-font-lock-keywords-3): Use it.  (Bug#1835)

lisp/ChangeLog
lisp/progmodes/fortran.el

index 1870690f89ba25d416b46ccf49e1e267587b436e..6e06f5ec72b0b9969acae13a5307c8ec995d03a7 100644 (file)
@@ -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
index 6ba9fac608d160ebffe32feb6647fb56e4d6d989..03f3bbc7af7201bff8da0cc2acfd94a6ff803137 100644 (file)
@@ -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