diff --git a/rook/css/default.css b/rook/css/default.css index a552239..33f78fe 100644 --- a/rook/css/default.css +++ b/rook/css/default.css @@ -21,6 +21,14 @@ h2 { font-size: 25px; } +h5.license { + margin: 9px 0 22px 0; + color: #555; + font-weight: normal; + font-size: 12px; + font-style: italic; +} + .document h1, .namespace-index h1 { font-size: 32px; margin-top: 12px; @@ -433,20 +441,28 @@ p { } .markdown p, .markdown li, .markdown dt, .markdown dd, .markdown td { - line-height: 18px; + line-height: 22px; +} + +.markdown li { + padding: 2px 0; } .markdown h2 { font-weight: normal; font-size: 25px; + margin: 30px 0 10px 0; } -#content .markdown h3 { +.markdown h3 { + font-weight: normal; font-size: 20px; + margin: 30px 0 0 0; } .markdown h4 { font-size: 15px; + margin: 22px 0 -4px 0; } .doc, .public, .namespace .index { @@ -454,28 +470,27 @@ p { overflow-x: visible; } -.markdown code, .src-link a { - background: #f6f6f6; +.markdown pre > code { + display: block; + padding: 10px; +} + +.markdown pre > code, .src-link a { border: 1px solid #e4e4e4; border-radius: 2px; } -.markdown pre, pre.deps { - background: #f4f4f4; - border: 1px solid #e0e0e0; - border-radius: 2px; - padding: 5px 10px; - margin: 15px 10px; +.markdown code:not(.hljs), .src-link a { + background: #f6f6f6; } pre.deps { display: inline-block; margin: 0 10px; -} - -.markdown pre code { - background: transparent; - border: none; + border: 1px solid #e4e4e4; + border-radius: 2px; + padding: 10px; + background-color: #f6f6f6; } .markdown hr { diff --git a/rook/css/highlight.css b/rook/css/highlight.css new file mode 100644 index 0000000..d0cdaa3 --- /dev/null +++ b/rook/css/highlight.css @@ -0,0 +1,97 @@ +/* +github.com style (c) Vasily Polovnyov +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #f8f8f8; +} + +.hljs-comment, +.hljs-quote { + color: #998; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: bold; +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: #008080; +} + +.hljs-string, +.hljs-doctag { + color: #d14; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #900; + font-weight: bold; +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-type, +.hljs-class .hljs-title { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-regexp, +.hljs-link { + color: #009926; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/rook/index.html b/rook/index.html index 3338855..33382b3 100644 --- a/rook/index.html +++ b/rook/index.html @@ -1,3 +1,3 @@ -Rook 0.2.1

Rook 0.2.1

Smart namespace-driven routing for Pedestal.

Installation

To install, add the following dependency to your project or build file:

[io.aviso/rook "0.2.1"]

Namespaces

io.aviso.rook

Rook is used to map the functions of a namespace as web request endpoints, based largely on metadata on the functions.

io.aviso.rook.interceptors

Common interceptors used with Rook.

Public variables and functions:

\ No newline at end of file +Rook 0.2.2

Rook 0.2.2

Released under the Apache Sofware License 2.0

Smart namespace-driven routing for Pedestal.

Installation

To install, add the following dependency to your project or build file:

[io.aviso/rook "0.2.2"]

Namespaces

io.aviso.rook

Rook is used to map the functions of a namespace as web request endpoints, based largely on metadata on the functions.

Public variables and functions:

io.aviso.rook.arg-resolvers

Built-in implementations and support functions for argument resolver generators.

io.aviso.rook.interceptors

Common interceptors used with Rook.

Public variables and functions:

\ No newline at end of file diff --git a/rook/io.aviso.rook.arg-resolvers.html b/rook/io.aviso.rook.arg-resolvers.html new file mode 100644 index 0000000..bfe2d13 --- /dev/null +++ b/rook/io.aviso.rook.arg-resolvers.html @@ -0,0 +1,35 @@ + +io.aviso.rook.arg-resolvers documentation

io.aviso.rook.arg-resolvers

added in 0.2.2

Built-in implementations and support functions for argument resolver generators.

default-arg-resolvers

Defines the following argument resolvers:

+
+
:request +
+
The argument resolves to a key in the :request map.
+
An exception is thrown if the resolved value is nil.
+
:path-param +
+
The argument resolves to a path parameter.
+
An exception is thrown if the resolved value is nil.
+
:query-param +
+
The argument resolves to a query parameter, as applied by the default io.pedestal.http.route/query-params interceptor.
+
:form-param +
+
As :query-param, but for the encoded form parameters. Assumes the necessary middleware to process the body into form parameters and keywordize the keys is present.
+
+

For these resolvers if the meta data value is exactly the value true (e.g., just using ^:request), then the effective value is a keyword generated from the parameter symbol.

inject-resolver

(inject-resolver meta-key injections)

For a given meta-data key and map of injections, returns an arg-resolver generator, wrapped in a map that can be merged with default-arg-resolvers.

+

Parameters are converted to keys into the injections map. The injections map should use keyword keys.

+

Will throw an exception if a parameter symbol fails to match a non-nil value in the injections map.

meta-value-for-parameter

(meta-value-for-parameter sym meta-key)

Given a parameter symbol and a metadata key, returns the value for that metadata key.

+

It is presumed that the value is a keyword, though no check is made.

+

When the metadata value is explicitly true, the symbol is converted into a simple (not namespaced) keyword.

non-nil-arg-resolver

(non-nil-arg-resolver sym ks)

Returns an arg resolver that extracts a value nested in the context.

+

The value must be non-nil, or an exception is thrown.

+
+
sym
+
The symbol for which the argument resolver was created; identified in the exception.
+
ks
+
a sequence of keys.
+

standard-arg-resolver

(standard-arg-resolver ks)

Returns an arg resolver that extracts a value nested in the context.

+
+
ks
+
A sequence of keys.
+
\ No newline at end of file diff --git a/rook/io.aviso.rook.html b/rook/io.aviso.rook.html index 54e65bd..a99e3d7 100644 --- a/rook/io.aviso.rook.html +++ b/rook/io.aviso.rook.html @@ -1,24 +1,7 @@ -io.aviso.rook documentation

io.aviso.rook

Rook is used to map the functions of a namespace as web request endpoints, based largely on metadata on the functions.

default-arg-resolvers

Defines the following argument resolvers:

-
-
:request -
-
The argument resolves to a key in the :request map.
-
An exception is thrown if the resolved value is nil.
-
:path-param -
-
The argument resolves to a path parameter.
-
An exception is thrown if the resolved value is nil.
-
:query-param -
-
The argument resolves to a query parameter, as applied by the default io.pedestal.http.route/query-params interceptor.
-
:form-param -
-
As :query-param, but for the encoded form parameters. Assumes the necessary middleware to process the body into form parameters and keywordize the keys is present.
-
-

For these resolvers if the meta data value is exactly the value true (e.g., just using ^:request), then the effective value is a keyword generated from the parameter symbol.

default-options

Default options when generating the routing table.

-

Defines a base set of argument resolvers (default-arg-resolvers), an empty map of constraints, an empty list of interceptors, and an empty map of interceptor definitions.

gen-table-routes

(gen-table-routes namespace-map options)

Generates a vector of Pedestal table routes for some number of namespaces.

+io.aviso.rook documentation

io.aviso.rook

Rook is used to map the functions of a namespace as web request endpoints, based largely on metadata on the functions.

default-options

Default options when generating the routing table.

+

Defines a base set of argument resolvers (default-arg-resolvers), an empty map of constraints, an empty list of interceptors, and an empty map of interceptor definitions.

gen-table-routes

(gen-table-routes namespace-map options)

Generates a vector of Pedestal table routes for some number of namespaces.

The namespace-map is a map from URL prefix (e.g., “/users”) to a Rook namespace definition.

The Rook namespace definition is a map with keys that define how Rook will map functions in the namespace as routes and handlers in the returned table.

@@ -46,17 +29,4 @@

Each parameter of the function must have metadata identifying how the argument value is to be generated; these are defined by the effective arg-resolvers for the function.

The options map provides overrides of default-options. Supplied options are deep merged into the defaults.

The :interceptor-defs option provides extra levels of indirection between an endpoint and the interceptors it requires. It allows for interceptors to be specified as a keyword. The corresponding value in the interceptor-defs map may either be a previously instantiated interceptor, or can by a function with the ^:endpoint-interceptor-fn meta data.

-

In the latter case, a map definining the endpoint is passed to the generator function, which returns an interceptor.

meta-value-for-parameter

(meta-value-for-parameter sym meta-key)

Given a parameter symbol and a metadata key, returns the value for that metadata key.

-

It is presumed that the value is a keyword, though no check is made.

-

When the metadata value is explicitly true, the symbol is converted into a simple (not namespaced) keyword.

non-nil-arg-resolver

(non-nil-arg-resolver sym ks)

Returns an arg resolver that extracts a value nested in the context.

-

The value must be non-nil, or an exception is thrown.

-
-
sym
-
The symbol for which the argument resolver was created; identified in the exception.
-
ks
-
a sequence of keys.
-

standard-arg-resolver

(standard-arg-resolver ks)

Returns an arg resolver that extracts a value nested in the context.

-
-
ks
-
A sequence of keys.
-
\ No newline at end of file +

In the latter case, a map definining the endpoint is passed to the generator function, which returns an interceptor.

\ No newline at end of file diff --git a/rook/io.aviso.rook.interceptors.html b/rook/io.aviso.rook.interceptors.html index 868f1c7..3f709ca 100644 --- a/rook/io.aviso.rook.interceptors.html +++ b/rook/io.aviso.rook.interceptors.html @@ -1,3 +1,3 @@ -io.aviso.rook.interceptors documentation

io.aviso.rook.interceptors

Common interceptors used with Rook.

keywordized-form

A wrapper around form parsing; the request’s body is parsed, and a :form-params key is added to the request. The keys in the map are keywordized.

\ No newline at end of file +io.aviso.rook.interceptors documentation

io.aviso.rook.interceptors

Common interceptors used with Rook.

keywordized-form

A wrapper around form parsing; the request’s body is parsed, and a :form-params key is added to the request. The keys in the map are keywordized.

\ No newline at end of file diff --git a/rook/js/highlight.min.js b/rook/js/highlight.min.js new file mode 100644 index 0000000..6486ffd --- /dev/null +++ b/rook/js/highlight.min.js @@ -0,0 +1,2 @@ +/*! highlight.js v9.6.0 | BSD3 License | git.io/hljslicense */ +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return I[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return R(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||R(i))return i}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){l+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):E(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"===e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?"":y.classPrefix,i='',i+n+o}function p(){var e,t,r,a;if(!E.k)return n(B);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(B);r;)a+=n(B.substr(t,r.index-t)),e=g(E,r),e?(M+=e[1],a+=h(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(B);return a+n(B.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!x[E.sL])return n(B);var t=e?l(E.sL,B,!0,L[E.sL]):f(B,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(L[E.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){k+=null!=E.sL?d():p(),B=""}function v(e){k+=e.cN?h(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(B+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?B+=n:(t.eB&&(B+=n),b(),t.rB||t.eB||(B=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?B+=n:(a.rE||a.eE||(B+=n),b(),a.eE&&(B=n));do E.cN&&(k+=C),E.skip||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return B+=n,n.length||1}var N=R(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var w,E=i||N,L={},k="";for(w=E;w!==N;w=w.parent)w.cN&&(k=h(w.cN,"",!0)+k);var B="",M=0;try{for(var I,j,O=0;;){if(E.t.lastIndex=O,I=E.t.exec(t),!I)break;j=m(t.substr(O,I.index-O),I[0]),O=I.index+j}for(m(t.substr(O)),w=E;w.parent;w=w.parent)w.cN&&(k+=C);return{r:M,value:k,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function f(e,t){t=t||y.languages||E(x);var r={r:0,value:n(e)},a=r;return t.filter(R).forEach(function(n){var t=l(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function g(e){return y.tabReplace||y.useBR?e.replace(M,function(e,n){return y.useBR&&"\n"===e?"
":y.tabReplace?n.replace(/\t/g,y.tabReplace):void 0}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n,t,r,o,s,p=i(e);a(p)||(y.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,s=n.textContent,r=p?l(p,s,!0):f(s),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=g(r.value),e.innerHTML=r.value,e.className=h(e.className,p,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function d(e){y=o(y,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");w.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function N(){return E(x)}function R(e){return e=(e||"").toLowerCase(),x[e]||x[L[e]]}var w=[],E=Object.keys,x={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
",y={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},I={"&":"&","<":"<",">":">"};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=R,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("clojure",function(e){var t={"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},r="a-zA-Z_\\-!.?+*=<>&#'",n="["+r+"]["+r+"0-9/;:]*",a="[-+]?\\d+(\\.\\d+)?",o={b:n,r:0},s={cN:"number",b:a,r:0},i=e.inherit(e.QSM,{i:null}),c=e.C(";","$",{r:0}),d={cN:"literal",b:/\b(true|false|nil)\b/},l={b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+n},p=e.C("\\^\\{","\\}"),u={cN:"symbol",b:"[:]{1,2}"+n},f={b:"\\(",e:"\\)"},h={eW:!0,r:0},y={k:t,l:n,cN:"name",b:n,starts:h},b=[f,i,m,p,c,u,l,s,d,o];return f.c=[e.C("comment",""),y,h],h.c=b,l.c=b,{aliases:["clj"],i:/\S/,c:[f,i,m,p,c,u,l,s,d]}});hljs.registerLanguage("clojure-repl",function(e){return{c:[{cN:"meta",b:/^([\w.-]+|\s*#_)=>/,starts:{e:/$/,sL:"clojure"}}]}}); \ No newline at end of file