401 |
"*Default expressions to highlight in F90 mode.") |
"*Default expressions to highlight in F90 mode.") |
402 |
|
|
403 |
|
|
404 |
(defvar f90-mode-syntax-table nil |
(defvar f90-mode-syntax-table |
405 |
"Syntax table in use in F90 mode buffers.") |
(let ((table (make-syntax-table))) |
406 |
|
(modify-syntax-entry ?\! "<" table) ; begin comment |
407 |
(unless f90-mode-syntax-table |
(modify-syntax-entry ?\n ">" table) ; end comment |
408 |
(setq f90-mode-syntax-table (make-syntax-table)) |
(modify-syntax-entry ?_ "w" table) ; underscore in names |
409 |
(modify-syntax-entry ?\! "<" f90-mode-syntax-table) ; begin comment |
(modify-syntax-entry ?\' "\"" table) ; string quote |
410 |
(modify-syntax-entry ?\n ">" f90-mode-syntax-table) ; end comment |
(modify-syntax-entry ?\" "\"" table) ; string quote |
411 |
(modify-syntax-entry ?_ "w" f90-mode-syntax-table) ; underscore in names |
(modify-syntax-entry ?\` "w" table) ; for abbrevs |
412 |
(modify-syntax-entry ?\' "\"" f90-mode-syntax-table) ; string quote |
(modify-syntax-entry ?\r " " table) ; return is whitespace |
413 |
(modify-syntax-entry ?\" "\"" f90-mode-syntax-table) ; string quote |
(modify-syntax-entry ?+ "." table) ; punctuation |
414 |
(modify-syntax-entry ?\` "w" f90-mode-syntax-table) ; for abbrevs |
(modify-syntax-entry ?- "." table) |
415 |
(modify-syntax-entry ?\r " " f90-mode-syntax-table) ; return is whitespace |
(modify-syntax-entry ?= "." table) |
416 |
(modify-syntax-entry ?+ "." f90-mode-syntax-table) ; punctuation |
(modify-syntax-entry ?* "." table) |
417 |
(modify-syntax-entry ?- "." f90-mode-syntax-table) |
(modify-syntax-entry ?/ "." table) |
418 |
(modify-syntax-entry ?= "." f90-mode-syntax-table) |
(modify-syntax-entry ?\\ "\\" table) ; escape chars |
419 |
(modify-syntax-entry ?* "." f90-mode-syntax-table) |
table) |
420 |
(modify-syntax-entry ?/ "." f90-mode-syntax-table) |
"Syntax table used in F90 mode.") |
421 |
(modify-syntax-entry ?\\ "\\" f90-mode-syntax-table)) ; escape chars |
|
422 |
|
(defvar f90-mode-map |
423 |
|
(let ((map (make-sparse-keymap))) |
424 |
(defvar f90-mode-map () |
(define-key map "`" 'f90-abbrev-start) |
425 |
|
(define-key map "\C-c;" 'f90-comment-region) |
426 |
|
(define-key map "\C-\M-a" 'f90-beginning-of-subprogram) |
427 |
|
(define-key map "\C-\M-e" 'f90-end-of-subprogram) |
428 |
|
(define-key map "\C-\M-h" 'f90-mark-subprogram) |
429 |
|
(define-key map "\C-\M-q" 'f90-indent-subprogram) |
430 |
|
(define-key map "\C-j" 'f90-indent-new-line) ; LFD equals C-j |
431 |
|
(define-key map "\r" 'newline) |
432 |
|
(define-key map "\C-c\r" 'f90-break-line) |
433 |
|
;;; (define-key map [M-return] 'f90-break-line) |
434 |
|
(define-key map "\C-c\C-d" 'f90-join-lines) |
435 |
|
(define-key map "\C-c\C-f" 'f90-fill-region) |
436 |
|
(define-key map "\C-c\C-p" 'f90-previous-statement) |
437 |
|
(define-key map "\C-c\C-n" 'f90-next-statement) |
438 |
|
(define-key map "\C-c\C-w" 'f90-insert-end) |
439 |
|
(define-key map "\t" 'f90-indent-line) |
440 |
|
(define-key map "," 'f90-electric-insert) |
441 |
|
(define-key map "+" 'f90-electric-insert) |
442 |
|
(define-key map "-" 'f90-electric-insert) |
443 |
|
(define-key map "*" 'f90-electric-insert) |
444 |
|
(define-key map "/" 'f90-electric-insert) |
445 |
|
map) |
446 |
"Keymap used in F90 mode.") |
"Keymap used in F90 mode.") |
447 |
|
|
448 |
(unless f90-mode-map |
;; Menu bar support. |
|
(setq f90-mode-map (make-sparse-keymap)) |
|
|
(define-key f90-mode-map "`" 'f90-abbrev-start) |
|
|
(define-key f90-mode-map "\C-c;" 'f90-comment-region) |
|
|
(define-key f90-mode-map "\C-\M-a" 'f90-beginning-of-subprogram) |
|
|
(define-key f90-mode-map "\C-\M-e" 'f90-end-of-subprogram) |
|
|
(define-key f90-mode-map "\C-\M-h" 'f90-mark-subprogram) |
|
|
(define-key f90-mode-map "\C-\M-q" 'f90-indent-subprogram) |
|
|
(define-key f90-mode-map "\C-j" 'f90-indent-new-line) ; LFD equals C-j |
|
|
(define-key f90-mode-map "\r" 'newline) |
|
|
(define-key f90-mode-map "\C-c\r" 'f90-break-line) |
|
|
;;; (define-key f90-mode-map [M-return] 'f90-break-line) |
|
|
(define-key f90-mode-map "\C-c\C-d" 'f90-join-lines) |
|
|
(define-key f90-mode-map "\C-c\C-f" 'f90-fill-region) |
|
|
(define-key f90-mode-map "\C-c\C-p" 'f90-previous-statement) |
|
|
(define-key f90-mode-map "\C-c\C-n" 'f90-next-statement) |
|
|
(define-key f90-mode-map "\C-c\C-w" 'f90-insert-end) |
|
|
(define-key f90-mode-map "\t" 'f90-indent-line) |
|
|
(define-key f90-mode-map "," 'f90-electric-insert) |
|
|
(define-key f90-mode-map "+" 'f90-electric-insert) |
|
|
(define-key f90-mode-map "-" 'f90-electric-insert) |
|
|
(define-key f90-mode-map "*" 'f90-electric-insert) |
|
|
(define-key f90-mode-map "/" 'f90-electric-insert)) |
|
|
|
|
|
|
|
449 |
(if f90-xemacs-flag |
(if f90-xemacs-flag |
450 |
(defvar f90-xemacs-menu |
(defvar f90-xemacs-menu |
451 |
'("F90" |
'("F90" |
475 |
"XEmacs menu for F90 mode.") |
"XEmacs menu for F90 mode.") |
476 |
|
|
477 |
;; Emacs. |
;; Emacs. |
478 |
|
(defvar f90-menu-bar-menu |
479 |
|
(let ((map (make-sparse-keymap "F90"))) |
480 |
|
(define-key map [f90-imenu-menu] |
481 |
|
'("Add imenu Menu" . f90-add-imenu-menu)) |
482 |
|
(define-key map [abbrev-mode] |
483 |
|
'("Toggle abbrev-mode" . abbrev-mode)) |
484 |
|
(define-key map [auto-fill-mode] |
485 |
|
'("Toggle auto-fill" . auto-fill-mode)) |
486 |
|
(define-key map [line1] '("--")) |
487 |
|
(define-key map [f90-change-case-menu] |
488 |
|
'("Change Keyword Case" . f90-change-case-menu)) |
489 |
|
(define-key map [f90-font-lock-menu] |
490 |
|
'("Highlighting" . f90-font-lock-menu)) |
491 |
|
(define-key map [line2] '("--")) |
492 |
|
(define-key map [f90-insert-end] |
493 |
|
'("Insert Block End" . f90-insert-end)) |
494 |
|
(define-key map [f90-join-lines] |
495 |
|
'("Join with Next Line" . f90-join-lines)) |
496 |
|
(define-key map [f90-break-line] |
497 |
|
'("Break Line at Point" . f90-break-line)) |
498 |
|
(define-key map [line3] '("--")) |
499 |
|
(define-key map [f90-fill-region] |
500 |
|
'("Fill Region" . f90-fill-region)) |
501 |
|
(put 'f90-fill-region 'menu-enable 'mark-active) |
502 |
|
(define-key map [indent-region] |
503 |
|
'("Indent Region" . indent-region)) |
504 |
|
(define-key map [f90-comment-region] |
505 |
|
'("(Un)Comment Region" . f90-comment-region)) |
506 |
|
(put 'f90-comment-region 'menu-enable 'mark-active) |
507 |
|
(define-key map [line4] '("--")) |
508 |
|
(define-key map [f90-end-of-subprogram] |
509 |
|
'("End of Subprogram" . f90-end-of-subprogram)) |
510 |
|
(define-key map [f90-beginning-of-subprogram] |
511 |
|
'("Beginning of Subprogram" . f90-beginning-of-subprogram)) |
512 |
|
(define-key map [f90-mark-subprogram] |
513 |
|
'("Mark Subprogram" . f90-mark-subprogram)) |
514 |
|
(define-key map [f90-indent-subprogram] |
515 |
|
'("Indent Subprogram" . f90-indent-subprogram)) |
516 |
|
map) |
517 |
|
"F90 mode top-level menu bar menu.") |
518 |
|
|
519 |
|
(define-key f90-mode-map [menu-bar f90-menu] |
520 |
|
(cons "F90" f90-menu-bar-menu)) |
521 |
|
|
522 |
(defvar f90-change-case-menu |
(defvar f90-change-case-menu |
523 |
(let ((map (make-sparse-keymap "Change Keyword Case"))) |
(let ((map (make-sparse-keymap "Change Keyword Case"))) |
524 |
(define-key map [dkr] |
(define-key map [dkr] |
525 |
(cons "Downcase Keywords (region)" 'f90-downcase-region-keywords)) |
'("Downcase Keywords (region)" . f90-downcase-region-keywords)) |
526 |
(put 'f90-downcase-region-keywords 'menu-enable 'mark-active) |
(put 'f90-downcase-region-keywords 'menu-enable 'mark-active) |
527 |
(define-key map [ckr] |
(define-key map [ckr] |
528 |
(cons "Capitalize Keywords (region)" 'f90-capitalize-region-keywords)) |
'("Capitalize Keywords (region)" . f90-capitalize-region-keywords)) |
529 |
(put 'f90-capitalize-region-keywords 'menu-enable 'mark-active) |
(put 'f90-capitalize-region-keywords 'menu-enable 'mark-active) |
530 |
(define-key map [ukr] |
(define-key map [ukr] |
531 |
(cons "Upcase Keywords (region)" 'f90-upcase-region-keywords)) |
'("Upcase Keywords (region)" . f90-upcase-region-keywords)) |
532 |
(put 'f90-upcase-region-keywords 'menu-enable 'mark-active) |
(put 'f90-upcase-region-keywords 'menu-enable 'mark-active) |
533 |
(define-key map [line] (list "-----------------")) |
(define-key map [line] '("--")) |
534 |
(define-key map [dkb] |
(define-key map [dkb] |
535 |
(cons "Downcase Keywords (buffer)" 'f90-downcase-keywords)) |
'("Downcase Keywords (buffer)" . f90-downcase-keywords)) |
536 |
(define-key map [ckb] |
(define-key map [ckb] |
537 |
(cons "Capitalize Keywords (buffer)" 'f90-capitalize-keywords)) |
'("Capitalize Keywords (buffer)" . f90-capitalize-keywords)) |
538 |
(define-key map [ukb] |
(define-key map [ukb] |
539 |
(cons "Upcase Keywords (buffer)" 'f90-upcase-keywords)) |
'("Upcase Keywords (buffer)" . f90-upcase-keywords)) |
540 |
map) |
map) |
541 |
"Submenu for change of case.") |
"Submenu for change of case.") |
542 |
|
|
543 |
(defalias 'f90-change-case-menu f90-change-case-menu) |
(defalias 'f90-change-case-menu f90-change-case-menu) |
544 |
|
|
545 |
;; Font-lock-menu and function calls. |
;; Font-lock-menu and function calls. |
546 |
(defalias 'f90-font-lock-on 'font-lock-mode) |
(defalias 'f90-font-lock-on 'font-lock-mode) |
547 |
|
(put 'f90-font-lock-on 'menu-enable 'font-lock-mode) |
548 |
|
(put 'f90-font-lock-on 'menu-alias t) |
549 |
|
|
550 |
(defalias 'f90-font-lock-off 'font-lock-mode) |
(defalias 'f90-font-lock-off 'font-lock-mode) |
|
(put 'f90-font-lock-on 'menu-enable 'font-lock-mode) |
|
551 |
(put 'f90-font-lock-off 'menu-enable '(not font-lock-mode)) |
(put 'f90-font-lock-off 'menu-enable '(not font-lock-mode)) |
552 |
|
(put 'f90-font-lock-off 'menu-alias t) |
553 |
|
|
554 |
(defun f90-font-lock-1 () |
(defun f90-font-lock-1 () |
555 |
|
"Set `font-lock-keywords' to `f90-font-lock-keywords-1'." |
556 |
(interactive) |
(interactive) |
|
"Set font-lock-keywords to f90-font-lock-keywords-1." |
|
557 |
(font-lock-mode 1) |
(font-lock-mode 1) |
558 |
(setq font-lock-keywords f90-font-lock-keywords-1) |
(setq font-lock-keywords f90-font-lock-keywords-1) |
559 |
(font-lock-fontify-buffer)) |
(font-lock-fontify-buffer)) |
560 |
|
|
561 |
(defun f90-font-lock-2 () |
(defun f90-font-lock-2 () |
562 |
|
"Set `font-lock-keywords' to `f90-font-lock-keywords-2'." |
563 |
(interactive) |
(interactive) |
|
"Set font-lock-keywords to f90-font-lock-keywords-2." |
|
564 |
(font-lock-mode 1) |
(font-lock-mode 1) |
565 |
(setq font-lock-keywords f90-font-lock-keywords-2) |
(setq font-lock-keywords f90-font-lock-keywords-2) |
566 |
(font-lock-fontify-buffer)) |
(font-lock-fontify-buffer)) |
567 |
|
|
568 |
(defun f90-font-lock-3 () |
(defun f90-font-lock-3 () |
569 |
|
"Set `font-lock-keywords' to `f90-font-lock-keywords-3'." |
570 |
(interactive) |
(interactive) |
|
"Set font-lock-keywords to f90-font-lock-keywords-3." |
|
571 |
(font-lock-mode 1) |
(font-lock-mode 1) |
572 |
(setq font-lock-keywords f90-font-lock-keywords-3) |
(setq font-lock-keywords f90-font-lock-keywords-3) |
573 |
(font-lock-fontify-buffer)) |
(font-lock-fontify-buffer)) |
574 |
|
|
575 |
(defun f90-font-lock-4 () |
(defun f90-font-lock-4 () |
576 |
|
"Set `font-lock-keywords' to `f90-font-lock-keywords-4'." |
577 |
(interactive) |
(interactive) |
|
"Set font-lock-keywords to f90-font-lock-keywords-4." |
|
578 |
(font-lock-mode 1) |
(font-lock-mode 1) |
579 |
(setq font-lock-keywords f90-font-lock-keywords-4) |
(setq font-lock-keywords f90-font-lock-keywords-4) |
580 |
(font-lock-fontify-buffer)) |
(font-lock-fontify-buffer)) |
582 |
(defvar f90-font-lock-menu |
(defvar f90-font-lock-menu |
583 |
(let ((map (make-sparse-keymap "f90-font-lock-menu"))) |
(let ((map (make-sparse-keymap "f90-font-lock-menu"))) |
584 |
(define-key map [h4] |
(define-key map [h4] |
585 |
(cons "Maximum highlighting (level 4)" 'f90-font-lock-4)) |
'("Maximum highlighting (level 4)" . f90-font-lock-4)) |
586 |
(define-key map [h3] |
(define-key map [h3] |
587 |
(cons "Heavy highlighting (level 3)" 'f90-font-lock-3)) |
'("Heavy highlighting (level 3)" . f90-font-lock-3)) |
588 |
(define-key map [h2] |
(define-key map [h2] |
589 |
(cons "Default highlighting (level 2)" 'f90-font-lock-2)) |
'("Default highlighting (level 2)" . f90-font-lock-2)) |
590 |
(define-key map [h1] |
(define-key map [h1] |
591 |
(cons "Light highlighting (level 1)" 'f90-font-lock-1)) |
'("Light highlighting (level 1)" . f90-font-lock-1)) |
592 |
(define-key map [line] (list "-----------------")) |
(define-key map [line] '("--")) |
593 |
(define-key map [floff] |
(define-key map [floff] |
594 |
(cons "Turn off font-lock-mode" 'f90-font-lock-on)) |
'("Turn off font-lock-mode" . f90-font-lock-on)) |
595 |
(define-key map [flon] |
(define-key map [flon] |
596 |
(cons "Turn on font-lock-mode" 'f90-font-lock-off)) |
'("Turn on font-lock-mode" . f90-font-lock-off)) |
597 |
map) |
map) |
598 |
"Submenu for highlighting using font-lock-mode.") |
"Submenu for highlighting using font-lock-mode.") |
599 |
|
|
600 |
(defalias 'f90-font-lock-menu f90-font-lock-menu) |
(defalias 'f90-font-lock-menu f90-font-lock-menu) |
601 |
|
|
|
(define-key f90-mode-map [menu-bar] (make-sparse-keymap)) |
|
|
(define-key f90-mode-map [menu-bar f90] |
|
|
(cons "F90" (make-sparse-keymap "f90"))) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-imenu-menu] |
|
|
'("Add imenu Menu" . f90-add-imenu-menu)) |
|
|
(define-key f90-mode-map [menu-bar f90 abbrev-mode] |
|
|
'("Toggle abbrev-mode" . abbrev-mode)) |
|
|
(define-key f90-mode-map [menu-bar f90 auto-fill-mode] |
|
|
'("Toggle auto-fill" . auto-fill-mode)) |
|
|
(define-key f90-mode-map [menu-bar f90 line1] '("----")) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-change-case-menu] |
|
|
(cons "Change Keyword Case" 'f90-change-case-menu)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-font-lock-menu] |
|
|
(cons "Highlighting" 'f90-font-lock-menu)) |
|
|
(define-key f90-mode-map [menu-bar f90 line2] '("----")) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-insert-end] |
|
|
'("Insert Block End" . f90-insert-end)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-join-lines] |
|
|
'("Join with Next Line" . f90-join-lines)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-break-line] |
|
|
'("Break Line at Point" . f90-break-line)) |
|
|
(define-key f90-mode-map [menu-bar f90 line3] '("----")) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-fill-region] |
|
|
'("Fill Region" . f90-fill-region)) |
|
|
(put 'f90-fill-region 'menu-enable 'mark-active) |
|
|
(define-key f90-mode-map [menu-bar f90 indent-region] |
|
|
'("Indent Region" . indent-region)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-comment-region] |
|
|
'("(Un)Comment Region" . f90-comment-region)) |
|
|
(put 'f90-comment-region 'menu-enable 'mark-active) |
|
|
(define-key f90-mode-map [menu-bar f90 line4] '("----")) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-end-of-subprogram] |
|
|
'("End of Subprogram" . f90-end-of-subprogram)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-beginning-of-subprogram] |
|
|
'("Beginning of Subprogram" . f90-beginning-of-subprogram)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-mark-subprogram] |
|
|
'("Mark Subprogram" . f90-mark-subprogram)) |
|
|
(define-key f90-mode-map [menu-bar f90 f90-indent-subprogram] |
|
|
'("Indent Subprogram" . f90-indent-subprogram)) |
|
602 |
) |
) |
603 |
|
|
604 |
;; Regexps for finding program structures. |
;; Regexps for finding program structures. |
828 |
(set (make-local-variable 'comment-indent-function) 'f90-comment-indent) |
(set (make-local-variable 'comment-indent-function) 'f90-comment-indent) |
829 |
(set (make-local-variable 'abbrev-all-caps) t) |
(set (make-local-variable 'abbrev-all-caps) t) |
830 |
(set (make-local-variable 'normal-auto-fill-function) 'f90-do-auto-fill) |
(set (make-local-variable 'normal-auto-fill-function) 'f90-do-auto-fill) |
831 |
(setq indent-tabs-mode nil) |
(setq indent-tabs-mode nil) ; auto buffer local |
832 |
;; Setting up things for font-lock. |
;; Setting up things for font-lock. |
833 |
(when f90-xemacs-flag |
(when f90-xemacs-flag |
834 |
(put 'f90-mode 'font-lock-keywords-case-fold-search t) |
(put 'f90-mode 'font-lock-keywords-case-fold-search t) |