Mercurial > emacs
comparison lisp/progmodes/scheme.el @ 20891:0b58035a48ca
(scheme-imenu-generic-expression): Simplify regexps.
(dsssl-imenu-generic-expression): Likewise
(scheme-mode-variables): Set imenu-syntax-alist.
(dsssl-mode): Remove `!' from font-lock-defaults. Set
imenu-syntax-alist.
author | Dave Love <fx@gnu.org> |
---|---|
date | Thu, 12 Feb 1998 18:20:21 +0000 |
parents | 3965832648d3 |
children | f3f9df46d008 |
comparison
equal
deleted
inserted
replaced
20890:c7cfd531cf2b | 20891:0b58035a48ca |
---|---|
1 ;;; scheme.el --- Scheme (and DSSSL) editing mode. | 1 ;;; scheme.el --- Scheme (and DSSSL) editing mode. |
2 | 2 |
3 ;; Copyright (C) 1986, 87, 88, 1997 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1986, 87, 88, 1997 Free Software Foundation, Inc. |
4 | 4 |
5 ;; Author: Bill Rozas <jinx@martigny.ai.mit.edu> | 5 ;; Author: Bill Rozas <jinx@martigny.ai.mit.edu> |
6 ;; Maintainer: FSF | 6 ;; Adapted-by: Dave Love <d.love@dl.ac.uk> |
7 ;; Keywords: languages, lisp | 7 ;; Keywords: languages, lisp |
8 | 8 |
9 ;; This file is part of GNU Emacs. | 9 ;; This file is part of GNU Emacs. |
10 | 10 |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | 11 ;; GNU Emacs is free software; you can redistribute it and/or modify |
20 | 20 |
21 ;; You should have received a copy of the GNU General Public License | 21 ;; You should have received a copy of the GNU General Public License |
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
24 ;; Boston, MA 02111-1307, USA. | 24 ;; Boston, MA 02111-1307, USA. |
25 | |
26 ;; Originally adapted from Lisp mode by Bill Rozas, jinx@prep with a | |
27 ;; comment that the code should be merged back. Merging done by | |
28 ;; d.love@dl.ac.uk when DSSSL features added. | |
29 | 25 |
30 ;;; Commentary: | 26 ;;; Commentary: |
31 | 27 |
32 ;; The major mode for editing Scheme-type Lisp code, very similar to | 28 ;; The major mode for editing Scheme-type Lisp code, very similar to |
33 ;; the Lisp mode documented in the Emacs manual. `dsssl-mode' is a | 29 ;; the Lisp mode documented in the Emacs manual. `dsssl-mode' is a |
114 (defvar scheme-mode-abbrev-table nil "") | 110 (defvar scheme-mode-abbrev-table nil "") |
115 (define-abbrev-table 'scheme-mode-abbrev-table ()) | 111 (define-abbrev-table 'scheme-mode-abbrev-table ()) |
116 | 112 |
117 (defvar scheme-imenu-generic-expression | 113 (defvar scheme-imenu-generic-expression |
118 '((nil | 114 '((nil |
119 "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\(\\sw\\|\\s_\\)+\\)" 4) | 115 "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)" 4) |
120 (" Types" | 116 (" Types" |
121 "^(define-class\\s-+(?\\(\\(\\sw\\|\\s_\\)+\\)" 1) | 117 "^(define-class\\s-+(?\\(\\sw+\\)" 1) |
122 (" Macros" | 118 (" Macros" |
123 "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\(\\sw\\|\\s_\\)+\\)" 2)) | 119 "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2)) |
124 "Imenu generic expression for Scheme mode. See `imenu-generic-expression'.") | 120 "Imenu generic expression for Scheme mode. See `imenu-generic-expression'.") |
125 | 121 |
126 (defun scheme-mode-variables () | 122 (defun scheme-mode-variables () |
127 (set-syntax-table scheme-mode-syntax-table) | 123 (set-syntax-table scheme-mode-syntax-table) |
128 (setq local-abbrev-table scheme-mode-abbrev-table) | 124 (setq local-abbrev-table scheme-mode-abbrev-table) |
160 (make-local-variable 'parse-sexp-ignore-comments) | 156 (make-local-variable 'parse-sexp-ignore-comments) |
161 (setq parse-sexp-ignore-comments t) | 157 (setq parse-sexp-ignore-comments t) |
162 (make-local-variable 'lisp-indent-function) | 158 (make-local-variable 'lisp-indent-function) |
163 (set lisp-indent-function 'scheme-indent-function) | 159 (set lisp-indent-function 'scheme-indent-function) |
164 (setq mode-line-process '("" scheme-mode-line-process)) | 160 (setq mode-line-process '("" scheme-mode-line-process)) |
161 (make-local-variable 'imenu-case-fold-search) | |
162 (setq imenu-case-fold-search t) | |
165 (make-local-variable 'imenu-generic-expression) | 163 (make-local-variable 'imenu-generic-expression) |
166 (setq imenu-generic-expression scheme-imenu-generic-expression) | 164 (setq imenu-generic-expression scheme-imenu-generic-expression) |
167 (setq imenu-case-fold-search t)) | 165 (make-local-variable 'imenu-syntax-alist) |
166 (setq imenu-syntax-alist '(("+-*/.<>=?!$%_&~^:" . "w")))) | |
168 | 167 |
169 (defvar scheme-mode-line-process "") | 168 (defvar scheme-mode-line-process "") |
170 | 169 |
171 (defvar scheme-mode-map nil | 170 (defvar scheme-mode-map nil |
172 "Keymap for Scheme mode. | 171 "Keymap for Scheme mode. |
264 ;; Perhaps this should also look for the style-sheet DTD tags. I'm | 263 ;; Perhaps this should also look for the style-sheet DTD tags. I'm |
265 ;; not sure it's the best way to organize it; perhaps one type | 264 ;; not sure it's the best way to organize it; perhaps one type |
266 ;; should be at the first level, though you don't see this anyhow if | 265 ;; should be at the first level, though you don't see this anyhow if |
267 ;; it gets split up. | 266 ;; it gets split up. |
268 '((" Defines" | 267 '((" Defines" |
269 "^(define\\s-+(?\\(\\(\\sw\\|\\s_\\)+\\)" 1) | 268 "^(define\\s-+(?\\(\\sw+\\)" 1) |
270 (" Modes" | 269 (" Modes" |
271 "^\\s-*(mode\\s-+\\(\\(\\sw\\|\\s-\\|\\s_\\)+\\)" 1) | 270 "^\\s-*(mode\\s-+\\(\\(\\sw\\|\\s-\\)+\\)" 1) |
272 (" Elements" | 271 (" Elements" |
273 ;; (element foo ...) or (element (foo bar ...) ...) | 272 ;; (element foo ...) or (element (foo bar ...) ...) |
274 ;; Fixme: Perhaps it should do `root'. | 273 ;; Fixme: Perhaps it should do `root'. |
275 "^\\s-*(element\\s-+(?\\(\\(\\sw\\|\\s-\\|\\s_\\)+\\))?" 1) | 274 "^\\s-*(element\\s-+(?\\(\\(\\sw\\|\\s-\\)+\\))?" 1) |
276 (" Declarations" | 275 (" Declarations" |
277 "^(declare\\(-\\sw+\\)+\\>\\s-+\\(\\(\\sw\\|\\s_\\)+\\)" 2)) | 276 "^(declare\\(-\\sw+\\)+\\>\\s-+\\(\\sw+\\)" 2)) |
278 "Imenu generic expression for DSSSL mode. See `imenu-generic-expression'.") | 277 "Imenu generic expression for DSSSL mode. See `imenu-generic-expression'.") |
279 | 278 |
280 ;;;###autoload | 279 ;;;###autoload |
281 (defun dsssl-mode () | 280 (defun dsssl-mode () |
282 "Major mode for editing DSSSL code. | 281 "Major mode for editing DSSSL code. |
293 (kill-all-local-variables) | 292 (kill-all-local-variables) |
294 (use-local-map scheme-mode-map) | 293 (use-local-map scheme-mode-map) |
295 (scheme-mode-initialize) | 294 (scheme-mode-initialize) |
296 (make-local-variable 'font-lock-defaults) | 295 (make-local-variable 'font-lock-defaults) |
297 (setq font-lock-defaults '(dsssl-font-lock-keywords | 296 (setq font-lock-defaults '(dsssl-font-lock-keywords |
298 nil t (("+-*/.<>=!?$%_&~^:" . "w")) | 297 nil t (("+-*/.<>=?$%_&~^:" . "w")) |
299 beginning-of-defun | 298 beginning-of-defun |
300 (font-lock-comment-start-regexp . ";") | 299 (font-lock-comment-start-regexp . ";") |
301 (font-lock-mark-block-function . mark-defun))) | 300 (font-lock-mark-block-function . mark-defun))) |
302 (make-local-variable 'page-delimiter) | 301 (make-local-variable 'page-delimiter) |
303 (setq page-delimiter "^;;;" ; ^L not valid SGML char | 302 (setq page-delimiter "^;;;" ; ^L not valid SGML char |
309 (not buffer-read-only) | 308 (not buffer-read-only) |
310 (insert dsssl-sgml-declaration)) | 309 (insert dsssl-sgml-declaration)) |
311 (run-hooks 'scheme-mode-hook) | 310 (run-hooks 'scheme-mode-hook) |
312 (run-hooks 'dsssl-mode-hook) | 311 (run-hooks 'dsssl-mode-hook) |
313 (scheme-mode-variables) | 312 (scheme-mode-variables) |
313 (setq imenu-case-fold-search nil) | |
314 (setq imenu-generic-expression dsssl-imenu-generic-expression) | 314 (setq imenu-generic-expression dsssl-imenu-generic-expression) |
315 (setq imenu-case-fold-search nil)) | 315 (setq imenu-syntax-alist '(("+-*/.<>=?$%_&~^:" . "w")))) |
316 | 316 |
317 ;; Extra syntax for DSSSL. This isn't separated from Scheme, but | 317 ;; Extra syntax for DSSSL. This isn't separated from Scheme, but |
318 ;; shouldn't cause much trouble in scheme-mode. | 318 ;; shouldn't cause much trouble in scheme-mode. |
319 (put 'element 'scheme-indent-function 1) | 319 (put 'element 'scheme-indent-function 1) |
320 (put 'mode 'scheme-indent-function 1) | 320 (put 'mode 'scheme-indent-function 1) |