{-# LANGUAGE OverloadedStrings #-}
module Skylighting.Syntax.Clojure (syntax) where

import Skylighting.Types
import Data.Map
import Skylighting.Regex
import qualified Data.Set

syntax :: Syntax
syntax = Syntax
  { sName = "Clojure"
  , sFilename = "clojure.xml"
  , sShortname = "Clojure"
  , sContexts =
      fromList
        [ ( "Default"
          , Context
              { cName = "Default"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher =
                          RegExpr
                            RE
                              { reString = ";.*$"
                              , reCompiled = Just (compileRegex True ";.*$")
                              , reCaseSensitive = True
                              }
                      , rAttribute = CommentTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '_'
                      , rAttribute = CommentTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher =
                          RegExpr
                            RE
                              { reString = "[@~]\\S+"
                              , reCompiled = Just (compileRegex True "[@~]\\S+")
                              , reCaseSensitive = True
                              }
                      , rAttribute = AttributeTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher =
                          RegExpr
                            RE
                              { reString = "::?[a-zA-Z0-9\\-]+"
                              , reCompiled = Just (compileRegex True "::?[a-zA-Z0-9\\-]+")
                              , reCaseSensitive = True
                              }
                      , rAttribute = AttributeTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '{'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = Detect2Chars '^' '{'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = DetectChar '{'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = DetectChar '}'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = DetectChar '['
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = DetectChar ']'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '\''
                      , rAttribute = VariableTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher =
                          Keyword
                            KeywordAttr
                              { keywordCaseSensitive = True
                              , keywordDelims = Data.Set.fromList "\t\n %&(),.;[]^{|}~"
                              }
                            (makeWordSet
                               True
                               [ "*"
                               , "+"
                               , "-"
                               , "->"
                               , "->>"
                               , "."
                               , ".."
                               , "/"
                               , "<"
                               , "<="
                               , "="
                               , "=="
                               , ">"
                               , ">="
                               , "accessor"
                               , "aclone"
                               , "add-classpath"
                               , "add-watcher"
                               , "agent"
                               , "agent-errors"
                               , "aget"
                               , "alength"
                               , "alias"
                               , "all-ns"
                               , "alter"
                               , "alter-meta!"
                               , "alter-var-root"
                               , "amap"
                               , "ancestors"
                               , "and"
                               , "append-child"
                               , "apply"
                               , "apply-template"
                               , "are"
                               , "areduce"
                               , "array-map"
                               , "aset"
                               , "aset-boolean"
                               , "aset-byte"
                               , "aset-char"
                               , "aset-double"
                               , "aset-float"
                               , "aset-int"
                               , "aset-long"
                               , "aset-short"
                               , "assert"
                               , "assert-any"
                               , "assert-expr"
                               , "assert-predicate"
                               , "assoc"
                               , "assoc!"
                               , "assoc-in"
                               , "associative?"
                               , "atom"
                               , "atom?"
                               , "attrs"
                               , "await"
                               , "await-for"
                               , "await1"
                               , "bases"
                               , "bean"
                               , "bigdec"
                               , "bigint"
                               , "binding"
                               , "bit-and"
                               , "bit-and-not"
                               , "bit-clear"
                               , "bit-flip"
                               , "bit-not"
                               , "bit-or"
                               , "bit-set"
                               , "bit-shift-left"
                               , "bit-shift-right"
                               , "bit-test"
                               , "bit-xor"
                               , "boolean"
                               , "boolean-array"
                               , "booleans"
                               , "bound-fn"
                               , "bound-fn*"
                               , "branch?"
                               , "butlast"
                               , "byte"
                               , "byte-array"
                               , "bytes"
                               , "case"
                               , "cast"
                               , "catch"
                               , "char"
                               , "char-array"
                               , "char-escape-string"
                               , "char-name-string"
                               , "char?"
                               , "chars"
                               , "children"
                               , "chunk"
                               , "chunk-append"
                               , "chunk-buffer"
                               , "chunk-cons"
                               , "chunk-first"
                               , "chunk-next"
                               , "chunk-rest"
                               , "chunked-seq?"
                               , "class"
                               , "class?"
                               , "clear-agent-errors"
                               , "clojure-version"
                               , "coll?"
                               , "collection-tag"
                               , "comment"
                               , "commute"
                               , "comp"
                               , "comparator"
                               , "compare"
                               , "compare-and-set!"
                               , "compile"
                               , "complement"
                               , "compose-fixtures"
                               , "concat"
                               , "cond"
                               , "condp"
                               , "conj"
                               , "conj!"
                               , "cons"
                               , "constantly"
                               , "construct-proxy"
                               , "contains?"
                               , "content"
                               , "content-handler"
                               , "count"
                               , "counted?"
                               , "create-ns"
                               , "create-struct"
                               , "cycle"
                               , "dec"
                               , "decimal?"
                               , "declare"
                               , "delay"
                               , "delay?"
                               , "deliver"
                               , "deref"
                               , "derive"
                               , "descendants"
                               , "destructure"
                               , "difference"
                               , "disj"
                               , "disj!"
                               , "dissoc"
                               , "dissoc!"
                               , "distinct"
                               , "distinct?"
                               , "do"
                               , "do-template"
                               , "doall"
                               , "doc"
                               , "dorun"
                               , "doseq"
                               , "dosync"
                               , "dotimes"
                               , "doto"
                               , "double"
                               , "double-array"
                               , "doubles"
                               , "down"
                               , "drop"
                               , "drop-last"
                               , "drop-while"
                               , "e"
                               , "edit"
                               , "element"
                               , "emit"
                               , "emit-element"
                               , "empty"
                               , "empty?"
                               , "end?"
                               , "ensure"
                               , "enumeration-seq"
                               , "eval"
                               , "even?"
                               , "every?"
                               , "extend"
                               , "extend-protocol"
                               , "extend-type"
                               , "extenders"
                               , "extends?"
                               , "false?"
                               , "ffirst"
                               , "file-position"
                               , "file-seq"
                               , "filter"
                               , "finally"
                               , "find"
                               , "find-doc"
                               , "find-ns"
                               , "find-var"
                               , "first"
                               , "float"
                               , "float-array"
                               , "float?"
                               , "floats"
                               , "flush"
                               , "fn"
                               , "fn?"
                               , "fnext"
                               , "for"
                               , "force"
                               , "format"
                               , "function?"
                               , "future"
                               , "future-call"
                               , "future-cancel"
                               , "future-cancelled?"
                               , "future-done?"
                               , "future?"
                               , "gen-and-load-class"
                               , "gen-and-save-class"
                               , "gen-class"
                               , "gen-interface"
                               , "gensym"
                               , "get"
                               , "get-child"
                               , "get-child-count"
                               , "get-in"
                               , "get-method"
                               , "get-possibly-unbound-var"
                               , "get-proxy-class"
                               , "get-thread-bindings"
                               , "get-validator"
                               , "handle"
                               , "handler-case"
                               , "hash"
                               , "hash-map"
                               , "hash-set"
                               , "identical?"
                               , "identity"
                               , "if"
                               , "if-let"
                               , "if-not"
                               , "ifn?"
                               , "import"
                               , "in-ns"
                               , "inc"
                               , "inc-report-counter"
                               , "index"
                               , "init-proxy"
                               , "insert-child"
                               , "insert-left"
                               , "insert-right"
                               , "inspect"
                               , "inspect-table"
                               , "inspect-tree"
                               , "instance?"
                               , "int"
                               , "int-array"
                               , "integer?"
                               , "interleave"
                               , "intern"
                               , "interpose"
                               , "intersection"
                               , "into"
                               , "into-array"
                               , "ints"
                               , "io!"
                               , "is"
                               , "is-leaf"
                               , "isa?"
                               , "iterate"
                               , "iterator-seq"
                               , "join"
                               , "join-fixtures"
                               , "juxt"
                               , "key"
                               , "keys"
                               , "keyword"
                               , "keyword?"
                               , "keywordize-keys"
                               , "last"
                               , "lazy-cat"
                               , "lazy-seq"
                               , "left"
                               , "leftmost"
                               , "lefts"
                               , "let"
                               , "letfn"
                               , "line-seq"
                               , "list"
                               , "list*"
                               , "list-model"
                               , "list-provider"
                               , "list?"
                               , "load"
                               , "load-file"
                               , "load-reader"
                               , "load-script"
                               , "load-string"
                               , "loaded-libs"
                               , "locking"
                               , "long"
                               , "long-array"
                               , "longs"
                               , "loop"
                               , "macroexpand"
                               , "macroexpand-1"
                               , "macroexpand-all"
                               , "main"
                               , "make-array"
                               , "make-hierarchy"
                               , "make-node"
                               , "map"
                               , "map-invert"
                               , "map?"
                               , "mapcat"
                               , "max"
                               , "max-key"
                               , "memfn"
                               , "memoize"
                               , "merge"
                               , "merge-with"
                               , "meta"
                               , "method-sig"
                               , "methods"
                               , "min"
                               , "min-key"
                               , "mod"
                               , "name"
                               , "namespace"
                               , "neg?"
                               , "newline"
                               , "next"
                               , "nfirst"
                               , "nil?"
                               , "nnext"
                               , "node"
                               , "not"
                               , "not-any?"
                               , "not-empty"
                               , "not-every?"
                               , "not="
                               , "ns"
                               , "ns-aliases"
                               , "ns-imports"
                               , "ns-interns"
                               , "ns-map"
                               , "ns-name"
                               , "ns-publics"
                               , "ns-refers"
                               , "ns-resolve"
                               , "ns-unalias"
                               , "ns-unmap"
                               , "nth"
                               , "nthnext"
                               , "num"
                               , "number?"
                               , "odd?"
                               , "or"
                               , "parents"
                               , "partial"
                               , "partition"
                               , "path"
                               , "pcalls"
                               , "peek"
                               , "persistent!"
                               , "pmap"
                               , "pop"
                               , "pop!"
                               , "pop-thread-bindings"
                               , "pos?"
                               , "postwalk"
                               , "postwalk-demo"
                               , "postwalk-replace"
                               , "pr"
                               , "pr-str"
                               , "prefer-method"
                               , "prefers"
                               , "prev"
                               , "prewalk"
                               , "prewalk-demo"
                               , "prewalk-replace"
                               , "primitives-classnames"
                               , "print"
                               , "print-cause-trace"
                               , "print-ctor"
                               , "print-doc"
                               , "print-dup"
                               , "print-method"
                               , "print-namespace-doc"
                               , "print-simple"
                               , "print-special-doc"
                               , "print-stack-trace"
                               , "print-str"
                               , "print-throwable"
                               , "print-trace-element"
                               , "printf"
                               , "println"
                               , "println-str"
                               , "prn"
                               , "prn-str"
                               , "project"
                               , "promise"
                               , "proxy"
                               , "proxy-call-with-super"
                               , "proxy-mappings"
                               , "proxy-name"
                               , "proxy-super"
                               , "push-thread-bindings"
                               , "pvalues"
                               , "quot"
                               , "rand"
                               , "rand-int"
                               , "range"
                               , "ratio?"
                               , "rational?"
                               , "rationalize"
                               , "re-find"
                               , "re-groups"
                               , "re-matcher"
                               , "re-matches"
                               , "re-pattern"
                               , "re-seq"
                               , "read"
                               , "read-line"
                               , "read-string"
                               , "recur"
                               , "reduce"
                               , "ref"
                               , "ref-history-count"
                               , "ref-max-history"
                               , "ref-min-history"
                               , "ref-set"
                               , "refer"
                               , "refer-clojure"
                               , "reify"
                               , "release-pending-sends"
                               , "rem"
                               , "remove"
                               , "remove-method"
                               , "remove-ns"
                               , "remove-watcher"
                               , "rename"
                               , "rename-keys"
                               , "repeat"
                               , "repeatedly"
                               , "repl"
                               , "repl-caught"
                               , "repl-exception"
                               , "repl-prompt"
                               , "repl-read"
                               , "replace"
                               , "replicate"
                               , "report"
                               , "require"
                               , "reset!"
                               , "reset-meta!"
                               , "resolve"
                               , "rest"
                               , "resultset-seq"
                               , "reverse"
                               , "reversible?"
                               , "right"
                               , "rightmost"
                               , "rights"
                               , "root"
                               , "rseq"
                               , "rsubseq"
                               , "run-all-tests"
                               , "run-tests"
                               , "satisfies?"
                               , "second"
                               , "select"
                               , "select-keys"
                               , "send"
                               , "send-off"
                               , "seq"
                               , "seq-zip"
                               , "seq?"
                               , "seque"
                               , "sequence"
                               , "sequential?"
                               , "set"
                               , "set-test"
                               , "set-validator!"
                               , "set?"
                               , "short"
                               , "short-array"
                               , "shorts"
                               , "shutdown-agents"
                               , "skip-if-eol"
                               , "skip-whitespace"
                               , "slurp"
                               , "some"
                               , "sort"
                               , "sort-by"
                               , "sorted-map"
                               , "sorted-map-by"
                               , "sorted-set"
                               , "sorted-set-by"
                               , "sorted?"
                               , "special-form-anchor"
                               , "special-symbol?"
                               , "split-at"
                               , "split-with"
                               , "str"
                               , "stream?"
                               , "string?"
                               , "stringify-keys"
                               , "struct"
                               , "struct-map"
                               , "subs"
                               , "subseq"
                               , "subvec"
                               , "successful?"
                               , "supers"
                               , "swap!"
                               , "symbol"
                               , "symbol?"
                               , "sync"
                               , "syntax-symbol-anchor"
                               , "take"
                               , "take-last"
                               , "take-nth"
                               , "take-while"
                               , "test"
                               , "test-all-vars"
                               , "test-ns"
                               , "test-var"
                               , "testing"
                               , "testing-contexts-str"
                               , "testing-vars-str"
                               , "the-ns"
                               , "throw"
                               , "time"
                               , "to-array"
                               , "to-array-2d"
                               , "trampoline"
                               , "transient"
                               , "tree-seq"
                               , "true?"
                               , "try"
                               , "try-expr"
                               , "type"
                               , "unchecked-add"
                               , "unchecked-dec"
                               , "unchecked-divide"
                               , "unchecked-inc"
                               , "unchecked-multiply"
                               , "unchecked-negate"
                               , "unchecked-remainder"
                               , "unchecked-subtract"
                               , "underive"
                               , "unimport"
                               , "union"
                               , "unquote"
                               , "unquote-splicing"
                               , "up"
                               , "update-in"
                               , "update-proxy"
                               , "use"
                               , "use-fixtures"
                               , "val"
                               , "vals"
                               , "var-get"
                               , "var-set"
                               , "var?"
                               , "vary-meta"
                               , "vec"
                               , "vector"
                               , "vector?"
                               , "walk"
                               , "when"
                               , "when-first"
                               , "when-let"
                               , "when-not"
                               , "while"
                               , "with-bindings"
                               , "with-bindings*"
                               , "with-in-str"
                               , "with-loading-context"
                               , "with-local-vars"
                               , "with-meta"
                               , "with-open"
                               , "with-out-str"
                               , "with-precision"
                               , "with-test"
                               , "with-test-out"
                               , "xml-seq"
                               , "zero?"
                               ])
                      , rAttribute = KeywordTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher =
                          Keyword
                            KeywordAttr
                              { keywordCaseSensitive = True
                              , keywordDelims = Data.Set.fromList "\t\n %&(),.;[]^{|}~"
                              }
                            (makeWordSet
                               True
                               [ "*1"
                               , "*2"
                               , "*3"
                               , "*agent*"
                               , "*allow-unresolved-vars*"
                               , "*assert*"
                               , "*clojure-version*"
                               , "*command-line-args*"
                               , "*compile-files*"
                               , "*compile-path*"
                               , "*current*"
                               , "*e"
                               , "*err*"
                               , "*file*"
                               , "*flush-on-newline*"
                               , "*in*"
                               , "*initial-report-counters*"
                               , "*load-tests*"
                               , "*macro-meta*"
                               , "*math-context*"
                               , "*ns*"
                               , "*out*"
                               , "*print-dup*"
                               , "*print-length*"
                               , "*print-level*"
                               , "*print-meta*"
                               , "*print-readably*"
                               , "*read-eval*"
                               , "*report-counters*"
                               , "*sb*"
                               , "*source-path*"
                               , "*stack*"
                               , "*stack-trace-depth*"
                               , "*state*"
                               , "*test-out*"
                               , "*testing-contexts*"
                               , "*testing-vars*"
                               , "*use-context-classloader*"
                               , "*warn-on-reflection*"
                               ])
                      , rAttribute = VariableTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher =
                          Keyword
                            KeywordAttr
                              { keywordCaseSensitive = True
                              , keywordDelims = Data.Set.fromList "\t\n %&(),.;[]^{|}~"
                              }
                            (makeWordSet
                               True
                               [ "def"
                               , "def-"
                               , "defalias"
                               , "defhinted"
                               , "definline"
                               , "defmacro"
                               , "defmacro-"
                               , "defmethod"
                               , "defmulti"
                               , "defn"
                               , "defn-"
                               , "defn-memo"
                               , "defnk"
                               , "defonce"
                               , "defonce-"
                               , "defprotocol"
                               , "defrecord"
                               , "defstruct"
                               , "defstruct-"
                               , "deftest"
                               , "deftest-"
                               , "deftype"
                               , "defunbound"
                               , "defunbound-"
                               , "defvar"
                               , "defvar-"
                               ])
                      , rAttribute = BuiltInTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "function_decl" ) ]
                      }
                  , Rule
                      { rMatcher =
                          RegExpr
                            RE
                              { reString = "\\\\."
                              , reCompiled = Just (compileRegex True "\\\\.")
                              , reCaseSensitive = True
                              }
                      , rAttribute = CharTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '"'
                      , rAttribute = StringTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "String" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar '"'
                      , rAttribute = StringTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "String" ) ]
                      }
                  , Rule
                      { rMatcher = Float
                      , rAttribute = FloatTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = Int
                      , rAttribute = DecValTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level1" ) ]
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level0"
          , Context
              { cName = "Level0"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level1" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level1" ) ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level1"
          , Context
              { cName = "Level1"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level2" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level2" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar ')'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level2"
          , Context
              { cName = "Level2"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level3" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level3" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar ')'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level3"
          , Context
              { cName = "Level3"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level4" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level4" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar ')'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level4"
          , Context
              { cName = "Level4"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level5" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level5" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar ')'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level5"
          , Context
              { cName = "Level5"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level6" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level6" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar ')'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "Level6"
          , Context
              { cName = "Level6"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = DetectChar '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level1" ) ]
                      }
                  , Rule
                      { rMatcher = Detect2Chars '#' '('
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Push ( "Clojure" , "Level1" ) ]
                      }
                  , Rule
                      { rMatcher = DetectChar ')'
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = IncludeRules ( "Clojure" , "Default" )
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "SpecialNumber"
          , Context
              { cName = "SpecialNumber"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher = Float
                      , rAttribute = FloatTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = Int
                      , rAttribute = DecValTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = HlCOct
                      , rAttribute = BaseNTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  , Rule
                      { rMatcher = HlCHex
                      , rAttribute = FloatTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  ]
              , cAttribute = NormalTok
              , cLineEmptyContext = []
              , cLineEndContext = [ Pop ]
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "String"
          , Context
              { cName = "String"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher =
                          RegExpr
                            RE
                              { reString = "#\\\\."
                              , reCompiled = Just (compileRegex True "#\\\\.")
                              , reCaseSensitive = True
                              }
                      , rAttribute = CharTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = HlCStringChar
                      , rAttribute = NormalTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = []
                      }
                  , Rule
                      { rMatcher = DetectChar '"'
                      , rAttribute = StringTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  ]
              , cAttribute = StringTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        , ( "function_decl"
          , Context
              { cName = "function_decl"
              , cSyntax = "Clojure"
              , cRules =
                  [ Rule
                      { rMatcher =
                          RegExpr
                            RE
                              { reString = "\\s*[A-Za-z0-9-+\\<\\>//\\*]*\\s*"
                              , reCompiled =
                                  Just (compileRegex True "\\s*[A-Za-z0-9-+\\<\\>//\\*]*\\s*")
                              , reCaseSensitive = True
                              }
                      , rAttribute = FunctionTok
                      , rIncludeAttribute = False
                      , rDynamic = False
                      , rCaseSensitive = True
                      , rChildren = []
                      , rLookahead = False
                      , rFirstNonspace = False
                      , rColumn = Nothing
                      , rContextSwitch = [ Pop ]
                      }
                  ]
              , cAttribute = FunctionTok
              , cLineEmptyContext = []
              , cLineEndContext = []
              , cLineBeginContext = []
              , cFallthrough = False
              , cFallthroughContext = []
              , cDynamic = False
              }
          )
        ]
  , sAuthor =
      "Dominik Haumann [lisp] modified for clojure by Caspar Hasenclever"
  , sVersion = "5"
  , sLicense = "LGPLv2+"
  , sExtensions = [ "*.clj" , "*.cljs" ]
  , sStartingContext = "Level0"
  }