emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/progmodes/f90.el


From: Glenn Morris
Subject: [Emacs-diffs] Changes to emacs/lisp/progmodes/f90.el
Date: Tue, 29 Mar 2005 13:34:23 -0500

Index: emacs/lisp/progmodes/f90.el
diff -c emacs/lisp/progmodes/f90.el:1.78 emacs/lisp/progmodes/f90.el:1.79
*** emacs/lisp/progmodes/f90.el:1.78    Fri Dec 31 14:53:24 2004
--- emacs/lisp/progmodes/f90.el Tue Mar 29 18:34:22 2005
***************
*** 597,637 ****
  
  ;; Hideshow support.
  (defconst f90-end-block-re
!   (concat "^[ \t0-9]*\\<end\\>[ \t]*"
            (regexp-opt '("do" "if" "forall" "function" "interface"
!                         "module" "program" "select"  "subroutine"
                          "type" "where" ) t)
            "[ \t]*\\sw*")
!   "Regexp matching the end of a \"block\" of F90 code.
  Used in the F90 entry in `hs-special-modes-alist'.")
  
  ;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a
! ;; following "(".  DO, CASE, IF can have labels; IF must be
! ;; accompanied by THEN.
! ;; A big problem is that many of these statements can be broken over
! ;; lines, even with embedded comments. We only try to handle this for
! ;; IF ... THEN statements, assuming and hoping it will be less common
! ;; for other constructs. We match up to one new-line, provided ")
! ;; THEN" appears on one line. Matching on just ") THEN" is no good,
! ;; since that includes ELSE branches.
! ;; For a fully accurate solution, hideshow would probably have to be
! ;; modified to allow functions as well as regexps to be used to
! ;; specify block start and end positions.
  (defconst f90-start-block-re
    (concat
     "^[ \t0-9]*"                         ; statement number
     "\\(\\("
     "\\(\\sw+[ \t]*:[ \t]*\\)?"          ; structure label
!    "\\(do\\|select[ \t]*case\\|if[ \t]*(.*\n?.*)[ \t]*then\\|"
     ;; Distinguish WHERE block from isolated WHERE.
     "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)"
     "\\|"
     "program\\|interface\\|module\\|type\\|function\\|subroutine"
-    ;; ") THEN" at line end. Problem - also does ELSE.
- ;;;   "\\|.*)[ \t]*then[ \t]*\\($\\|!\\)"
     "\\)"
     "[ \t]*")
!   "Regexp matching the start of a \"block\" of F90 code.
  A simple regexp cannot do this in fully correct fashion, so this
  tries to strike a compromise between complexity and flexibility.
  Used in the F90 entry in `hs-special-modes-alist'.")
--- 597,628 ----
  
  ;; Hideshow support.
  (defconst f90-end-block-re
!   (concat "^[ \t0-9]*\\<end[ \t]*"
            (regexp-opt '("do" "if" "forall" "function" "interface"
!                         "module" "program" "select" "subroutine"
                          "type" "where" ) t)
            "[ \t]*\\sw*")
!   "Regexp matching the end of an F90 \"block\", from the line start.
  Used in the F90 entry in `hs-special-modes-alist'.")
  
  ;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a
! ;; following "(".  DO, CASE, IF can have labels.
  (defconst f90-start-block-re
    (concat
     "^[ \t0-9]*"                         ; statement number
     "\\(\\("
     "\\(\\sw+[ \t]*:[ \t]*\\)?"          ; structure label
!    "\\(do\\|select[ \t]*case\\|"
!    ;; See comments in fortran-start-block-re for the problems of IF.
!    "if[ \t]*(\\(.*\\|"
!    ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|"
     ;; Distinguish WHERE block from isolated WHERE.
     "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)"
     "\\|"
     "program\\|interface\\|module\\|type\\|function\\|subroutine"
     "\\)"
     "[ \t]*")
!   "Regexp matching the start of an F90 \"block\", from the line start.
  A simple regexp cannot do this in fully correct fashion, so this
  tries to strike a compromise between complexity and flexibility.
  Used in the F90 entry in `hs-special-modes-alist'.")
***************
*** 1305,1316 ****
  Does not check the outermost block, because it may be incomplete.
  Interactively, pushes mark before moving point."
    (interactive "p")
    (and num (< num 0) (f90-end-of-block (- num)))
    (let ((case-fold-search t)
          (count (or num 1))
          end-list end-this end-type end-label
          start-this start-type start-label)
-     (if (interactive-p) (push-mark (point) t))
      (beginning-of-line)                 ; probably want this
      (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move))
        (beginning-of-line)
--- 1296,1307 ----
  Does not check the outermost block, because it may be incomplete.
  Interactively, pushes mark before moving point."
    (interactive "p")
+   (if (interactive-p) (push-mark (point) t))
    (and num (< num 0) (f90-end-of-block (- num)))
    (let ((case-fold-search t)
          (count (or num 1))
          end-list end-this end-type end-label
          start-this start-type start-label)
      (beginning-of-line)                 ; probably want this
      (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move))
        (beginning-of-line)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]