Mercurial > emacs
comparison lisp/progmodes/f90.el @ 47010:dd3a10c87fe8
(f90-xemacs-flag, f90-xemacs-menu, f90-menu-bar-menu, f90-change-case-menu)
(f90-font-lock-on, f90-font-lock-off, f90-font-lock-menu): Deleted. Use
easy-menu-define instead.
(f90-mode): Use easy-menu-add.
No longer (require 'imenu) when compiling.
(f90-mark-subprogram, f90-indent-region, f90-fill-region)
(f90-abbrev-start): Use fboundp.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sat, 24 Aug 2002 00:47:17 +0000 |
parents | c4e4658185e3 |
children | 978b0db16be0 |
comparison
equal
deleted
inserted
replaced
47009:2ed348de0e05 | 47010:dd3a10c87fe8 |
---|---|
154 ;; Support for hideshow, align. | 154 ;; Support for hideshow, align. |
155 ;; OpenMP, preprocessor highlighting. | 155 ;; OpenMP, preprocessor highlighting. |
156 | 156 |
157 ;;; Code: | 157 ;;; Code: |
158 | 158 |
159 (eval-and-compile | |
160 (defconst f90-xemacs-flag (string-match "XEmacs\\|Lucid" emacs-version) | |
161 "Non-nil means F90 mode thinks it is running under XEmacs.")) | |
162 | |
163 ;; Most of these are just to quieten the byte-compiler. | |
164 (eval-when-compile | 159 (eval-when-compile |
165 (defvar comment-auto-fill-only-comments) | 160 (defvar comment-auto-fill-only-comments) |
166 (defvar font-lock-keywords) | 161 (defvar font-lock-keywords)) |
167 (unless f90-xemacs-flag | |
168 ;; If you have GNU Emacs 19.22 or earlier, comment this out, or get imenu. | |
169 (require 'imenu) | |
170 (defvar current-menubar))) | |
171 | 162 |
172 ;; User options | 163 ;; User options |
173 | 164 |
174 (defgroup f90 nil | 165 (defgroup f90 nil |
175 "Major mode for editing Fortran 90,95 code." | 166 "Major mode for editing Fortran 90,95 code." |
466 (define-key map "*" 'f90-electric-insert) | 457 (define-key map "*" 'f90-electric-insert) |
467 (define-key map "/" 'f90-electric-insert) | 458 (define-key map "/" 'f90-electric-insert) |
468 map) | 459 map) |
469 "Keymap used in F90 mode.") | 460 "Keymap used in F90 mode.") |
470 | 461 |
471 ;; Menu bar support. | 462 |
472 (if f90-xemacs-flag | 463 (easy-menu-define f90-menu f90-mode-map "Menu for F90 mode." |
473 (defvar f90-xemacs-menu | 464 '("F90" |
474 '("F90" | 465 ["Indent Subprogram" f90-indent-subprogram t] |
475 ["Indent Subprogram" f90-indent-subprogram t] | 466 ["Mark Subprogram" f90-mark-subprogram t] |
476 ["Mark Subprogram" f90-mark-subprogram t] | 467 ["Beginning of Subprogram" f90-beginning-of-subprogram t] |
477 ["Beginning of Subprogram" f90-beginning-of-subprogram t] | 468 ["End of Subprogram" f90-end-of-subprogram t] |
478 ["End of Subprogram" f90-end-of-subprogram t] | 469 "--" |
479 "-----" | 470 ["(Un)Comment Region" f90-comment-region mark-active] |
480 ["(Un)Comment Region" f90-comment-region t] | 471 ["Indent Region" f90-indent-region mark-active] |
481 ["Indent Region" indent-region t] | 472 ["Fill Region" f90-fill-region mark-active] |
482 ["Fill Region" f90-fill-region t] | 473 "--" |
483 "-----" | 474 ["Break Line at Point" f90-break-line t] |
484 ["Break Line at Point" f90-break-line t] | 475 ["Join with Next Line" f90-join-lines t] |
485 ["Join with Next Line" f90-join-lines t] | 476 ["Insert Block End" f90-insert-end t] |
486 ["Insert Newline" newline t] | 477 "--" |
487 ["Insert Block End" f90-insert-end t] | 478 ("Highlighting" |
488 "-----" | 479 ["Toggle font-lock-mode" font-lock-mode :active t |
489 ["Upcase Keywords (buffer)" f90-upcase-keywords t] | 480 :selected font-lock-mode :style toggle] |
490 ["Upcase Keywords (region)" f90-upcase-region-keywords t] | 481 "--" |
491 ["Capitalize Keywords (buffer)" f90-capitalize-keywords t] | 482 ["Light highlighting (level 1)" f90-font-lock-1 t] |
492 ["Capitalize Keywords (region)" f90-capitalize-region-keywords t] | 483 ["Moderate highlighting (level 2)" f90-font-lock-2 t] |
493 ["Downcase Keywords (buffer)" f90-downcase-keywords t] | 484 ["Heavy highlighting (level 3)" f90-font-lock-3 t] |
494 ["Downcase Keywords (region)" f90-downcase-region-keywords t] | 485 ["Maximum highlighting (level 4)" f90-font-lock-4 t] |
495 "-----" | 486 ) |
496 ["Toggle abbrev-mode" abbrev-mode t] | 487 ("Change Keyword Case" |
497 ["Toggle auto-fill" auto-fill-mode t]) | 488 ["Upcase Keywords (buffer)" f90-upcase-keywords t] |
498 "XEmacs menu for F90 mode.") | 489 ["Capitalize Keywords (buffer)" f90-capitalize-keywords t] |
499 | 490 ["Downcase Keywords (buffer)" f90-downcase-keywords t] |
500 ;; Emacs. | 491 "--" |
501 (defvar f90-menu-bar-menu | 492 ["Upcase Keywords (region)" f90-upcase-region-keywords mark-active] |
502 (let ((map (make-sparse-keymap "F90"))) | 493 ["Capitalize Keywords (region)" f90-capitalize-region-keywords |
503 (define-key map [f90-imenu-menu] | 494 mark-active] |
504 '("Add imenu Menu" . f90-add-imenu-menu)) | 495 ["Downcase Keywords (region)" f90-downcase-region-keywords mark-active] |
505 (define-key map [abbrev-mode] | 496 ) |
506 '("Toggle abbrev-mode" . abbrev-mode)) | 497 "--" |
507 (define-key map [auto-fill-mode] | 498 ["Toggle auto-fill" auto-fill-mode :active t :selected auto-fill-function |
508 '("Toggle auto-fill" . auto-fill-mode)) | 499 :style toggle] |
509 (define-key map [line1] '("--")) | 500 ["Toggle abbrev-mode" abbrev-mode :active t :selected abbrev-mode |
510 (define-key map [f90-change-case-menu] | 501 :style toggle] |
511 '("Change Keyword Case" . f90-change-case-menu)) | 502 ["Add imenu Menu" f90-add-imenu-menu :active (not f90-imenu-flag) |
512 (define-key map [f90-font-lock-menu] | 503 :visible (fboundp 'imenu-add-to-menubar)] |
513 '("Highlighting" . f90-font-lock-menu)) | 504 )) |
514 (define-key map [line2] '("--")) | 505 |
515 (define-key map [f90-insert-end] | 506 (defun f90-font-lock-1 () |
516 '("Insert Block End" . f90-insert-end)) | 507 "Set `font-lock-keywords' to `f90-font-lock-keywords-1'." |
517 (define-key map [f90-join-lines] | 508 (interactive) |
518 '("Join with Next Line" . f90-join-lines)) | 509 (font-lock-mode 1) |
519 (define-key map [f90-break-line] | 510 (setq font-lock-keywords f90-font-lock-keywords-1) |
520 '("Break Line at Point" . f90-break-line)) | 511 (font-lock-fontify-buffer)) |
521 (define-key map [line3] '("--")) | 512 |
522 (define-key map [f90-fill-region] | 513 (defun f90-font-lock-2 () |
523 '("Fill Region" . f90-fill-region)) | 514 "Set `font-lock-keywords' to `f90-font-lock-keywords-2'." |
524 (put 'f90-fill-region 'menu-enable 'mark-active) | 515 (interactive) |
525 (define-key map [indent-region] | 516 (font-lock-mode 1) |
526 '("Indent Region" . indent-region)) | 517 (setq font-lock-keywords f90-font-lock-keywords-2) |
527 (define-key map [f90-comment-region] | 518 (font-lock-fontify-buffer)) |
528 '("(Un)Comment Region" . f90-comment-region)) | 519 |
529 (put 'f90-comment-region 'menu-enable 'mark-active) | 520 (defun f90-font-lock-3 () |
530 (define-key map [line4] '("--")) | 521 "Set `font-lock-keywords' to `f90-font-lock-keywords-3'." |
531 (define-key map [f90-end-of-subprogram] | 522 (interactive) |
532 '("End of Subprogram" . f90-end-of-subprogram)) | 523 (font-lock-mode 1) |
533 (define-key map [f90-beginning-of-subprogram] | 524 (setq font-lock-keywords f90-font-lock-keywords-3) |
534 '("Beginning of Subprogram" . f90-beginning-of-subprogram)) | 525 (font-lock-fontify-buffer)) |
535 (define-key map [f90-mark-subprogram] | 526 |
536 '("Mark Subprogram" . f90-mark-subprogram)) | 527 (defun f90-font-lock-4 () |
537 (define-key map [f90-indent-subprogram] | 528 "Set `font-lock-keywords' to `f90-font-lock-keywords-4'." |
538 '("Indent Subprogram" . f90-indent-subprogram)) | 529 (interactive) |
539 map) | 530 (font-lock-mode 1) |
540 "F90 mode top-level menu bar menu.") | 531 (setq font-lock-keywords f90-font-lock-keywords-4) |
541 | 532 (font-lock-fontify-buffer)) |
542 (define-key f90-mode-map [menu-bar f90-menu] | 533 |
543 (cons "F90" f90-menu-bar-menu)) | 534 |
544 | |
545 (defvar f90-change-case-menu | |
546 (let ((map (make-sparse-keymap "Change Keyword Case"))) | |
547 (define-key map [dkr] | |
548 '("Downcase Keywords (region)" . f90-downcase-region-keywords)) | |
549 (put 'f90-downcase-region-keywords 'menu-enable 'mark-active) | |
550 (define-key map [ckr] | |
551 '("Capitalize Keywords (region)" . f90-capitalize-region-keywords)) | |
552 (put 'f90-capitalize-region-keywords 'menu-enable 'mark-active) | |
553 (define-key map [ukr] | |
554 '("Upcase Keywords (region)" . f90-upcase-region-keywords)) | |
555 (put 'f90-upcase-region-keywords 'menu-enable 'mark-active) | |
556 (define-key map [line] '("--")) | |
557 (define-key map [dkb] | |
558 '("Downcase Keywords (buffer)" . f90-downcase-keywords)) | |
559 (define-key map [ckb] | |
560 '("Capitalize Keywords (buffer)" . f90-capitalize-keywords)) | |
561 (define-key map [ukb] | |
562 '("Upcase Keywords (buffer)" . f90-upcase-keywords)) | |
563 map) | |
564 "Submenu for change of case.") | |
565 | |
566 (defalias 'f90-change-case-menu f90-change-case-menu) | |
567 | |
568 ;; Font-lock-menu and function calls. | |
569 (defalias 'f90-font-lock-on 'font-lock-mode) | |
570 (put 'f90-font-lock-on 'menu-enable 'font-lock-mode) | |
571 (put 'f90-font-lock-on 'menu-alias t) | |
572 | |
573 (defalias 'f90-font-lock-off 'font-lock-mode) | |
574 (put 'f90-font-lock-off 'menu-enable '(not font-lock-mode)) | |
575 (put 'f90-font-lock-off 'menu-alias t) | |
576 | |
577 (defun f90-font-lock-1 () | |
578 "Set `font-lock-keywords' to `f90-font-lock-keywords-1'." | |
579 (interactive) | |
580 (font-lock-mode 1) | |
581 (setq font-lock-keywords f90-font-lock-keywords-1) | |
582 (font-lock-fontify-buffer)) | |
583 | |
584 (defun f90-font-lock-2 () | |
585 "Set `font-lock-keywords' to `f90-font-lock-keywords-2'." | |
586 (interactive) | |
587 (font-lock-mode 1) | |
588 (setq font-lock-keywords f90-font-lock-keywords-2) | |
589 (font-lock-fontify-buffer)) | |
590 | |
591 (defun f90-font-lock-3 () | |
592 "Set `font-lock-keywords' to `f90-font-lock-keywords-3'." | |
593 (interactive) | |
594 (font-lock-mode 1) | |
595 (setq font-lock-keywords f90-font-lock-keywords-3) | |
596 (font-lock-fontify-buffer)) | |
597 | |
598 (defun f90-font-lock-4 () | |
599 "Set `font-lock-keywords' to `f90-font-lock-keywords-4'." | |
600 (interactive) | |
601 (font-lock-mode 1) | |
602 (setq font-lock-keywords f90-font-lock-keywords-4) | |
603 (font-lock-fontify-buffer)) | |
604 | |
605 (defvar f90-font-lock-menu | |
606 (let ((map (make-sparse-keymap "f90-font-lock-menu"))) | |
607 (define-key map [h4] | |
608 '("Maximum highlighting (level 4)" . f90-font-lock-4)) | |
609 (define-key map [h3] | |
610 '("Heavy highlighting (level 3)" . f90-font-lock-3)) | |
611 (define-key map [h2] | |
612 '("Default highlighting (level 2)" . f90-font-lock-2)) | |
613 (define-key map [h1] | |
614 '("Light highlighting (level 1)" . f90-font-lock-1)) | |
615 (define-key map [line] '("--")) | |
616 (define-key map [floff] | |
617 '("Turn off font-lock-mode" . f90-font-lock-on)) | |
618 (define-key map [flon] | |
619 '("Turn on font-lock-mode" . f90-font-lock-off)) | |
620 map) | |
621 "Submenu for highlighting using font-lock-mode.") | |
622 | |
623 (defalias 'f90-font-lock-menu f90-font-lock-menu) | |
624 | |
625 ) | |
626 | |
627 ;; Regexps for finding program structures. | 535 ;; Regexps for finding program structures. |
628 (defconst f90-blocks-re | 536 (defconst f90-blocks-re |
629 (concat "\\(block[ \t]*data\\|" | 537 (concat "\\(block[ \t]*data\\|" |
630 (regexp-opt '("do" "if" "interface" "function" "module" "program" | 538 (regexp-opt '("do" "if" "interface" "function" "module" "program" |
631 "select" "subroutine" "type" "where" "forall")) | 539 "select" "subroutine" "type" "where" "forall")) |
850 (set (make-local-variable 'comment-start-skip) "!+ *") | 758 (set (make-local-variable 'comment-start-skip) "!+ *") |
851 (set (make-local-variable 'comment-indent-function) 'f90-comment-indent) | 759 (set (make-local-variable 'comment-indent-function) 'f90-comment-indent) |
852 (set (make-local-variable 'abbrev-all-caps) t) | 760 (set (make-local-variable 'abbrev-all-caps) t) |
853 (set (make-local-variable 'normal-auto-fill-function) 'f90-do-auto-fill) | 761 (set (make-local-variable 'normal-auto-fill-function) 'f90-do-auto-fill) |
854 (setq indent-tabs-mode nil) ; auto buffer local | 762 (setq indent-tabs-mode nil) ; auto buffer local |
763 (easy-menu-add f90-menu) | |
855 ;; Setting up things for font-lock. | 764 ;; Setting up things for font-lock. |
856 (when f90-xemacs-flag | |
857 (put 'f90-mode 'font-lock-keywords-case-fold-search t) | |
858 (when (and (featurep 'menubar) | |
859 current-menubar | |
860 (not (assoc "F90" current-menubar))) | |
861 (set-buffer-menubar (copy-sequence current-menubar)) | |
862 (add-submenu nil f90-xemacs-menu))) | |
863 ;; XEmacs: Does not need a special case, since both emacsen work alike -sb. | |
864 (set (make-local-variable 'font-lock-defaults) | 765 (set (make-local-variable 'font-lock-defaults) |
865 '((f90-font-lock-keywords f90-font-lock-keywords-1 | 766 '((f90-font-lock-keywords f90-font-lock-keywords-1 |
866 f90-font-lock-keywords-2 | 767 f90-font-lock-keywords-2 |
867 f90-font-lock-keywords-3 | 768 f90-font-lock-keywords-3 |
868 f90-font-lock-keywords-4) | 769 f90-font-lock-keywords-4) |
1394 (let ((pos (point)) program) | 1295 (let ((pos (point)) program) |
1395 (f90-end-of-subprogram) | 1296 (f90-end-of-subprogram) |
1396 (push-mark) | 1297 (push-mark) |
1397 (goto-char pos) | 1298 (goto-char pos) |
1398 (setq program (f90-beginning-of-subprogram)) | 1299 (setq program (f90-beginning-of-subprogram)) |
1399 (if f90-xemacs-flag | 1300 (if (fboundp 'zmacs-activate-region) |
1400 (zmacs-activate-region) | 1301 (zmacs-activate-region) |
1401 (setq mark-active t | 1302 (setq mark-active t |
1402 deactivate-mark nil)) | 1303 deactivate-mark nil)) |
1403 program)) | 1304 program)) |
1404 | 1305 |
1572 ;; Restore point, etc. | 1473 ;; Restore point, etc. |
1573 (setq f90-cache-position nil) | 1474 (setq f90-cache-position nil) |
1574 (goto-char save-point) | 1475 (goto-char save-point) |
1575 (set-marker end-region-mark nil) | 1476 (set-marker end-region-mark nil) |
1576 (set-marker save-point nil) | 1477 (set-marker save-point nil) |
1577 (if f90-xemacs-flag | 1478 (if (fboundp 'zmacs-deactivate-region) |
1578 (zmacs-deactivate-region) | 1479 (zmacs-deactivate-region) |
1579 (deactivate-mark)))) | 1480 (deactivate-mark)))) |
1580 | 1481 |
1581 (defun f90-indent-subprogram () | 1482 (defun f90-indent-subprogram () |
1582 "Properly indent the subprogram containing point." | 1483 "Properly indent the subprogram containing point." |
1683 (f90-break-line 'no-update)) | 1584 (f90-break-line 'no-update)) |
1684 (setq go-on (and (< (point) (marker-position end-region-mark)) | 1585 (setq go-on (and (< (point) (marker-position end-region-mark)) |
1685 (zerop (forward-line 1))) | 1586 (zerop (forward-line 1))) |
1686 f90-cache-position (point))) | 1587 f90-cache-position (point))) |
1687 (setq f90-cache-position nil) | 1588 (setq f90-cache-position nil) |
1688 (if f90-xemacs-flag | 1589 (if (fboundp 'zmacs-deactivate-region) |
1689 (zmacs-deactivate-region) | 1590 (zmacs-deactivate-region) |
1690 (deactivate-mark)))) | 1591 (deactivate-mark)))) |
1691 | 1592 |
1692 (defun f90-block-match (beg-block beg-name end-block end-name) | 1593 (defun f90-block-match (beg-block beg-name end-block end-name) |
1693 "Match end-struct with beg-struct and complete end-block if possible. | 1594 "Match end-struct with beg-struct and complete end-block if possible. |
1779 "Typing `\\[help-command] or `? lists all the F90 abbrevs. | 1680 "Typing `\\[help-command] or `? lists all the F90 abbrevs. |
1780 Any other key combination is executed normally." | 1681 Any other key combination is executed normally." |
1781 (interactive) | 1682 (interactive) |
1782 (let (c) | 1683 (let (c) |
1783 (insert last-command-char) | 1684 (insert last-command-char) |
1784 (if f90-xemacs-flag | 1685 (setq c (if (fboundp 'next-command-event) ; XEmacs |
1785 (setq c (event-to-character (next-command-event))) | 1686 (event-to-character (next-command-event)) |
1786 (setq c (read-event))) | 1687 (read-event))) |
1787 ;; Insert char if not equal to `?'. | 1688 ;; Insert char if not equal to `?'. |
1788 (if (or (eq c ??) (eq c help-char)) | 1689 (if (or (eq c ??) (eq c help-char)) |
1789 (f90-abbrev-help) | 1690 (f90-abbrev-help) |
1790 (setq unread-command-events (list c))))) | 1691 (setq unread-command-events (list c))))) |
1791 | 1692 |