/[emacs]/emacs/lisp/progmodes/f90.el
ViewVC logotype

Diff of /emacs/lisp/progmodes/f90.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.61 by gm, Wed Aug 21 21:26:07 2002 UTC revision 1.62 by gm, Sat Aug 24 00:47:17 2002 UTC
# Line 156  Line 156 
156    
157  ;;; Code:  ;;; Code:
158    
 (eval-and-compile  
   (defconst f90-xemacs-flag (string-match "XEmacs\\|Lucid" emacs-version)  
     "Non-nil means F90 mode thinks it is running under XEmacs."))  
   
 ;; Most of these are just to quieten the byte-compiler.  
159  (eval-when-compile  (eval-when-compile
160    (defvar comment-auto-fill-only-comments)    (defvar comment-auto-fill-only-comments)
161    (defvar font-lock-keywords)    (defvar font-lock-keywords))
   (unless f90-xemacs-flag  
     ;; If you have GNU Emacs 19.22 or earlier, comment this out, or get imenu.  
     (require 'imenu)  
     (defvar current-menubar)))  
162    
163  ;; User options  ;; User options
164    
# Line 468  Can be overridden by the value of `font- Line 459  Can be overridden by the value of `font-
459      map)      map)
460    "Keymap used in F90 mode.")    "Keymap used in F90 mode.")
461    
 ;; Menu bar support.  
 (if f90-xemacs-flag  
     (defvar f90-xemacs-menu  
       '("F90"  
         ["Indent Subprogram"       f90-indent-subprogram t]  
         ["Mark Subprogram"         f90-mark-subprogram t]  
         ["Beginning of Subprogram" f90-beginning-of-subprogram t]  
         ["End of Subprogram"       f90-end-of-subprogram t]  
         "-----"  
         ["(Un)Comment Region"      f90-comment-region t]  
         ["Indent Region"           indent-region t]  
         ["Fill Region"             f90-fill-region t]  
         "-----"  
         ["Break Line at Point"     f90-break-line t]  
         ["Join with Next Line"     f90-join-lines t]  
         ["Insert Newline"          newline t]  
         ["Insert Block End"        f90-insert-end t]  
         "-----"  
         ["Upcase Keywords (buffer)"      f90-upcase-keywords t]  
         ["Upcase Keywords (region)"      f90-upcase-region-keywords t]  
         ["Capitalize Keywords (buffer)"  f90-capitalize-keywords t]  
         ["Capitalize Keywords (region)"  f90-capitalize-region-keywords t]  
         ["Downcase Keywords (buffer)"    f90-downcase-keywords t]  
         ["Downcase Keywords (region)"    f90-downcase-region-keywords t]  
         "-----"  
         ["Toggle abbrev-mode"   abbrev-mode t]  
         ["Toggle auto-fill"     auto-fill-mode t])  
       "XEmacs menu for F90 mode.")  
   
   ;; Emacs.  
   (defvar f90-menu-bar-menu  
     (let ((map (make-sparse-keymap "F90")))  
       (define-key map [f90-imenu-menu]  
         '("Add imenu Menu" . f90-add-imenu-menu))  
       (define-key map [abbrev-mode]  
         '("Toggle abbrev-mode" . abbrev-mode))  
       (define-key map [auto-fill-mode]  
         '("Toggle auto-fill" . auto-fill-mode))  
       (define-key map [line1] '("--"))  
       (define-key map [f90-change-case-menu]  
         '("Change Keyword Case" . f90-change-case-menu))  
       (define-key map [f90-font-lock-menu]  
         '("Highlighting" . f90-font-lock-menu))  
       (define-key map [line2] '("--"))  
       (define-key map [f90-insert-end]  
         '("Insert Block End" . f90-insert-end))  
       (define-key map [f90-join-lines]  
         '("Join with Next Line" . f90-join-lines))  
       (define-key map [f90-break-line]  
         '("Break Line at Point" . f90-break-line))  
       (define-key map [line3] '("--"))  
       (define-key map [f90-fill-region]  
         '("Fill Region" . f90-fill-region))  
       (put 'f90-fill-region 'menu-enable 'mark-active)  
       (define-key map [indent-region]  
         '("Indent Region" . indent-region))  
       (define-key map [f90-comment-region]  
         '("(Un)Comment Region" . f90-comment-region))  
       (put 'f90-comment-region 'menu-enable 'mark-active)  
       (define-key map [line4] '("--"))  
       (define-key map [f90-end-of-subprogram]  
         '("End of Subprogram" . f90-end-of-subprogram))  
       (define-key map [f90-beginning-of-subprogram]  
         '("Beginning of Subprogram" . f90-beginning-of-subprogram))  
       (define-key map [f90-mark-subprogram]  
         '("Mark Subprogram" . f90-mark-subprogram))  
       (define-key map [f90-indent-subprogram]  
         '("Indent Subprogram" . f90-indent-subprogram))  
       map)  
     "F90 mode top-level menu bar menu.")  
   
   (define-key f90-mode-map [menu-bar f90-menu]  
     (cons "F90" f90-menu-bar-menu))  
   
   (defvar f90-change-case-menu  
     (let ((map (make-sparse-keymap "Change Keyword Case")))  
       (define-key map [dkr]  
         '("Downcase Keywords (region)" . f90-downcase-region-keywords))  
       (put 'f90-downcase-region-keywords 'menu-enable 'mark-active)  
       (define-key map [ckr]  
         '("Capitalize Keywords (region)" . f90-capitalize-region-keywords))  
       (put 'f90-capitalize-region-keywords 'menu-enable 'mark-active)  
       (define-key map [ukr]  
         '("Upcase Keywords (region)" . f90-upcase-region-keywords))  
       (put 'f90-upcase-region-keywords 'menu-enable 'mark-active)  
       (define-key map [line] '("--"))  
       (define-key map [dkb]  
         '("Downcase Keywords (buffer)" . f90-downcase-keywords))  
       (define-key map [ckb]  
         '("Capitalize Keywords (buffer)" . f90-capitalize-keywords))  
       (define-key map [ukb]  
         '("Upcase Keywords (buffer)" . f90-upcase-keywords))  
       map)  
     "Submenu for change of case.")  
   
   (defalias 'f90-change-case-menu f90-change-case-menu)  
   
   ;; Font-lock-menu and function calls.  
   (defalias 'f90-font-lock-on 'font-lock-mode)  
   (put 'f90-font-lock-on 'menu-enable 'font-lock-mode)  
   (put 'f90-font-lock-on 'menu-alias t)  
   
   (defalias 'f90-font-lock-off 'font-lock-mode)  
   (put 'f90-font-lock-off 'menu-enable '(not font-lock-mode))  
   (put 'f90-font-lock-off 'menu-alias t)  
   
   (defun f90-font-lock-1 ()  
     "Set `font-lock-keywords' to `f90-font-lock-keywords-1'."  
     (interactive)  
     (font-lock-mode 1)  
     (setq font-lock-keywords f90-font-lock-keywords-1)  
     (font-lock-fontify-buffer))  
   
   (defun f90-font-lock-2 ()  
     "Set `font-lock-keywords' to `f90-font-lock-keywords-2'."  
     (interactive)  
     (font-lock-mode 1)  
     (setq font-lock-keywords f90-font-lock-keywords-2)  
     (font-lock-fontify-buffer))  
   
   (defun f90-font-lock-3 ()  
     "Set `font-lock-keywords' to `f90-font-lock-keywords-3'."  
     (interactive)  
     (font-lock-mode 1)  
     (setq font-lock-keywords f90-font-lock-keywords-3)  
     (font-lock-fontify-buffer))  
   
   (defun f90-font-lock-4 ()  
     "Set `font-lock-keywords' to `f90-font-lock-keywords-4'."  
     (interactive)  
     (font-lock-mode 1)  
     (setq font-lock-keywords f90-font-lock-keywords-4)  
     (font-lock-fontify-buffer))  
   
   (defvar f90-font-lock-menu  
     (let ((map (make-sparse-keymap "f90-font-lock-menu")))  
       (define-key map [h4]  
         '("Maximum highlighting (level 4)" . f90-font-lock-4))  
       (define-key map [h3]  
         '("Heavy highlighting (level 3)" . f90-font-lock-3))  
       (define-key map [h2]  
         '("Default highlighting (level 2)" . f90-font-lock-2))  
       (define-key map [h1]  
         '("Light highlighting (level 1)" . f90-font-lock-1))  
       (define-key map [line] '("--"))  
       (define-key map [floff]  
         '("Turn off font-lock-mode" . f90-font-lock-on))  
       (define-key map [flon]  
         '("Turn on font-lock-mode" . f90-font-lock-off))  
       map)  
     "Submenu for highlighting using font-lock-mode.")  
462    
463    (defalias 'f90-font-lock-menu f90-font-lock-menu)  (easy-menu-define f90-menu f90-mode-map "Menu for F90 mode."
464      '("F90"
465        ["Indent Subprogram"       f90-indent-subprogram       t]
466        ["Mark Subprogram"         f90-mark-subprogram         t]
467        ["Beginning of Subprogram" f90-beginning-of-subprogram t]
468        ["End of Subprogram"       f90-end-of-subprogram       t]
469        "--"
470        ["(Un)Comment Region" f90-comment-region mark-active]
471        ["Indent Region"      f90-indent-region  mark-active]
472        ["Fill Region"        f90-fill-region    mark-active]
473        "--"
474        ["Break Line at Point" f90-break-line t]
475        ["Join with Next Line" f90-join-lines t]
476        ["Insert Block End"    f90-insert-end t]
477        "--"
478        ("Highlighting"
479         ["Toggle font-lock-mode" font-lock-mode :active t
480          :selected font-lock-mode :style toggle]
481         "--"
482         ["Light highlighting (level 1)"    f90-font-lock-1 t]
483         ["Moderate highlighting (level 2)" f90-font-lock-2 t]
484         ["Heavy highlighting (level 3)"    f90-font-lock-3 t]
485         ["Maximum highlighting (level 4)"  f90-font-lock-4 t]
486         )
487        ("Change Keyword Case"
488         ["Upcase Keywords (buffer)"     f90-upcase-keywords     t]
489         ["Capitalize Keywords (buffer)" f90-capitalize-keywords t]
490         ["Downcase Keywords (buffer)"   f90-downcase-keywords   t]
491         "--"
492         ["Upcase Keywords (region)"     f90-upcase-region-keywords mark-active]
493         ["Capitalize Keywords (region)" f90-capitalize-region-keywords
494          mark-active]
495         ["Downcase Keywords (region)"   f90-downcase-region-keywords mark-active]
496         )
497        "--"
498        ["Toggle auto-fill"   auto-fill-mode :active t :selected auto-fill-function
499         :style toggle]
500        ["Toggle abbrev-mode" abbrev-mode    :active t :selected abbrev-mode
501         :style toggle]
502        ["Add imenu Menu" f90-add-imenu-menu :active (not f90-imenu-flag)
503         :visible (fboundp 'imenu-add-to-menubar)]
504        ))
505    
506    )  (defun f90-font-lock-1 ()
507      "Set `font-lock-keywords' to `f90-font-lock-keywords-1'."
508      (interactive)
509      (font-lock-mode 1)
510      (setq font-lock-keywords f90-font-lock-keywords-1)
511      (font-lock-fontify-buffer))
512    
513    (defun f90-font-lock-2 ()
514      "Set `font-lock-keywords' to `f90-font-lock-keywords-2'."
515      (interactive)
516      (font-lock-mode 1)
517      (setq font-lock-keywords f90-font-lock-keywords-2)
518      (font-lock-fontify-buffer))
519    
520    (defun f90-font-lock-3 ()
521      "Set `font-lock-keywords' to `f90-font-lock-keywords-3'."
522      (interactive)
523      (font-lock-mode 1)
524      (setq font-lock-keywords f90-font-lock-keywords-3)
525      (font-lock-fontify-buffer))
526    
527    (defun f90-font-lock-4 ()
528      "Set `font-lock-keywords' to `f90-font-lock-keywords-4'."
529      (interactive)
530      (font-lock-mode 1)
531      (setq font-lock-keywords f90-font-lock-keywords-4)
532      (font-lock-fontify-buffer))
533    
534    
535  ;; Regexps for finding program structures.  ;; Regexps for finding program structures.
536  (defconst f90-blocks-re  (defconst f90-blocks-re
537    (concat "\\(block[ \t]*data\\|"    (concat "\\(block[ \t]*data\\|"
# Line 852  with no args, if that value is non-nil." Line 760  with no args, if that value is non-nil."
760    (set (make-local-variable 'abbrev-all-caps) t)    (set (make-local-variable 'abbrev-all-caps) t)
761    (set (make-local-variable 'normal-auto-fill-function) 'f90-do-auto-fill)    (set (make-local-variable 'normal-auto-fill-function) 'f90-do-auto-fill)
762    (setq indent-tabs-mode nil)           ; auto buffer local    (setq indent-tabs-mode nil)           ; auto buffer local
763      (easy-menu-add f90-menu)
764    ;; Setting up things for font-lock.    ;; Setting up things for font-lock.
   (when f90-xemacs-flag  
     (put 'f90-mode 'font-lock-keywords-case-fold-search t)  
     (when (and (featurep 'menubar)  
                current-menubar  
                (not (assoc "F90" current-menubar)))  
       (set-buffer-menubar (copy-sequence current-menubar))  
       (add-submenu nil f90-xemacs-menu)))  
   ;; XEmacs: Does not need a special case, since both emacsen work alike -sb.  
765    (set (make-local-variable 'font-lock-defaults)    (set (make-local-variable 'font-lock-defaults)
766         '((f90-font-lock-keywords f90-font-lock-keywords-1         '((f90-font-lock-keywords f90-font-lock-keywords-1
767                                   f90-font-lock-keywords-2                                   f90-font-lock-keywords-2
# Line 1396  A block is a subroutine, if-endif, etc." Line 1297  A block is a subroutine, if-endif, etc."
1297      (push-mark)      (push-mark)
1298      (goto-char pos)      (goto-char pos)
1299      (setq program (f90-beginning-of-subprogram))      (setq program (f90-beginning-of-subprogram))
1300      (if f90-xemacs-flag      (if (fboundp 'zmacs-activate-region)
1301          (zmacs-activate-region)          (zmacs-activate-region)
1302        (setq mark-active t        (setq mark-active t
1303              deactivate-mark nil))              deactivate-mark nil))
# Line 1574  If run in the middle of a line, the line Line 1475  If run in the middle of a line, the line
1475      (goto-char save-point)      (goto-char save-point)
1476      (set-marker end-region-mark nil)      (set-marker end-region-mark nil)
1477      (set-marker save-point nil)      (set-marker save-point nil)
1478      (if f90-xemacs-flag      (if (fboundp 'zmacs-deactivate-region)
1479          (zmacs-deactivate-region)          (zmacs-deactivate-region)
1480        (deactivate-mark))))        (deactivate-mark))))
1481    
# Line 1685  Update keyword case first." Line 1586  Update keyword case first."
1586                         (zerop (forward-line 1)))                         (zerop (forward-line 1)))
1587              f90-cache-position (point)))              f90-cache-position (point)))
1588      (setq f90-cache-position nil)      (setq f90-cache-position nil)
1589      (if f90-xemacs-flag      (if (fboundp 'zmacs-deactivate-region)
1590          (zmacs-deactivate-region)          (zmacs-deactivate-region)
1591        (deactivate-mark))))        (deactivate-mark))))
1592    
# Line 1781  Any other key combination is executed no Line 1682  Any other key combination is executed no
1682    (interactive)    (interactive)
1683    (let (c)    (let (c)
1684      (insert last-command-char)      (insert last-command-char)
1685      (if f90-xemacs-flag      (setq c (if (fboundp 'next-command-event) ; XEmacs
1686          (setq c (event-to-character (next-command-event)))                  (event-to-character (next-command-event))
1687        (setq c (read-event)))                (read-event)))
1688      ;; Insert char if not equal to `?'.      ;; Insert char if not equal to `?'.
1689      (if (or (eq c ??) (eq c help-char))      (if (or (eq c ??) (eq c help-char))
1690          (f90-abbrev-help)          (f90-abbrev-help)

Legend:
Removed from v.1.61  
changed lines
  Added in v.1.62

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26