• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/progmodes/

Lines Matching +defs:lisp +defs:mode +defs:syntax +defs:table

1 ;;; scheme.el --- Scheme (and DSSSL) editing mode
8 ;; Keywords: languages, lisp
29 ;; The major mode for editing Scheme-type Lisp code, very similar to
30 ;; the Lisp mode documented in the Emacs manual. `dsssl-mode' is a
31 ;; variant of scheme-mode for editing DSSSL specifications for SGML
35 ;; syntax they highlight/indent/index, but dsssl-mode uses "^;;;" as
43 ;; etags --lang=scheme --regex='/[ \t]*(\(mode\|element\)[ \t
56 (require 'lisp-mode)
58 (defvar scheme-mode-syntax-table
59 (let ((st (make-syntax-table))
64 (modify-syntax-entry i "_ " st)
70 (modify-syntax-entry i "w " st)
74 (modify-syntax-entry i "w " st)
78 (modify-syntax-entry i "w " st)
82 (modify-syntax-entry ?\t " " st)
83 (modify-syntax-entry ?\n "> " st)
84 (modify-syntax-entry ?\f " " st)
85 (modify-syntax-entry ?\r " " st)
86 (modify-syntax-entry ?\s " " st)
90 (modify-syntax-entry ?\[ "(] " st)
91 (modify-syntax-entry ?\] ")[ " st)
92 (modify-syntax-entry ?{ "(} " st)
93 (modify-syntax-entry ?} "){ " st)
94 (modify-syntax-entry ?\| "\" 23bn" st)
99 ;; (modify-syntax-entry ?! "_ 2" st)
102 (modify-syntax-entry ?\( "() " st)
103 (modify-syntax-entry ?\) ")( " st)
105 (modify-syntax-entry ?\; "< 2 " st)
106 (modify-syntax-entry ?\" "\" " st)
107 (modify-syntax-entry ?' "' " st)
108 (modify-syntax-entry ?` "' " st)
111 (modify-syntax-entry ?, "' " st)
112 (modify-syntax-entry ?@ "' " st)
113 (modify-syntax-entry ?# "' 14b" st)
114 (modify-syntax-entry ?\\ "\\ " st)
118 (defvar scheme-mode-abbrev-table nil)
119 (define-abbrev-table 'scheme-mode-abbrev-table ())
127 "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2))
128 "Imenu generic expression for Scheme mode. See `imenu-generic-expression'.")
130 (defun scheme-mode-variables ()
131 (set-syntax-table scheme-mode-syntax-table)
132 (setq local-abbrev-table scheme-mode-abbrev-table)
140 (setq fill-paragraph-function 'lisp-fill-paragraph)
141 ;; Adaptive fill mode gets in the way of auto-fill,
143 ;; because lisp-fill-paragraph should do the job.
144 (make-local-variable 'adaptive-fill-mode)
145 (setq adaptive-fill-mode nil)
147 (setq normal-auto-fill-function 'lisp-mode-auto-fill)
149 (setq indent-line-function 'lisp-indent-line)
165 (make-local-variable 'lisp-indent-function)
166 (setq lisp-indent-function 'scheme-indent-function)
167 (setq mode-line-process '("" scheme-mode-line-process))
170 (set (make-local-variable 'imenu-syntax-alist)
181 (font-lock-extra-managed-props syntax-table)))
182 (set (make-local-variable 'lisp-doc-string-elt-property)
185 (defvar scheme-mode-line-process "")
187 (defvar scheme-mode-map
190 (set-keymap-parent smap lisp-mode-shared-map)
199 (define-key map [indent-line] '("Indent Line" . lisp-indent-line))
204 "Keymap for Scheme mode.
205 All commands in `lisp-mode-shared-map' are inherited by this map.")
208 (defun scheme-mode-commands (map)
215 (defun scheme-mode ()
216 "Major mode for editing Scheme code.
217 Editing commands are similar to those of `lisp-mode'.
225 documentation for `xscheme-interaction-mode'. Use \\[run-scheme] to
231 \\{scheme-mode-map}
232 Entry to this mode calls the value of `scheme-mode-hook'
236 (use-local-map scheme-mode-map)
237 (setq major-mode 'scheme-mode)
238 (setq mode-name "Scheme")
239 (scheme-mode-variables)
240 (run-mode-hooks 'scheme-mode-hook))
245 :group 'lisp)
248 "If non-nil, scheme mode is specialized for MIT Scheme.
258 which is in `dsssl-mode'. It is typically James Clark's style-sheet
264 (defcustom scheme-mode-hook nil
265 "Normal hook run when entering `scheme-mode'.
270 (defcustom dsssl-mode-hook nil
271 "Normal hook run when entering `dsssl-mode'.
290 "^\\s-*(mode\\s-+\\(\\(\\sw\\|\\s-\\)+\\)" 1)
297 "Imenu generic expression for DSSSL mode. See `imenu-generic-expression'.")
309 "\\(-syntax\\|-macro\\)\\|"
338 "let" "let*" "let-syntax" "letrec" "letrec-syntax"
343 "map" "syntax" "syntax-rules") t)
361 (defconst scheme-sexp-comment-syntax-table
362 (let ((st (make-syntax-table scheme-mode-syntax-table)))
363 (modify-syntax-entry ?\; "." st)
364 (modify-syntax-entry ?\n " " st)
365 (modify-syntax-entry ?# "'" st)
394 'syntax-table scheme-sexp-comment-syntax-table))
395 (put-text-property (- end 1) end 'syntax-table '(12)))))
397 (lisp-font-lock-syntactic-face-function state))
400 (define-derived-mode dsssl-mode scheme-mode "DSSSL"
401 "Major mode for editing DSSSL code.
402 Editing commands are similar to those of `lisp-mode'.
407 \\{scheme-mode-map}
408 Entering this mode runs the hooks `scheme-mode-hook' and then
409 `dsssl-mode-hook' and inserts the value of `dsssl-sgml-declaration' if
413 major-mode 'dsssl-mode
414 mode-name "DSSSL")
427 (set (make-local-variable 'imenu-syntax-alist)
430 ;; Extra syntax for DSSSL. This isn't separated from Scheme, but
431 ;; shouldn't cause much trouble in scheme-mode.
433 (put 'mode 'scheme-indent-function 1)
434 (put 'with-mode 'scheme-indent-function 1)
449 ;; "let" "let*" "letrec" "and" "or" "map" "with-mode"))
451 "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode"
454 ;; DSSSL syntax
455 '("(\\(element\\|mode\\|declare-\\w+\\)\\>[ ]*\\(\\sw+\\)"
462 ;; SGML markup (from sgml-mode) :
465 "Default expressions to highlight in DSSSL mode.")
469 (defvar calculate-lisp-indent-last-sexp)
471 ;; Copied from lisp-indent-function, but with gets of
476 (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
482 calculate-lisp-indent-last-sexp))
483 (progn (goto-char calculate-lisp-indent-last-sexp)
486 calculate-lisp-indent-last-sexp 0 t)))
488 ;; line as calculate-lisp-indent-last-sexp. Note that first
502 (lisp-indent-defform state indent-point))
504 (lisp-indent-specform method state
533 (lisp-indent-specform 2 state indent-point normal-indent)
534 (lisp-indent-specform 1 state indent-point normal-indent)))
549 (put 'let-syntax 'scheme-indent-function 1)
550 (put 'letrec-syntax 'scheme-indent-function 1)
551 (put 'syntax-rules 'scheme-indent-function 1)
552 (put 'syntax-case 'scheme-indent-function 2) ; not r5rs
574 (put 'using-syntax 'scheme-indent-function 1)
580 (put 'syntax-table-define 'scheme-indent-function 2)