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)