" Maintainer : Dr. Charles E. Campbell, Jr. <Charles.Campbell@gsfc.nasa.gov>
" Last Change: July 13, 1999
" Version : 1.03
" remove any old syntax stuff hanging around
syn clear
set iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
" Clusters
syn cluster lispAtomCluster contains=lispAtomBarSymbol,lispAtomList,lispAtomNmbr0,lispComment,lispString
syn cluster lispListCluster contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispSpecial,lispString,lispSymbol,lispVar
" Lists
syn match lispSymbol contained ![^()'`,"; \t]\+!
syn match lispBarSymbol contained !|..\{-}|!
syn region lispList matchgroup=Delimiter start="(" skip="|.\{-}|" matchgroup=Delimiter end=")" contains=@lispListCluster
syn region lispBQList matchgroup=PreProc start="`(" skip="|.\{-}|" matchgroup=PreProc end=")" contains=@lispListCluster
" Atoms
syn match lispAtomMark "'"
syn match lispAtom "'("me=e-1 contains=lispAtomMark nextgroup=lispAtomList
syn match lispAtom "'[^ \t()]\+" contains=lispAtomMark
syn match lispAtomBarSymbol !'|..\{-}|! contains=lispAtomMark
syn region lispAtom start=+'"+ skip=+\\"+ end=+"+
syn region lispAtomList contained matchgroup=Special start="(" skip="|.\{-}|" matchgroup=Special end=")" contains=@lispAtomCluster
syn match lispAtomNmbr contained "\<\d\+"
" Standard Lisp Functions and Macros
syn keyword lispFunc * concatenate get-properties nreverse setq
syn keyword lispFunc + cond get-setf-method nset-difference seventh
syn keyword lispFunc - conjugate getf nstring-upcase shadow
syn keyword lispFunc / cons gethash nsublis shiftf
syn keyword lispFunc < consp go nsubst short-site-name
syn keyword lispFunc = constantp graphic-char-p nsubst-if signed-byte
syn keyword lispFunc > copy-alist hash-table-p nsubst-if-not signum
syn keyword lispFunc abs copy-list host-namestring nsubstitute simple-string-p
syn keyword lispFunc access copy-readtable identity nsubstitute-if simple-vector-p
syn keyword lispFunc acons copy-seq if nth sin
syn keyword lispFunc acos copy-symbol if-exists nthcdr sinh
syn keyword lispFunc acosh copy-tree ignore null sixth
syn keyword lispFunc adjoin cos imagpart numberp sleep
syn keyword lispFunc adjust-array cosh import numerator software-type
syn keyword lispFunc alpha-char-p count in-package nunion some
syn keyword lispFunc alphanumericp count-if in-package oddp sort
syn keyword lispFunc and count-if-not incf open special
syn keyword lispFunc append ctypecase inline optimize special-form-p
syn keyword lispFunc apply decf input-stream-p or sqrt
syn keyword lispFunc applyhook declaration inspect output-stream-p stable-sort
syn keyword lispFunc apropos declare int-char package-name standard-char-p
syn keyword lispFunc apropos-list decode-float integer-length packagep step
syn keyword lispFunc aref defconstant integerp pairlis streamup
syn keyword lispFunc array-dimension defparameter intern parse-integer string
syn keyword lispFunc array-rank defstruct intersection pathname string-char
syn keyword lispFunc array-rank-limit defvar isqrt pathname-device string-char-p
syn keyword lispFunc arrayp delete keyword pathname-host string-downcase
syn keyword lispFunc ash delete-file last pathname-name string-equal
syn keyword lispFunc asin delete-if lcm pathname-type string-greaterp
syn keyword lispFunc asinh delete-if-not ldb pathnamep string-lessp
syn keyword lispFunc assert denominator ldb-test peek-char string-trim
syn keyword lispFunc assoc deposit-field ldiff phase string-upcase
syn keyword lispFunc assoc-if describe length pi string/=
syn keyword lispFunc assoc-if-not digit-char let* plusp string<
syn keyword lispFunc atan digit-char-p lisp pop string<=
syn keyword lispFunc atanh directory list position string=
syn keyword lispFunc bit disassemble list* position-if string>
syn keyword lispFunc bit-and do list-length position-if-not string>=
syn keyword lispFunc bit-andc1 do* listen pprint stringp
syn keyword lispFunc bit-andc2 do-all-symbols listp prin1 sublim
syn keyword lispFunc bit-eqv do-symbols load prin1-to-string subseq
syn keyword lispFunc bit-ior documentation log princ subsetp
syn keyword lispFunc bit-nand dolist logand princ-to-string subst
syn keyword lispFunc bit-nor dotimes logandc1 print subst-if
syn keyword lispFunc bit-not dpb logandc2 probe-file subst-if-not
syn keyword lispFunc bit-orc1 dribble logcount proclaim subtypep
syn keyword lispFunc bit-orc2 ecase logeqv prog svref
syn keyword lispFunc bit-vector-p ed logior prog* sxhash
syn keyword lispFunc bit-xor eighth lognand prog1 symbol-function
syn keyword lispFunc block elt lognor prog2 symbol-name
syn keyword lispFunc boole endp lognot progn symbol-package
syn keyword lispFunc both-case-p eq logorc1 progv symbol-plist
syn keyword lispFunc boundp eql logorc2 provide symbol-value
syn keyword lispFunc break equal logtest psetf symbolp
syn keyword lispFunc butlast equalp logxor psetq sys
syn keyword lispFunc byte error long-site-name push system
syn keyword lispFunc byte-position etypecase loop pushnew t
syn keyword lispFunc byte-size eval lower-case-p putprop tagbody
syn keyword lispFunc car eval-when machine-type quote tailp
syn keyword lispFunc catch evalhook machine-version random tan
syn keyword lispFunc ccase evenp macro-function random-state-p tanh
syn keyword lispFunc cdr every macroexpand rassoc tenth
syn keyword lispFunc ceiling exp macroexpand-l rassoc-if terpri
syn keyword lispFunc cerror export make-array rassoc-if-not the
syn keyword lispFunc char expt make-array rational third
syn keyword lispFunc char-bit fboundp make-char rationalize throw
syn keyword lispFunc char-bits fceiling make-hash-table rationalp time
syn keyword lispFunc char-bits-limit ffloor make-list read trace
syn keyword lispFunc char-code fifth make-package read-byte tree-equal
syn keyword lispFunc char-code-limit file-author make-pathname read-char truename
syn keyword lispFunc char-downcase file-length make-sequence read-eval-print truncase
syn keyword lispFunc char-equal file-namestring make-string read-line type
syn keyword lispFunc char-font file-position make-symbol readtablep type-of
syn keyword lispFunc char-font-limit file-write-date makunbound realpart typecase
syn keyword lispFunc char-greaterp fill map reduce typep
syn keyword lispFunc char-hyper-bit fill-pointer mapc rem unexport
syn keyword lispFunc char-int find mapcan remf unintern
syn keyword lispFunc char-lessp find-if mapcar remhash union
syn keyword lispFunc char-meta-bit find-if-not mapcon remove unless
syn keyword lispFunc char-name find-package maphash remove-if unread
syn keyword lispFunc char-not-equal find-symbol mapl remove-if-not unsigned-byte
syn keyword lispFunc char-not-lessp finish-output maplist remprop untrace
syn keyword lispFunc char-super-bit first mask-field rename-file unuse-package
syn keyword lispFunc char-upcase float max rename-package unwind-protect
syn keyword lispFunc char/= float-digits member replace upper-case-p
syn keyword lispFunc char< float-precision member-if require use-package
syn keyword lispFunc char<= float-radix member-if-not rest user
syn keyword lispFunc char= float-sign merge return values
syn keyword lispFunc char> floatp merge-pathname return-from values-list
syn keyword lispFunc char>= floor min revappend vector
syn keyword lispFunc character fmakunbound minusp reverse vector-pop
syn keyword lispFunc characterp force-output mismatch room vector-push
syn keyword lispFunc check-type fourth mod rotatef vectorp
syn keyword lispFunc cis fresh-line name-char round warn
syn keyword lispFunc clear-input fround namestring rplaca when
syn keyword lispFunc clear-output ftruncate nbutlast rplacd with-open-file
syn keyword lispFunc close ftype nconc sbit write
syn keyword lispFunc clrhash funcall nil scale-float write-byte
syn keyword lispFunc code-char function nintersection schar write-char
syn keyword lispFunc coerce functionp ninth search write-line
syn keyword lispFunc commonp gbitp not second write-string
syn keyword lispFunc compile gcd notany set write-to-string
syn keyword lispFunc compile-file gensym notevery set-char-bit y-or-n-p
syn keyword lispFunc compiler-let gentemp notinline set-difference yes-or-no-p
syn keyword lispFunc complex get nreconc setf zerop
syn keyword lispFunc complexp
syn match lispFunc "\<c[ad]\+r\>"
syn keyword lispFunc adjustable-array-p least-negative-short-float nstring-capitalize
syn keyword lispFunc array-dimension-limit least-negative-single-float nstring-downcase
syn keyword lispFunc array-dimensions least-positive-double-float nsubstitute-if-not
syn keyword lispFunc array-element-type least-positive-long-float package-nicknames
syn keyword lispFunc array-has-fill-pointer-p least-positive-short-float package-shadowing-symbols
syn keyword lispFunc array-in-bounds-p least-positive-single-float package-use-list
syn keyword lispFunc array-row-major-index lisp-implementation-type package-used-by-list
syn keyword lispFunc array-total-size lisp-implementation-version parse-namestring
syn keyword lispFunc array-total-size-limit list-all-packages pathname-directory
syn keyword lispFunc call-arguments-limit long-float-epsilon pathname-version
syn keyword lispFunc char-control-bit long-float-negative-epsilon read-char-no-hang
syn keyword lispFunc char-not-greaterp machine-instance read-delimited-list
syn keyword lispFunc compiled-function-p make-broadcast-stream read-from-string
syn keyword lispFunc decode-universal-time make-concatenated-stream read-preserving-whitespace
syn keyword lispFunc define-modify-macro make-dispatch-macro-character remove-duplicates
syn keyword lispFunc define-setf-method make-echo-stream set-dispatch-macro-character
syn keyword lispFunc delete-duplicates make-random-state set-exclusive-or
syn keyword lispFunc directory-namestring make-string-input-stream set-macro-character
syn keyword lispFunc do-exeternal-symbols make-string-output-stream set-syntax-from-char
syn keyword lispFunc double-float-epsilon make-synonym-stream shadowing-import
syn keyword lispFunc double-float-negative-epsilon make-two-way-stream short-float-epsilon
syn keyword lispFunc encode-universal-time most-negative-double-float simple-bit-vector-p
syn keyword lispFunc enough-namestring most-negative-fixnum single-flaot-epsilon
syn keyword lispFunc find-all-symbols most-negative-long-float single-float-negative-epsilon
syn keyword lispFunc get-decoded-time most-negative-short-float software-version
syn keyword lispFunc get-dispatch-macro-character most-negative-single-float stream-element-type
syn keyword lispFunc get-internal-real-time most-positive-double-float string-capitalize
syn keyword lispFunc get-internal-run-time most-positive-fixnum string-left-trim
syn keyword lispFunc get-macro-character most-positive-long-float string-not-equal
syn keyword lispFunc get-output-stream-string most-positive-short-float string-not-greaterp
syn keyword lispFunc get-universal-time most-positive-single-float string-not-lessp
syn keyword lispFunc hash-table-count multiple-value-bind string-right-strim
syn keyword lispFunc integer-decode-float multiple-value-call user-homedir-pathname
syn keyword lispFunc internal-time-units-per-second multiple-value-list vector-push-extend
syn keyword lispFunc lambda-list-keywords multiple-value-prog1 with-input-from-string
syn keyword lispFunc lambda-parameters-limit multiple-value-seteq with-open-stream
syn keyword lispFunc least-negative-double-float multiple-values-limit with-output-to-string
syn keyword lispFunc least-negative-long-float nset-exclusive-or
" Lisp Keywords (modifiers)
syn keyword lispKey :abort :device :if-exists :name :rehash-size
syn keyword lispKey :adjustable :direction :include :named :rename
syn keyword lispKey :append :directory :index :new-version :size
syn keyword lispKey :array :displaced-to :inherited :nicknames :start
syn keyword lispKey :base :element-type :initial-element :output :start1
syn keyword lispKey :case :end :initial-offset :output-file :start2
syn keyword lispKey :circle :end1 :initial-value :overwrite :stream
syn keyword lispKey :conc-name :end2 :input :predicate :supersede
syn keyword lispKey :constructor :error :internal :pretty :test
syn keyword lispKey :copier :escape :io :print :test-not
syn keyword lispKey :count :external :junk-allowed :print-function :type
syn keyword lispKey :create :from-end :key :probe :use
syn keyword lispKey :default :gensym :length :radix :verbose
syn keyword lispKey :defaults :host :level :read-only :version
syn keyword lispKey :displaced-index-offset :initial-contents :rehash-threshold
syn keyword lispKey :if-does-not-exist :preserve-whitespace :rename-and-delete
" Standard Lisp Variables
syn keyword lispVar *applyhook* *modules* *print-circle* *print-pretty* *read-suppress*
syn keyword lispVar *debug-io* *package* *print-escape* *print-radix* *readtable*
syn keyword lispVar *error-output* *print-array* *print-gensym* *query-io* *standard-input*
syn keyword lispVar *evalhook* *print-base* *print-length* *random-state* *terminal-io*
syn keyword lispVar *features* *print-case* *print-level* *read-base* *trace-output*
syn keyword lispVar *load-verbose*
syn keyword lispVar *break-on-warnings* *macroexpand-hook* *standard-output*
syn keyword lispVar *default-pathname-defaults* *read-default-float-format*
" Strings
syn region lispString start=+"+ skip=+\\\\\|\\"+ end=+"+
" Shared with Xlisp, Declarations, Macros, Functions
syn keyword lispDecl defmacro defun do-external-symbols flet locally
syn keyword lispDecl defsetf do* do-symbols labels macrolet
syn keyword lispDecl deftype do-all-symbols dotimes let multiple-value-bind
syn match lispNumber "\d\+"
syn match lispSpecial "\*[a-zA-Z_][a-zA-Z_0-9-]*\*"