       (cons
        (concat
         "(" (regexp-opt
-             '("fn" "rfn" "afn" "def" "mac" "set"
-               "defset" "defop" "deftem" "defmemo"
-               "when" "unless"
-               "do" "while" "until" "only" "each" "if" "=" "for" "repeat"
-               "aif" "aand" "awhen"
-               "case" "zap"
+             '(; define/assign-type forms
+               "++" "--" "=" "assign" "or=" "set" "wipe" "zap"
+               "def" "mac" "defs"
+               "defcache" "defhook" "defmemo" "defop" "defset" "deftem"
+               ; lambdas & binding forms
+               "fn" "rfn" "afn"
                "let" "with" "withs"
-               "apply" "in"
-               ;; Hannes Haug <hannes.haug@student.uni-tuebingen.de> wants:
-               "and" "or"
-               ;; Stefan Monnier <stefan.monnier@epfl.ch> says don't bother:
-               ;;"quasiquote" "quote" "unquote" "unquote-splicing"
-               "map" "sort") t)
+               "atlet" "atwith" "atwiths"
+               ; conditionals
+               "if" "when" "unless" "or" "and" "or" "nor" "case"
+               "iflet" "whenlet" "whenlet"
+               "aif" "awhen" "aand"
+               ; loops
+               "each" "evtil" "for" "forlen" "loop" "repeat" "until" "while"
+               "whiler" "whilet"
+               ; coercions
+               "coerce" "int" "string" "sym"
+               ; significant higher-order functions
+               "andf" "apply" "compare" "complement" "compose" "only" "orf"
+               ; wrapper macros
+               "accum" "after" "atomic" "catch" "errsafe" "point" "thread"
+               "w/table" "w/uniq"
+               ; misc
+               "do" "do1" "get"
+               ) t)
         "\\>") 1)
       )))
   "Gaudy expressions to highlight in Arc modes.")


;;; Let is different in Arc

(defun would-be-symbol (string)
  (not (string-equal (substring string 0 1) "(")))

(defun next-sexp-as-string ()
  ;; Assumes that it is protected by a save-excursion
  (forward-sexp 1)
  (let ((the-end (point)))
    (backward-sexp 1)
    (buffer-substring (point) the-end)))

;; This is correct but too slow.
;; The one below works almost always.

;; Adapted-by: Dave Love <d.love@dl.ac.uk>
;; Adapted-by: Andrew MacDonald <awm@alum.mit.edu>
;; Adapted-by: Eric Hanchrow <offby1@blarg.net>
;; Adapted-by: Michael Arntzenius <daekharel@gmail.com>
;; Keywords: languages, lisp

;; This file is not part of GNU Emacs.
