;ELC   
;;; Compiled by rms@psilocin.ai.mit.edu on Wed Jul  8 20:22:49 1998
;;; from file /gd/gnu/emacs/lisp/progmodes/scheme.el
;;; in Emacs version 20.2.97.2
;;; with bytecomp version 2.47
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`scheme.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(require 'lisp-mode)
#@2 
(defvar scheme-mode-syntax-table nil (#$ . 630))
(byte-code "\204\300 \302\303 \304!\210	\305W\203 \306	\307\"\210	T\211\202 \310\310\311X\2033 \306	\312\"\210	T\211\202\" \313\313\314X\203G \306	\312\"\210	T\211\2026 \315\315\316X\203[ \306	\312\"\210	T\211\202J \306\317\320\"\210\306\321\322\"\210\306\323\320\"\210\306\324\320\"\210\306\325\320\"\210\306\326\327\"\210\306\330\331\"\210\306\332\333\"\210\306\334\335\"\210\306\336\337\"\210\306\340\341\"\210\306\342\343\"\210\306\344\345\"\210\306\346\347\"\210\306\350\351\"\210\306\352\351\"\210\306\353\354\"\210\306\355\354\"\210\306\356\357\"\210\306\360\361\"\210)\302\207" [scheme-mode-syntax-table i 0 make-syntax-table set-syntax-table 256 modify-syntax-entry "_   " 48 57 "w   " 65 90 97 122 9 "    " 10 ">   " 12 13 32 91 "(]  " 93 ")[  " 123 "(}  " 125 "){  " 124 "  23" 40 "()  " 41 ")(  " 59 "<   " 34 "\"    " 39 "  p" 96 44 "_ p" 64 35 "_ p14" 92 "\\   "] 4)
#@2 
(defvar scheme-mode-abbrev-table nil (#$ . 1579))
(define-abbrev-table 'scheme-mode-abbrev-table nil)
#@76 Imenu generic expression for Scheme mode.  See `imenu-generic-expression'.
(defvar scheme-imenu-generic-expression '((nil "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)" 4) ("Types" "^(define-class\\s-+(?\\(\\sw+\\)" 1) ("Macros" "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2)) (#$ . 1688))
(defalias 'scheme-mode-variables #[nil "\306!\210	\307\304!\210\310P\307\305!\210\f\307\311!\210\312	\307\313!\210\314\307\315!\210\316\307\317!\210\320\307\321!\210\322\307\323!\210\312\307\324!\210\325\307\326!\210\327\307\330!\210\331\307\332!\210\333\307\334!\210\335\307\323!\210\312\307\336!\210\337L\210\340'\307\341!\210\312!\307\342!\210(\"\307\343!\210\344#\307\345!\210\346\211%\207" [scheme-mode-syntax-table scheme-mode-abbrev-table local-abbrev-table page-delimiter paragraph-start paragraph-separate set-syntax-table make-local-variable "$\\|" paragraph-ignore-fill-prefix t fill-paragraph-function lisp-fill-paragraph adaptive-fill-mode nil normal-auto-fill-function lisp-mode-auto-fill indent-line-function lisp-indent-line parse-sexp-ignore-comments outline-regexp ";;; \\|(...." comment-start ";" comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+[ 	]*" comment-column 40 comment-indent-function lisp-comment-indent lisp-indent-function scheme-indent-function ("" scheme-mode-line-process) imenu-case-fold-search imenu-generic-expression imenu-syntax-alist (("+-*/.<>=?!$%_&~^:" . "w")) font-lock-defaults ((scheme-font-lock-keywords scheme-font-lock-keywords-1 scheme-font-lock-keywords-2) nil t (("+-*/.<>=!?$%_&~^:" . "w")) beginning-of-defun (font-lock-mark-block-function . mark-defun)) mode-line-process scheme-imenu-generic-expression] 2])
(byte-code "\302\300!\204 \303\300	B\302\207" [scheme-mode-line-process current-load-list boundp ""] 2)
#@91 Keymap for Scheme mode.
All commands in `shared-lisp-mode-map' are inherited by this map.
(defvar scheme-mode-map nil (#$ . 3563))
(byte-code "\204M \303\304!\303 \n\244\305\306\303 #\210\305\307\304	B#\210\305	\310\311#\210\305	\312\313#\210\305	\314\315#\210\305	\316\317#\210\305	\320\321#\210\322\323\324\325#\210\322\326\324\325#\210\322\327\324\325#\210)\303\207" [scheme-mode-map map shared-lisp-mode-map make-sparse-keymap "Scheme" define-key [menu-bar] [menu-bar scheme] [run-scheme] ("Run Inferior Scheme" . run-scheme) [uncomment-region] ("Uncomment Out Region" lambda (beg end) (interactive "r") (comment-region beg end '(4))) [comment-region] ("Comment Out Region" . comment-region) [indent-region] ("Indent Region" . indent-region) [indent-line] ("Indent Line" . lisp-indent-line) put comment-region menu-enable mark-active uncomment-region indent-region] 5)
(defalias 'scheme-mode-commands #[(map) "\301\302\303#\210\301\304\305#\207" [map define-key "" backward-delete-char-untabify "" indent-sexp] 4])
#@712 Major mode for editing Scheme code.
Editing commands are similar to those of lisp-mode.

In addition, if an inferior Scheme process is running, some additional
commands will be defined, for evaluating expressions and controlling
the interpreter, and the state of the process will be displayed in the
modeline of all Scheme buffers.  The names of commands that interact
with the Scheme process start with "xscheme-".  For more information
see the documentation for xscheme-interaction-mode.

Commands:
Delete converts tabs to spaces as it moves back.
Blank lines separate paragraphs.  Semicolons start comments.
\{scheme-mode-map}
Entry to this mode calls the value of scheme-mode-hook
if that value is non-nil.
(defalias 'scheme-mode #[nil "\300 \210\301 \210\302 \210\303\304!\207" [kill-all-local-variables scheme-mode-initialize scheme-mode-variables run-hooks scheme-mode-hook] 2 (#$ . 4599) nil])
(defalias 'scheme-mode-initialize #[nil "\303!\210\304\305\211\207" [scheme-mode-map major-mode mode-name use-local-map scheme-mode "Scheme"] 2])
(custom-declare-group 'scheme nil "Editing Scheme code" :group 'lisp)
#@109 If non-nil, scheme mode is specialized for MIT Scheme.
Set this to nil if you normally use another dialect.
(custom-declare-variable 'scheme-mit-dialect 't '(#$ . 5727) :type 'boolean :group 'scheme)
#@212 *An SGML declaration for the DSSSL file.
If it is defined as a string this will be inserted into an empty buffer
which is in dsssl-mode.  It is typically James Clark's style-sheet
doctype, as required for Jade.
(custom-declare-variable 'dsssl-sgml-declaration '"<!DOCTYPE style-sheet PUBLIC \"-//James Clark//DTD DSSSL Style Sheet//EN\">\n" '(#$ . -5934) :type '(choice (string :tag "Specified string") (const :tag "None" :value nil)) :group 'scheme)
#@81 Normal hook (list of functions) run when entering scheme-mode.
See `run-hooks'.
(custom-declare-variable 'scheme-mode-hook 'nil '(#$ . 6391) :type 'hook :group 'scheme)
#@80 Normal hook (list of functions) run when entering dsssl-mode.
See `run-hooks'.
(custom-declare-variable 'dsssl-mode-hook 'nil '(#$ . 6566) :type 'hook :group 'scheme)
#@75 Imenu generic expression for DSSSL mode.  See `imenu-generic-expression'.
(defvar dsssl-imenu-generic-expression '(("Defines" "^(define\\s-+(?\\(\\sw+\\)" 1) ("Modes" "^\\s-*(mode\\s-+\\(\\(\\sw\\|\\s-\\)+\\)" 1) ("Elements" "^\\s-*(element\\s-+(?\\(\\(\\sw\\|\\s-\\)+\\))?" 1) ("Declarations" "^(declare\\(-\\sw+\\)+\\>\\s-+\\(\\sw+\\)" 2)) (#$ . 6739))
#@51 Subdued expressions to highlight in Scheme modes.
(defconst scheme-font-lock-keywords-1 '(("(\\(define\\*?\\(\\(\\|-public\\|-method\\|-generic\\(-procedure\\)?\\)\\|\\(-syntax\\)\\|-class\\|-module\\)\\)\\>[ 	]*(?\\(\\sw+\\)?" (1 font-lock-keyword-face) (6 (cond ((match-beginning 3) font-lock-function-name-face) ((match-beginning 5) font-lock-variable-name-face) (t font-lock-type-face)) nil t))) (#$ . 7100))
#@49 Gaudy expressions to highlight in Scheme modes.
(defconst scheme-font-lock-keywords-2 (append scheme-font-lock-keywords-1 '(("(\\(and\\|begin\\|c\\(a\\(ll\\(-with-\\(current-continuation\\|input-file\\|output-file\\)\\|/cc\\)\\|se\\)\\|ond\\)\\|d\\(elay\\|o\\)\\|else\\|for-each\\|if\\|l\\(ambda\\|et\\(\\*\\|-syntax\\|rec\\(-syntax\\)?\\)?\\)\\|map\\|or\\|syntax\\(-rules\\)?\\)\\>" . 1) ("\\<<\\sw+>\\>" . font-lock-type-face) ("\\<:\\sw+\\>" . font-lock-builtin-face))) (#$ . 7519))
#@51 Default expressions to highlight in Scheme modes.
(defvar scheme-font-lock-keywords scheme-font-lock-keywords-1 (#$ . 8011))
#@396 Major mode for editing DSSSL code.
Editing commands are similar to those of lisp-mode.

Commands:
Delete converts tabs to spaces as it moves back.
Blank lines separate paragraphs.  Semicolons start comments.
\{scheme-mode-map}
Entering this mode runs the hooks `scheme-mode-hook' and then
`dsssl-mode-hook' and inserts the value of `dsssl-sgml-declaration' if
that variable's value is a string.
(defalias 'dsssl-mode #[nil "\306 \210\307!\210\310 \210\311\301!\210\312\313\314\315\316 !\203' \f;\203' \204' \fc\210\317 \210\320\321\322\323\324!\210\323\325!\207" [scheme-mode-map page-delimiter major-mode mode-name dsssl-sgml-declaration buffer-read-only kill-all-local-variables use-local-map scheme-mode-initialize make-local-variable "^;;;" dsssl-mode "DSSSL" zerop buffer-size scheme-mode-variables (dsssl-font-lock-keywords nil t (("+-*/.<>=?$%_&~^:" . "w")) beginning-of-defun (font-lock-mark-block-function . mark-defun)) nil (("+-*/.<>=?$%_&~^:" . "w")) run-hooks scheme-mode-hook dsssl-mode-hook font-lock-defaults imenu-case-fold-search dsssl-imenu-generic-expression imenu-generic-expression imenu-syntax-alist] 2 (#$ . 8143) nil])
(byte-code "\300\301\302\303#\210\300\304\302\303#\210\300\305\302\303#\210\300\306\302\303#\210\300\307\302\303#\210\300\310\302\303#\207" [put element scheme-indent-function 1 mode with-mode make style root] 4)
#@49 Default expressions to highlight in DSSSL mode.
(defvar dsssl-font-lock-keywords '(("(\\(define\\(-\\w+\\)?\\)\\>[ 	]*\\((?\\)\\(\\sw+\\)\\>" (1 font-lock-keyword-face) (4 font-lock-function-name-face)) ("(\\(and\\|c\\(ase\\|ond\\)\\|else\\|if\\|l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode\\)\\>" . 1) ("(\\(element\\|mode\\|declare-\\w+\\)\\>[ 	]*\\(\\sw+\\)" (1 font-lock-keyword-face) (2 font-lock-type-face)) ("(\\(element\\)\\>[ 	]*(\\(\\S)+\\))" (1 font-lock-keyword-face) (2 font-lock-type-face)) ("\\<\\sw+:\\>" . font-lock-constant-face) ("<\\([!?][-a-z0-9]+\\)" 1 font-lock-keyword-face) ("<\\(/?[-a-z0-9]+\\)" 1 font-lock-function-name-face)) (#$ . 9521))
(byte-code "\301B\301\207" [current-load-list calculate-lisp-indent-last-sexp] 2)
(defalias 'scheme-indent-function #[(indent-point state) "i	\306\234Tb\210\307`\n\310\311$\210	\312\234\203: \313\314!\204: \212\306y\210`)\nV\2043 \nb\210\310y\210\307`\n\310\311$\210\315 \210i\202\211 `\316\306!\210`{\317\320\f!\321N\206Q \320\f!\322N\211\323=\204j \204q \fG\324V\203q \325\326\f\"\203q \327	\"\202\210 \250\203 \330	$\202\210 \205\210 	#*)\207" [normal-indent state calculate-lisp-indent-last-sexp method function indent-point 1 parse-partial-sexp 0 t 2 looking-at "\\sw\\|\\s_" backward-prefix-chars forward-sexp nil intern-soft scheme-indent-function scheme-indent-hook defun 3 string-match "\\`def" lisp-indent-defform lisp-indent-specform] 6])
(defalias 'would-be-symbol #[(string) "\301\302O\303\230?\207" [string 0 1 "("] 3])
(defalias 'next-sexp-as-string #[nil "\301\302!\210`\303\302!\210`{)\207" [the-end forward-sexp 1 backward-sexp] 2])
(defalias 'scheme-let-indent #[(state indent-point normal-indent) "\303\304w\210\305\306!\203 \307\310	\n$\207\307\311	\n$\207" [state indent-point normal-indent " 	" nil looking-at "[-a-zA-Z0-9+*/?!@$%^&_:~]" lisp-indent-specform 2 1] 5])
(byte-code "\301\302\303\304#\210\301\305\303\306#\210\301\307\303\304#\210\301\310\303\311#\210\301\312\303\306#\210\301\313\303\314#\210\301\315\303\306#\210\301\316\303\306#\210\301\317\303\304#\210\301\320\303\306#\210\301\321\303\306#\210\301\322\303\306#\210\301\323\303\306#\210\301\324\303\306#\210\301\325\303\306#\210\301\326\303\306#\210\301\327\303\306#\210\301\330\303\306#\210\301\331\303\306#\210\301\332\303\333#\210\203N\301\334\303\306#\210\301\335\303\306#\210\301\336\303\306#\210\301\337\303\306#\210\301\340\303\304#\210\301\341\303\306#\210\301\342\303\306#\210\301\343\303\306#\210\301\344\303\304#\210\301\345\303\306#\210\301\346\303\311#\210\301\347\303\306#\210\301\350\303\306#\210\301\351\303\306#\210\301\352\303\306#\210\301\353\303\306#\210\301\354\303\306#\210\301\355\303\306#\210\301\356\303\306#\210\301\357\303\306#\210\301\360\303\306#\210\301\361\303\306#\210\301\362\303\306#\210\301\363\303\306#\210\301\364\303\306#\210\301\365\303\306#\210\301\366\303\306#\210\301\367\303\306#\210\301\370\303\306#\210\301\371\303\306#\210\301\372\303\306#\210\301\373\303\306#\210\301\374\303\306#\210\301\375\303\306#\210\301\376\303\306#\210\377\201@ !\207" [scheme-mit-dialect put begin scheme-indent-function 0 case 1 delay do 2 lambda let scheme-let-indent let* letrec sequence let-syntax letrec-syntax syntax-rules call-with-input-file with-input-from-file with-input-from-port call-with-output-file with-output-to-file with-output-to-port call-with-values dynamic-wind 3 fluid-let in-package local-declare macro make-environment named-lambda using-syntax with-input-from-string with-output-to-string with-values syntax-table-define list-transform-positive list-transform-negative list-search-positive list-search-negative access-components assignment-components combination-components comment-components conditional-components disjunction-components declaration-components definition-components delay-components in-package-components lambda-components lambda-components* lambda-components** open-block-components pathname-components procedure-components sequence-components unassigned\?-components unbound\?-components variable-components provide scheme] 4)
