{"version":3,"sources":["webpack://lib/./node_modules/react-syntax-highlighter/node_modules/highlight.js/lib/languages/clojure.js"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA","file":"react-syntax-highlighter_languages_highlight_clojure.render-page.js","sourcesContent":["/*\nLanguage: Clojure\nDescription: Clojure syntax (based on lisp.js)\nAuthor: mfornos\nWebsite: https://clojure.org\nCategory: lisp\n*/\n\n/** @type LanguageFn */\nfunction clojure(hljs) {\n  var SYMBOLSTART = 'a-zA-Z_\\\\-!.?+*=<>&#\\'';\n  var SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';\n  var globals = 'def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord';\n  var keywords = {\n    $pattern: SYMBOL_RE,\n    'builtin-name':\n      // Clojure keywords\n      globals + ' ' +\n      'cond apply if-not if-let if not not= = < > <= >= == + / * - rem ' +\n      'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? ' +\n      'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? ' +\n      'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? ' +\n      'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . ' +\n      'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last ' +\n      'drop-while while intern condp case reduced cycle split-at split-with repeat replicate ' +\n      'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext ' +\n      'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends ' +\n      'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler ' +\n      'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter ' +\n      'monitor-exit macroexpand macroexpand-1 for dosync and or ' +\n      'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert ' +\n      'peek pop doto proxy first rest cons cast coll last butlast ' +\n      'sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import ' +\n      'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! ' +\n      'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger ' +\n      'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline ' +\n      'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking ' +\n      'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! ' +\n      'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! ' +\n      'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty ' +\n      'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list ' +\n      'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer ' +\n      'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate ' +\n      'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta ' +\n      'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'\n  };\n\n  var SIMPLE_NUMBER_RE = '[-+]?\\\\d+(\\\\.\\\\d+)?';\n\n  var SYMBOL = {\n    begin: SYMBOL_RE,\n    relevance: 0\n  };\n  var NUMBER = {\n    className: 'number', begin: SIMPLE_NUMBER_RE,\n    relevance: 0\n  };\n  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});\n  var COMMENT = hljs.COMMENT(\n    ';',\n    '$',\n    {\n      relevance: 0\n    }\n  );\n  var LITERAL = {\n    className: 'literal',\n    begin: /\\b(true|false|nil)\\b/\n  };\n  var COLLECTION = {\n    begin: '[\\\\[\\\\{]', end: '[\\\\]\\\\}]'\n  };\n  var HINT = {\n    className: 'comment',\n    begin: '\\\\^' + SYMBOL_RE\n  };\n  var HINT_COL = hljs.COMMENT('\\\\^\\\\{', '\\\\}');\n  var KEY = {\n    className: 'symbol',\n    begin: '[:]{1,2}' + SYMBOL_RE\n  };\n  var LIST = {\n    begin: '\\\\(', end: '\\\\)'\n  };\n  var BODY = {\n    endsWithParent: true,\n    relevance: 0\n  };\n  var NAME = {\n    keywords: keywords,\n    className: 'name', begin: SYMBOL_RE,\n    starts: BODY\n  };\n  var DEFAULT_CONTAINS = [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL, SYMBOL];\n\n  var GLOBAL = {\n    beginKeywords: globals,\n    lexemes: SYMBOL_RE,\n    end: '(\\\\[|\\\\#|\\\\d|\"|:|\\\\{|\\\\)|\\\\(|$)',\n    contains: [\n      {\n        className: 'title',\n        begin: SYMBOL_RE,\n        relevance: 0,\n        excludeEnd: true,\n        // we can only have a single title\n        endsParent: true\n      },\n    ].concat(DEFAULT_CONTAINS)\n  };\n\n  LIST.contains = [hljs.COMMENT('comment', ''), GLOBAL, NAME, BODY];\n  BODY.contains = DEFAULT_CONTAINS;\n  COLLECTION.contains = DEFAULT_CONTAINS;\n  HINT_COL.contains = [COLLECTION];\n\n  return {\n    name: 'Clojure',\n    aliases: ['clj'],\n    illegal: /\\S/,\n    contains: [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL]\n  };\n}\n\nmodule.exports = clojure;\n"],"sourceRoot":""}