diff --git a/assets/js/app.js b/assets/js/app.js
index 1d345c1..be84762 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -3,7 +3,7 @@ window.$ = $;
window.jQuery = $;
import "bootstrap";
-import "./prism";
+import "../vendor/prism";
import "./repository";
import "./kmx_anim";
diff --git a/assets/package-lock.json b/assets/package-lock.json
index 93fce42..8081568 100644
--- a/assets/package-lock.json
+++ b/assets/package-lock.json
@@ -11,7 +11,8 @@
"jquery": "^3.7.1",
"phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html",
- "phoenix_live_view": "file:../deps/phoenix_live_view"
+ "phoenix_live_view": "file:../deps/phoenix_live_view",
+ "prismjs": "^1.29.0"
}
},
"../deps/phoenix": {
@@ -68,6 +69,14 @@
"node_modules/phoenix_live_view": {
"resolved": "../deps/phoenix_live_view",
"link": true
+ },
+ "node_modules/prismjs": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
+ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "engines": {
+ "node": ">=6"
+ }
}
}
}
diff --git a/assets/package.json b/assets/package.json
index a7fbb27..dd651ce 100644
--- a/assets/package.json
+++ b/assets/package.json
@@ -8,6 +8,7 @@
"jquery": "^3.7.1",
"phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html",
- "phoenix_live_view": "file:../deps/phoenix_live_view"
+ "phoenix_live_view": "file:../deps/phoenix_live_view",
+ "prismjs": "^1.29.0"
}
}
diff --git a/priv/static/_assets/app.js b/priv/static/_assets/app.js
index 0553135..56a0263 100644
--- a/priv/static/_assets/app.js
+++ b/priv/static/_assets/app.js
@@ -1,24 +1,36353 @@
-(()=>{var rc=Object.create;var ws=Object.defineProperty;var sc=Object.getOwnPropertyDescriptor;var oc=Object.getOwnPropertyNames;var ac=Object.getPrototypeOf,lc=Object.prototype.hasOwnProperty;var xs=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),uc=(t,e)=>{for(var i in e)ws(t,i,{get:e[i],enumerable:!0})},cc=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of oc(e))!lc.call(t,o)&&o!==i&&ws(t,o,{get:()=>e[o],enumerable:!(s=sc(e,o))||s.enumerable});return t};var yn=(t,e,i)=>(i=t!=null?rc(ac(t)):{},cc(e||!t||!t.__esModule?ws(i,"default",{value:t,enumerable:!0}):i,t));var ar=xs((ha,or)=>{(function(t,e){"use strict";typeof or=="object"&&typeof or.exports=="object"?or.exports=t.document?e(t,!0):function(i){if(!i.document)throw new Error("jQuery requires a window with a document");return e(i)}:e(t)})(typeof window<"u"?window:ha,function(t,e){"use strict";var i=[],s=Object.getPrototypeOf,o=i.slice,c=i.flat?function(n){return i.flat.call(n)}:function(n){return i.concat.apply([],n)},d=i.push,g=i.indexOf,v={},C=v.toString,x=v.hasOwnProperty,I=x.toString,D=I.call(Object),S={},N=function(r){return typeof r=="function"&&typeof r.nodeType!="number"&&typeof r.item!="function"},A=function(r){return r!=null&&r===r.window},_=t.document,R={type:!0,src:!0,nonce:!0,noModule:!0};function F(n,r,a){a=a||_;var u,f,h=a.createElement("script");if(h.text=n,r)for(u in R)f=r[u]||r.getAttribute&&r.getAttribute(u),f&&h.setAttribute(u,f);a.head.appendChild(h).parentNode.removeChild(h)}function T(n){return n==null?n+"":typeof n=="object"||typeof n=="function"?v[C.call(n)]||"object":typeof n}var H="3.7.1",K=/HTML$/i,l=function(n,r){return new l.fn.init(n,r)};l.fn=l.prototype={jquery:H,constructor:l,length:0,toArray:function(){return o.call(this)},get:function(n){return n==null?o.call(this):n<0?this[n+this.length]:this[n]},pushStack:function(n){var r=l.merge(this.constructor(),n);return r.prevObject=this,r},each:function(n){return l.each(this,n)},map:function(n){return this.pushStack(l.map(this,function(r,a){return n.call(r,a,r)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(l.grep(this,function(n,r){return(r+1)%2}))},odd:function(){return this.pushStack(l.grep(this,function(n,r){return r%2}))},eq:function(n){var r=this.length,a=+n+(n<0?r:0);return this.pushStack(a>=0&&a<r?[this[a]]:[])},end:function(){return this.prevObject||this.constructor()},push:d,sort:i.sort,splice:i.splice},l.extend=l.fn.extend=function(){var n,r,a,u,f,h,p=arguments[0]||{},y=1,b=arguments.length,w=!1;for(typeof p=="boolean"&&(w=p,p=arguments[y]||{},y++),typeof p!="object"&&!N(p)&&(p={}),y===b&&(p=this,y--);y<b;y++)if((n=arguments[y])!=null)for(r in n)u=n[r],!(r==="__proto__"||p===u)&&(w&&u&&(l.isPlainObject(u)||(f=Array.isArray(u)))?(a=p[r],f&&!Array.isArray(a)?h=[]:!f&&!l.isPlainObject(a)?h={}:h=a,f=!1,p[r]=l.extend(w,h,u)):u!==void 0&&(p[r]=u));return p},l.extend({expando:"jQuery"+(H+Math.random()).replace(/\D/g,""),isReady:!0,error:function(n){throw new Error(n)},noop:function(){},isPlainObject:function(n){var r,a;return!n||C.call(n)!=="[object Object]"?!1:(r=s(n),r?(a=x.call(r,"constructor")&&r.constructor,typeof a=="function"&&I.call(a)===D):!0)},isEmptyObject:function(n){var r;for(r in n)return!1;return!0},globalEval:function(n,r,a){F(n,{nonce:r&&r.nonce},a)},each:function(n,r){var a,u=0;if(ee(n))for(a=n.length;u<a&&r.call(n[u],u,n[u])!==!1;u++);else for(u in n)if(r.call(n[u],u,n[u])===!1)break;return n},text:function(n){var r,a="",u=0,f=n.nodeType;if(!f)for(;r=n[u++];)a+=l.text(r);return f===1||f===11?n.textContent:f===9?n.documentElement.textContent:f===3||f===4?n.nodeValue:a},makeArray:function(n,r){var a=r||[];return n!=null&&(ee(Object(n))?l.merge(a,typeof n=="string"?[n]:n):d.call(a,n)),a},inArray:function(n,r,a){return r==null?-1:g.call(r,n,a)},isXMLDoc:function(n){var r=n&&n.namespaceURI,a=n&&(n.ownerDocument||n).documentElement;return!K.test(r||a&&a.nodeName||"HTML")},merge:function(n,r){for(var a=+r.length,u=0,f=n.length;u<a;u++)n[f++]=r[u];return n.length=f,n},grep:function(n,r,a){for(var u,f=[],h=0,p=n.length,y=!a;h<p;h++)u=!r(n[h],h),u!==y&&f.push(n[h]);return f},map:function(n,r,a){var u,f,h=0,p=[];if(ee(n))for(u=n.length;h<u;h++)f=r(n[h],h,a),f!=null&&p.push(f);else for(h in n)f=r(n[h],h,a),f!=null&&p.push(f);return c(p)},guid:1,support:S}),typeof Symbol=="function"&&(l.fn[Symbol.iterator]=i[Symbol.iterator]),l.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(n,r){v["[object "+r+"]"]=r.toLowerCase()});function ee(n){var r=!!n&&"length"in n&&n.length,a=T(n);return N(n)||A(n)?!1:a==="array"||r===0||typeof r=="number"&&r>0&&r-1 in n}function G(n,r){return n.nodeName&&n.nodeName.toLowerCase()===r.toLowerCase()}var re=i.pop,me=i.sort,_e=i.splice,se="[\\x20\\t\\r\\n\\f]",ye=new RegExp("^"+se+"+|((?:^|[^\\\\])(?:\\\\.)*)"+se+"+$","g");l.contains=function(n,r){var a=r&&r.parentNode;return n===a||!!(a&&a.nodeType===1&&(n.contains?n.contains(a):n.compareDocumentPosition&&n.compareDocumentPosition(a)&16))};var je=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function Y(n,r){return r?n==="\0"?"\uFFFD":n.slice(0,-1)+"\\"+n.charCodeAt(n.length-1).toString(16)+" ":"\\"+n}l.escapeSelector=function(n){return(n+"").replace(je,Y)};var W=_,X=d;(function(){var n,r,a,u,f,h=X,p,y,b,w,P,M=l.expando,O=0,U=0,ae=ir(),pe=ir(),ue=ir(),He=ir(),Le=function(m,E){return m===E&&(f=!0),0},Tt="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",wt="(?:\\\\[\\da-fA-F]{1,6}"+se+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",he="\\["+se+"*("+wt+")(?:"+se+"*([*^$|!~]?=)"+se+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+wt+"))|)"+se+"*\\]",pi=":("+wt+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+he+")*)|.*)\\)|)",ge=new RegExp(se+"+","g"),xe=new RegExp("^"+se+"*,"+se+"*"),mn=new RegExp("^"+se+"*([>+~]|"+se+")"+se+"*"),vs=new RegExp(se+"|>"),xt=new RegExp(pi),vn=new RegExp("^"+wt+"$"),Ct={ID:new RegExp("^#("+wt+")"),CLASS:new RegExp("^\\.("+wt+")"),TAG:new RegExp("^("+wt+"|[*])"),ATTR:new RegExp("^"+he),PSEUDO:new RegExp("^"+pi),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+se+"*(even|odd|(([+-]|)(\\d*)n|)"+se+"*(?:([+-]|)"+se+"*(\\d+)|))"+se+"*\\)|)","i"),bool:new RegExp("^(?:"+Tt+")$","i"),needsContext:new RegExp("^"+se+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+se+"*((?:-\\d)?\\d*)"+se+"*\\)|)(?=[^-]|$)","i")},Xt=/^(?:input|select|textarea|button)$/i,Yt=/^h\d$/i,ut=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bs=/[+~]/,$t=new RegExp("\\\\[\\da-fA-F]{1,6}"+se+"?|\\\\([^\\r\\n\\f])","g"),Mt=function(m,E){var k="0x"+m.slice(1)-65536;return E||(k<0?String.fromCharCode(k+65536):String.fromCharCode(k>>10|55296,k&1023|56320))},Ju=function(){Gt()},Qu=rr(function(m){return m.disabled===!0&&G(m,"fieldset")},{dir:"parentNode",next:"legend"});function Zu(){try{return p.activeElement}catch{}}try{h.apply(i=o.call(W.childNodes),W.childNodes),i[W.childNodes.length].nodeType}catch{h={apply:function(E,k){X.apply(E,o.call(k))},call:function(E){X.apply(E,o.call(arguments,1))}}}function ve(m,E,k,L){var $,V,q,Q,z,ce,ne,le=E&&E.ownerDocument,fe=E?E.nodeType:9;if(k=k||[],typeof m!="string"||!m||fe!==1&&fe!==9&&fe!==11)return k;if(!L&&(Gt(E),E=E||p,b)){if(fe!==11&&(z=ut.exec(m)))if($=z[1]){if(fe===9)if(q=E.getElementById($)){if(q.id===$)return h.call(k,q),k}else return k;else if(le&&(q=le.getElementById($))&&ve.contains(E,q)&&q.id===$)return h.call(k,q),k}else{if(z[2])return h.apply(k,E.getElementsByTagName(m)),k;if(($=z[3])&&E.getElementsByClassName)return h.apply(k,E.getElementsByClassName($)),k}if(!He[m+" "]&&(!w||!w.test(m))){if(ne=m,le=E,fe===1&&(vs.test(m)||mn.test(m))){for(le=bs.test(m)&&ys(E.parentNode)||E,(le!=E||!S.scope)&&((Q=E.getAttribute("id"))?Q=l.escapeSelector(Q):E.setAttribute("id",Q=M)),ce=bn(m),V=ce.length;V--;)ce[V]=(Q?"#"+Q:":scope")+" "+nr(ce[V]);ne=ce.join(",")}try{return h.apply(k,le.querySelectorAll(ne)),k}catch{He(m,!0)}finally{Q===M&&E.removeAttribute("id")}}}return fa(m.replace(ye,"$1"),E,k,L)}function ir(){var m=[];function E(k,L){return m.push(k+" ")>r.cacheLength&&delete E[m.shift()],E[k+" "]=L}return E}function bt(m){return m[M]=!0,m}function ji(m){var E=p.createElement("fieldset");try{return!!m(E)}catch{return!1}finally{E.parentNode&&E.parentNode.removeChild(E),E=null}}function ec(m){return function(E){return G(E,"input")&&E.type===m}}function tc(m){return function(E){return(G(E,"input")||G(E,"button"))&&E.type===m}}function ua(m){return function(E){return"form"in E?E.parentNode&&E.disabled===!1?"label"in E?"label"in E.parentNode?E.parentNode.disabled===m:E.disabled===m:E.isDisabled===m||E.isDisabled!==!m&&Qu(E)===m:E.disabled===m:"label"in E?E.disabled===m:!1}}function gi(m){return bt(function(E){return E=+E,bt(function(k,L){for(var $,V=m([],k.length,E),q=V.length;q--;)k[$=V[q]]&&(k[$]=!(L[$]=k[$]))})})}function ys(m){return m&&typeof m.getElementsByTagName<"u"&&m}function Gt(m){var E,k=m?m.ownerDocument||m:W;return k==p||k.nodeType!==9||!k.documentElement||(p=k,y=p.documentElement,b=!l.isXMLDoc(p),P=y.matches||y.webkitMatchesSelector||y.msMatchesSelector,y.msMatchesSelector&&W!=p&&(E=p.defaultView)&&E.top!==E&&E.addEventListener("unload",Ju),S.getById=ji(function(L){return y.appendChild(L).id=l.expando,!p.getElementsByName||!p.getElementsByName(l.expando).length}),S.disconnectedMatch=ji(function(L){return P.call(L,"*")}),S.scope=ji(function(){return p.querySelectorAll(":scope")}),S.cssHas=ji(function(){try{return p.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),S.getById?(r.filter.ID=function(L){var $=L.replace($t,Mt);return function(V){return V.getAttribute("id")===$}},r.find.ID=function(L,$){if(typeof $.getElementById<"u"&&b){var V=$.getElementById(L);return V?[V]:[]}}):(r.filter.ID=function(L){var $=L.replace($t,Mt);return function(V){var q=typeof V.getAttributeNode<"u"&&V.getAttributeNode("id");return q&&q.value===$}},r.find.ID=function(L,$){if(typeof $.getElementById<"u"&&b){var V,q,Q,z=$.getElementById(L);if(z){if(V=z.getAttributeNode("id"),V&&V.value===L)return[z];for(Q=$.getElementsByName(L),q=0;z=Q[q++];)if(V=z.getAttributeNode("id"),V&&V.value===L)return[z]}return[]}}),r.find.TAG=function(L,$){return typeof $.getElementsByTagName<"u"?$.getElementsByTagName(L):$.querySelectorAll(L)},r.find.CLASS=function(L,$){if(typeof $.getElementsByClassName<"u"&&b)return $.getElementsByClassName(L)},w=[],ji(function(L){var $;y.appendChild(L).innerHTML="<a id='"+M+"' href='' disabled='disabled'></a><select id='"+M+"-\r\\' disabled='disabled'><option selected=''></option></select>",L.querySelectorAll("[selected]").length||w.push("\\["+se+"*(?:value|"+Tt+")"),L.querySelectorAll("[id~="+M+"-]").length||w.push("~="),L.querySelectorAll("a#"+M+"+*").length||w.push(".#.+[+~]"),L.querySelectorAll(":checked").length||w.push(":checked"),$=p.createElement("input"),$.setAttribute("type","hidden"),L.appendChild($).setAttribute("name","D"),y.appendChild(L).disabled=!0,L.querySelectorAll(":disabled").length!==2&&w.push(":enabled",":disabled"),$=p.createElement("input"),$.setAttribute("name",""),L.appendChild($),L.querySelectorAll("[name='']").length||w.push("\\["+se+"*name"+se+"*="+se+`*(?:''|"")`)}),S.cssHas||w.push(":has"),w=w.length&&new RegExp(w.join("|")),Le=function(L,$){if(L===$)return f=!0,0;var V=!L.compareDocumentPosition-!$.compareDocumentPosition;return V||(V=(L.ownerDocument||L)==($.ownerDocument||$)?L.compareDocumentPosition($):1,V&1||!S.sortDetached&&$.compareDocumentPosition(L)===V?L===p||L.ownerDocument==W&&ve.contains(W,L)?-1:$===p||$.ownerDocument==W&&ve.contains(W,$)?1:u?g.call(u,L)-g.call(u,$):0:V&4?-1:1)}),p}ve.matches=function(m,E){return ve(m,null,null,E)},ve.matchesSelector=function(m,E){if(Gt(m),b&&!He[E+" "]&&(!w||!w.test(E)))try{var k=P.call(m,E);if(k||S.disconnectedMatch||m.document&&m.document.nodeType!==11)return k}catch{He(E,!0)}return ve(E,p,null,[m]).length>0},ve.contains=function(m,E){return(m.ownerDocument||m)!=p&&Gt(m),l.contains(m,E)},ve.attr=function(m,E){(m.ownerDocument||m)!=p&&Gt(m);var k=r.attrHandle[E.toLowerCase()],L=k&&x.call(r.attrHandle,E.toLowerCase())?k(m,E,!b):void 0;return L!==void 0?L:m.getAttribute(E)},ve.error=function(m){throw new Error("Syntax error, unrecognized expression: "+m)},l.uniqueSort=function(m){var E,k=[],L=0,$=0;if(f=!S.sortStable,u=!S.sortStable&&o.call(m,0),me.call(m,Le),f){for(;E=m[$++];)E===m[$]&&(L=k.push($));for(;L--;)_e.call(m,k[L],1)}return u=null,m},l.fn.uniqueSort=function(){return this.pushStack(l.uniqueSort(o.apply(this)))},r=l.expr={cacheLength:50,createPseudo:bt,match:Ct,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(m){return m[1]=m[1].replace($t,Mt),m[3]=(m[3]||m[4]||m[5]||"").replace($t,Mt),m[2]==="~="&&(m[3]=" "+m[3]+" "),m.slice(0,4)},CHILD:function(m){return m[1]=m[1].toLowerCase(),m[1].slice(0,3)==="nth"?(m[3]||ve.error(m[0]),m[4]=+(m[4]?m[5]+(m[6]||1):2*(m[3]==="even"||m[3]==="odd")),m[5]=+(m[7]+m[8]||m[3]==="odd")):m[3]&&ve.error(m[0]),m},PSEUDO:function(m){var E,k=!m[6]&&m[2];return Ct.CHILD.test(m[0])?null:(m[3]?m[2]=m[4]||m[5]||"":k&&xt.test(k)&&(E=bn(k,!0))&&(E=k.indexOf(")",k.length-E)-k.length)&&(m[0]=m[0].slice(0,E),m[2]=k.slice(0,E)),m.slice(0,3))}},filter:{TAG:function(m){var E=m.replace($t,Mt).toLowerCase();return m==="*"?function(){return!0}:function(k){return G(k,E)}},CLASS:function(m){var E=ae[m+" "];return E||(E=new RegExp("(^|"+se+")"+m+"("+se+"|$)"))&&ae(m,function(k){return E.test(typeof k.className=="string"&&k.className||typeof k.getAttribute<"u"&&k.getAttribute("class")||"")})},ATTR:function(m,E,k){return function(L){var $=ve.attr(L,m);return $==null?E==="!=":E?($+="",E==="="?$===k:E==="!="?$!==k:E==="^="?k&&$.indexOf(k)===0:E==="*="?k&&$.indexOf(k)>-1:E==="$="?k&&$.slice(-k.length)===k:E==="~="?(" "+$.replace(ge," ")+" ").indexOf(k)>-1:E==="|="?$===k||$.slice(0,k.length+1)===k+"-":!1):!0}},CHILD:function(m,E,k,L,$){var V=m.slice(0,3)!=="nth",q=m.slice(-4)!=="last",Q=E==="of-type";return L===1&&$===0?function(z){return!!z.parentNode}:function(z,ce,ne){var le,fe,ie,be,Ze,Ue=V!==q?"nextSibling":"previousSibling",ct=z.parentNode,St=Q&&z.nodeName.toLowerCase(),Bi=!ne&&!Q,Ke=!1;if(ct){if(V){for(;Ue;){for(ie=z;ie=ie[Ue];)if(Q?G(ie,St):ie.nodeType===1)return!1;Ze=Ue=m==="only"&&!Ze&&"nextSibling"}return!0}if(Ze=[q?ct.firstChild:ct.lastChild],q&&Bi){for(fe=ct[M]||(ct[M]={}),le=fe[m]||[],be=le[0]===O&&le[1],Ke=be&&le[2],ie=be&&ct.childNodes[be];ie=++be&&ie&&ie[Ue]||(Ke=be=0)||Ze.pop();)if(ie.nodeType===1&&++Ke&&ie===z){fe[m]=[O,be,Ke];break}}else if(Bi&&(fe=z[M]||(z[M]={}),le=fe[m]||[],be=le[0]===O&&le[1],Ke=be),Ke===!1)for(;(ie=++be&&ie&&ie[Ue]||(Ke=be=0)||Ze.pop())&&!((Q?G(ie,St):ie.nodeType===1)&&++Ke&&(Bi&&(fe=ie[M]||(ie[M]={}),fe[m]=[O,Ke]),ie===z)););return Ke-=$,Ke===L||Ke%L===0&&Ke/L>=0}}},PSEUDO:function(m,E){var k,L=r.pseudos[m]||r.setFilters[m.toLowerCase()]||ve.error("unsupported pseudo: "+m);return L[M]?L(E):L.length>1?(k=[m,m,"",E],r.setFilters.hasOwnProperty(m.toLowerCase())?bt(function($,V){for(var q,Q=L($,E),z=Q.length;z--;)q=g.call($,Q[z]),$[q]=!(V[q]=Q[z])}):function($){return L($,0,k)}):L}},pseudos:{not:bt(function(m){var E=[],k=[],L=Ts(m.replace(ye,"$1"));return L[M]?bt(function($,V,q,Q){for(var z,ce=L($,null,Q,[]),ne=$.length;ne--;)(z=ce[ne])&&($[ne]=!(V[ne]=z))}):function($,V,q){return E[0]=$,L(E,null,q,k),E[0]=null,!k.pop()}}),has:bt(function(m){return function(E){return ve(m,E).length>0}}),contains:bt(function(m){return m=m.replace($t,Mt),function(E){return(E.textContent||l.text(E)).indexOf(m)>-1}}),lang:bt(function(m){return vn.test(m||"")||ve.error("unsupported lang: "+m),m=m.replace($t,Mt).toLowerCase(),function(E){var k;do if(k=b?E.lang:E.getAttribute("xml:lang")||E.getAttribute("lang"))return k=k.toLowerCase(),k===m||k.indexOf(m+"-")===0;while((E=E.parentNode)&&E.nodeType===1);return!1}}),target:function(m){var E=t.location&&t.location.hash;return E&&E.slice(1)===m.id},root:function(m){return m===y},focus:function(m){return m===Zu()&&p.hasFocus()&&!!(m.type||m.href||~m.tabIndex)},enabled:ua(!1),disabled:ua(!0),checked:function(m){return G(m,"input")&&!!m.checked||G(m,"option")&&!!m.selected},selected:function(m){return m.parentNode&&m.parentNode.selectedIndex,m.selected===!0},empty:function(m){for(m=m.firstChild;m;m=m.nextSibling)if(m.nodeType<6)return!1;return!0},parent:function(m){return!r.pseudos.empty(m)},header:function(m){return Yt.test(m.nodeName)},input:function(m){return Xt.test(m.nodeName)},button:function(m){return G(m,"input")&&m.type==="button"||G(m,"button")},text:function(m){var E;return G(m,"input")&&m.type==="text"&&((E=m.getAttribute("type"))==null||E.toLowerCase()==="text")},first:gi(function(){return[0]}),last:gi(function(m,E){return[E-1]}),eq:gi(function(m,E,k){return[k<0?k+E:k]}),even:gi(function(m,E){for(var k=0;k<E;k+=2)m.push(k);return m}),odd:gi(function(m,E){for(var k=1;k<E;k+=2)m.push(k);return m}),lt:gi(function(m,E,k){var L;for(k<0?L=k+E:k>E?L=E:L=k;--L>=0;)m.push(L);return m}),gt:gi(function(m,E,k){for(var L=k<0?k+E:k;++L<E;)m.push(L);return m})}},r.pseudos.nth=r.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[n]=ec(n);for(n in{submit:!0,reset:!0})r.pseudos[n]=tc(n);function ca(){}ca.prototype=r.filters=r.pseudos,r.setFilters=new ca;function bn(m,E){var k,L,$,V,q,Q,z,ce=pe[m+" "];if(ce)return E?0:ce.slice(0);for(q=m,Q=[],z=r.preFilter;q;){(!k||(L=xe.exec(q)))&&(L&&(q=q.slice(L[0].length)||q),Q.push($=[])),k=!1,(L=mn.exec(q))&&(k=L.shift(),$.push({value:k,type:L[0].replace(ye," ")}),q=q.slice(k.length));for(V in r.filter)(L=Ct[V].exec(q))&&(!z[V]||(L=z[V](L)))&&(k=L.shift(),$.push({value:k,type:V,matches:L}),q=q.slice(k.length));if(!k)break}return E?q.length:q?ve.error(m):pe(m,Q).slice(0)}function nr(m){for(var E=0,k=m.length,L="";E<k;E++)L+=m[E].value;return L}function rr(m,E,k){var L=E.dir,$=E.next,V=$||L,q=k&&V==="parentNode",Q=U++;return E.first?function(z,ce,ne){for(;z=z[L];)if(z.nodeType===1||q)return m(z,ce,ne);return!1}:function(z,ce,ne){var le,fe,ie=[O,Q];if(ne){for(;z=z[L];)if((z.nodeType===1||q)&&m(z,ce,ne))return!0}else for(;z=z[L];)if(z.nodeType===1||q)if(fe=z[M]||(z[M]={}),$&&G(z,$))z=z[L]||z;else{if((le=fe[V])&&le[0]===O&&le[1]===Q)return ie[2]=le[2];if(fe[V]=ie,ie[2]=m(z,ce,ne))return!0}return!1}}function _s(m){return m.length>1?function(E,k,L){for(var $=m.length;$--;)if(!m[$](E,k,L))return!1;return!0}:m[0]}function ic(m,E,k){for(var L=0,$=E.length;L<$;L++)ve(m,E[L],k);return k}function sr(m,E,k,L,$){for(var V,q=[],Q=0,z=m.length,ce=E!=null;Q<z;Q++)(V=m[Q])&&(!k||k(V,L,$))&&(q.push(V),ce&&E.push(Q));return q}function Es(m,E,k,L,$,V){return L&&!L[M]&&(L=Es(L)),$&&!$[M]&&($=Es($,V)),bt(function(q,Q,z,ce){var ne,le,fe,ie,be=[],Ze=[],Ue=Q.length,ct=q||ic(E||"*",z.nodeType?[z]:z,[]),St=m&&(q||!E)?sr(ct,be,m,z,ce):ct;if(k?(ie=$||(q?m:Ue||L)?[]:Q,k(St,ie,z,ce)):ie=St,L)for(ne=sr(ie,Ze),L(ne,[],z,ce),le=ne.length;le--;)(fe=ne[le])&&(ie[Ze[le]]=!(St[Ze[le]]=fe));if(q){if($||m){if($){for(ne=[],le=ie.length;le--;)(fe=ie[le])&&ne.push(St[le]=fe);$(null,ie=[],ne,ce)}for(le=ie.length;le--;)(fe=ie[le])&&(ne=$?g.call(q,fe):be[le])>-1&&(q[ne]=!(Q[ne]=fe))}}else ie=sr(ie===Q?ie.splice(Ue,ie.length):ie),$?$(null,Q,ie,ce):h.apply(Q,ie)})}function As(m){for(var E,k,L,$=m.length,V=r.relative[m[0].type],q=V||r.relative[" "],Q=V?1:0,z=rr(function(le){return le===E},q,!0),ce=rr(function(le){return g.call(E,le)>-1},q,!0),ne=[function(le,fe,ie){var be=!V&&(ie||fe!=a)||((E=fe).nodeType?z(le,fe,ie):ce(le,fe,ie));return E=null,be}];Q<$;Q++)if(k=r.relative[m[Q].type])ne=[rr(_s(ne),k)];else{if(k=r.filter[m[Q].type].apply(null,m[Q].matches),k[M]){for(L=++Q;L<$&&!r.relative[m[L].type];L++);return Es(Q>1&&_s(ne),Q>1&&nr(m.slice(0,Q-1).concat({value:m[Q-2].type===" "?"*":""})).replace(ye,"$1"),k,Q<L&&As(m.slice(Q,L)),L<$&&As(m=m.slice(L)),L<$&&nr(m))}ne.push(k)}return _s(ne)}function nc(m,E){var k=E.length>0,L=m.length>0,$=function(V,q,Q,z,ce){var ne,le,fe,ie=0,be="0",Ze=V&&[],Ue=[],ct=a,St=V||L&&r.find.TAG("*",ce),Bi=O+=ct==null?1:Math.random()||.1,Ke=St.length;for(ce&&(a=q==p||q||ce);be!==Ke&&(ne=St[be])!=null;be++){if(L&&ne){for(le=0,!q&&ne.ownerDocument!=p&&(Gt(ne),Q=!b);fe=m[le++];)if(fe(ne,q||p,Q)){h.call(z,ne);break}ce&&(O=Bi)}k&&((ne=!fe&&ne)&&ie--,V&&Ze.push(ne))}if(ie+=be,k&&be!==ie){for(le=0;fe=E[le++];)fe(Ze,Ue,q,Q);if(V){if(ie>0)for(;be--;)Ze[be]||Ue[be]||(Ue[be]=re.call(z));Ue=sr(Ue)}h.apply(z,Ue),ce&&!V&&Ue.length>0&&ie+E.length>1&&l.uniqueSort(z)}return ce&&(O=Bi,a=ct),Ze};return k?bt($):$}function Ts(m,E){var k,L=[],$=[],V=ue[m+" "];if(!V){for(E||(E=bn(m)),k=E.length;k--;)V=As(E[k]),V[M]?L.push(V):$.push(V);V=ue(m,nc($,L)),V.selector=m}return V}function fa(m,E,k,L){var $,V,q,Q,z,ce=typeof m=="function"&&m,ne=!L&&bn(m=ce.selector||m);if(k=k||[],ne.length===1){if(V=ne[0]=ne[0].slice(0),V.length>2&&(q=V[0]).type==="ID"&&E.nodeType===9&&b&&r.relative[V[1].type]){if(E=(r.find.ID(q.matches[0].replace($t,Mt),E)||[])[0],E)ce&&(E=E.parentNode);else return k;m=m.slice(V.shift().value.length)}for($=Ct.needsContext.test(m)?0:V.length;$--&&(q=V[$],!r.relative[Q=q.type]);)if((z=r.find[Q])&&(L=z(q.matches[0].replace($t,Mt),bs.test(V[0].type)&&ys(E.parentNode)||E))){if(V.splice($,1),m=L.length&&nr(V),!m)return h.apply(k,L),k;break}}return(ce||Ts(m,ne))(L,E,!b,k,!E||bs.test(m)&&ys(E.parentNode)||E),k}S.sortStable=M.split("").sort(Le).join("")===M,Gt(),S.sortDetached=ji(function(m){return m.compareDocumentPosition(p.createElement("fieldset"))&1}),l.find=ve,l.expr[":"]=l.expr.pseudos,l.unique=l.uniqueSort,ve.compile=Ts,ve.select=fa,ve.setDocument=Gt,ve.tokenize=bn,ve.escape=l.escapeSelector,ve.getText=l.text,ve.isXML=l.isXMLDoc,ve.selectors=l.expr,ve.support=l.support,ve.uniqueSort=l.uniqueSort})();var oe=function(n,r,a){for(var u=[],f=a!==void 0;(n=n[r])&&n.nodeType!==9;)if(n.nodeType===1){if(f&&l(n).is(a))break;u.push(n)}return u},de=function(n,r){for(var a=[];n;n=n.nextSibling)n.nodeType===1&&n!==r&&a.push(n);return a},Pe=l.expr.match.needsContext,we=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Oe(n,r,a){return N(r)?l.grep(n,function(u,f){return!!r.call(u,f,u)!==a}):r.nodeType?l.grep(n,function(u){return u===r!==a}):typeof r!="string"?l.grep(n,function(u){return g.call(r,u)>-1!==a}):l.filter(r,n,a)}l.filter=function(n,r,a){var u=r[0];return a&&(n=":not("+n+")"),r.length===1&&u.nodeType===1?l.find.matchesSelector(u,n)?[u]:[]:l.find.matches(n,l.grep(r,function(f){return f.nodeType===1}))},l.fn.extend({find:function(n){var r,a,u=this.length,f=this;if(typeof n!="string")return this.pushStack(l(n).filter(function(){for(r=0;r<u;r++)if(l.contains(f[r],this))return!0}));for(a=this.pushStack([]),r=0;r<u;r++)l.find(n,f[r],a);return u>1?l.uniqueSort(a):a},filter:function(n){return this.pushStack(Oe(this,n||[],!1))},not:function(n){return this.pushStack(Oe(this,n||[],!0))},is:function(n){return!!Oe(this,typeof n=="string"&&Pe.test(n)?l(n):n||[],!1).length}});var Se,Ie=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Ae=l.fn.init=function(n,r,a){var u,f;if(!n)return this;if(a=a||Se,typeof n=="string")if(n[0]==="<"&&n[n.length-1]===">"&&n.length>=3?u=[null,n,null]:u=Ie.exec(n),u&&(u[1]||!r))if(u[1]){if(r=r instanceof l?r[0]:r,l.merge(this,l.parseHTML(u[1],r&&r.nodeType?r.ownerDocument||r:_,!0)),we.test(u[1])&&l.isPlainObject(r))for(u in r)N(this[u])?this[u](r[u]):this.attr(u,r[u]);return this}else return f=_.getElementById(u[2]),f&&(this[0]=f,this.length=1),this;else return!r||r.jquery?(r||a).find(n):this.constructor(r).find(n);else{if(n.nodeType)return this[0]=n,this.length=1,this;if(N(n))return a.ready!==void 0?a.ready(n):n(l)}return l.makeArray(n,this)};Ae.prototype=l.fn,Se=l(_);var Ge=/^(?:parents|prev(?:Until|All))/,it={children:!0,contents:!0,next:!0,prev:!0};l.fn.extend({has:function(n){var r=l(n,this),a=r.length;return this.filter(function(){for(var u=0;u<a;u++)if(l.contains(this,r[u]))return!0})},closest:function(n,r){var a,u=0,f=this.length,h=[],p=typeof n!="string"&&l(n);if(!Pe.test(n)){for(;u<f;u++)for(a=this[u];a&&a!==r;a=a.parentNode)if(a.nodeType<11&&(p?p.index(a)>-1:a.nodeType===1&&l.find.matchesSelector(a,n))){h.push(a);break}}return this.pushStack(h.length>1?l.uniqueSort(h):h)},index:function(n){return n?typeof n=="string"?g.call(l(n),this[0]):g.call(this,n.jquery?n[0]:n):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(n,r){return this.pushStack(l.uniqueSort(l.merge(this.get(),l(n,r))))},addBack:function(n){return this.add(n==null?this.prevObject:this.prevObject.filter(n))}});function qe(n,r){for(;(n=n[r])&&n.nodeType!==1;);return n}l.each({parent:function(n){var r=n.parentNode;return r&&r.nodeType!==11?r:null},parents:function(n){return oe(n,"parentNode")},parentsUntil:function(n,r,a){return oe(n,"parentNode",a)},next:function(n){return qe(n,"nextSibling")},prev:function(n){return qe(n,"previousSibling")},nextAll:function(n){return oe(n,"nextSibling")},prevAll:function(n){return oe(n,"previousSibling")},nextUntil:function(n,r,a){return oe(n,"nextSibling",a)},prevUntil:function(n,r,a){return oe(n,"previousSibling",a)},siblings:function(n){return de((n.parentNode||{}).firstChild,n)},children:function(n){return de(n.firstChild)},contents:function(n){return n.contentDocument!=null&&s(n.contentDocument)?n.contentDocument:(G(n,"template")&&(n=n.content||n),l.merge([],n.childNodes))}},function(n,r){l.fn[n]=function(a,u){var f=l.map(this,r,a);return n.slice(-5)!=="Until"&&(u=a),u&&typeof u=="string"&&(f=l.filter(u,f)),this.length>1&&(it[n]||l.uniqueSort(f),Ge.test(n)&&f.reverse()),this.pushStack(f)}});var Be=/[^\x20\t\r\n\f]+/g;function ui(n){var r={};return l.each(n.match(Be)||[],function(a,u){r[u]=!0}),r}l.Callbacks=function(n){n=typeof n=="string"?ui(n):l.extend({},n);var r,a,u,f,h=[],p=[],y=-1,b=function(){for(f=f||n.once,u=r=!0;p.length;y=-1)for(a=p.shift();++y<h.length;)h[y].apply(a[0],a[1])===!1&&n.stopOnFalse&&(y=h.length,a=!1);n.memory||(a=!1),r=!1,f&&(a?h=[]:h="")},w={add:function(){return h&&(a&&!r&&(y=h.length-1,p.push(a)),function P(M){l.each(M,function(O,U){N(U)?(!n.unique||!w.has(U))&&h.push(U):U&&U.length&&T(U)!=="string"&&P(U)})}(arguments),a&&!r&&b()),this},remove:function(){return l.each(arguments,function(P,M){for(var O;(O=l.inArray(M,h,O))>-1;)h.splice(O,1),O<=y&&y--}),this},has:function(P){return P?l.inArray(P,h)>-1:h.length>0},empty:function(){return h&&(h=[]),this},disable:function(){return f=p=[],h=a="",this},disabled:function(){return!h},lock:function(){return f=p=[],!a&&!r&&(h=a=""),this},locked:function(){return!!f},fireWith:function(P,M){return f||(M=M||[],M=[P,M.slice?M.slice():M],p.push(M),r||b()),this},fire:function(){return w.fireWith(this,arguments),this},fired:function(){return!!u}};return w};function At(n){return n}function Pi(n){throw n}function ln(n,r,a,u){var f;try{n&&N(f=n.promise)?f.call(n).done(r).fail(a):n&&N(f=n.then)?f.call(n,r,a):r.apply(void 0,[n].slice(u))}catch(h){a.apply(void 0,[h])}}l.extend({Deferred:function(n){var r=[["notify","progress",l.Callbacks("memory"),l.Callbacks("memory"),2],["resolve","done",l.Callbacks("once memory"),l.Callbacks("once memory"),0,"resolved"],["reject","fail",l.Callbacks("once memory"),l.Callbacks("once memory"),1,"rejected"]],a="pending",u={state:function(){return a},always:function(){return f.done(arguments).fail(arguments),this},catch:function(h){return u.then(null,h)},pipe:function(){var h=arguments;return l.Deferred(function(p){l.each(r,function(y,b){var w=N(h[b[4]])&&h[b[4]];f[b[1]](function(){var P=w&&w.apply(this,arguments);P&&N(P.promise)?P.promise().progress(p.notify).done(p.resolve).fail(p.reject):p[b[0]+"With"](this,w?[P]:arguments)})}),h=null}).promise()},then:function(h,p,y){var b=0;function w(P,M,O,U){return function(){var ae=this,pe=arguments,ue=function(){var Le,Tt;if(!(P<b)){if(Le=O.apply(ae,pe),Le===M.promise())throw new TypeError("Thenable self-resolution");Tt=Le&&(typeof Le=="object"||typeof Le=="function")&&Le.then,N(Tt)?U?Tt.call(Le,w(b,M,At,U),w(b,M,Pi,U)):(b++,Tt.call(Le,w(b,M,At,U),w(b,M,Pi,U),w(b,M,At,M.notifyWith))):(O!==At&&(ae=void 0,pe=[Le]),(U||M.resolveWith)(ae,pe))}},He=U?ue:function(){try{ue()}catch(Le){l.Deferred.exceptionHook&&l.Deferred.exceptionHook(Le,He.error),P+1>=b&&(O!==Pi&&(ae=void 0,pe=[Le]),M.rejectWith(ae,pe))}};P?He():(l.Deferred.getErrorHook?He.error=l.Deferred.getErrorHook():l.Deferred.getStackHook&&(He.error=l.Deferred.getStackHook()),t.setTimeout(He))}}return l.Deferred(function(P){r[0][3].add(w(0,P,N(y)?y:At,P.notifyWith)),r[1][3].add(w(0,P,N(h)?h:At)),r[2][3].add(w(0,P,N(p)?p:Pi))}).promise()},promise:function(h){return h!=null?l.extend(h,u):u}},f={};return l.each(r,function(h,p){var y=p[2],b=p[5];u[p[1]]=y.add,b&&y.add(function(){a=b},r[3-h][2].disable,r[3-h][3].disable,r[0][2].lock,r[0][3].lock),y.add(p[3].fire),f[p[0]]=function(){return f[p[0]+"With"](this===f?void 0:this,arguments),this},f[p[0]+"With"]=y.fireWith}),u.promise(f),n&&n.call(f,f),f},when:function(n){var r=arguments.length,a=r,u=Array(a),f=o.call(arguments),h=l.Deferred(),p=function(y){return function(b){u[y]=this,f[y]=arguments.length>1?o.call(arguments):b,--r||h.resolveWith(u,f)}};if(r<=1&&(ln(n,h.done(p(a)).resolve,h.reject,!r),h.state()==="pending"||N(f[a]&&f[a].then)))return h.then();for(;a--;)ln(f[a],p(a),h.reject);return h.promise()}});var es=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;l.Deferred.exceptionHook=function(n,r){t.console&&t.console.warn&&n&&es.test(n.name)&&t.console.warn("jQuery.Deferred exception: "+n.message,n.stack,r)},l.readyException=function(n){t.setTimeout(function(){throw n})};var un=l.Deferred();l.fn.ready=function(n){return un.then(n).catch(function(r){l.readyException(r)}),this},l.extend({isReady:!1,readyWait:1,ready:function(n){(n===!0?--l.readyWait:l.isReady)||(l.isReady=!0,!(n!==!0&&--l.readyWait>0)&&un.resolveWith(_,[l]))}}),l.ready.then=un.then;function ci(){_.removeEventListener("DOMContentLoaded",ci),t.removeEventListener("load",ci),l.ready()}_.readyState==="complete"||_.readyState!=="loading"&&!_.documentElement.doScroll?t.setTimeout(l.ready):(_.addEventListener("DOMContentLoaded",ci),t.addEventListener("load",ci));var at=function(n,r,a,u,f,h,p){var y=0,b=n.length,w=a==null;if(T(a)==="object"){f=!0;for(y in a)at(n,r,y,a[y],!0,h,p)}else if(u!==void 0&&(f=!0,N(u)||(p=!0),w&&(p?(r.call(n,u),r=null):(w=r,r=function(P,M,O){return w.call(l(P),O)})),r))for(;y<b;y++)r(n[y],a,p?u:u.call(n[y],y,r(n[y],a)));return f?n:w?r.call(n):b?r(n[0],a):h},ts=/^-ms-/,is=/-([a-z])/g;function It(n,r){return r.toUpperCase()}function ze(n){return n.replace(ts,"ms-").replace(is,It)}var zt=function(n){return n.nodeType===1||n.nodeType===9||!+n.nodeType};function Kt(){this.expando=l.expando+Kt.uid++}Kt.uid=1,Kt.prototype={cache:function(n){var r=n[this.expando];return r||(r={},zt(n)&&(n.nodeType?n[this.expando]=r:Object.defineProperty(n,this.expando,{value:r,configurable:!0}))),r},set:function(n,r,a){var u,f=this.cache(n);if(typeof r=="string")f[ze(r)]=a;else for(u in r)f[ze(u)]=r[u];return f},get:function(n,r){return r===void 0?this.cache(n):n[this.expando]&&n[this.expando][ze(r)]},access:function(n,r,a){return r===void 0||r&&typeof r=="string"&&a===void 0?this.get(n,r):(this.set(n,r,a),a!==void 0?a:r)},remove:function(n,r){var a,u=n[this.expando];if(u!==void 0){if(r!==void 0)for(Array.isArray(r)?r=r.map(ze):(r=ze(r),r=r in u?[r]:r.match(Be)||[]),a=r.length;a--;)delete u[r[a]];(r===void 0||l.isEmptyObject(u))&&(n.nodeType?n[this.expando]=void 0:delete n[this.expando])}},hasData:function(n){var r=n[this.expando];return r!==void 0&&!l.isEmptyObject(r)}};var J=new Kt,Me=new Kt,Xn=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Yn=/[A-Z]/g;function Gn(n){return n==="true"?!0:n==="false"?!1:n==="null"?null:n===+n+""?+n:Xn.test(n)?JSON.parse(n):n}function No(n,r,a){var u;if(a===void 0&&n.nodeType===1)if(u="data-"+r.replace(Yn,"-$&").toLowerCase(),a=n.getAttribute(u),typeof a=="string"){try{a=Gn(a)}catch{}Me.set(n,r,a)}else a=void 0;return a}l.extend({hasData:function(n){return Me.hasData(n)||J.hasData(n)},data:function(n,r,a){return Me.access(n,r,a)},removeData:function(n,r){Me.remove(n,r)},_data:function(n,r,a){return J.access(n,r,a)},_removeData:function(n,r){J.remove(n,r)}}),l.fn.extend({data:function(n,r){var a,u,f,h=this[0],p=h&&h.attributes;if(n===void 0){if(this.length&&(f=Me.get(h),h.nodeType===1&&!J.get(h,"hasDataAttrs"))){for(a=p.length;a--;)p[a]&&(u=p[a].name,u.indexOf("data-")===0&&(u=ze(u.slice(5)),No(h,u,f[u])));J.set(h,"hasDataAttrs",!0)}return f}return typeof n=="object"?this.each(function(){Me.set(this,n)}):at(this,function(y){var b;if(h&&y===void 0)return b=Me.get(h,n),b!==void 0||(b=No(h,n),b!==void 0)?b:void 0;this.each(function(){Me.set(this,n,y)})},null,r,arguments.length>1,null,!0)},removeData:function(n){return this.each(function(){Me.remove(this,n)})}}),l.extend({queue:function(n,r,a){var u;if(n)return r=(r||"fx")+"queue",u=J.get(n,r),a&&(!u||Array.isArray(a)?u=J.access(n,r,l.makeArray(a)):u.push(a)),u||[]},dequeue:function(n,r){r=r||"fx";var a=l.queue(n,r),u=a.length,f=a.shift(),h=l._queueHooks(n,r),p=function(){l.dequeue(n,r)};f==="inprogress"&&(f=a.shift(),u--),f&&(r==="fx"&&a.unshift("inprogress"),delete h.stop,f.call(n,p,h)),!u&&h&&h.empty.fire()},_queueHooks:function(n,r){var a=r+"queueHooks";return J.get(n,a)||J.access(n,a,{empty:l.Callbacks("once memory").add(function(){J.remove(n,[r+"queue",a])})})}}),l.fn.extend({queue:function(n,r){var a=2;return typeof n!="string"&&(r=n,n="fx",a--),arguments.length<a?l.queue(this[0],n):r===void 0?this:this.each(function(){var u=l.queue(this,n,r);l._queueHooks(this,n),n==="fx"&&u[0]!=="inprogress"&&l.dequeue(this,n)})},dequeue:function(n){return this.each(function(){l.dequeue(this,n)})},clearQueue:function(n){return this.queue(n||"fx",[])},promise:function(n,r){var a,u=1,f=l.Deferred(),h=this,p=this.length,y=function(){--u||f.resolveWith(h,[h])};for(typeof n!="string"&&(r=n,n=void 0),n=n||"fx";p--;)a=J.get(h[p],n+"queueHooks"),a&&a.empty&&(u++,a.empty.add(y));return y(),f.promise(r)}});var Po=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,cn=new RegExp("^(?:([+-])=|)("+Po+")([a-z%]*)$","i"),Rt=["Top","Right","Bottom","Left"],fi=_.documentElement,Ii=function(n){return l.contains(n.ownerDocument,n)},gu={composed:!0};fi.getRootNode&&(Ii=function(n){return l.contains(n.ownerDocument,n)||n.getRootNode(gu)===n.ownerDocument});var Jn=function(n,r){return n=r||n,n.style.display==="none"||n.style.display===""&&Ii(n)&&l.css(n,"display")==="none"};function Io(n,r,a,u){var f,h,p=20,y=u?function(){return u.cur()}:function(){return l.css(n,r,"")},b=y(),w=a&&a[3]||(l.cssNumber[r]?"":"px"),P=n.nodeType&&(l.cssNumber[r]||w!=="px"&&+b)&&cn.exec(l.css(n,r));if(P&&P[3]!==w){for(b=b/2,w=w||P[3],P=+b||1;p--;)l.style(n,r,P+w),(1-h)*(1-(h=y()/b||.5))<=0&&(p=0),P=P/h;P=P*2,l.style(n,r,P+w),a=a||[]}return a&&(P=+P||+b||0,f=a[1]?P+(a[1]+1)*a[2]:+a[2],u&&(u.unit=w,u.start=P,u.end=f)),f}var Ro={};function mu(n){var r,a=n.ownerDocument,u=n.nodeName,f=Ro[u];return f||(r=a.body.appendChild(a.createElement(u)),f=l.css(r,"display"),r.parentNode.removeChild(r),f==="none"&&(f="block"),Ro[u]=f,f)}function Ri(n,r){for(var a,u,f=[],h=0,p=n.length;h<p;h++)u=n[h],u.style&&(a=u.style.display,r?(a==="none"&&(f[h]=J.get(u,"display")||null,f[h]||(u.style.display="")),u.style.display===""&&Jn(u)&&(f[h]=mu(u))):a!=="none"&&(f[h]="none",J.set(u,"display",a)));for(h=0;h<p;h++)f[h]!=null&&(n[h].style.display=f[h]);return n}l.fn.extend({show:function(){return Ri(this,!0)},hide:function(){return Ri(this)},toggle:function(n){return typeof n=="boolean"?n?this.show():this.hide():this.each(function(){Jn(this)?l(this).show():l(this).hide()})}});var fn=/^(?:checkbox|radio)$/i,$o=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Mo=/^$|^module$|\/(?:java|ecma)script/i;(function(){var n=_.createDocumentFragment(),r=n.appendChild(_.createElement("div")),a=_.createElement("input");a.setAttribute("type","radio"),a.setAttribute("checked","checked"),a.setAttribute("name","t"),r.appendChild(a),S.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,r.innerHTML="<textarea>x</textarea>",S.noCloneChecked=!!r.cloneNode(!0).lastChild.defaultValue,r.innerHTML="<option></option>",S.option=!!r.lastChild})();var lt={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};lt.tbody=lt.tfoot=lt.colgroup=lt.caption=lt.thead,lt.th=lt.td,S.option||(lt.optgroup=lt.option=[1,"<select multiple='multiple'>","</select>"]);function Je(n,r){var a;return typeof n.getElementsByTagName<"u"?a=n.getElementsByTagName(r||"*"):typeof n.querySelectorAll<"u"?a=n.querySelectorAll(r||"*"):a=[],r===void 0||r&&G(n,r)?l.merge([n],a):a}function ns(n,r){for(var a=0,u=n.length;a<u;a++)J.set(n[a],"globalEval",!r||J.get(r[a],"globalEval"))}var vu=/<|&#?\w+;/;function Ho(n,r,a,u,f){for(var h,p,y,b,w,P,M=r.createDocumentFragment(),O=[],U=0,ae=n.length;U<ae;U++)if(h=n[U],h||h===0)if(T(h)==="object")l.merge(O,h.nodeType?[h]:h);else if(!vu.test(h))O.push(r.createTextNode(h));else{for(p=p||M.appendChild(r.createElement("div")),y=($o.exec(h)||["",""])[1].toLowerCase(),b=lt[y]||lt._default,p.innerHTML=b[1]+l.htmlPrefilter(h)+b[2],P=b[0];P--;)p=p.lastChild;l.merge(O,p.childNodes),p=M.firstChild,p.textContent=""}for(M.textContent="",U=0;h=O[U++];){if(u&&l.inArray(h,u)>-1){f&&f.push(h);continue}if(w=Ii(h),p=Je(M.appendChild(h),"script"),w&&ns(p),a)for(P=0;h=p[P++];)Mo.test(h.type||"")&&a.push(h)}return M}var Fo=/^([^.]*)(?:\.(.+)|)/;function $i(){return!0}function Mi(){return!1}function rs(n,r,a,u,f,h){var p,y;if(typeof r=="object"){typeof a!="string"&&(u=u||a,a=void 0);for(y in r)rs(n,y,a,u,r[y],h);return n}if(u==null&&f==null?(f=a,u=a=void 0):f==null&&(typeof a=="string"?(f=u,u=void 0):(f=u,u=a,a=void 0)),f===!1)f=Mi;else if(!f)return n;return h===1&&(p=f,f=function(b){return l().off(b),p.apply(this,arguments)},f.guid=p.guid||(p.guid=l.guid++)),n.each(function(){l.event.add(this,r,f,u,a)})}l.event={global:{},add:function(n,r,a,u,f){var h,p,y,b,w,P,M,O,U,ae,pe,ue=J.get(n);if(zt(n))for(a.handler&&(h=a,a=h.handler,f=h.selector),f&&l.find.matchesSelector(fi,f),a.guid||(a.guid=l.guid++),(b=ue.events)||(b=ue.events=Object.create(null)),(p=ue.handle)||(p=ue.handle=function(He){return typeof l<"u"&&l.event.triggered!==He.type?l.event.dispatch.apply(n,arguments):void 0}),r=(r||"").match(Be)||[""],w=r.length;w--;)y=Fo.exec(r[w])||[],U=pe=y[1],ae=(y[2]||"").split(".").sort(),U&&(M=l.event.special[U]||{},U=(f?M.delegateType:M.bindType)||U,M=l.event.special[U]||{},P=l.extend({type:U,origType:pe,data:u,handler:a,guid:a.guid,selector:f,needsContext:f&&l.expr.match.needsContext.test(f),namespace:ae.join(".")},h),(O=b[U])||(O=b[U]=[],O.delegateCount=0,(!M.setup||M.setup.call(n,u,ae,p)===!1)&&n.addEventListener&&n.addEventListener(U,p)),M.add&&(M.add.call(n,P),P.handler.guid||(P.handler.guid=a.guid)),f?O.splice(O.delegateCount++,0,P):O.push(P),l.event.global[U]=!0)},remove:function(n,r,a,u,f){var h,p,y,b,w,P,M,O,U,ae,pe,ue=J.hasData(n)&&J.get(n);if(!(!ue||!(b=ue.events))){for(r=(r||"").match(Be)||[""],w=r.length;w--;){if(y=Fo.exec(r[w])||[],U=pe=y[1],ae=(y[2]||"").split(".").sort(),!U){for(U in b)l.event.remove(n,U+r[w],a,u,!0);continue}for(M=l.event.special[U]||{},U=(u?M.delegateType:M.bindType)||U,O=b[U]||[],y=y[2]&&new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"),p=h=O.length;h--;)P=O[h],(f||pe===P.origType)&&(!a||a.guid===P.guid)&&(!y||y.test(P.namespace))&&(!u||u===P.selector||u==="**"&&P.selector)&&(O.splice(h,1),P.selector&&O.delegateCount--,M.remove&&M.remove.call(n,P));p&&!O.length&&((!M.teardown||M.teardown.call(n,ae,ue.handle)===!1)&&l.removeEvent(n,U,ue.handle),delete b[U])}l.isEmptyObject(b)&&J.remove(n,"handle events")}},dispatch:function(n){var r,a,u,f,h,p,y=new Array(arguments.length),b=l.event.fix(n),w=(J.get(this,"events")||Object.create(null))[b.type]||[],P=l.event.special[b.type]||{};for(y[0]=b,r=1;r<arguments.length;r++)y[r]=arguments[r];if(b.delegateTarget=this,!(P.preDispatch&&P.preDispatch.call(this,b)===!1)){for(p=l.event.handlers.call(this,b,w),r=0;(f=p[r++])&&!b.isPropagationStopped();)for(b.currentTarget=f.elem,a=0;(h=f.handlers[a++])&&!b.isImmediatePropagationStopped();)(!b.rnamespace||h.namespace===!1||b.rnamespace.test(h.namespace))&&(b.handleObj=h,b.data=h.data,u=((l.event.special[h.origType]||{}).handle||h.handler).apply(f.elem,y),u!==void 0&&(b.result=u)===!1&&(b.preventDefault(),b.stopPropagation()));return P.postDispatch&&P.postDispatch.call(this,b),b.result}},handlers:function(n,r){var a,u,f,h,p,y=[],b=r.delegateCount,w=n.target;if(b&&w.nodeType&&!(n.type==="click"&&n.button>=1)){for(;w!==this;w=w.parentNode||this)if(w.nodeType===1&&!(n.type==="click"&&w.disabled===!0)){for(h=[],p={},a=0;a<b;a++)u=r[a],f=u.selector+" ",p[f]===void 0&&(p[f]=u.needsContext?l(f,this).index(w)>-1:l.find(f,this,null,[w]).length),p[f]&&h.push(u);h.length&&y.push({elem:w,handlers:h})}}return w=this,b<r.length&&y.push({elem:w,handlers:r.slice(b)}),y},addProp:function(n,r){Object.defineProperty(l.Event.prototype,n,{enumerable:!0,configurable:!0,get:N(r)?function(){if(this.originalEvent)return r(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[n]},set:function(a){Object.defineProperty(this,n,{enumerable:!0,configurable:!0,writable:!0,value:a})}})},fix:function(n){return n[l.expando]?n:new l.Event(n)},special:{load:{noBubble:!0},click:{setup:function(n){var r=this||n;return fn.test(r.type)&&r.click&&G(r,"input")&&Qn(r,"click",!0),!1},trigger:function(n){var r=this||n;return fn.test(r.type)&&r.click&&G(r,"input")&&Qn(r,"click"),!0},_default:function(n){var r=n.target;return fn.test(r.type)&&r.click&&G(r,"input")&&J.get(r,"click")||G(r,"a")}},beforeunload:{postDispatch:function(n){n.result!==void 0&&n.originalEvent&&(n.originalEvent.returnValue=n.result)}}}};function Qn(n,r,a){if(!a){J.get(n,r)===void 0&&l.event.add(n,r,$i);return}J.set(n,r,!1),l.event.add(n,r,{namespace:!1,handler:function(u){var f,h=J.get(this,r);if(u.isTrigger&1&&this[r]){if(h)(l.event.special[r]||{}).delegateType&&u.stopPropagation();else if(h=o.call(arguments),J.set(this,r,h),this[r](),f=J.get(this,r),J.set(this,r,!1),h!==f)return u.stopImmediatePropagation(),u.preventDefault(),f}else h&&(J.set(this,r,l.event.trigger(h[0],h.slice(1),this)),u.stopPropagation(),u.isImmediatePropagationStopped=$i)}})}l.removeEvent=function(n,r,a){n.removeEventListener&&n.removeEventListener(r,a)},l.Event=function(n,r){if(!(this instanceof l.Event))return new l.Event(n,r);n&&n.type?(this.originalEvent=n,this.type=n.type,this.isDefaultPrevented=n.defaultPrevented||n.defaultPrevented===void 0&&n.returnValue===!1?$i:Mi,this.target=n.target&&n.target.nodeType===3?n.target.parentNode:n.target,this.currentTarget=n.currentTarget,this.relatedTarget=n.relatedTarget):this.type=n,r&&l.extend(this,r),this.timeStamp=n&&n.timeStamp||Date.now(),this[l.expando]=!0},l.Event.prototype={constructor:l.Event,isDefaultPrevented:Mi,isPropagationStopped:Mi,isImmediatePropagationStopped:Mi,isSimulated:!1,preventDefault:function(){var n=this.originalEvent;this.isDefaultPrevented=$i,n&&!this.isSimulated&&n.preventDefault()},stopPropagation:function(){var n=this.originalEvent;this.isPropagationStopped=$i,n&&!this.isSimulated&&n.stopPropagation()},stopImmediatePropagation:function(){var n=this.originalEvent;this.isImmediatePropagationStopped=$i,n&&!this.isSimulated&&n.stopImmediatePropagation(),this.stopPropagation()}},l.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},l.event.addProp),l.each({focus:"focusin",blur:"focusout"},function(n,r){function a(u){if(_.documentMode){var f=J.get(this,"handle"),h=l.event.fix(u);h.type=u.type==="focusin"?"focus":"blur",h.isSimulated=!0,f(u),h.target===h.currentTarget&&f(h)}else l.event.simulate(r,u.target,l.event.fix(u))}l.event.special[n]={setup:function(){var u;if(Qn(this,n,!0),_.documentMode)u=J.get(this,r),u||this.addEventListener(r,a),J.set(this,r,(u||0)+1);else return!1},trigger:function(){return Qn(this,n),!0},teardown:function(){var u;if(_.documentMode)u=J.get(this,r)-1,u?J.set(this,r,u):(this.removeEventListener(r,a),J.remove(this,r));else return!1},_default:function(u){return J.get(u.target,n)},delegateType:r},l.event.special[r]={setup:function(){var u=this.ownerDocument||this.document||this,f=_.documentMode?this:u,h=J.get(f,r);h||(_.documentMode?this.addEventListener(r,a):u.addEventListener(n,a,!0)),J.set(f,r,(h||0)+1)},teardown:function(){var u=this.ownerDocument||this.document||this,f=_.documentMode?this:u,h=J.get(f,r)-1;h?J.set(f,r,h):(_.documentMode?this.removeEventListener(r,a):u.removeEventListener(n,a,!0),J.remove(f,r))}}}),l.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(n,r){l.event.special[n]={delegateType:r,bindType:r,handle:function(a){var u,f=this,h=a.relatedTarget,p=a.handleObj;return(!h||h!==f&&!l.contains(f,h))&&(a.type=p.origType,u=p.handler.apply(this,arguments),a.type=r),u}}}),l.fn.extend({on:function(n,r,a,u){return rs(this,n,r,a,u)},one:function(n,r,a,u){return rs(this,n,r,a,u,1)},off:function(n,r,a){var u,f;if(n&&n.preventDefault&&n.handleObj)return u=n.handleObj,l(n.delegateTarget).off(u.namespace?u.origType+"."+u.namespace:u.origType,u.selector,u.handler),this;if(typeof n=="object"){for(f in n)this.off(f,r,n[f]);return this}return(r===!1||typeof r=="function")&&(a=r,r=void 0),a===!1&&(a=Mi),this.each(function(){l.event.remove(this,n,a,r)})}});var bu=/<script|<style|<link/i,yu=/checked\s*(?:[^=]|=\s*.checked.)/i,_u=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function jo(n,r){return G(n,"table")&&G(r.nodeType!==11?r:r.firstChild,"tr")&&l(n).children("tbody")[0]||n}function Eu(n){return n.type=(n.getAttribute("type")!==null)+"/"+n.type,n}function Au(n){return(n.type||"").slice(0,5)==="true/"?n.type=n.type.slice(5):n.removeAttribute("type"),n}function Bo(n,r){var a,u,f,h,p,y,b;if(r.nodeType===1){if(J.hasData(n)&&(h=J.get(n),b=h.events,b)){J.remove(r,"handle events");for(f in b)for(a=0,u=b[f].length;a<u;a++)l.event.add(r,f,b[f][a])}Me.hasData(n)&&(p=Me.access(n),y=l.extend({},p),Me.set(r,y))}}function Tu(n,r){var a=r.nodeName.toLowerCase();a==="input"&&fn.test(n.type)?r.checked=n.checked:(a==="input"||a==="textarea")&&(r.defaultValue=n.defaultValue)}function Hi(n,r,a,u){r=c(r);var f,h,p,y,b,w,P=0,M=n.length,O=M-1,U=r[0],ae=N(U);if(ae||M>1&&typeof U=="string"&&!S.checkClone&&yu.test(U))return n.each(function(pe){var ue=n.eq(pe);ae&&(r[0]=U.call(this,pe,ue.html())),Hi(ue,r,a,u)});if(M&&(f=Ho(r,n[0].ownerDocument,!1,n,u),h=f.firstChild,f.childNodes.length===1&&(f=h),h||u)){for(p=l.map(Je(f,"script"),Eu),y=p.length;P<M;P++)b=f,P!==O&&(b=l.clone(b,!0,!0),y&&l.merge(p,Je(b,"script"))),a.call(n[P],b,P);if(y)for(w=p[p.length-1].ownerDocument,l.map(p,Au),P=0;P<y;P++)b=p[P],Mo.test(b.type||"")&&!J.access(b,"globalEval")&&l.contains(w,b)&&(b.src&&(b.type||"").toLowerCase()!=="module"?l._evalUrl&&!b.noModule&&l._evalUrl(b.src,{nonce:b.nonce||b.getAttribute("nonce")},w):F(b.textContent.replace(_u,""),b,w))}return n}function Uo(n,r,a){for(var u,f=r?l.filter(r,n):n,h=0;(u=f[h])!=null;h++)!a&&u.nodeType===1&&l.cleanData(Je(u)),u.parentNode&&(a&&Ii(u)&&ns(Je(u,"script")),u.parentNode.removeChild(u));return n}l.extend({htmlPrefilter:function(n){return n},clone:function(n,r,a){var u,f,h,p,y=n.cloneNode(!0),b=Ii(n);if(!S.noCloneChecked&&(n.nodeType===1||n.nodeType===11)&&!l.isXMLDoc(n))for(p=Je(y),h=Je(n),u=0,f=h.length;u<f;u++)Tu(h[u],p[u]);if(r)if(a)for(h=h||Je(n),p=p||Je(y),u=0,f=h.length;u<f;u++)Bo(h[u],p[u]);else Bo(n,y);return p=Je(y,"script"),p.length>0&&ns(p,!b&&Je(n,"script")),y},cleanData:function(n){for(var r,a,u,f=l.event.special,h=0;(a=n[h])!==void 0;h++)if(zt(a)){if(r=a[J.expando]){if(r.events)for(u in r.events)f[u]?l.event.remove(a,u):l.removeEvent(a,u,r.handle);a[J.expando]=void 0}a[Me.expando]&&(a[Me.expando]=void 0)}}}),l.fn.extend({detach:function(n){return Uo(this,n,!0)},remove:function(n){return Uo(this,n)},text:function(n){return at(this,function(r){return r===void 0?l.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=r)})},null,n,arguments.length)},append:function(){return Hi(this,arguments,function(n){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var r=jo(this,n);r.appendChild(n)}})},prepend:function(){return Hi(this,arguments,function(n){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var r=jo(this,n);r.insertBefore(n,r.firstChild)}})},before:function(){return Hi(this,arguments,function(n){this.parentNode&&this.parentNode.insertBefore(n,this)})},after:function(){return Hi(this,arguments,function(n){this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling)})},empty:function(){for(var n,r=0;(n=this[r])!=null;r++)n.nodeType===1&&(l.cleanData(Je(n,!1)),n.textContent="");return this},clone:function(n,r){return n=n??!1,r=r??n,this.map(function(){return l.clone(this,n,r)})},html:function(n){return at(this,function(r){var a=this[0]||{},u=0,f=this.length;if(r===void 0&&a.nodeType===1)return a.innerHTML;if(typeof r=="string"&&!bu.test(r)&&!lt[($o.exec(r)||["",""])[1].toLowerCase()]){r=l.htmlPrefilter(r);try{for(;u<f;u++)a=this[u]||{},a.nodeType===1&&(l.cleanData(Je(a,!1)),a.innerHTML=r);a=0}catch{}}a&&this.empty().append(r)},null,n,arguments.length)},replaceWith:function(){var n=[];return Hi(this,arguments,function(r){var a=this.parentNode;l.inArray(this,n)<0&&(l.cleanData(Je(this)),a&&a.replaceChild(r,this))},n)}}),l.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(n,r){l.fn[n]=function(a){for(var u,f=[],h=l(a),p=h.length-1,y=0;y<=p;y++)u=y===p?this:this.clone(!0),l(h[y])[r](u),d.apply(f,u.get());return this.pushStack(f)}});var ss=new RegExp("^("+Po+")(?!px)[a-z%]+$","i"),os=/^--/,Zn=function(n){var r=n.ownerDocument.defaultView;return(!r||!r.opener)&&(r=t),r.getComputedStyle(n)},Vo=function(n,r,a){var u,f,h={};for(f in r)h[f]=n.style[f],n.style[f]=r[f];u=a.call(n);for(f in r)n.style[f]=h[f];return u},wu=new RegExp(Rt.join("|"),"i");(function(){function n(){if(w){b.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",w.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",fi.appendChild(b).appendChild(w);var P=t.getComputedStyle(w);a=P.top!=="1%",y=r(P.marginLeft)===12,w.style.right="60%",h=r(P.right)===36,u=r(P.width)===36,w.style.position="absolute",f=r(w.offsetWidth/3)===12,fi.removeChild(b),w=null}}function r(P){return Math.round(parseFloat(P))}var a,u,f,h,p,y,b=_.createElement("div"),w=_.createElement("div");w.style&&(w.style.backgroundClip="content-box",w.cloneNode(!0).style.backgroundClip="",S.clearCloneStyle=w.style.backgroundClip==="content-box",l.extend(S,{boxSizingReliable:function(){return n(),u},pixelBoxStyles:function(){return n(),h},pixelPosition:function(){return n(),a},reliableMarginLeft:function(){return n(),y},scrollboxSize:function(){return n(),f},reliableTrDimensions:function(){var P,M,O,U;return p==null&&(P=_.createElement("table"),M=_.createElement("tr"),O=_.createElement("div"),P.style.cssText="position:absolute;left:-11111px;border-collapse:separate",M.style.cssText="box-sizing:content-box;border:1px solid",M.style.height="1px",O.style.height="9px",O.style.display="block",fi.appendChild(P).appendChild(M).appendChild(O),U=t.getComputedStyle(M),p=parseInt(U.height,10)+parseInt(U.borderTopWidth,10)+parseInt(U.borderBottomWidth,10)===M.offsetHeight,fi.removeChild(P)),p}}))})();function hn(n,r,a){var u,f,h,p,y=os.test(r),b=n.style;return a=a||Zn(n),a&&(p=a.getPropertyValue(r)||a[r],y&&p&&(p=p.replace(ye,"$1")||void 0),p===""&&!Ii(n)&&(p=l.style(n,r)),!S.pixelBoxStyles()&&ss.test(p)&&wu.test(r)&&(u=b.width,f=b.minWidth,h=b.maxWidth,b.minWidth=b.maxWidth=b.width=p,p=a.width,b.width=u,b.minWidth=f,b.maxWidth=h)),p!==void 0?p+"":p}function Wo(n,r){return{get:function(){if(n()){delete this.get;return}return(this.get=r).apply(this,arguments)}}}var qo=["Webkit","Moz","ms"],zo=_.createElement("div").style,Ko={};function xu(n){for(var r=n[0].toUpperCase()+n.slice(1),a=qo.length;a--;)if(n=qo[a]+r,n in zo)return n}function as(n){var r=l.cssProps[n]||Ko[n];return r||(n in zo?n:Ko[n]=xu(n)||n)}var Cu=/^(none|table(?!-c[ea]).+)/,Su={position:"absolute",visibility:"hidden",display:"block"},Xo={letterSpacing:"0",fontWeight:"400"};function Yo(n,r,a){var u=cn.exec(r);return u?Math.max(0,u[2]-(a||0))+(u[3]||"px"):r}function ls(n,r,a,u,f,h){var p=r==="width"?1:0,y=0,b=0,w=0;if(a===(u?"border":"content"))return 0;for(;p<4;p+=2)a==="margin"&&(w+=l.css(n,a+Rt[p],!0,f)),u?(a==="content"&&(b-=l.css(n,"padding"+Rt[p],!0,f)),a!=="margin"&&(b-=l.css(n,"border"+Rt[p]+"Width",!0,f))):(b+=l.css(n,"padding"+Rt[p],!0,f),a!=="padding"?b+=l.css(n,"border"+Rt[p]+"Width",!0,f):y+=l.css(n,"border"+Rt[p]+"Width",!0,f));return!u&&h>=0&&(b+=Math.max(0,Math.ceil(n["offset"+r[0].toUpperCase()+r.slice(1)]-h-b-y-.5))||0),b+w}function Go(n,r,a){var u=Zn(n),f=!S.boxSizingReliable()||a,h=f&&l.css(n,"boxSizing",!1,u)==="border-box",p=h,y=hn(n,r,u),b="offset"+r[0].toUpperCase()+r.slice(1);if(ss.test(y)){if(!a)return y;y="auto"}return(!S.boxSizingReliable()&&h||!S.reliableTrDimensions()&&G(n,"tr")||y==="auto"||!parseFloat(y)&&l.css(n,"display",!1,u)==="inline")&&n.getClientRects().length&&(h=l.css(n,"boxSizing",!1,u)==="border-box",p=b in n,p&&(y=n[b])),y=parseFloat(y)||0,y+ls(n,r,a||(h?"border":"content"),p,u,y)+"px"}l.extend({cssHooks:{opacity:{get:function(n,r){if(r){var a=hn(n,"opacity");return a===""?"1":a}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(n,r,a,u){if(!(!n||n.nodeType===3||n.nodeType===8||!n.style)){var f,h,p,y=ze(r),b=os.test(r),w=n.style;if(b||(r=as(y)),p=l.cssHooks[r]||l.cssHooks[y],a!==void 0){if(h=typeof a,h==="string"&&(f=cn.exec(a))&&f[1]&&(a=Io(n,r,f),h="number"),a==null||a!==a)return;h==="number"&&!b&&(a+=f&&f[3]||(l.cssNumber[y]?"":"px")),!S.clearCloneStyle&&a===""&&r.indexOf("background")===0&&(w[r]="inherit"),(!p||!("set"in p)||(a=p.set(n,a,u))!==void 0)&&(b?w.setProperty(r,a):w[r]=a)}else return p&&"get"in p&&(f=p.get(n,!1,u))!==void 0?f:w[r]}},css:function(n,r,a,u){var f,h,p,y=ze(r),b=os.test(r);return b||(r=as(y)),p=l.cssHooks[r]||l.cssHooks[y],p&&"get"in p&&(f=p.get(n,!0,a)),f===void 0&&(f=hn(n,r,u)),f==="normal"&&r in Xo&&(f=Xo[r]),a===""||a?(h=parseFloat(f),a===!0||isFinite(h)?h||0:f):f}}),l.each(["height","width"],function(n,r){l.cssHooks[r]={get:function(a,u,f){if(u)return Cu.test(l.css(a,"display"))&&(!a.getClientRects().length||!a.getBoundingClientRect().width)?Vo(a,Su,function(){return Go(a,r,f)}):Go(a,r,f)},set:function(a,u,f){var h,p=Zn(a),y=!S.scrollboxSize()&&p.position==="absolute",b=y||f,w=b&&l.css(a,"boxSizing",!1,p)==="border-box",P=f?ls(a,r,f,w,p):0;return w&&y&&(P-=Math.ceil(a["offset"+r[0].toUpperCase()+r.slice(1)]-parseFloat(p[r])-ls(a,r,"border",!1,p)-.5)),P&&(h=cn.exec(u))&&(h[3]||"px")!=="px"&&(a.style[r]=u,u=l.css(a,r)),Yo(a,u,P)}}}),l.cssHooks.marginLeft=Wo(S.reliableMarginLeft,function(n,r){if(r)return(parseFloat(hn(n,"marginLeft"))||n.getBoundingClientRect().left-Vo(n,{marginLeft:0},function(){return n.getBoundingClientRect().left}))+"px"}),l.each({margin:"",padding:"",border:"Width"},function(n,r){l.cssHooks[n+r]={expand:function(a){for(var u=0,f={},h=typeof a=="string"?a.split(" "):[a];u<4;u++)f[n+Rt[u]+r]=h[u]||h[u-2]||h[0];return f}},n!=="margin"&&(l.cssHooks[n+r].set=Yo)}),l.fn.extend({css:function(n,r){return at(this,function(a,u,f){var h,p,y={},b=0;if(Array.isArray(u)){for(h=Zn(a),p=u.length;b<p;b++)y[u[b]]=l.css(a,u[b],!1,h);return y}return f!==void 0?l.style(a,u,f):l.css(a,u)},n,r,arguments.length>1)}});function Qe(n,r,a,u,f){return new Qe.prototype.init(n,r,a,u,f)}l.Tween=Qe,Qe.prototype={constructor:Qe,init:function(n,r,a,u,f,h){this.elem=n,this.prop=a,this.easing=f||l.easing._default,this.options=r,this.start=this.now=this.cur(),this.end=u,this.unit=h||(l.cssNumber[a]?"":"px")},cur:function(){var n=Qe.propHooks[this.prop];return n&&n.get?n.get(this):Qe.propHooks._default.get(this)},run:function(n){var r,a=Qe.propHooks[this.prop];return this.options.duration?this.pos=r=l.easing[this.easing](n,this.options.duration*n,0,1,this.options.duration):this.pos=r=n,this.now=(this.end-this.start)*r+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),a&&a.set?a.set(this):Qe.propHooks._default.set(this),this}},Qe.prototype.init.prototype=Qe.prototype,Qe.propHooks={_default:{get:function(n){var r;return n.elem.nodeType!==1||n.elem[n.prop]!=null&&n.elem.style[n.prop]==null?n.elem[n.prop]:(r=l.css(n.elem,n.prop,""),!r||r==="auto"?0:r)},set:function(n){l.fx.step[n.prop]?l.fx.step[n.prop](n):n.elem.nodeType===1&&(l.cssHooks[n.prop]||n.elem.style[as(n.prop)]!=null)?l.style(n.elem,n.prop,n.now+n.unit):n.elem[n.prop]=n.now}}},Qe.propHooks.scrollTop=Qe.propHooks.scrollLeft={set:function(n){n.elem.nodeType&&n.elem.parentNode&&(n.elem[n.prop]=n.now)}},l.easing={linear:function(n){return n},swing:function(n){return .5-Math.cos(n*Math.PI)/2},_default:"swing"},l.fx=Qe.prototype.init,l.fx.step={};var Fi,er,ku=/^(?:toggle|show|hide)$/,Ou=/queueHooks$/;function us(){er&&(_.hidden===!1&&t.requestAnimationFrame?t.requestAnimationFrame(us):t.setTimeout(us,l.fx.interval),l.fx.tick())}function Jo(){return t.setTimeout(function(){Fi=void 0}),Fi=Date.now()}function tr(n,r){var a,u=0,f={height:n};for(r=r?1:0;u<4;u+=2-r)a=Rt[u],f["margin"+a]=f["padding"+a]=n;return r&&(f.opacity=f.width=n),f}function Qo(n,r,a){for(var u,f=(vt.tweeners[r]||[]).concat(vt.tweeners["*"]),h=0,p=f.length;h<p;h++)if(u=f[h].call(a,r,n))return u}function Du(n,r,a){var u,f,h,p,y,b,w,P,M="width"in r||"height"in r,O=this,U={},ae=n.style,pe=n.nodeType&&Jn(n),ue=J.get(n,"fxshow");a.queue||(p=l._queueHooks(n,"fx"),p.unqueued==null&&(p.unqueued=0,y=p.empty.fire,p.empty.fire=function(){p.unqueued||y()}),p.unqueued++,O.always(function(){O.always(function(){p.unqueued--,l.queue(n,"fx").length||p.empty.fire()})}));for(u in r)if(f=r[u],ku.test(f)){if(delete r[u],h=h||f==="toggle",f===(pe?"hide":"show"))if(f==="show"&&ue&&ue[u]!==void 0)pe=!0;else continue;U[u]=ue&&ue[u]||l.style(n,u)}if(b=!l.isEmptyObject(r),!(!b&&l.isEmptyObject(U))){M&&n.nodeType===1&&(a.overflow=[ae.overflow,ae.overflowX,ae.overflowY],w=ue&&ue.display,w==null&&(w=J.get(n,"display")),P=l.css(n,"display"),P==="none"&&(w?P=w:(Ri([n],!0),w=n.style.display||w,P=l.css(n,"display"),Ri([n]))),(P==="inline"||P==="inline-block"&&w!=null)&&l.css(n,"float")==="none"&&(b||(O.done(function(){ae.display=w}),w==null&&(P=ae.display,w=P==="none"?"":P)),ae.display="inline-block")),a.overflow&&(ae.overflow="hidden",O.always(function(){ae.overflow=a.overflow[0],ae.overflowX=a.overflow[1],ae.overflowY=a.overflow[2]})),b=!1;for(u in U)b||(ue?"hidden"in ue&&(pe=ue.hidden):ue=J.access(n,"fxshow",{display:w}),h&&(ue.hidden=!pe),pe&&Ri([n],!0),O.done(function(){pe||Ri([n]),J.remove(n,"fxshow");for(u in U)l.style(n,u,U[u])})),b=Qo(pe?ue[u]:0,u,O),u in ue||(ue[u]=b.start,pe&&(b.end=b.start,b.start=0))}}function Lu(n,r){var a,u,f,h,p;for(a in n)if(u=ze(a),f=r[u],h=n[a],Array.isArray(h)&&(f=h[1],h=n[a]=h[0]),a!==u&&(n[u]=h,delete n[a]),p=l.cssHooks[u],p&&"expand"in p){h=p.expand(h),delete n[u];for(a in h)a in n||(n[a]=h[a],r[a]=f)}else r[u]=f}function vt(n,r,a){var u,f,h=0,p=vt.prefilters.length,y=l.Deferred().always(function(){delete b.elem}),b=function(){if(f)return!1;for(var M=Fi||Jo(),O=Math.max(0,w.startTime+w.duration-M),U=O/w.duration||0,ae=1-U,pe=0,ue=w.tweens.length;pe<ue;pe++)w.tweens[pe].run(ae);return y.notifyWith(n,[w,ae,O]),ae<1&&ue?O:(ue||y.notifyWith(n,[w,1,0]),y.resolveWith(n,[w]),!1)},w=y.promise({elem:n,props:l.extend({},r),opts:l.extend(!0,{specialEasing:{},easing:l.easing._default},a),originalProperties:r,originalOptions:a,startTime:Fi||Jo(),duration:a.duration,tweens:[],createTween:function(M,O){var U=l.Tween(n,w.opts,M,O,w.opts.specialEasing[M]||w.opts.easing);return w.tweens.push(U),U},stop:function(M){var O=0,U=M?w.tweens.length:0;if(f)return this;for(f=!0;O<U;O++)w.tweens[O].run(1);return M?(y.notifyWith(n,[w,1,0]),y.resolveWith(n,[w,M])):y.rejectWith(n,[w,M]),this}}),P=w.props;for(Lu(P,w.opts.specialEasing);h<p;h++)if(u=vt.prefilters[h].call(w,n,P,w.opts),u)return N(u.stop)&&(l._queueHooks(w.elem,w.opts.queue).stop=u.stop.bind(u)),u;return l.map(P,Qo,w),N(w.opts.start)&&w.opts.start.call(n,w),w.progress(w.opts.progress).done(w.opts.done,w.opts.complete).fail(w.opts.fail).always(w.opts.always),l.fx.timer(l.extend(b,{elem:n,anim:w,queue:w.opts.queue})),w}l.Animation=l.extend(vt,{tweeners:{"*":[function(n,r){var a=this.createTween(n,r);return Io(a.elem,n,cn.exec(r),a),a}]},tweener:function(n,r){N(n)?(r=n,n=["*"]):n=n.match(Be);for(var a,u=0,f=n.length;u<f;u++)a=n[u],vt.tweeners[a]=vt.tweeners[a]||[],vt.tweeners[a].unshift(r)},prefilters:[Du],prefilter:function(n,r){r?vt.prefilters.unshift(n):vt.prefilters.push(n)}}),l.speed=function(n,r,a){var u=n&&typeof n=="object"?l.extend({},n):{complete:a||!a&&r||N(n)&&n,duration:n,easing:a&&r||r&&!N(r)&&r};return l.fx.off?u.duration=0:typeof u.duration!="number"&&(u.duration in l.fx.speeds?u.duration=l.fx.speeds[u.duration]:u.duration=l.fx.speeds._default),(u.queue==null||u.queue===!0)&&(u.queue="fx"),u.old=u.complete,u.complete=function(){N(u.old)&&u.old.call(this),u.queue&&l.dequeue(this,u.queue)},u},l.fn.extend({fadeTo:function(n,r,a,u){return this.filter(Jn).css("opacity",0).show().end().animate({opacity:r},n,a,u)},animate:function(n,r,a,u){var f=l.isEmptyObject(n),h=l.speed(r,a,u),p=function(){var y=vt(this,l.extend({},n),h);(f||J.get(this,"finish"))&&y.stop(!0)};return p.finish=p,f||h.queue===!1?this.each(p):this.queue(h.queue,p)},stop:function(n,r,a){var u=function(f){var h=f.stop;delete f.stop,h(a)};return typeof n!="string"&&(a=r,r=n,n=void 0),r&&this.queue(n||"fx",[]),this.each(function(){var f=!0,h=n!=null&&n+"queueHooks",p=l.timers,y=J.get(this);if(h)y[h]&&y[h].stop&&u(y[h]);else for(h in y)y[h]&&y[h].stop&&Ou.test(h)&&u(y[h]);for(h=p.length;h--;)p[h].elem===this&&(n==null||p[h].queue===n)&&(p[h].anim.stop(a),f=!1,p.splice(h,1));(f||!a)&&l.dequeue(this,n)})},finish:function(n){return n!==!1&&(n=n||"fx"),this.each(function(){var r,a=J.get(this),u=a[n+"queue"],f=a[n+"queueHooks"],h=l.timers,p=u?u.length:0;for(a.finish=!0,l.queue(this,n,[]),f&&f.stop&&f.stop.call(this,!0),r=h.length;r--;)h[r].elem===this&&h[r].queue===n&&(h[r].anim.stop(!0),h.splice(r,1));for(r=0;r<p;r++)u[r]&&u[r].finish&&u[r].finish.call(this);delete a.finish})}}),l.each(["toggle","show","hide"],function(n,r){var a=l.fn[r];l.fn[r]=function(u,f,h){return u==null||typeof u=="boolean"?a.apply(this,arguments):this.animate(tr(r,!0),u,f,h)}}),l.each({slideDown:tr("show"),slideUp:tr("hide"),slideToggle:tr("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(n,r){l.fn[n]=function(a,u,f){return this.animate(r,a,u,f)}}),l.timers=[],l.fx.tick=function(){var n,r=0,a=l.timers;for(Fi=Date.now();r<a.length;r++)n=a[r],!n()&&a[r]===n&&a.splice(r--,1);a.length||l.fx.stop(),Fi=void 0},l.fx.timer=function(n){l.timers.push(n),l.fx.start()},l.fx.interval=13,l.fx.start=function(){er||(er=!0,us())},l.fx.stop=function(){er=null},l.fx.speeds={slow:600,fast:200,_default:400},l.fn.delay=function(n,r){return n=l.fx&&l.fx.speeds[n]||n,r=r||"fx",this.queue(r,function(a,u){var f=t.setTimeout(a,n);u.stop=function(){t.clearTimeout(f)}})},function(){var n=_.createElement("input"),r=_.createElement("select"),a=r.appendChild(_.createElement("option"));n.type="checkbox",S.checkOn=n.value!=="",S.optSelected=a.selected,n=_.createElement("input"),n.value="t",n.type="radio",S.radioValue=n.value==="t"}();var Zo,dn=l.expr.attrHandle;l.fn.extend({attr:function(n,r){return at(this,l.attr,n,r,arguments.length>1)},removeAttr:function(n){return this.each(function(){l.removeAttr(this,n)})}}),l.extend({attr:function(n,r,a){var u,f,h=n.nodeType;if(!(h===3||h===8||h===2)){if(typeof n.getAttribute>"u")return l.prop(n,r,a);if((h!==1||!l.isXMLDoc(n))&&(f=l.attrHooks[r.toLowerCase()]||(l.expr.match.bool.test(r)?Zo:void 0)),a!==void 0){if(a===null){l.removeAttr(n,r);return}return f&&"set"in f&&(u=f.set(n,a,r))!==void 0?u:(n.setAttribute(r,a+""),a)}return f&&"get"in f&&(u=f.get(n,r))!==null?u:(u=l.find.attr(n,r),u??void 0)}},attrHooks:{type:{set:function(n,r){if(!S.radioValue&&r==="radio"&&G(n,"input")){var a=n.value;return n.setAttribute("type",r),a&&(n.value=a),r}}}},removeAttr:function(n,r){var a,u=0,f=r&&r.match(Be);if(f&&n.nodeType===1)for(;a=f[u++];)n.removeAttribute(a)}}),Zo={set:function(n,r,a){return r===!1?l.removeAttr(n,a):n.setAttribute(a,a),a}},l.each(l.expr.match.bool.source.match(/\w+/g),function(n,r){var a=dn[r]||l.find.attr;dn[r]=function(u,f,h){var p,y,b=f.toLowerCase();return h||(y=dn[b],dn[b]=p,p=a(u,f,h)!=null?b:null,dn[b]=y),p}});var Nu=/^(?:input|select|textarea|button)$/i,Pu=/^(?:a|area)$/i;l.fn.extend({prop:function(n,r){return at(this,l.prop,n,r,arguments.length>1)},removeProp:function(n){return this.each(function(){delete this[l.propFix[n]||n]})}}),l.extend({prop:function(n,r,a){var u,f,h=n.nodeType;if(!(h===3||h===8||h===2))return(h!==1||!l.isXMLDoc(n))&&(r=l.propFix[r]||r,f=l.propHooks[r]),a!==void 0?f&&"set"in f&&(u=f.set(n,a,r))!==void 0?u:n[r]=a:f&&"get"in f&&(u=f.get(n,r))!==null?u:n[r]},propHooks:{tabIndex:{get:function(n){var r=l.find.attr(n,"tabindex");return r?parseInt(r,10):Nu.test(n.nodeName)||Pu.test(n.nodeName)&&n.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),S.optSelected||(l.propHooks.selected={get:function(n){var r=n.parentNode;return r&&r.parentNode&&r.parentNode.selectedIndex,null},set:function(n){var r=n.parentNode;r&&(r.selectedIndex,r.parentNode&&r.parentNode.selectedIndex)}}),l.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){l.propFix[this.toLowerCase()]=this});function hi(n){var r=n.match(Be)||[];return r.join(" ")}function di(n){return n.getAttribute&&n.getAttribute("class")||""}function cs(n){return Array.isArray(n)?n:typeof n=="string"?n.match(Be)||[]:[]}l.fn.extend({addClass:function(n){var r,a,u,f,h,p;return N(n)?this.each(function(y){l(this).addClass(n.call(this,y,di(this)))}):(r=cs(n),r.length?this.each(function(){if(u=di(this),a=this.nodeType===1&&" "+hi(u)+" ",a){for(h=0;h<r.length;h++)f=r[h],a.indexOf(" "+f+" ")<0&&(a+=f+" ");p=hi(a),u!==p&&this.setAttribute("class",p)}}):this)},removeClass:function(n){var r,a,u,f,h,p;return N(n)?this.each(function(y){l(this).removeClass(n.call(this,y,di(this)))}):arguments.length?(r=cs(n),r.length?this.each(function(){if(u=di(this),a=this.nodeType===1&&" "+hi(u)+" ",a){for(h=0;h<r.length;h++)for(f=r[h];a.indexOf(" "+f+" ")>-1;)a=a.replace(" "+f+" "," ");p=hi(a),u!==p&&this.setAttribute("class",p)}}):this):this.attr("class","")},toggleClass:function(n,r){var a,u,f,h,p=typeof n,y=p==="string"||Array.isArray(n);return N(n)?this.each(function(b){l(this).toggleClass(n.call(this,b,di(this),r),r)}):typeof r=="boolean"&&y?r?this.addClass(n):this.removeClass(n):(a=cs(n),this.each(function(){if(y)for(h=l(this),f=0;f<a.length;f++)u=a[f],h.hasClass(u)?h.removeClass(u):h.addClass(u);else(n===void 0||p==="boolean")&&(u=di(this),u&&J.set(this,"__className__",u),this.setAttribute&&this.setAttribute("class",u||n===!1?"":J.get(this,"__className__")||""))}))},hasClass:function(n){var r,a,u=0;for(r=" "+n+" ";a=this[u++];)if(a.nodeType===1&&(" "+hi(di(a))+" ").indexOf(r)>-1)return!0;return!1}});var Iu=/\r/g;l.fn.extend({val:function(n){var r,a,u,f=this[0];return arguments.length?(u=N(n),this.each(function(h){var p;this.nodeType===1&&(u?p=n.call(this,h,l(this).val()):p=n,p==null?p="":typeof p=="number"?p+="":Array.isArray(p)&&(p=l.map(p,function(y){return y==null?"":y+""})),r=l.valHooks[this.type]||l.valHooks[this.nodeName.toLowerCase()],(!r||!("set"in r)||r.set(this,p,"value")===void 0)&&(this.value=p))})):f?(r=l.valHooks[f.type]||l.valHooks[f.nodeName.toLowerCase()],r&&"get"in r&&(a=r.get(f,"value"))!==void 0?a:(a=f.value,typeof a=="string"?a.replace(Iu,""):a??"")):void 0}}),l.extend({valHooks:{option:{get:function(n){var r=l.find.attr(n,"value");return r??hi(l.text(n))}},select:{get:function(n){var r,a,u,f=n.options,h=n.selectedIndex,p=n.type==="select-one",y=p?null:[],b=p?h+1:f.length;for(h<0?u=b:u=p?h:0;u<b;u++)if(a=f[u],(a.selected||u===h)&&!a.disabled&&(!a.parentNode.disabled||!G(a.parentNode,"optgroup"))){if(r=l(a).val(),p)return r;y.push(r)}return y},set:function(n,r){for(var a,u,f=n.options,h=l.makeArray(r),p=f.length;p--;)u=f[p],(u.selected=l.inArray(l.valHooks.option.get(u),h)>-1)&&(a=!0);return a||(n.selectedIndex=-1),h}}}}),l.each(["radio","checkbox"],function(){l.valHooks[this]={set:function(n,r){if(Array.isArray(r))return n.checked=l.inArray(l(n).val(),r)>-1}},S.checkOn||(l.valHooks[this].get=function(n){return n.getAttribute("value")===null?"on":n.value})});var pn=t.location,ea={guid:Date.now()},fs=/\?/;l.parseXML=function(n){var r,a;if(!n||typeof n!="string")return null;try{r=new t.DOMParser().parseFromString(n,"text/xml")}catch{}return a=r&&r.getElementsByTagName("parsererror")[0],(!r||a)&&l.error("Invalid XML: "+(a?l.map(a.childNodes,function(u){return u.textContent}).join(`
-`):n)),r};var ta=/^(?:focusinfocus|focusoutblur)$/,ia=function(n){n.stopPropagation()};l.extend(l.event,{trigger:function(n,r,a,u){var f,h,p,y,b,w,P,M,O=[a||_],U=x.call(n,"type")?n.type:n,ae=x.call(n,"namespace")?n.namespace.split("."):[];if(h=M=p=a=a||_,!(a.nodeType===3||a.nodeType===8)&&!ta.test(U+l.event.triggered)&&(U.indexOf(".")>-1&&(ae=U.split("."),U=ae.shift(),ae.sort()),b=U.indexOf(":")<0&&"on"+U,n=n[l.expando]?n:new l.Event(U,typeof n=="object"&&n),n.isTrigger=u?2:3,n.namespace=ae.join("."),n.rnamespace=n.namespace?new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=void 0,n.target||(n.target=a),r=r==null?[n]:l.makeArray(r,[n]),P=l.event.special[U]||{},!(!u&&P.trigger&&P.trigger.apply(a,r)===!1))){if(!u&&!P.noBubble&&!A(a)){for(y=P.delegateType||U,ta.test(y+U)||(h=h.parentNode);h;h=h.parentNode)O.push(h),p=h;p===(a.ownerDocument||_)&&O.push(p.defaultView||p.parentWindow||t)}for(f=0;(h=O[f++])&&!n.isPropagationStopped();)M=h,n.type=f>1?y:P.bindType||U,w=(J.get(h,"events")||Object.create(null))[n.type]&&J.get(h,"handle"),w&&w.apply(h,r),w=b&&h[b],w&&w.apply&&zt(h)&&(n.result=w.apply(h,r),n.result===!1&&n.preventDefault());return n.type=U,!u&&!n.isDefaultPrevented()&&(!P._default||P._default.apply(O.pop(),r)===!1)&&zt(a)&&b&&N(a[U])&&!A(a)&&(p=a[b],p&&(a[b]=null),l.event.triggered=U,n.isPropagationStopped()&&M.addEventListener(U,ia),a[U](),n.isPropagationStopped()&&M.removeEventListener(U,ia),l.event.triggered=void 0,p&&(a[b]=p)),n.result}},simulate:function(n,r,a){var u=l.extend(new l.Event,a,{type:n,isSimulated:!0});l.event.trigger(u,null,r)}}),l.fn.extend({trigger:function(n,r){return this.each(function(){l.event.trigger(n,r,this)})},triggerHandler:function(n,r){var a=this[0];if(a)return l.event.trigger(n,r,a,!0)}});var Ru=/\[\]$/,na=/\r?\n/g,$u=/^(?:submit|button|image|reset|file)$/i,Mu=/^(?:input|select|textarea|keygen)/i;function hs(n,r,a,u){var f;if(Array.isArray(r))l.each(r,function(h,p){a||Ru.test(n)?u(n,p):hs(n+"["+(typeof p=="object"&&p!=null?h:"")+"]",p,a,u)});else if(!a&&T(r)==="object")for(f in r)hs(n+"["+f+"]",r[f],a,u);else u(n,r)}l.param=function(n,r){var a,u=[],f=function(h,p){var y=N(p)?p():p;u[u.length]=encodeURIComponent(h)+"="+encodeURIComponent(y??"")};if(n==null)return"";if(Array.isArray(n)||n.jquery&&!l.isPlainObject(n))l.each(n,function(){f(this.name,this.value)});else for(a in n)hs(a,n[a],r,f);return u.join("&")},l.fn.extend({serialize:function(){return l.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var n=l.prop(this,"elements");return n?l.makeArray(n):this}).filter(function(){var n=this.type;return this.name&&!l(this).is(":disabled")&&Mu.test(this.nodeName)&&!$u.test(n)&&(this.checked||!fn.test(n))}).map(function(n,r){var a=l(this).val();return a==null?null:Array.isArray(a)?l.map(a,function(u){return{name:r.name,value:u.replace(na,`\r
-`)}}):{name:r.name,value:a.replace(na,`\r
-`)}}).get()}});var Hu=/%20/g,Fu=/#.*$/,ju=/([?&])_=[^&]*/,Bu=/^(.*?):[ \t]*([^\r\n]*)$/mg,Uu=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Vu=/^(?:GET|HEAD)$/,Wu=/^\/\//,ra={},ds={},sa="*/".concat("*"),ps=_.createElement("a");ps.href=pn.href;function oa(n){return function(r,a){typeof r!="string"&&(a=r,r="*");var u,f=0,h=r.toLowerCase().match(Be)||[];if(N(a))for(;u=h[f++];)u[0]==="+"?(u=u.slice(1)||"*",(n[u]=n[u]||[]).unshift(a)):(n[u]=n[u]||[]).push(a)}}function aa(n,r,a,u){var f={},h=n===ds;function p(y){var b;return f[y]=!0,l.each(n[y]||[],function(w,P){var M=P(r,a,u);if(typeof M=="string"&&!h&&!f[M])return r.dataTypes.unshift(M),p(M),!1;if(h)return!(b=M)}),b}return p(r.dataTypes[0])||!f["*"]&&p("*")}function gs(n,r){var a,u,f=l.ajaxSettings.flatOptions||{};for(a in r)r[a]!==void 0&&((f[a]?n:u||(u={}))[a]=r[a]);return u&&l.extend(!0,n,u),n}function qu(n,r,a){for(var u,f,h,p,y=n.contents,b=n.dataTypes;b[0]==="*";)b.shift(),u===void 0&&(u=n.mimeType||r.getResponseHeader("Content-Type"));if(u){for(f in y)if(y[f]&&y[f].test(u)){b.unshift(f);break}}if(b[0]in a)h=b[0];else{for(f in a){if(!b[0]||n.converters[f+" "+b[0]]){h=f;break}p||(p=f)}h=h||p}if(h)return h!==b[0]&&b.unshift(h),a[h]}function zu(n,r,a,u){var f,h,p,y,b,w={},P=n.dataTypes.slice();if(P[1])for(p in n.converters)w[p.toLowerCase()]=n.converters[p];for(h=P.shift();h;)if(n.responseFields[h]&&(a[n.responseFields[h]]=r),!b&&u&&n.dataFilter&&(r=n.dataFilter(r,n.dataType)),b=h,h=P.shift(),h){if(h==="*")h=b;else if(b!=="*"&&b!==h){if(p=w[b+" "+h]||w["* "+h],!p){for(f in w)if(y=f.split(" "),y[1]===h&&(p=w[b+" "+y[0]]||w["* "+y[0]],p)){p===!0?p=w[f]:w[f]!==!0&&(h=y[0],P.unshift(y[1]));break}}if(p!==!0)if(p&&n.throws)r=p(r);else try{r=p(r)}catch(M){return{state:"parsererror",error:p?M:"No conversion from "+b+" to "+h}}}}return{state:"success",data:r}}l.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:pn.href,type:"GET",isLocal:Uu.test(pn.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sa,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":l.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(n,r){return r?gs(gs(n,l.ajaxSettings),r):gs(l.ajaxSettings,n)},ajaxPrefilter:oa(ra),ajaxTransport:oa(ds),ajax:function(n,r){typeof n=="object"&&(r=n,n=void 0),r=r||{};var a,u,f,h,p,y,b,w,P,M,O=l.ajaxSetup({},r),U=O.context||O,ae=O.context&&(U.nodeType||U.jquery)?l(U):l.event,pe=l.Deferred(),ue=l.Callbacks("once memory"),He=O.statusCode||{},Le={},Tt={},wt="canceled",he={readyState:0,getResponseHeader:function(ge){var xe;if(b){if(!h)for(h={};xe=Bu.exec(f);)h[xe[1].toLowerCase()+" "]=(h[xe[1].toLowerCase()+" "]||[]).concat(xe[2]);xe=h[ge.toLowerCase()+" "]}return xe==null?null:xe.join(", ")},getAllResponseHeaders:function(){return b?f:null},setRequestHeader:function(ge,xe){return b==null&&(ge=Tt[ge.toLowerCase()]=Tt[ge.toLowerCase()]||ge,Le[ge]=xe),this},overrideMimeType:function(ge){return b==null&&(O.mimeType=ge),this},statusCode:function(ge){var xe;if(ge)if(b)he.always(ge[he.status]);else for(xe in ge)He[xe]=[He[xe],ge[xe]];return this},abort:function(ge){var xe=ge||wt;return a&&a.abort(xe),pi(0,xe),this}};if(pe.promise(he),O.url=((n||O.url||pn.href)+"").replace(Wu,pn.protocol+"//"),O.type=r.method||r.type||O.method||O.type,O.dataTypes=(O.dataType||"*").toLowerCase().match(Be)||[""],O.crossDomain==null){y=_.createElement("a");try{y.href=O.url,y.href=y.href,O.crossDomain=ps.protocol+"//"+ps.host!=y.protocol+"//"+y.host}catch{O.crossDomain=!0}}if(O.data&&O.processData&&typeof O.data!="string"&&(O.data=l.param(O.data,O.traditional)),aa(ra,O,r,he),b)return he;w=l.event&&O.global,w&&l.active++===0&&l.event.trigger("ajaxStart"),O.type=O.type.toUpperCase(),O.hasContent=!Vu.test(O.type),u=O.url.replace(Fu,""),O.hasContent?O.data&&O.processData&&(O.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(O.data=O.data.replace(Hu,"+")):(M=O.url.slice(u.length),O.data&&(O.processData||typeof O.data=="string")&&(u+=(fs.test(u)?"&":"?")+O.data,delete O.data),O.cache===!1&&(u=u.replace(ju,"$1"),M=(fs.test(u)?"&":"?")+"_="+ea.guid+++M),O.url=u+M),O.ifModified&&(l.lastModified[u]&&he.setRequestHeader("If-Modified-Since",l.lastModified[u]),l.etag[u]&&he.setRequestHeader("If-None-Match",l.etag[u])),(O.data&&O.hasContent&&O.contentType!==!1||r.contentType)&&he.setRequestHeader("Content-Type",O.contentType),he.setRequestHeader("Accept",O.dataTypes[0]&&O.accepts[O.dataTypes[0]]?O.accepts[O.dataTypes[0]]+(O.dataTypes[0]!=="*"?", "+sa+"; q=0.01":""):O.accepts["*"]);for(P in O.headers)he.setRequestHeader(P,O.headers[P]);if(O.beforeSend&&(O.beforeSend.call(U,he,O)===!1||b))return he.abort();if(wt="abort",ue.add(O.complete),he.done(O.success),he.fail(O.error),a=aa(ds,O,r,he),!a)pi(-1,"No Transport");else{if(he.readyState=1,w&&ae.trigger("ajaxSend",[he,O]),b)return he;O.async&&O.timeout>0&&(p=t.setTimeout(function(){he.abort("timeout")},O.timeout));try{b=!1,a.send(Le,pi)}catch(ge){if(b)throw ge;pi(-1,ge)}}function pi(ge,xe,mn,vs){var xt,vn,Ct,Xt,Yt,ut=xe;b||(b=!0,p&&t.clearTimeout(p),a=void 0,f=vs||"",he.readyState=ge>0?4:0,xt=ge>=200&&ge<300||ge===304,mn&&(Xt=qu(O,he,mn)),!xt&&l.inArray("script",O.dataTypes)>-1&&l.inArray("json",O.dataTypes)<0&&(O.converters["text script"]=function(){}),Xt=zu(O,Xt,he,xt),xt?(O.ifModified&&(Yt=he.getResponseHeader("Last-Modified"),Yt&&(l.lastModified[u]=Yt),Yt=he.getResponseHeader("etag"),Yt&&(l.etag[u]=Yt)),ge===204||O.type==="HEAD"?ut="nocontent":ge===304?ut="notmodified":(ut=Xt.state,vn=Xt.data,Ct=Xt.error,xt=!Ct)):(Ct=ut,(ge||!ut)&&(ut="error",ge<0&&(ge=0))),he.status=ge,he.statusText=(xe||ut)+"",xt?pe.resolveWith(U,[vn,ut,he]):pe.rejectWith(U,[he,ut,Ct]),he.statusCode(He),He=void 0,w&&ae.trigger(xt?"ajaxSuccess":"ajaxError",[he,O,xt?vn:Ct]),ue.fireWith(U,[he,ut]),w&&(ae.trigger("ajaxComplete",[he,O]),--l.active||l.event.trigger("ajaxStop")))}return he},getJSON:function(n,r,a){return l.get(n,r,a,"json")},getScript:function(n,r){return l.get(n,void 0,r,"script")}}),l.each(["get","post"],function(n,r){l[r]=function(a,u,f,h){return N(u)&&(h=h||f,f=u,u=void 0),l.ajax(l.extend({url:a,type:r,dataType:h,data:u,success:f},l.isPlainObject(a)&&a))}}),l.ajaxPrefilter(function(n){var r;for(r in n.headers)r.toLowerCase()==="content-type"&&(n.contentType=n.headers[r]||"")}),l._evalUrl=function(n,r,a){return l.ajax({url:n,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(u){l.globalEval(u,r,a)}})},l.fn.extend({wrapAll:function(n){var r;return this[0]&&(N(n)&&(n=n.call(this[0])),r=l(n,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&r.insertBefore(this[0]),r.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(n){return N(n)?this.each(function(r){l(this).wrapInner(n.call(this,r))}):this.each(function(){var r=l(this),a=r.contents();a.length?a.wrapAll(n):r.append(n)})},wrap:function(n){var r=N(n);return this.each(function(a){l(this).wrapAll(r?n.call(this,a):n)})},unwrap:function(n){return this.parent(n).not("body").each(function(){l(this).replaceWith(this.childNodes)}),this}}),l.expr.pseudos.hidden=function(n){return!l.expr.pseudos.visible(n)},l.expr.pseudos.visible=function(n){return!!(n.offsetWidth||n.offsetHeight||n.getClientRects().length)},l.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch{}};var Ku={0:200,1223:204},gn=l.ajaxSettings.xhr();S.cors=!!gn&&"withCredentials"in gn,S.ajax=gn=!!gn,l.ajaxTransport(function(n){var r,a;if(S.cors||gn&&!n.crossDomain)return{send:function(u,f){var h,p=n.xhr();if(p.open(n.type,n.url,n.async,n.username,n.password),n.xhrFields)for(h in n.xhrFields)p[h]=n.xhrFields[h];n.mimeType&&p.overrideMimeType&&p.overrideMimeType(n.mimeType),!n.crossDomain&&!u["X-Requested-With"]&&(u["X-Requested-With"]="XMLHttpRequest");for(h in u)p.setRequestHeader(h,u[h]);r=function(y){return function(){r&&(r=a=p.onload=p.onerror=p.onabort=p.ontimeout=p.onreadystatechange=null,y==="abort"?p.abort():y==="error"?typeof p.status!="number"?f(0,"error"):f(p.status,p.statusText):f(Ku[p.status]||p.status,p.statusText,(p.responseType||"text")!=="text"||typeof p.responseText!="string"?{binary:p.response}:{text:p.responseText},p.getAllResponseHeaders()))}},p.onload=r(),a=p.onerror=p.ontimeout=r("error"),p.onabort!==void 0?p.onabort=a:p.onreadystatechange=function(){p.readyState===4&&t.setTimeout(function(){r&&a()})},r=r("abort");try{p.send(n.hasContent&&n.data||null)}catch(y){if(r)throw y}},abort:function(){r&&r()}}}),l.ajaxPrefilter(function(n){n.crossDomain&&(n.contents.script=!1)}),l.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(n){return l.globalEval(n),n}}}),l.ajaxPrefilter("script",function(n){n.cache===void 0&&(n.cache=!1),n.crossDomain&&(n.type="GET")}),l.ajaxTransport("script",function(n){if(n.crossDomain||n.scriptAttrs){var r,a;return{send:function(u,f){r=l("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",a=function(h){r.remove(),a=null,h&&f(h.type==="error"?404:200,h.type)}),_.head.appendChild(r[0])},abort:function(){a&&a()}}}});var la=[],ms=/(=)\?(?=&|$)|\?\?/;l.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var n=la.pop()||l.expando+"_"+ea.guid++;return this[n]=!0,n}}),l.ajaxPrefilter("json jsonp",function(n,r,a){var u,f,h,p=n.jsonp!==!1&&(ms.test(n.url)?"url":typeof n.data=="string"&&(n.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&ms.test(n.data)&&"data");if(p||n.dataTypes[0]==="jsonp")return u=n.jsonpCallback=N(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,p?n[p]=n[p].replace(ms,"$1"+u):n.jsonp!==!1&&(n.url+=(fs.test(n.url)?"&":"?")+n.jsonp+"="+u),n.converters["script json"]=function(){return h||l.error(u+" was not called"),h[0]},n.dataTypes[0]="json",f=t[u],t[u]=function(){h=arguments},a.always(function(){f===void 0?l(t).removeProp(u):t[u]=f,n[u]&&(n.jsonpCallback=r.jsonpCallback,la.push(u)),h&&N(f)&&f(h[0]),h=f=void 0}),"script"}),S.createHTMLDocument=function(){var n=_.implementation.createHTMLDocument("").body;return n.innerHTML="<form></form><form></form>",n.childNodes.length===2}(),l.parseHTML=function(n,r,a){if(typeof n!="string")return[];typeof r=="boolean"&&(a=r,r=!1);var u,f,h;return r||(S.createHTMLDocument?(r=_.implementation.createHTMLDocument(""),u=r.createElement("base"),u.href=_.location.href,r.head.appendChild(u)):r=_),f=we.exec(n),h=!a&&[],f?[r.createElement(f[1])]:(f=Ho([n],r,h),h&&h.length&&l(h).remove(),l.merge([],f.childNodes))},l.fn.load=function(n,r,a){var u,f,h,p=this,y=n.indexOf(" ");return y>-1&&(u=hi(n.slice(y)),n=n.slice(0,y)),N(r)?(a=r,r=void 0):r&&typeof r=="object"&&(f="POST"),p.length>0&&l.ajax({url:n,type:f||"GET",dataType:"html",data:r}).done(function(b){h=arguments,p.html(u?l("<div>").append(l.parseHTML(b)).find(u):b)}).always(a&&function(b,w){p.each(function(){a.apply(this,h||[b.responseText,w,b])})}),this},l.expr.pseudos.animated=function(n){return l.grep(l.timers,function(r){return n===r.elem}).length},l.offset={setOffset:function(n,r,a){var u,f,h,p,y,b,w,P=l.css(n,"position"),M=l(n),O={};P==="static"&&(n.style.position="relative"),y=M.offset(),h=l.css(n,"top"),b=l.css(n,"left"),w=(P==="absolute"||P==="fixed")&&(h+b).indexOf("auto")>-1,w?(u=M.position(),p=u.top,f=u.left):(p=parseFloat(h)||0,f=parseFloat(b)||0),N(r)&&(r=r.call(n,a,l.extend({},y))),r.top!=null&&(O.top=r.top-y.top+p),r.left!=null&&(O.left=r.left-y.left+f),"using"in r?r.using.call(n,O):M.css(O)}},l.fn.extend({offset:function(n){if(arguments.length)return n===void 0?this:this.each(function(f){l.offset.setOffset(this,n,f)});var r,a,u=this[0];if(u)return u.getClientRects().length?(r=u.getBoundingClientRect(),a=u.ownerDocument.defaultView,{top:r.top+a.pageYOffset,left:r.left+a.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var n,r,a,u=this[0],f={top:0,left:0};if(l.css(u,"position")==="fixed")r=u.getBoundingClientRect();else{for(r=this.offset(),a=u.ownerDocument,n=u.offsetParent||a.documentElement;n&&(n===a.body||n===a.documentElement)&&l.css(n,"position")==="static";)n=n.parentNode;n&&n!==u&&n.nodeType===1&&(f=l(n).offset(),f.top+=l.css(n,"borderTopWidth",!0),f.left+=l.css(n,"borderLeftWidth",!0))}return{top:r.top-f.top-l.css(u,"marginTop",!0),left:r.left-f.left-l.css(u,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var n=this.offsetParent;n&&l.css(n,"position")==="static";)n=n.offsetParent;return n||fi})}}),l.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(n,r){var a=r==="pageYOffset";l.fn[n]=function(u){return at(this,function(f,h,p){var y;if(A(f)?y=f:f.nodeType===9&&(y=f.defaultView),p===void 0)return y?y[r]:f[h];y?y.scrollTo(a?y.pageXOffset:p,a?p:y.pageYOffset):f[h]=p},n,u,arguments.length)}}),l.each(["top","left"],function(n,r){l.cssHooks[r]=Wo(S.pixelPosition,function(a,u){if(u)return u=hn(a,r),ss.test(u)?l(a).position()[r]+"px":u})}),l.each({Height:"height",Width:"width"},function(n,r){l.each({padding:"inner"+n,content:r,"":"outer"+n},function(a,u){l.fn[u]=function(f,h){var p=arguments.length&&(a||typeof f!="boolean"),y=a||(f===!0||h===!0?"margin":"border");return at(this,function(b,w,P){var M;return A(b)?u.indexOf("outer")===0?b["inner"+n]:b.document.documentElement["client"+n]:b.nodeType===9?(M=b.documentElement,Math.max(b.body["scroll"+n],M["scroll"+n],b.body["offset"+n],M["offset"+n],M["client"+n])):P===void 0?l.css(b,w,y):l.style(b,w,P,y)},r,p?f:void 0,p)}})}),l.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(n,r){l.fn[r]=function(a){return this.on(r,a)}}),l.fn.extend({bind:function(n,r,a){return this.on(n,null,r,a)},unbind:function(n,r){return this.off(n,null,r)},delegate:function(n,r,a,u){return this.on(r,n,a,u)},undelegate:function(n,r,a){return arguments.length===1?this.off(n,"**"):this.off(r,n||"**",a)},hover:function(n,r){return this.on("mouseenter",n).on("mouseleave",r||n)}}),l.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(n,r){l.fn[r]=function(a,u){return arguments.length>0?this.on(r,null,a,u):this.trigger(r)}});var Xu=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;l.proxy=function(n,r){var a,u,f;if(typeof r=="string"&&(a=n[r],r=n,n=a),!!N(n))return u=o.call(arguments,2),f=function(){return n.apply(r||this,u.concat(o.call(arguments)))},f.guid=n.guid=n.guid||l.guid++,f},l.holdReady=function(n){n?l.readyWait++:l.ready(!0)},l.isArray=Array.isArray,l.parseJSON=JSON.parse,l.nodeName=G,l.isFunction=N,l.isWindow=A,l.camelCase=ze,l.type=T,l.now=Date.now,l.isNumeric=function(n){var r=l.type(n);return(r==="number"||r==="string")&&!isNaN(n-parseFloat(n))},l.trim=function(n){return n==null?"":(n+"").replace(Xu,"$1")},typeof define=="function"&&define.amd&&define("jquery",[],function(){return l});var Yu=t.jQuery,Gu=t.$;return l.noConflict=function(n){return t.$===l&&(t.$=Gu),n&&t.jQuery===l&&(t.jQuery=Yu),l},typeof e>"u"&&(t.jQuery=t.$=l),l})});var Pl=xs((u_,Mr)=>{var Gp=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};var Z=function(t){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,s={},o={manual:t.Prism&&t.Prism.manual,disableWorkerMessageHandler:t.Prism&&t.Prism.disableWorkerMessageHandler,util:{encode:function A(_){return _ instanceof c?new c(_.type,A(_.content),_.alias):Array.isArray(_)?_.map(A):_.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(A){return Object.prototype.toString.call(A).slice(8,-1)},objId:function(A){return A.__id||Object.defineProperty(A,"__id",{value:++i}),A.__id},clone:function A(_,R){R=R||{};var F,T;switch(o.util.type(_)){case"Object":if(T=o.util.objId(_),R[T])return R[T];F={},R[T]=F;for(var H in _)_.hasOwnProperty(H)&&(F[H]=A(_[H],R));return F;case"Array":return T=o.util.objId(_),R[T]?R[T]:(F=[],R[T]=F,_.forEach(function(K,l){F[l]=A(K,R)}),F);default:return _}},getLanguage:function(A){for(;A;){var _=e.exec(A.className);if(_)return _[1].toLowerCase();A=A.parentElement}return"none"},setLanguage:function(A,_){A.className=A.className.replace(RegExp(e,"gi"),""),A.classList.add("language-"+_)},currentScript:function(){if(typeof document>"u")return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(F){var A=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(F.stack)||[])[1];if(A){var _=document.getElementsByTagName("script");for(var R in _)if(_[R].src==A)return _[R]}return null}},isActive:function(A,_,R){for(var F="no-"+_;A;){var T=A.classList;if(T.contains(_))return!0;if(T.contains(F))return!1;A=A.parentElement}return!!R}},languages:{plain:s,plaintext:s,text:s,txt:s,extend:function(A,_){var R=o.util.clone(o.languages[A]);for(var F in _)R[F]=_[F];return R},insertBefore:function(A,_,R,F){F=F||o.languages;var T=F[A],H={};for(var K in T)if(T.hasOwnProperty(K)){if(K==_)for(var l in R)R.hasOwnProperty(l)&&(H[l]=R[l]);R.hasOwnProperty(K)||(H[K]=T[K])}var ee=F[A];return F[A]=H,o.languages.DFS(o.languages,function(G,re){re===ee&&G!=A&&(this[G]=H)}),H},DFS:function A(_,R,F,T){T=T||{};var H=o.util.objId;for(var K in _)if(_.hasOwnProperty(K)){R.call(_,K,_[K],F||K);var l=_[K],ee=o.util.type(l);ee==="Object"&&!T[H(l)]?(T[H(l)]=!0,A(l,R,null,T)):ee==="Array"&&!T[H(l)]&&(T[H(l)]=!0,A(l,R,K,T))}}},plugins:{},highlightAll:function(A,_){o.highlightAllUnder(document,A,_)},highlightAllUnder:function(A,_,R){var F={callback:R,container:A,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",F),F.elements=Array.prototype.slice.apply(F.container.querySelectorAll(F.selector)),o.hooks.run("before-all-elements-highlight",F);for(var T=0,H;H=F.elements[T++];)o.highlightElement(H,_===!0,F.callback)},highlightElement:function(A,_,R){var F=o.util.getLanguage(A),T=o.languages[F];o.util.setLanguage(A,F);var H=A.parentElement;H&&H.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(H,F);var K=A.textContent,l={element:A,language:F,grammar:T,code:K};function ee(re){l.highlightedCode=re,o.hooks.run("before-insert",l),l.element.innerHTML=l.highlightedCode,o.hooks.run("after-highlight",l),o.hooks.run("complete",l),R&&R.call(l.element)}if(o.hooks.run("before-sanity-check",l),H=l.element.parentElement,H&&H.nodeName.toLowerCase()==="pre"&&!H.hasAttribute("tabindex")&&H.setAttribute("tabindex","0"),!l.code){o.hooks.run("complete",l),R&&R.call(l.element);return}if(o.hooks.run("before-highlight",l),!l.grammar){ee(o.util.encode(l.code));return}if(_&&t.Worker){var G=new Worker(o.filename);G.onmessage=function(re){ee(re.data)},G.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else ee(o.highlight(l.code,l.grammar,l.language))},highlight:function(A,_,R){var F={code:A,grammar:_,language:R};if(o.hooks.run("before-tokenize",F),!F.grammar)throw new Error('The language "'+F.language+'" has no grammar.');return F.tokens=o.tokenize(F.code,F.grammar),o.hooks.run("after-tokenize",F),c.stringify(o.util.encode(F.tokens),F.language)},tokenize:function(A,_){var R=_.rest;if(R){for(var F in R)_[F]=R[F];delete _.rest}var T=new v;return C(T,T.head,A),g(A,T,_,T.head,0),I(T)},hooks:{all:{},add:function(A,_){var R=o.hooks.all;R[A]=R[A]||[],R[A].push(_)},run:function(A,_){var R=o.hooks.all[A];if(!(!R||!R.length))for(var F=0,T;T=R[F++];)T(_)}},Token:c};t.Prism=o;function c(A,_,R,F){this.type=A,this.content=_,this.alias=R,this.length=(F||"").length|0}c.stringify=function A(_,R){if(typeof _=="string")return _;if(Array.isArray(_)){var F="";return _.forEach(function(ee){F+=A(ee,R)}),F}var T={type:_.type,content:A(_.content,R),tag:"span",classes:["token",_.type],attributes:{},language:R},H=_.alias;H&&(Array.isArray(H)?Array.prototype.push.apply(T.classes,H):T.classes.push(H)),o.hooks.run("wrap",T);var K="";for(var l in T.attributes)K+=" "+l+'="'+(T.attributes[l]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+K+">"+T.content+"</"+T.tag+">"};function d(A,_,R,F){A.lastIndex=_;var T=A.exec(R);if(T&&F&&T[1]){var H=T[1].length;T.index+=H,T[0]=T[0].slice(H)}return T}function g(A,_,R,F,T,H){for(var K in R)if(!(!R.hasOwnProperty(K)||!R[K])){var l=R[K];l=Array.isArray(l)?l:[l];for(var ee=0;ee<l.length;++ee){if(H&&H.cause==K+","+ee)return;var G=l[ee],re=G.inside,me=!!G.lookbehind,_e=!!G.greedy,se=G.alias;if(_e&&!G.pattern.global){var ye=G.pattern.toString().match(/[imsuy]*$/)[0];G.pattern=RegExp(G.pattern.source,ye+"g")}for(var je=G.pattern||G,Y=F.next,W=T;Y!==_.tail&&!(H&&W>=H.reach);W+=Y.value.length,Y=Y.next){var X=Y.value;if(_.length>A.length)return;if(!(X instanceof c)){var oe=1,de;if(_e){if(de=d(je,W,A,me),!de||de.index>=A.length)break;var Se=de.index,Pe=de.index+de[0].length,we=W;for(we+=Y.value.length;Se>=we;)Y=Y.next,we+=Y.value.length;if(we-=Y.value.length,W=we,Y.value instanceof c)continue;for(var Oe=Y;Oe!==_.tail&&(we<Pe||typeof Oe.value=="string");Oe=Oe.next)oe++,we+=Oe.value.length;oe--,X=A.slice(W,we),de.index-=W}else if(de=d(je,0,X,me),!de)continue;var Se=de.index,Ie=de[0],Ae=X.slice(0,Se),Ge=X.slice(Se+Ie.length),it=W+X.length;H&&it>H.reach&&(H.reach=it);var qe=Y.prev;Ae&&(qe=C(_,qe,Ae),W+=Ae.length),x(_,qe,oe);var Be=new c(K,re?o.tokenize(Ie,re):Ie,se,Ie);if(Y=C(_,qe,Be),Ge&&C(_,Y,Ge),oe>1){var ui={cause:K+","+ee,reach:it};g(A,_,R,Y.prev,W,ui),H&&ui.reach>H.reach&&(H.reach=ui.reach)}}}}}}function v(){var A={value:null,prev:null,next:null},_={value:null,prev:A,next:null};A.next=_,this.head=A,this.tail=_,this.length=0}function C(A,_,R){var F=_.next,T={value:R,prev:_,next:F};return _.next=T,F.prev=T,A.length++,T}function x(A,_,R){for(var F=_.next,T=0;T<R&&F!==A.tail;T++)F=F.next;_.next=F,F.prev=_,A.length-=T}function I(A){for(var _=[],R=A.head.next;R!==A.tail;)_.push(R.value),R=R.next;return _}if(!t.document)return t.addEventListener&&(o.disableWorkerMessageHandler||t.addEventListener("message",function(A){var _=JSON.parse(A.data),R=_.language,F=_.code,T=_.immediateClose;t.postMessage(o.highlight(F,o.languages[R],R)),T&&t.close()},!1)),o;var D=o.util.currentScript();D&&(o.filename=D.src,D.hasAttribute("data-manual")&&(o.manual=!0));function S(){o.manual||o.highlightAll()}if(!o.manual){var N=document.readyState;N==="loading"||N==="interactive"&&D&&D.defer?document.addEventListener("DOMContentLoaded",S):window.requestAnimationFrame?window.requestAnimationFrame(S):window.setTimeout(S,16)}return o}(Gp);typeof Mr<"u"&&Mr.exports&&(Mr.exports=Z);typeof global<"u"&&(global.Prism=Z);Z.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]};Z.languages.markup.tag.inside["attr-value"].inside.entity=Z.languages.markup.entity;Z.languages.markup.doctype.inside["internal-subset"].inside=Z.languages.markup;Z.hooks.add("wrap",function(t){t.type==="entity"&&(t.attributes.title=t.content.replace(/&/,"&"))});Object.defineProperty(Z.languages.markup.tag,"addInlined",{value:function(e,i){var s={};s["language-"+i]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Z.languages[i]},s.cdata=/^<!\[CDATA\[|\]\]>$/i;var o={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:s}};o["language-"+i]={pattern:/[\s\S]+/,inside:Z.languages[i]};var c={};c[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:o},Z.languages.insertBefore("markup","cdata",c)}});Object.defineProperty(Z.languages.markup.tag,"addAttribute",{value:function(t,e){Z.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+t+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Z.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}});Z.languages.html=Z.languages.markup;Z.languages.mathml=Z.languages.markup;Z.languages.svg=Z.languages.markup;Z.languages.xml=Z.languages.extend("markup",{});Z.languages.ssml=Z.languages.xml;Z.languages.atom=Z.languages.xml;Z.languages.rss=Z.languages.xml;(function(t){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;t.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},t.languages.css.atrule.inside.rest=t.languages.css;var i=t.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))})(Z);Z.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};Z.languages.javascript=Z.languages.extend("clike",{"class-name":[Z.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/});Z.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;Z.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Z.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Z.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Z.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Z.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Z.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/});Z.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Z.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}});Z.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}});Z.languages.markup&&(Z.languages.markup.tag.addInlined("script","javascript"),Z.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript"));Z.languages.js=Z.languages.javascript;(function(){if(typeof Z>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var t="Loading\u2026",e=function(D,S){return"\u2716 Error "+D+" while fetching file: "+S},i="\u2716 Error: File does not exist or is empty",s={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",c="loading",d="loaded",g="failed",v="pre[data-src]:not(["+o+'="'+d+'"]):not(['+o+'="'+c+'"])';function C(D,S,N){var A=new XMLHttpRequest;A.open("GET",D,!0),A.onreadystatechange=function(){A.readyState==4&&(A.status<400&&A.responseText?S(A.responseText):A.status>=400?N(e(A.status,A.statusText)):N(i))},A.send(null)}function x(D){var S=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(D||"");if(S){var N=Number(S[1]),A=S[2],_=S[3];return A?_?[N,Number(_)]:[N,void 0]:[N,N]}}Z.hooks.add("before-highlightall",function(D){D.selector+=", "+v}),Z.hooks.add("before-sanity-check",function(D){var S=D.element;if(S.matches(v)){D.code="",S.setAttribute(o,c);var N=S.appendChild(document.createElement("CODE"));N.textContent=t;var A=S.getAttribute("data-src"),_=D.language;if(_==="none"){var R=(/\.(\w+)$/.exec(A)||[,"none"])[1];_=s[R]||R}Z.util.setLanguage(N,_),Z.util.setLanguage(S,_);var F=Z.plugins.autoloader;F&&F.loadLanguages(_),C(A,function(T){S.setAttribute(o,d);var H=x(S.getAttribute("data-range"));if(H){var K=T.split(/\r\n?|\n/g),l=H[0],ee=H[1]==null?K.length:H[1];l<0&&(l+=K.length),l=Math.max(0,Math.min(l-1,K.length)),ee<0&&(ee+=K.length),ee=Math.max(0,Math.min(ee,K.length)),T=K.slice(l,ee).join(`
-`),S.hasAttribute("data-start")||S.setAttribute("data-start",String(l+1))}N.textContent=T,Z.highlightElement(N)},function(T){S.setAttribute(o,g),N.textContent=T})}}),Z.plugins.fileHighlight={highlight:function(S){for(var N=(S||document).querySelectorAll(v),A=0,_;_=N[A++];)Z.highlightElement(_)}};var I=!1;Z.fileHighlight=function(){I||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),I=!0),Z.plugins.fileHighlight.highlight.apply(this,arguments)}})()});var du=xs((hu,Qr)=>{(function(t,e){"use strict";(function(){for(var D=0,S=["ms","moz","webkit","o"],N=0;N<S.length&&!t.requestAnimationFrame;++N)t.requestAnimationFrame=t[S[N]+"RequestAnimationFrame"],t.cancelAnimationFrame=t[S[N]+"CancelAnimationFrame"]||t[S[N]+"CancelRequestAnimationFrame"];t.requestAnimationFrame||(t.requestAnimationFrame=function(A,_){var R=new Date().getTime(),F=Math.max(0,16-(R-D)),T=t.setTimeout(function(){A(R+F)},F);return D=R+F,T}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(A){clearTimeout(A)})})();var i,s,o,c,d,g=function(D,S,N){D.addEventListener?D.addEventListener(S,N,!1):D.attachEvent?D.attachEvent("on"+S,N):D["on"+S]=N},v={autoRun:!0,barThickness:3,barColors:{0:"rgba(26, 188, 156, .9)",".25":"rgba(52, 152, 219, .9)",".50":"rgba(241, 196, 15, .9)",".75":"rgba(230, 126, 34, .9)","1.0":"rgba(211, 84, 0, .9)"},shadowBlur:10,shadowColor:"rgba(0, 0, 0, .6)",className:null},C=function(){i.width=t.innerWidth,i.height=v.barThickness*5;var D=i.getContext("2d");D.shadowBlur=v.shadowBlur,D.shadowColor=v.shadowColor;var S=D.createLinearGradient(0,0,i.width,0);for(var N in v.barColors)S.addColorStop(N,v.barColors[N]);D.lineWidth=v.barThickness,D.beginPath(),D.moveTo(0,v.barThickness/2),D.lineTo(Math.ceil(c*i.width),v.barThickness/2),D.strokeStyle=S,D.stroke()},x=function(){i=e.createElement("canvas");var D=i.style;D.position="fixed",D.top=D.left=D.right=D.margin=D.padding=0,D.zIndex=100001,D.display="none",v.className&&i.classList.add(v.className),e.body.appendChild(i),g(t,"resize",C)},I={config:function(D){for(var S in D)v.hasOwnProperty(S)&&(v[S]=D[S])},show:function(){d||(d=!0,o!==null&&t.cancelAnimationFrame(o),i||x(),i.style.opacity=1,i.style.display="block",I.progress(0),v.autoRun&&function D(){s=t.requestAnimationFrame(D),I.progress("+"+.05*Math.pow(1-Math.sqrt(c),2))}())},progress:function(D){return typeof D>"u"||(typeof D=="string"&&(D=(D.indexOf("+")>=0||D.indexOf("-")>=0?c:0)+parseFloat(D)),c=D>1?1:D,C()),c},hide:function(){d&&(d=!1,s!=null&&(t.cancelAnimationFrame(s),s=null),function D(){if(I.progress("+.1")>=1&&(i.style.opacity-=.05,i.style.opacity<=.05)){i.style.display="none",o=null;return}o=t.requestAnimationFrame(D)}())}};typeof Qr=="object"&&typeof Qr.exports=="object"?Qr.exports=I:typeof define=="function"&&define.amd?define(function(){return I}):this.topbar=I}).call(hu,window,document)});var Lo=yn(ar());var vr={};uc(vr,{afterMain:()=>ba,afterRead:()=>ga,afterWrite:()=>Ea,applyStyles:()=>Vi,arrow:()=>ur,auto:()=>_n,basePlacements:()=>Ht,beforeMain:()=>ma,beforeRead:()=>da,beforeWrite:()=>ya,bottom:()=>De,clippingParents:()=>Cs,computeStyles:()=>qi,createPopper:()=>On,createPopperBase:()=>Da,createPopperLite:()=>La,detectOverflow:()=>Ye,end:()=>Jt,eventListeners:()=>zi,flip:()=>dr,hide:()=>pr,left:()=>Ce,main:()=>va,modifierPhases:()=>ks,offset:()=>gr,placements:()=>An,popper:()=>mi,popperGenerator:()=>wi,popperOffsets:()=>Yi,preventOverflow:()=>mr,read:()=>pa,reference:()=>Ss,right:()=>ke,start:()=>kt,top:()=>Te,variationPlacements:()=>lr,viewport:()=>En,write:()=>_a});var Te="top",De="bottom",ke="right",Ce="left",_n="auto",Ht=[Te,De,ke,Ce],kt="start",Jt="end",Cs="clippingParents",En="viewport",mi="popper",Ss="reference",lr=Ht.reduce(function(t,e){return t.concat([e+"-"+kt,e+"-"+Jt])},[]),An=[].concat(Ht,[_n]).reduce(function(t,e){return t.concat([e,e+"-"+kt,e+"-"+Jt])},[]),da="beforeRead",pa="read",ga="afterRead",ma="beforeMain",va="main",ba="afterMain",ya="beforeWrite",_a="write",Ea="afterWrite",ks=[da,pa,ga,ma,va,ba,ya,_a,Ea];function Re(t){return t?(t.nodeName||"").toLowerCase():null}function Ee(t){if(t==null)return window;if(t.toString()!=="[object Window]"){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function ft(t){var e=Ee(t).Element;return t instanceof e||t instanceof Element}function Ne(t){var e=Ee(t).HTMLElement;return t instanceof e||t instanceof HTMLElement}function Ui(t){if(typeof ShadowRoot>"u")return!1;var e=Ee(t).ShadowRoot;return t instanceof e||t instanceof ShadowRoot}function fc(t){var e=t.state;Object.keys(e.elements).forEach(function(i){var s=e.styles[i]||{},o=e.attributes[i]||{},c=e.elements[i];!Ne(c)||!Re(c)||(Object.assign(c.style,s),Object.keys(o).forEach(function(d){var g=o[d];g===!1?c.removeAttribute(d):c.setAttribute(d,g===!0?"":g)}))})}function hc(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach(function(s){var o=e.elements[s],c=e.attributes[s]||{},d=Object.keys(e.styles.hasOwnProperty(s)?e.styles[s]:i[s]),g=d.reduce(function(v,C){return v[C]="",v},{});!Ne(o)||!Re(o)||(Object.assign(o.style,g),Object.keys(c).forEach(function(v){o.removeAttribute(v)}))})}}var Vi={name:"applyStyles",enabled:!0,phase:"write",fn:fc,effect:hc,requires:["computeStyles"]};function $e(t){return t.split("-")[0]}var yt=Math.max,vi=Math.min,Ft=Math.round;function Wi(){var t=navigator.userAgentData;return t!=null&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Tn(){return!/^((?!chrome|android).)*safari/i.test(Wi())}function ht(t,e,i){e===void 0&&(e=!1),i===void 0&&(i=!1);var s=t.getBoundingClientRect(),o=1,c=1;e&&Ne(t)&&(o=t.offsetWidth>0&&Ft(s.width)/t.offsetWidth||1,c=t.offsetHeight>0&&Ft(s.height)/t.offsetHeight||1);var d=ft(t)?Ee(t):window,g=d.visualViewport,v=!Tn()&&i,C=(s.left+(v&&g?g.offsetLeft:0))/o,x=(s.top+(v&&g?g.offsetTop:0))/c,I=s.width/o,D=s.height/c;return{width:I,height:D,top:x,right:C+I,bottom:x+D,left:C,x:C,y:x}}function bi(t){var e=ht(t),i=t.offsetWidth,s=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-s)<=1&&(s=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:s}}function wn(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&Ui(i)){var s=e;do{if(s&&t.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function Xe(t){return Ee(t).getComputedStyle(t)}function Os(t){return["table","td","th"].indexOf(Re(t))>=0}function Fe(t){return((ft(t)?t.ownerDocument:t.document)||window.document).documentElement}function jt(t){return Re(t)==="html"?t:t.assignedSlot||t.parentNode||(Ui(t)?t.host:null)||Fe(t)}function Aa(t){return!Ne(t)||Xe(t).position==="fixed"?null:t.offsetParent}function dc(t){var e=/firefox/i.test(Wi()),i=/Trident/i.test(Wi());if(i&&Ne(t)){var s=Xe(t);if(s.position==="fixed")return null}var o=jt(t);for(Ui(o)&&(o=o.host);Ne(o)&&["html","body"].indexOf(Re(o))<0;){var c=Xe(o);if(c.transform!=="none"||c.perspective!=="none"||c.contain==="paint"||["transform","perspective"].indexOf(c.willChange)!==-1||e&&c.willChange==="filter"||e&&c.filter&&c.filter!=="none")return o;o=o.parentNode}return null}function _t(t){for(var e=Ee(t),i=Aa(t);i&&Os(i)&&Xe(i).position==="static";)i=Aa(i);return i&&(Re(i)==="html"||Re(i)==="body"&&Xe(i).position==="static")?e:i||dc(t)||e}function yi(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function _i(t,e,i){return yt(t,vi(e,i))}function Ta(t,e,i){var s=_i(t,e,i);return s>i?i:s}function xn(){return{top:0,right:0,bottom:0,left:0}}function Cn(t){return Object.assign({},xn(),t)}function Sn(t,e){return e.reduce(function(i,s){return i[s]=t,i},{})}var pc=function(e,i){return e=typeof e=="function"?e(Object.assign({},i.rects,{placement:i.placement})):e,Cn(typeof e!="number"?e:Sn(e,Ht))};function gc(t){var e,i=t.state,s=t.name,o=t.options,c=i.elements.arrow,d=i.modifiersData.popperOffsets,g=$e(i.placement),v=yi(g),C=[Ce,ke].indexOf(g)>=0,x=C?"height":"width";if(!(!c||!d)){var I=pc(o.padding,i),D=bi(c),S=v==="y"?Te:Ce,N=v==="y"?De:ke,A=i.rects.reference[x]+i.rects.reference[v]-d[v]-i.rects.popper[x],_=d[v]-i.rects.reference[v],R=_t(c),F=R?v==="y"?R.clientHeight||0:R.clientWidth||0:0,T=A/2-_/2,H=I[S],K=F-D[x]-I[N],l=F/2-D[x]/2+T,ee=_i(H,l,K),G=v;i.modifiersData[s]=(e={},e[G]=ee,e.centerOffset=ee-l,e)}}function mc(t){var e=t.state,i=t.options,s=i.element,o=s===void 0?"[data-popper-arrow]":s;o!=null&&(typeof o=="string"&&(o=e.elements.popper.querySelector(o),!o)||wn(e.elements.popper,o)&&(e.elements.arrow=o))}var ur={name:"arrow",enabled:!0,phase:"main",fn:gc,effect:mc,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function dt(t){return t.split("-")[1]}var vc={top:"auto",right:"auto",bottom:"auto",left:"auto"};function bc(t,e){var i=t.x,s=t.y,o=e.devicePixelRatio||1;return{x:Ft(i*o)/o||0,y:Ft(s*o)/o||0}}function wa(t){var e,i=t.popper,s=t.popperRect,o=t.placement,c=t.variation,d=t.offsets,g=t.position,v=t.gpuAcceleration,C=t.adaptive,x=t.roundOffsets,I=t.isFixed,D=d.x,S=D===void 0?0:D,N=d.y,A=N===void 0?0:N,_=typeof x=="function"?x({x:S,y:A}):{x:S,y:A};S=_.x,A=_.y;var R=d.hasOwnProperty("x"),F=d.hasOwnProperty("y"),T=Ce,H=Te,K=window;if(C){var l=_t(i),ee="clientHeight",G="clientWidth";if(l===Ee(i)&&(l=Fe(i),Xe(l).position!=="static"&&g==="absolute"&&(ee="scrollHeight",G="scrollWidth")),l=l,o===Te||(o===Ce||o===ke)&&c===Jt){H=De;var re=I&&l===K&&K.visualViewport?K.visualViewport.height:l[ee];A-=re-s.height,A*=v?1:-1}if(o===Ce||(o===Te||o===De)&&c===Jt){T=ke;var me=I&&l===K&&K.visualViewport?K.visualViewport.width:l[G];S-=me-s.width,S*=v?1:-1}}var _e=Object.assign({position:g},C&&vc),se=x===!0?bc({x:S,y:A},Ee(i)):{x:S,y:A};if(S=se.x,A=se.y,v){var ye;return Object.assign({},_e,(ye={},ye[H]=F?"0":"",ye[T]=R?"0":"",ye.transform=(K.devicePixelRatio||1)<=1?"translate("+S+"px, "+A+"px)":"translate3d("+S+"px, "+A+"px, 0)",ye))}return Object.assign({},_e,(e={},e[H]=F?A+"px":"",e[T]=R?S+"px":"",e.transform="",e))}function yc(t){var e=t.state,i=t.options,s=i.gpuAcceleration,o=s===void 0?!0:s,c=i.adaptive,d=c===void 0?!0:c,g=i.roundOffsets,v=g===void 0?!0:g,C={placement:$e(e.placement),variation:dt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,wa(Object.assign({},C,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:d,roundOffsets:v})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,wa(Object.assign({},C,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:v})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}var qi={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:yc,data:{}};var cr={passive:!0};function _c(t){var e=t.state,i=t.instance,s=t.options,o=s.scroll,c=o===void 0?!0:o,d=s.resize,g=d===void 0?!0:d,v=Ee(e.elements.popper),C=[].concat(e.scrollParents.reference,e.scrollParents.popper);return c&&C.forEach(function(x){x.addEventListener("scroll",i.update,cr)}),g&&v.addEventListener("resize",i.update,cr),function(){c&&C.forEach(function(x){x.removeEventListener("scroll",i.update,cr)}),g&&v.removeEventListener("resize",i.update,cr)}}var zi={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:_c,data:{}};var Ec={left:"right",right:"left",bottom:"top",top:"bottom"};function Ki(t){return t.replace(/left|right|bottom|top/g,function(e){return Ec[e]})}var Ac={start:"end",end:"start"};function fr(t){return t.replace(/start|end/g,function(e){return Ac[e]})}function Ei(t){var e=Ee(t),i=e.pageXOffset,s=e.pageYOffset;return{scrollLeft:i,scrollTop:s}}function Ai(t){return ht(Fe(t)).left+Ei(t).scrollLeft}function Ds(t,e){var i=Ee(t),s=Fe(t),o=i.visualViewport,c=s.clientWidth,d=s.clientHeight,g=0,v=0;if(o){c=o.width,d=o.height;var C=Tn();(C||!C&&e==="fixed")&&(g=o.offsetLeft,v=o.offsetTop)}return{width:c,height:d,x:g+Ai(t),y:v}}function Ls(t){var e,i=Fe(t),s=Ei(t),o=(e=t.ownerDocument)==null?void 0:e.body,c=yt(i.scrollWidth,i.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),d=yt(i.scrollHeight,i.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),g=-s.scrollLeft+Ai(t),v=-s.scrollTop;return Xe(o||i).direction==="rtl"&&(g+=yt(i.clientWidth,o?o.clientWidth:0)-c),{width:c,height:d,x:g,y:v}}function Ti(t){var e=Xe(t),i=e.overflow,s=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+o+s)}function hr(t){return["html","body","#document"].indexOf(Re(t))>=0?t.ownerDocument.body:Ne(t)&&Ti(t)?t:hr(jt(t))}function Qt(t,e){var i;e===void 0&&(e=[]);var s=hr(t),o=s===((i=t.ownerDocument)==null?void 0:i.body),c=Ee(s),d=o?[c].concat(c.visualViewport||[],Ti(s)?s:[]):s,g=e.concat(d);return o?g:g.concat(Qt(jt(d)))}function Xi(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Tc(t,e){var i=ht(t,!1,e==="fixed");return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}function xa(t,e,i){return e===En?Xi(Ds(t,i)):ft(e)?Tc(e,i):Xi(Ls(Fe(t)))}function wc(t){var e=Qt(jt(t)),i=["absolute","fixed"].indexOf(Xe(t).position)>=0,s=i&&Ne(t)?_t(t):t;return ft(s)?e.filter(function(o){return ft(o)&&wn(o,s)&&Re(o)!=="body"}):[]}function Ns(t,e,i,s){var o=e==="clippingParents"?wc(t):[].concat(e),c=[].concat(o,[i]),d=c[0],g=c.reduce(function(v,C){var x=xa(t,C,s);return v.top=yt(x.top,v.top),v.right=vi(x.right,v.right),v.bottom=vi(x.bottom,v.bottom),v.left=yt(x.left,v.left),v},xa(t,d,s));return g.width=g.right-g.left,g.height=g.bottom-g.top,g.x=g.left,g.y=g.top,g}function kn(t){var e=t.reference,i=t.element,s=t.placement,o=s?$e(s):null,c=s?dt(s):null,d=e.x+e.width/2-i.width/2,g=e.y+e.height/2-i.height/2,v;switch(o){case Te:v={x:d,y:e.y-i.height};break;case De:v={x:d,y:e.y+e.height};break;case ke:v={x:e.x+e.width,y:g};break;case Ce:v={x:e.x-i.width,y:g};break;default:v={x:e.x,y:e.y}}var C=o?yi(o):null;if(C!=null){var x=C==="y"?"height":"width";switch(c){case kt:v[C]=v[C]-(e[x]/2-i[x]/2);break;case Jt:v[C]=v[C]+(e[x]/2-i[x]/2);break;default:}}return v}function Ye(t,e){e===void 0&&(e={});var i=e,s=i.placement,o=s===void 0?t.placement:s,c=i.strategy,d=c===void 0?t.strategy:c,g=i.boundary,v=g===void 0?Cs:g,C=i.rootBoundary,x=C===void 0?En:C,I=i.elementContext,D=I===void 0?mi:I,S=i.altBoundary,N=S===void 0?!1:S,A=i.padding,_=A===void 0?0:A,R=Cn(typeof _!="number"?_:Sn(_,Ht)),F=D===mi?Ss:mi,T=t.rects.popper,H=t.elements[N?F:D],K=Ns(ft(H)?H:H.contextElement||Fe(t.elements.popper),v,x,d),l=ht(t.elements.reference),ee=kn({reference:l,element:T,strategy:"absolute",placement:o}),G=Xi(Object.assign({},T,ee)),re=D===mi?G:l,me={top:K.top-re.top+R.top,bottom:re.bottom-K.bottom+R.bottom,left:K.left-re.left+R.left,right:re.right-K.right+R.right},_e=t.modifiersData.offset;if(D===mi&&_e){var se=_e[o];Object.keys(me).forEach(function(ye){var je=[ke,De].indexOf(ye)>=0?1:-1,Y=[Te,De].indexOf(ye)>=0?"y":"x";me[ye]+=se[Y]*je})}return me}function Ps(t,e){e===void 0&&(e={});var i=e,s=i.placement,o=i.boundary,c=i.rootBoundary,d=i.padding,g=i.flipVariations,v=i.allowedAutoPlacements,C=v===void 0?An:v,x=dt(s),I=x?g?lr:lr.filter(function(N){return dt(N)===x}):Ht,D=I.filter(function(N){return C.indexOf(N)>=0});D.length===0&&(D=I);var S=D.reduce(function(N,A){return N[A]=Ye(t,{placement:A,boundary:o,rootBoundary:c,padding:d})[$e(A)],N},{});return Object.keys(S).sort(function(N,A){return S[N]-S[A]})}function xc(t){if($e(t)===_n)return[];var e=Ki(t);return[fr(t),e,fr(e)]}function Cc(t){var e=t.state,i=t.options,s=t.name;if(!e.modifiersData[s]._skip){for(var o=i.mainAxis,c=o===void 0?!0:o,d=i.altAxis,g=d===void 0?!0:d,v=i.fallbackPlacements,C=i.padding,x=i.boundary,I=i.rootBoundary,D=i.altBoundary,S=i.flipVariations,N=S===void 0?!0:S,A=i.allowedAutoPlacements,_=e.options.placement,R=$e(_),F=R===_,T=v||(F||!N?[Ki(_)]:xc(_)),H=[_].concat(T).reduce(function(Ie,Ae){return Ie.concat($e(Ae)===_n?Ps(e,{placement:Ae,boundary:x,rootBoundary:I,padding:C,flipVariations:N,allowedAutoPlacements:A}):Ae)},[]),K=e.rects.reference,l=e.rects.popper,ee=new Map,G=!0,re=H[0],me=0;me<H.length;me++){var _e=H[me],se=$e(_e),ye=dt(_e)===kt,je=[Te,De].indexOf(se)>=0,Y=je?"width":"height",W=Ye(e,{placement:_e,boundary:x,rootBoundary:I,altBoundary:D,padding:C}),X=je?ye?ke:Ce:ye?De:Te;K[Y]>l[Y]&&(X=Ki(X));var oe=Ki(X),de=[];if(c&&de.push(W[se]<=0),g&&de.push(W[X]<=0,W[oe]<=0),de.every(function(Ie){return Ie})){re=_e,G=!1;break}ee.set(_e,de)}if(G)for(var Pe=N?3:1,we=function(Ae){var Ge=H.find(function(it){var qe=ee.get(it);if(qe)return qe.slice(0,Ae).every(function(Be){return Be})});if(Ge)return re=Ge,"break"},Oe=Pe;Oe>0;Oe--){var Se=we(Oe);if(Se==="break")break}e.placement!==re&&(e.modifiersData[s]._skip=!0,e.placement=re,e.reset=!0)}}var dr={name:"flip",enabled:!0,phase:"main",fn:Cc,requiresIfExists:["offset"],data:{_skip:!1}};function Ca(t,e,i){return i===void 0&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Sa(t){return[Te,ke,De,Ce].some(function(e){return t[e]>=0})}function Sc(t){var e=t.state,i=t.name,s=e.rects.reference,o=e.rects.popper,c=e.modifiersData.preventOverflow,d=Ye(e,{elementContext:"reference"}),g=Ye(e,{altBoundary:!0}),v=Ca(d,s),C=Ca(g,o,c),x=Sa(v),I=Sa(C);e.modifiersData[i]={referenceClippingOffsets:v,popperEscapeOffsets:C,isReferenceHidden:x,hasPopperEscaped:I},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":x,"data-popper-escaped":I})}var pr={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Sc};function kc(t,e,i){var s=$e(t),o=[Ce,Te].indexOf(s)>=0?-1:1,c=typeof i=="function"?i(Object.assign({},e,{placement:t})):i,d=c[0],g=c[1];return d=d||0,g=(g||0)*o,[Ce,ke].indexOf(s)>=0?{x:g,y:d}:{x:d,y:g}}function Oc(t){var e=t.state,i=t.options,s=t.name,o=i.offset,c=o===void 0?[0,0]:o,d=An.reduce(function(x,I){return x[I]=kc(I,e.rects,c),x},{}),g=d[e.placement],v=g.x,C=g.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=v,e.modifiersData.popperOffsets.y+=C),e.modifiersData[s]=d}var gr={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Oc};function Dc(t){var e=t.state,i=t.name;e.modifiersData[i]=kn({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}var Yi={name:"popperOffsets",enabled:!0,phase:"read",fn:Dc,data:{}};function Is(t){return t==="x"?"y":"x"}function Lc(t){var e=t.state,i=t.options,s=t.name,o=i.mainAxis,c=o===void 0?!0:o,d=i.altAxis,g=d===void 0?!1:d,v=i.boundary,C=i.rootBoundary,x=i.altBoundary,I=i.padding,D=i.tether,S=D===void 0?!0:D,N=i.tetherOffset,A=N===void 0?0:N,_=Ye(e,{boundary:v,rootBoundary:C,padding:I,altBoundary:x}),R=$e(e.placement),F=dt(e.placement),T=!F,H=yi(R),K=Is(H),l=e.modifiersData.popperOffsets,ee=e.rects.reference,G=e.rects.popper,re=typeof A=="function"?A(Object.assign({},e.rects,{placement:e.placement})):A,me=typeof re=="number"?{mainAxis:re,altAxis:re}:Object.assign({mainAxis:0,altAxis:0},re),_e=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,se={x:0,y:0};if(l){if(c){var ye,je=H==="y"?Te:Ce,Y=H==="y"?De:ke,W=H==="y"?"height":"width",X=l[H],oe=X+_[je],de=X-_[Y],Pe=S?-G[W]/2:0,we=F===kt?ee[W]:G[W],Oe=F===kt?-G[W]:-ee[W],Se=e.elements.arrow,Ie=S&&Se?bi(Se):{width:0,height:0},Ae=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:xn(),Ge=Ae[je],it=Ae[Y],qe=_i(0,ee[W],Ie[W]),Be=T?ee[W]/2-Pe-qe-Ge-me.mainAxis:we-qe-Ge-me.mainAxis,ui=T?-ee[W]/2+Pe+qe+it+me.mainAxis:Oe+qe+it+me.mainAxis,At=e.elements.arrow&&_t(e.elements.arrow),Pi=At?H==="y"?At.clientTop||0:At.clientLeft||0:0,ln=(ye=_e?.[H])!=null?ye:0,es=X+Be-ln-Pi,un=X+ui-ln,ci=_i(S?vi(oe,es):oe,X,S?yt(de,un):de);l[H]=ci,se[H]=ci-X}if(g){var at,ts=H==="x"?Te:Ce,is=H==="x"?De:ke,It=l[K],ze=K==="y"?"height":"width",zt=It+_[ts],Kt=It-_[is],J=[Te,Ce].indexOf(R)!==-1,Me=(at=_e?.[K])!=null?at:0,Xn=J?zt:It-ee[ze]-G[ze]-Me+me.altAxis,Yn=J?It+ee[ze]+G[ze]-Me-me.altAxis:Kt,Gn=S&&J?Ta(Xn,It,Yn):_i(S?Xn:zt,It,S?Yn:Kt);l[K]=Gn,se[K]=Gn-It}e.modifiersData[s]=se}}var mr={name:"preventOverflow",enabled:!0,phase:"main",fn:Lc,requiresIfExists:["offset"]};function Rs(t){return{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function $s(t){return t===Ee(t)||!Ne(t)?Ei(t):Rs(t)}function Nc(t){var e=t.getBoundingClientRect(),i=Ft(e.width)/t.offsetWidth||1,s=Ft(e.height)/t.offsetHeight||1;return i!==1||s!==1}function Ms(t,e,i){i===void 0&&(i=!1);var s=Ne(e),o=Ne(e)&&Nc(e),c=Fe(e),d=ht(t,o,i),g={scrollLeft:0,scrollTop:0},v={x:0,y:0};return(s||!s&&!i)&&((Re(e)!=="body"||Ti(c))&&(g=$s(e)),Ne(e)?(v=ht(e,!0),v.x+=e.clientLeft,v.y+=e.clientTop):c&&(v.x=Ai(c))),{x:d.left+g.scrollLeft-v.x,y:d.top+g.scrollTop-v.y,width:d.width,height:d.height}}function Pc(t){var e=new Map,i=new Set,s=[];t.forEach(function(c){e.set(c.name,c)});function o(c){i.add(c.name);var d=[].concat(c.requires||[],c.requiresIfExists||[]);d.forEach(function(g){if(!i.has(g)){var v=e.get(g);v&&o(v)}}),s.push(c)}return t.forEach(function(c){i.has(c.name)||o(c)}),s}function Hs(t){var e=Pc(t);return ks.reduce(function(i,s){return i.concat(e.filter(function(o){return o.phase===s}))},[])}function Fs(t){var e;return function(){return e||(e=new Promise(function(i){Promise.resolve().then(function(){e=void 0,i(t())})})),e}}function js(t){var e=t.reduce(function(i,s){var o=i[s.name];return i[s.name]=o?Object.assign({},o,s,{options:Object.assign({},o.options,s.options),data:Object.assign({},o.data,s.data)}):s,i},{});return Object.keys(e).map(function(i){return e[i]})}var ka={placement:"bottom",modifiers:[],strategy:"absolute"};function Oa(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some(function(s){return!(s&&typeof s.getBoundingClientRect=="function")})}function wi(t){t===void 0&&(t={});var e=t,i=e.defaultModifiers,s=i===void 0?[]:i,o=e.defaultOptions,c=o===void 0?ka:o;return function(g,v,C){C===void 0&&(C=c);var x={placement:"bottom",orderedModifiers:[],options:Object.assign({},ka,c),modifiersData:{},elements:{reference:g,popper:v},attributes:{},styles:{}},I=[],D=!1,S={state:x,setOptions:function(R){var F=typeof R=="function"?R(x.options):R;A(),x.options=Object.assign({},c,x.options,F),x.scrollParents={reference:ft(g)?Qt(g):g.contextElement?Qt(g.contextElement):[],popper:Qt(v)};var T=Hs(js([].concat(s,x.options.modifiers)));return x.orderedModifiers=T.filter(function(H){return H.enabled}),N(),S.update()},forceUpdate:function(){if(!D){var R=x.elements,F=R.reference,T=R.popper;if(Oa(F,T)){x.rects={reference:Ms(F,_t(T),x.options.strategy==="fixed"),popper:bi(T)},x.reset=!1,x.placement=x.options.placement,x.orderedModifiers.forEach(function(me){return x.modifiersData[me.name]=Object.assign({},me.data)});for(var H=0;H<x.orderedModifiers.length;H++){if(x.reset===!0){x.reset=!1,H=-1;continue}var K=x.orderedModifiers[H],l=K.fn,ee=K.options,G=ee===void 0?{}:ee,re=K.name;typeof l=="function"&&(x=l({state:x,options:G,name:re,instance:S})||x)}}}},update:Fs(function(){return new Promise(function(_){S.forceUpdate(),_(x)})}),destroy:function(){A(),D=!0}};if(!Oa(g,v))return S;S.setOptions(C).then(function(_){!D&&C.onFirstUpdate&&C.onFirstUpdate(_)});function N(){x.orderedModifiers.forEach(function(_){var R=_.name,F=_.options,T=F===void 0?{}:F,H=_.effect;if(typeof H=="function"){var K=H({state:x,name:R,instance:S,options:T}),l=function(){};I.push(K||l)}})}function A(){I.forEach(function(_){return _()}),I=[]}return S}}var Da=wi();var Ic=[zi,Yi,qi,Vi],La=wi({defaultModifiers:Ic});var Rc=[zi,Yi,qi,Vi,gr,dr,mr,ur,pr],On=wi({defaultModifiers:Rc});var Zt=new Map,Bs={set(t,e,i){Zt.has(t)||Zt.set(t,new Map);let s=Zt.get(t);if(!s.has(e)&&s.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`);return}s.set(e,i)},get(t,e){return Zt.has(t)&&Zt.get(t).get(e)||null},remove(t,e){if(!Zt.has(t))return;let i=Zt.get(t);i.delete(e),i.size===0&&Zt.delete(t)}},$c=1e6,Mc=1e3,io="transitionend",ol=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,(e,i)=>`#${CSS.escape(i)}`)),t),Hc=t=>t==null?`${t}`:Object.prototype.toString.call(t).match(/\s([a-z]+)/i)[1].toLowerCase(),Fc=t=>{do t+=Math.floor(Math.random()*$c);while(document.getElementById(t));return t},jc=t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t),s=Number.parseFloat(e),o=Number.parseFloat(i);return!s&&!o?0:(e=e.split(",")[0],i=i.split(",")[0],(Number.parseFloat(e)+Number.parseFloat(i))*Mc)},al=t=>{t.dispatchEvent(new Event(io))},Bt=t=>!t||typeof t!="object"?!1:(typeof t.jquery<"u"&&(t=t[0]),typeof t.nodeType<"u"),ei=t=>Bt(t)?t.jquery?t[0]:t:typeof t=="string"&&t.length>0?document.querySelector(ol(t)):null,rn=t=>{if(!Bt(t)||t.getClientRects().length===0)return!1;let e=getComputedStyle(t).getPropertyValue("visibility")==="visible",i=t.closest("details:not([open])");if(!i)return e;if(i!==t){let s=t.closest("summary");if(s&&s.parentNode!==i||s===null)return!1}return e},ti=t=>!t||t.nodeType!==Node.ELEMENT_NODE||t.classList.contains("disabled")?!0:typeof t.disabled<"u"?t.disabled:t.hasAttribute("disabled")&&t.getAttribute("disabled")!=="false",ll=t=>{if(!document.documentElement.attachShadow)return null;if(typeof t.getRootNode=="function"){let e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?ll(t.parentNode):null},Cr=()=>{},Rn=t=>{t.offsetHeight},ul=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Us=[],Bc=t=>{document.readyState==="loading"?(Us.length||document.addEventListener("DOMContentLoaded",()=>{for(let e of Us)e()}),Us.push(t)):t()},pt=()=>document.documentElement.dir==="rtl",mt=t=>{Bc(()=>{let e=ul();if(e){let i=t.NAME,s=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=s,t.jQueryInterface)}})},et=(t,e=[],i=t)=>typeof t=="function"?t(...e):i,cl=(t,e,i=!0)=>{if(!i){et(t);return}let o=jc(e)+5,c=!1,d=({target:g})=>{g===e&&(c=!0,e.removeEventListener(io,d),et(t))};e.addEventListener(io,d),setTimeout(()=>{c||al(e)},o)},ao=(t,e,i,s)=>{let o=t.length,c=t.indexOf(e);return c===-1?!i&&s?t[o-1]:t[0]:(c+=i?1:-1,s&&(c=(c+o)%o),t[Math.max(0,Math.min(c,o-1))])},Uc=/[^.]*(?=\..*)\.|.*/,Vc=/\..*/,Wc=/::\d+$/,Vs={},Na=1,fl={mouseenter:"mouseover",mouseleave:"mouseout"},qc=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function hl(t,e){return e&&`${e}::${Na++}`||t.uidEvent||Na++}function dl(t){let e=hl(t);return t.uidEvent=e,Vs[e]=Vs[e]||{},Vs[e]}function zc(t,e){return function i(s){return lo(s,{delegateTarget:t}),i.oneOff&&B.off(t,s.type,e),e.apply(t,[s])}}function Kc(t,e,i){return function s(o){let c=t.querySelectorAll(e);for(let{target:d}=o;d&&d!==this;d=d.parentNode)for(let g of c)if(g===d)return lo(o,{delegateTarget:d}),s.oneOff&&B.off(t,o.type,e,i),i.apply(d,[o])}}function pl(t,e,i=null){return Object.values(t).find(s=>s.callable===e&&s.delegationSelector===i)}function gl(t,e,i){let s=typeof e=="string",o=s?i:e||i,c=ml(t);return qc.has(c)||(c=t),[s,o,c]}function Pa(t,e,i,s,o){if(typeof e!="string"||!t)return;let[c,d,g]=gl(e,i,s);e in fl&&(d=(N=>function(A){if(!A.relatedTarget||A.relatedTarget!==A.delegateTarget&&!A.delegateTarget.contains(A.relatedTarget))return N.call(this,A)})(d));let v=dl(t),C=v[g]||(v[g]={}),x=pl(C,d,c?i:null);if(x){x.oneOff=x.oneOff&&o;return}let I=hl(d,e.replace(Uc,"")),D=c?Kc(t,i,d):zc(t,d);D.delegationSelector=c?i:null,D.callable=d,D.oneOff=o,D.uidEvent=I,C[I]=D,t.addEventListener(g,D,c)}function no(t,e,i,s,o){let c=pl(e[i],s,o);c&&(t.removeEventListener(i,c,!!o),delete e[i][c.uidEvent])}function Xc(t,e,i,s){let o=e[i]||{};for(let[c,d]of Object.entries(o))c.includes(s)&&no(t,e,i,d.callable,d.delegationSelector)}function ml(t){return t=t.replace(Vc,""),fl[t]||t}var B={on(t,e,i,s){Pa(t,e,i,s,!1)},one(t,e,i,s){Pa(t,e,i,s,!0)},off(t,e,i,s){if(typeof e!="string"||!t)return;let[o,c,d]=gl(e,i,s),g=d!==e,v=dl(t),C=v[d]||{},x=e.startsWith(".");if(typeof c<"u"){if(!Object.keys(C).length)return;no(t,v,d,c,o?i:null);return}if(x)for(let I of Object.keys(v))Xc(t,v,I,e.slice(1));for(let[I,D]of Object.entries(C)){let S=I.replace(Wc,"");(!g||e.includes(S))&&no(t,v,d,D.callable,D.delegationSelector)}},trigger(t,e,i){if(typeof e!="string"||!t)return null;let s=ul(),o=ml(e),c=e!==o,d=null,g=!0,v=!0,C=!1;c&&s&&(d=s.Event(e,i),s(t).trigger(d),g=!d.isPropagationStopped(),v=!d.isImmediatePropagationStopped(),C=d.isDefaultPrevented());let x=lo(new Event(e,{bubbles:g,cancelable:!0}),i);return C&&x.preventDefault(),v&&t.dispatchEvent(x),x.defaultPrevented&&d&&d.preventDefault(),x}};function lo(t,e={}){for(let[i,s]of Object.entries(e))try{t[i]=s}catch{Object.defineProperty(t,i,{configurable:!0,get(){return s}})}return t}function Ia(t){if(t==="true")return!0;if(t==="false")return!1;if(t===Number(t).toString())return Number(t);if(t===""||t==="null")return null;if(typeof t!="string")return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function Ws(t){return t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}var Ut={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${Ws(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${Ws(e)}`)},getDataAttributes(t){if(!t)return{};let e={},i=Object.keys(t.dataset).filter(s=>s.startsWith("bs")&&!s.startsWith("bsConfig"));for(let s of i){let o=s.replace(/^bs/,"");o=o.charAt(0).toLowerCase()+o.slice(1,o.length),e[o]=Ia(t.dataset[s])}return e},getDataAttribute(t,e){return Ia(t.getAttribute(`data-bs-${Ws(e)}`))}},Si=class{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,i){let s=Bt(i)?Ut.getDataAttribute(i,"config"):{};return{...this.constructor.Default,...typeof s=="object"?s:{},...Bt(i)?Ut.getDataAttributes(i):{},...typeof e=="object"?e:{}}}_typeCheckConfig(e,i=this.constructor.DefaultType){for(let[s,o]of Object.entries(i)){let c=e[s],d=Bt(c)?"element":Hc(c);if(!new RegExp(o).test(d))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${d}" but expected type "${o}".`)}}},Yc="5.3.3",nt=class extends Si{constructor(e,i){super(),e=ei(e),e&&(this._element=e,this._config=this._getConfig(i),Bs.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Bs.remove(this._element,this.constructor.DATA_KEY),B.off(this._element,this.constructor.EVENT_KEY);for(let e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,i,s=!0){cl(e,i,s)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Bs.get(ei(e),this.DATA_KEY)}static getOrCreateInstance(e,i={}){return this.getInstance(e)||new this(e,typeof i=="object"?i:null)}static get VERSION(){return Yc}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}},qs=t=>{let e=t.getAttribute("data-bs-target");if(!e||e==="#"){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&i!=="#"?i.trim():null}return e?e.split(",").map(i=>ol(i)).join(","):null},te={find(t,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t,e=document.documentElement){return Element.prototype.querySelector.call(e,t)},children(t,e){return[].concat(...t.children).filter(i=>i.matches(e))},parents(t,e){let i=[],s=t.parentNode.closest(e);for(;s;)i.push(s),s=s.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){let e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(i=>`${i}:not([tabindex^="-"])`).join(",");return this.find(e,t).filter(i=>!ti(i)&&rn(i))},getSelectorFromElement(t){let e=qs(t);return e&&te.findOne(e)?e:null},getElementFromSelector(t){let e=qs(t);return e?te.findOne(e):null},getMultipleElementsFromSelector(t){let e=qs(t);return e?te.find(e):[]}},$r=(t,e="hide")=>{let i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;B.on(document,i,`[data-bs-dismiss="${s}"]`,function(o){if(["A","AREA"].includes(this.tagName)&&o.preventDefault(),ti(this))return;let c=te.getElementFromSelector(this)||this.closest(`.${s}`);t.getOrCreateInstance(c)[e]()})},Gc="alert",Jc="bs.alert",vl=`.${Jc}`,Qc=`close${vl}`,Zc=`closed${vl}`,ef="fade",tf="show",Sr=class t extends nt{static get NAME(){return Gc}close(){if(B.trigger(this._element,Qc).defaultPrevented)return;this._element.classList.remove(tf);let i=this._element.classList.contains(ef);this._queueCallback(()=>this._destroyElement(),this._element,i)}_destroyElement(){this._element.remove(),B.trigger(this._element,Zc),this.dispose()}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this);if(typeof e=="string"){if(i[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);i[e](this)}})}};$r(Sr,"close");mt(Sr);var nf="button",rf="bs.button",sf=`.${rf}`,of=".data-api",af="active",Ra='[data-bs-toggle="button"]',lf=`click${sf}${of}`,kr=class t extends nt{static get NAME(){return nf}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(af))}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this);e==="toggle"&&i[e]()})}};B.on(document,lf,Ra,t=>{t.preventDefault();let e=t.target.closest(Ra);kr.getOrCreateInstance(e).toggle()});mt(kr);var uf="swipe",sn=".bs.swipe",cf=`touchstart${sn}`,ff=`touchmove${sn}`,hf=`touchend${sn}`,df=`pointerdown${sn}`,pf=`pointerup${sn}`,gf="touch",mf="pen",vf="pointer-event",bf=40,yf={endCallback:null,leftCallback:null,rightCallback:null},_f={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"},Or=class t extends Si{constructor(e,i){super(),this._element=e,!(!e||!t.isSupported())&&(this._config=this._getConfig(i),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return yf}static get DefaultType(){return _f}static get NAME(){return uf}dispose(){B.off(this._element,sn)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),et(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){let e=Math.abs(this._deltaX);if(e<=bf)return;let i=e/this._deltaX;this._deltaX=0,i&&et(i>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(B.on(this._element,df,e=>this._start(e)),B.on(this._element,pf,e=>this._end(e)),this._element.classList.add(vf)):(B.on(this._element,cf,e=>this._start(e)),B.on(this._element,ff,e=>this._move(e)),B.on(this._element,hf,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===mf||e.pointerType===gf)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}},Ef="carousel",Af="bs.carousel",ri=`.${Af}`,bl=".data-api",Tf="ArrowLeft",wf="ArrowRight",xf=500,Dn="next",Gi="prev",Qi="left",wr="right",Cf=`slide${ri}`,zs=`slid${ri}`,Sf=`keydown${ri}`,kf=`mouseenter${ri}`,Of=`mouseleave${ri}`,Df=`dragstart${ri}`,Lf=`load${ri}${bl}`,Nf=`click${ri}${bl}`,yl="carousel",br="active",Pf="slide",If="carousel-item-end",Rf="carousel-item-start",$f="carousel-item-next",Mf="carousel-item-prev",_l=".active",El=".carousel-item",Hf=_l+El,Ff=".carousel-item img",jf=".carousel-indicators",Bf="[data-bs-slide], [data-bs-slide-to]",Uf='[data-bs-ride="carousel"]',Vf={[Tf]:wr,[wf]:Qi},Wf={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},qf={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"},Nn=class t extends nt{constructor(e,i){super(e,i),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=te.findOne(jf,this._element),this._addEventListeners(),this._config.ride===yl&&this.cycle()}static get Default(){return Wf}static get DefaultType(){return qf}static get NAME(){return Ef}next(){this._slide(Dn)}nextWhenVisible(){!document.hidden&&rn(this._element)&&this.next()}prev(){this._slide(Gi)}pause(){this._isSliding&&al(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){B.one(this._element,zs,()=>this.cycle());return}this.cycle()}}to(e){let i=this._getItems();if(e>i.length-1||e<0)return;if(this._isSliding){B.one(this._element,zs,()=>this.to(e));return}let s=this._getItemIndex(this._getActive());if(s===e)return;let o=e>s?Dn:Gi;this._slide(o,i[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&B.on(this._element,Sf,e=>this._keydown(e)),this._config.pause==="hover"&&(B.on(this._element,kf,()=>this.pause()),B.on(this._element,Of,()=>this._maybeEnableCycle())),this._config.touch&&Or.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(let s of te.find(Ff,this._element))B.on(s,Df,o=>o.preventDefault());let i={leftCallback:()=>this._slide(this._directionToOrder(Qi)),rightCallback:()=>this._slide(this._directionToOrder(wr)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),xf+this._config.interval))}};this._swipeHelper=new Or(this._element,i)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;let i=Vf[e.key];i&&(e.preventDefault(),this._slide(this._directionToOrder(i)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;let i=te.findOne(_l,this._indicatorsElement);i.classList.remove(br),i.removeAttribute("aria-current");let s=te.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);s&&(s.classList.add(br),s.setAttribute("aria-current","true"))}_updateInterval(){let e=this._activeElement||this._getActive();if(!e)return;let i=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=i||this._config.defaultInterval}_slide(e,i=null){if(this._isSliding)return;let s=this._getActive(),o=e===Dn,c=i||ao(this._getItems(),s,o,this._config.wrap);if(c===s)return;let d=this._getItemIndex(c),g=S=>B.trigger(this._element,S,{relatedTarget:c,direction:this._orderToDirection(e),from:this._getItemIndex(s),to:d});if(g(Cf).defaultPrevented||!s||!c)return;let C=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(d),this._activeElement=c;let x=o?Rf:If,I=o?$f:Mf;c.classList.add(I),Rn(c),s.classList.add(x),c.classList.add(x);let D=()=>{c.classList.remove(x,I),c.classList.add(br),s.classList.remove(br,I,x),this._isSliding=!1,g(zs)};this._queueCallback(D,s,this._isAnimated()),C&&this.cycle()}_isAnimated(){return this._element.classList.contains(Pf)}_getActive(){return te.findOne(Hf,this._element)}_getItems(){return te.find(El,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return pt()?e===Qi?Gi:Dn:e===Qi?Dn:Gi}_orderToDirection(e){return pt()?e===Gi?Qi:wr:e===Gi?wr:Qi}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="number"){i.to(e);return}if(typeof e=="string"){if(i[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);i[e]()}})}};B.on(document,Nf,Bf,function(t){let e=te.getElementFromSelector(this);if(!e||!e.classList.contains(yl))return;t.preventDefault();let i=Nn.getOrCreateInstance(e),s=this.getAttribute("data-bs-slide-to");if(s){i.to(s),i._maybeEnableCycle();return}if(Ut.getDataAttribute(this,"slide")==="next"){i.next(),i._maybeEnableCycle();return}i.prev(),i._maybeEnableCycle()});B.on(window,Lf,()=>{let t=te.find(Uf);for(let e of t)Nn.getOrCreateInstance(e)});mt(Nn);var zf="collapse",Kf="bs.collapse",$n=`.${Kf}`,Xf=".data-api",Yf=`show${$n}`,Gf=`shown${$n}`,Jf=`hide${$n}`,Qf=`hidden${$n}`,Zf=`click${$n}${Xf}`,Ks="show",en="collapse",yr="collapsing",eh="collapsed",th=`:scope .${en} .${en}`,ih="collapse-horizontal",nh="width",rh="height",sh=".collapse.show, .collapse.collapsing",ro='[data-bs-toggle="collapse"]',oh={parent:null,toggle:!0},ah={parent:"(null|element)",toggle:"boolean"},Dr=class t extends nt{constructor(e,i){super(e,i),this._isTransitioning=!1,this._triggerArray=[];let s=te.find(ro);for(let o of s){let c=te.getSelectorFromElement(o),d=te.find(c).filter(g=>g===this._element);c!==null&&d.length&&this._triggerArray.push(o)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return oh}static get DefaultType(){return ah}static get NAME(){return zf}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(sh).filter(g=>g!==this._element).map(g=>t.getOrCreateInstance(g,{toggle:!1}))),e.length&&e[0]._isTransitioning||B.trigger(this._element,Yf).defaultPrevented)return;for(let g of e)g.hide();let s=this._getDimension();this._element.classList.remove(en),this._element.classList.add(yr),this._element.style[s]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;let o=()=>{this._isTransitioning=!1,this._element.classList.remove(yr),this._element.classList.add(en,Ks),this._element.style[s]="",B.trigger(this._element,Gf)},d=`scroll${s[0].toUpperCase()+s.slice(1)}`;this._queueCallback(o,this._element,!0),this._element.style[s]=`${this._element[d]}px`}hide(){if(this._isTransitioning||!this._isShown()||B.trigger(this._element,Jf).defaultPrevented)return;let i=this._getDimension();this._element.style[i]=`${this._element.getBoundingClientRect()[i]}px`,Rn(this._element),this._element.classList.add(yr),this._element.classList.remove(en,Ks);for(let o of this._triggerArray){let c=te.getElementFromSelector(o);c&&!this._isShown(c)&&this._addAriaAndCollapsedClass([o],!1)}this._isTransitioning=!0;let s=()=>{this._isTransitioning=!1,this._element.classList.remove(yr),this._element.classList.add(en),B.trigger(this._element,Qf)};this._element.style[i]="",this._queueCallback(s,this._element,!0)}_isShown(e=this._element){return e.classList.contains(Ks)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=ei(e.parent),e}_getDimension(){return this._element.classList.contains(ih)?nh:rh}_initializeChildren(){if(!this._config.parent)return;let e=this._getFirstLevelChildren(ro);for(let i of e){let s=te.getElementFromSelector(i);s&&this._addAriaAndCollapsedClass([i],this._isShown(s))}}_getFirstLevelChildren(e){let i=te.find(th,this._config.parent);return te.find(e,this._config.parent).filter(s=>!i.includes(s))}_addAriaAndCollapsedClass(e,i){if(e.length)for(let s of e)s.classList.toggle(eh,!i),s.setAttribute("aria-expanded",i)}static jQueryInterface(e){let i={};return typeof e=="string"&&/show|hide/.test(e)&&(i.toggle=!1),this.each(function(){let s=t.getOrCreateInstance(this,i);if(typeof e=="string"){if(typeof s[e]>"u")throw new TypeError(`No method named "${e}"`);s[e]()}})}};B.on(document,Zf,ro,function(t){(t.target.tagName==="A"||t.delegateTarget&&t.delegateTarget.tagName==="A")&&t.preventDefault();for(let e of te.getMultipleElementsFromSelector(this))Dr.getOrCreateInstance(e,{toggle:!1}).toggle()});mt(Dr);var $a="dropdown",lh="bs.dropdown",ki=`.${lh}`,uo=".data-api",uh="Escape",Ma="Tab",ch="ArrowUp",Ha="ArrowDown",fh=2,hh=`hide${ki}`,dh=`hidden${ki}`,ph=`show${ki}`,gh=`shown${ki}`,Al=`click${ki}${uo}`,Tl=`keydown${ki}${uo}`,mh=`keyup${ki}${uo}`,Zi="show",vh="dropup",bh="dropend",yh="dropstart",_h="dropup-center",Eh="dropdown-center",xi='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ah=`${xi}.${Zi}`,xr=".dropdown-menu",Th=".navbar",wh=".navbar-nav",xh=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ch=pt()?"top-end":"top-start",Sh=pt()?"top-start":"top-end",kh=pt()?"bottom-end":"bottom-start",Oh=pt()?"bottom-start":"bottom-end",Dh=pt()?"left-start":"right-start",Lh=pt()?"right-start":"left-start",Nh="top",Ph="bottom",Ih={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Rh={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"},ii=class t extends nt{constructor(e,i){super(e,i),this._popper=null,this._parent=this._element.parentNode,this._menu=te.next(this._element,xr)[0]||te.prev(this._element,xr)[0]||te.findOne(xr,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Ih}static get DefaultType(){return Rh}static get NAME(){return $a}toggle(){return this._isShown()?this.hide():this.show()}show(){if(ti(this._element)||this._isShown())return;let e={relatedTarget:this._element};if(!B.trigger(this._element,ph,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(wh))for(let s of[].concat(...document.body.children))B.on(s,"mouseover",Cr);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Zi),this._element.classList.add(Zi),B.trigger(this._element,gh,e)}}hide(){if(ti(this._element)||!this._isShown())return;let e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!B.trigger(this._element,hh,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(let s of[].concat(...document.body.children))B.off(s,"mouseover",Cr);this._popper&&this._popper.destroy(),this._menu.classList.remove(Zi),this._element.classList.remove(Zi),this._element.setAttribute("aria-expanded","false"),Ut.removeDataAttribute(this._menu,"popper"),B.trigger(this._element,dh,e)}}_getConfig(e){if(e=super._getConfig(e),typeof e.reference=="object"&&!Bt(e.reference)&&typeof e.reference.getBoundingClientRect!="function")throw new TypeError(`${$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(typeof vr>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;this._config.reference==="parent"?e=this._parent:Bt(this._config.reference)?e=ei(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);let i=this._getPopperConfig();this._popper=On(e,this._menu,i)}_isShown(){return this._menu.classList.contains(Zi)}_getPlacement(){let e=this._parent;if(e.classList.contains(bh))return Dh;if(e.classList.contains(yh))return Lh;if(e.classList.contains(_h))return Nh;if(e.classList.contains(Eh))return Ph;let i=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return e.classList.contains(vh)?i?Sh:Ch:i?Oh:kh}_detectNavbar(){return this._element.closest(Th)!==null}_getOffset(){let{offset:e}=this._config;return typeof e=="string"?e.split(",").map(i=>Number.parseInt(i,10)):typeof e=="function"?i=>e(i,this._element):e}_getPopperConfig(){let e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(Ut.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...et(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:i}){let s=te.find(xh,this._menu).filter(o=>rn(o));s.length&&ao(s,i,e===Ha,!s.includes(i)).focus()}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof i[e]>"u")throw new TypeError(`No method named "${e}"`);i[e]()}})}static clearMenus(e){if(e.button===fh||e.type==="keyup"&&e.key!==Ma)return;let i=te.find(Ah);for(let s of i){let o=t.getInstance(s);if(!o||o._config.autoClose===!1)continue;let c=e.composedPath(),d=c.includes(o._menu);if(c.includes(o._element)||o._config.autoClose==="inside"&&!d||o._config.autoClose==="outside"&&d||o._menu.contains(e.target)&&(e.type==="keyup"&&e.key===Ma||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;let g={relatedTarget:o._element};e.type==="click"&&(g.clickEvent=e),o._completeHide(g)}}static dataApiKeydownHandler(e){let i=/input|textarea/i.test(e.target.tagName),s=e.key===uh,o=[ch,Ha].includes(e.key);if(!o&&!s||i&&!s)return;e.preventDefault();let c=this.matches(xi)?this:te.prev(this,xi)[0]||te.next(this,xi)[0]||te.findOne(xi,e.delegateTarget.parentNode),d=t.getOrCreateInstance(c);if(o){e.stopPropagation(),d.show(),d._selectMenuItem(e);return}d._isShown()&&(e.stopPropagation(),d.hide(),c.focus())}};B.on(document,Tl,xi,ii.dataApiKeydownHandler);B.on(document,Tl,xr,ii.dataApiKeydownHandler);B.on(document,Al,ii.clearMenus);B.on(document,mh,ii.clearMenus);B.on(document,Al,xi,function(t){t.preventDefault(),ii.getOrCreateInstance(this).toggle()});mt(ii);var wl="backdrop",$h="fade",Fa="show",ja=`mousedown.bs.${wl}`,Mh={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Hh={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"},Lr=class extends Si{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Mh}static get DefaultType(){return Hh}static get NAME(){return wl}show(e){if(!this._config.isVisible){et(e);return}this._append();let i=this._getElement();this._config.isAnimated&&Rn(i),i.classList.add(Fa),this._emulateAnimation(()=>{et(e)})}hide(e){if(!this._config.isVisible){et(e);return}this._getElement().classList.remove(Fa),this._emulateAnimation(()=>{this.dispose(),et(e)})}dispose(){this._isAppended&&(B.off(this._element,ja),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){let e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add($h),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=ei(e.rootElement),e}_append(){if(this._isAppended)return;let e=this._getElement();this._config.rootElement.append(e),B.on(e,ja,()=>{et(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){cl(e,this._getElement(),this._config.isAnimated)}},Fh="focustrap",jh="bs.focustrap",Nr=`.${jh}`,Bh=`focusin${Nr}`,Uh=`keydown.tab${Nr}`,Vh="Tab",Wh="forward",Ba="backward",qh={autofocus:!0,trapElement:null},zh={autofocus:"boolean",trapElement:"element"},Pr=class extends Si{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return qh}static get DefaultType(){return zh}static get NAME(){return Fh}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),B.off(document,Nr),B.on(document,Bh,e=>this._handleFocusin(e)),B.on(document,Uh,e=>this._handleKeydown(e)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,B.off(document,Nr))}_handleFocusin(e){let{trapElement:i}=this._config;if(e.target===document||e.target===i||i.contains(e.target))return;let s=te.focusableChildren(i);s.length===0?i.focus():this._lastTabNavDirection===Ba?s[s.length-1].focus():s[0].focus()}_handleKeydown(e){e.key===Vh&&(this._lastTabNavDirection=e.shiftKey?Ba:Wh)}},Ua=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Va=".sticky-top",_r="padding-right",Wa="margin-right",Pn=class{constructor(){this._element=document.body}getWidth(){let e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){let e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,_r,i=>i+e),this._setElementAttributes(Ua,_r,i=>i+e),this._setElementAttributes(Va,Wa,i=>i-e)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,_r),this._resetElementAttributes(Ua,_r),this._resetElementAttributes(Va,Wa)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,i,s){let o=this.getWidth(),c=d=>{if(d!==this._element&&window.innerWidth>d.clientWidth+o)return;this._saveInitialAttribute(d,i);let g=window.getComputedStyle(d).getPropertyValue(i);d.style.setProperty(i,`${s(Number.parseFloat(g))}px`)};this._applyManipulationCallback(e,c)}_saveInitialAttribute(e,i){let s=e.style.getPropertyValue(i);s&&Ut.setDataAttribute(e,i,s)}_resetElementAttributes(e,i){let s=o=>{let c=Ut.getDataAttribute(o,i);if(c===null){o.style.removeProperty(i);return}Ut.removeDataAttribute(o,i),o.style.setProperty(i,c)};this._applyManipulationCallback(e,s)}_applyManipulationCallback(e,i){if(Bt(e)){i(e);return}for(let s of te.find(e,this._element))i(s)}},Kh="modal",Xh="bs.modal",gt=`.${Xh}`,Yh=".data-api",Gh="Escape",Jh=`hide${gt}`,Qh=`hidePrevented${gt}`,xl=`hidden${gt}`,Cl=`show${gt}`,Zh=`shown${gt}`,ed=`resize${gt}`,td=`click.dismiss${gt}`,id=`mousedown.dismiss${gt}`,nd=`keydown.dismiss${gt}`,rd=`click${gt}${Yh}`,qa="modal-open",sd="fade",za="show",Xs="modal-static",od=".modal.show",ad=".modal-dialog",ld=".modal-body",ud='[data-bs-toggle="modal"]',cd={backdrop:!0,focus:!0,keyboard:!0},fd={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"},tn=class t extends nt{constructor(e,i){super(e,i),this._dialog=te.findOne(ad,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Pn,this._addEventListeners()}static get Default(){return cd}static get DefaultType(){return fd}static get NAME(){return Kh}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||B.trigger(this._element,Cl,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(qa),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||B.trigger(this._element,Jh).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(za),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){B.off(window,gt),B.off(this._dialog,gt),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Lr({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Pr({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;let i=te.findOne(ld,this._dialog);i&&(i.scrollTop=0),Rn(this._element),this._element.classList.add(za);let s=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,B.trigger(this._element,Zh,{relatedTarget:e})};this._queueCallback(s,this._dialog,this._isAnimated())}_addEventListeners(){B.on(this._element,nd,e=>{if(e.key===Gh){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),B.on(window,ed,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),B.on(this._element,id,e=>{B.one(this._element,td,i=>{if(!(this._element!==e.target||this._element!==i.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(qa),this._resetAdjustments(),this._scrollBar.reset(),B.trigger(this._element,xl)})}_isAnimated(){return this._element.classList.contains(sd)}_triggerBackdropTransition(){if(B.trigger(this._element,Qh).defaultPrevented)return;let i=this._element.scrollHeight>document.documentElement.clientHeight,s=this._element.style.overflowY;s==="hidden"||this._element.classList.contains(Xs)||(i||(this._element.style.overflowY="hidden"),this._element.classList.add(Xs),this._queueCallback(()=>{this._element.classList.remove(Xs),this._queueCallback(()=>{this._element.style.overflowY=s},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){let e=this._element.scrollHeight>document.documentElement.clientHeight,i=this._scrollBar.getWidth(),s=i>0;if(s&&!e){let o=pt()?"paddingLeft":"paddingRight";this._element.style[o]=`${i}px`}if(!s&&e){let o=pt()?"paddingRight":"paddingLeft";this._element.style[o]=`${i}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,i){return this.each(function(){let s=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof s[e]>"u")throw new TypeError(`No method named "${e}"`);s[e](i)}})}};B.on(document,rd,ud,function(t){let e=te.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),B.one(e,Cl,o=>{o.defaultPrevented||B.one(e,xl,()=>{rn(this)&&this.focus()})});let i=te.findOne(od);i&&tn.getInstance(i).hide(),tn.getOrCreateInstance(e).toggle(this)});$r(tn);mt(tn);var hd="offcanvas",dd="bs.offcanvas",Vt=`.${dd}`,Sl=".data-api",pd=`load${Vt}${Sl}`,gd="Escape",Ka="show",Xa="showing",Ya="hiding",md="offcanvas-backdrop",kl=".offcanvas.show",vd=`show${Vt}`,bd=`shown${Vt}`,yd=`hide${Vt}`,Ga=`hidePrevented${Vt}`,Ol=`hidden${Vt}`,_d=`resize${Vt}`,Ed=`click${Vt}${Sl}`,Ad=`keydown.dismiss${Vt}`,Td='[data-bs-toggle="offcanvas"]',wd={backdrop:!0,keyboard:!0,scroll:!1},xd={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"},ni=class t extends nt{constructor(e,i){super(e,i),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return wd}static get DefaultType(){return xd}static get NAME(){return hd}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown||B.trigger(this._element,vd,{relatedTarget:e}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new Pn().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Xa);let s=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(Ka),this._element.classList.remove(Xa),B.trigger(this._element,bd,{relatedTarget:e})};this._queueCallback(s,this._element,!0)}hide(){if(!this._isShown||B.trigger(this._element,yd).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Ya),this._backdrop.hide();let i=()=>{this._element.classList.remove(Ka,Ya),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new Pn().reset(),B.trigger(this._element,Ol)};this._queueCallback(i,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){let e=()=>{if(this._config.backdrop==="static"){B.trigger(this._element,Ga);return}this.hide()},i=!!this._config.backdrop;return new Lr({className:md,isVisible:i,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:i?e:null})}_initializeFocusTrap(){return new Pr({trapElement:this._element})}_addEventListeners(){B.on(this._element,Ad,e=>{if(e.key===gd){if(this._config.keyboard){this.hide();return}B.trigger(this._element,Ga)}})}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(i[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);i[e](this)}})}};B.on(document,Ed,Td,function(t){let e=te.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),ti(this))return;B.one(e,Ol,()=>{rn(this)&&this.focus()});let i=te.findOne(kl);i&&i!==e&&ni.getInstance(i).hide(),ni.getOrCreateInstance(e).toggle(this)});B.on(window,pd,()=>{for(let t of te.find(kl))ni.getOrCreateInstance(t).show()});B.on(window,_d,()=>{for(let t of te.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(t).position!=="fixed"&&ni.getOrCreateInstance(t).hide()});$r(ni);mt(ni);var Cd=/^aria-[\w-]*$/i,Dl={"*":["class","dir","id","lang","role",Cd],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Sd=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),kd=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Od=(t,e)=>{let i=t.nodeName.toLowerCase();return e.includes(i)?Sd.has(i)?!!kd.test(t.nodeValue):!0:e.filter(s=>s instanceof RegExp).some(s=>s.test(i))};function Dd(t,e,i){if(!t.length)return t;if(i&&typeof i=="function")return i(t);let o=new window.DOMParser().parseFromString(t,"text/html"),c=[].concat(...o.body.querySelectorAll("*"));for(let d of c){let g=d.nodeName.toLowerCase();if(!Object.keys(e).includes(g)){d.remove();continue}let v=[].concat(...d.attributes),C=[].concat(e["*"]||[],e[g]||[]);for(let x of v)Od(x,C)||d.removeAttribute(x.nodeName)}return o.body.innerHTML}var Ld="TemplateFactory",Nd={allowList:Dl,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},Pd={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Id={entry:"(string|element|function|null)",selector:"(string|element)"},so=class extends Si{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Nd}static get DefaultType(){return Pd}static get NAME(){return Ld}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){let e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(let[o,c]of Object.entries(this._config.content))this._setContent(e,c,o);let i=e.children[0],s=this._resolvePossibleFunction(this._config.extraClass);return s&&i.classList.add(...s.split(" ")),i}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(let[i,s]of Object.entries(e))super._typeCheckConfig({selector:i,entry:s},Id)}_setContent(e,i,s){let o=te.findOne(s,e);if(o){if(i=this._resolvePossibleFunction(i),!i){o.remove();return}if(Bt(i)){this._putElementInTemplate(ei(i),o);return}if(this._config.html){o.innerHTML=this._maybeSanitize(i);return}o.textContent=i}}_maybeSanitize(e){return this._config.sanitize?Dd(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return et(e,[this])}_putElementInTemplate(e,i){if(this._config.html){i.innerHTML="",i.append(e);return}i.textContent=e.textContent}},Rd="tooltip",$d=new Set(["sanitize","allowList","sanitizeFn"]),Ys="fade",Md="modal",Er="show",Hd=".tooltip-inner",Ja=`.${Md}`,Qa="hide.bs.modal",Ln="hover",Gs="focus",Fd="click",jd="manual",Bd="hide",Ud="hidden",Vd="show",Wd="shown",qd="inserted",zd="click",Kd="focusin",Xd="focusout",Yd="mouseenter",Gd="mouseleave",Jd={AUTO:"auto",TOP:"top",RIGHT:pt()?"left":"right",BOTTOM:"bottom",LEFT:pt()?"right":"left"},Qd={allowList:Dl,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},Zd={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"},nn=class t extends nt{constructor(e,i){if(typeof vr>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Qd}static get DefaultType(){return Zd}static get NAME(){return Rd}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),B.off(this._element.closest(Ja),Qa,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;let e=B.trigger(this._element,this.constructor.eventName(Vd)),s=(ll(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!s)return;this._disposePopper();let o=this._getTipElement();this._element.setAttribute("aria-describedby",o.getAttribute("id"));let{container:c}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(c.append(o),B.trigger(this._element,this.constructor.eventName(qd))),this._popper=this._createPopper(o),o.classList.add(Er),"ontouchstart"in document.documentElement)for(let g of[].concat(...document.body.children))B.on(g,"mouseover",Cr);let d=()=>{B.trigger(this._element,this.constructor.eventName(Wd)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(d,this.tip,this._isAnimated())}hide(){if(!this._isShown()||B.trigger(this._element,this.constructor.eventName(Bd)).defaultPrevented)return;if(this._getTipElement().classList.remove(Er),"ontouchstart"in document.documentElement)for(let o of[].concat(...document.body.children))B.off(o,"mouseover",Cr);this._activeTrigger[Fd]=!1,this._activeTrigger[Gs]=!1,this._activeTrigger[Ln]=!1,this._isHovered=null;let s=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),B.trigger(this._element,this.constructor.eventName(Ud)))};this._queueCallback(s,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){let i=this._getTemplateFactory(e).toHtml();if(!i)return null;i.classList.remove(Ys,Er),i.classList.add(`bs-${this.constructor.NAME}-auto`);let s=Fc(this.constructor.NAME).toString();return i.setAttribute("id",s),this._isAnimated()&&i.classList.add(Ys),i}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new so({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Hd]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ys)}_isShown(){return this.tip&&this.tip.classList.contains(Er)}_createPopper(e){let i=et(this._config.placement,[this,e,this._element]),s=Jd[i.toUpperCase()];return On(this._element,e,this._getPopperConfig(s))}_getOffset(){let{offset:e}=this._config;return typeof e=="string"?e.split(",").map(i=>Number.parseInt(i,10)):typeof e=="function"?i=>e(i,this._element):e}_resolvePossibleFunction(e){return et(e,[this._element])}_getPopperConfig(e){let i={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:s=>{this._getTipElement().setAttribute("data-popper-placement",s.state.placement)}}]};return{...i,...et(this._config.popperConfig,[i])}}_setListeners(){let e=this._config.trigger.split(" ");for(let i of e)if(i==="click")B.on(this._element,this.constructor.eventName(zd),this._config.selector,s=>{this._initializeOnDelegatedTarget(s).toggle()});else if(i!==jd){let s=i===Ln?this.constructor.eventName(Yd):this.constructor.eventName(Kd),o=i===Ln?this.constructor.eventName(Gd):this.constructor.eventName(Xd);B.on(this._element,s,this._config.selector,c=>{let d=this._initializeOnDelegatedTarget(c);d._activeTrigger[c.type==="focusin"?Gs:Ln]=!0,d._enter()}),B.on(this._element,o,this._config.selector,c=>{let d=this._initializeOnDelegatedTarget(c);d._activeTrigger[c.type==="focusout"?Gs:Ln]=d._element.contains(c.relatedTarget),d._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},B.on(this._element.closest(Ja),Qa,this._hideModalHandler)}_fixTitle(){let e=this._element.getAttribute("title");e&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,i){clearTimeout(this._timeout),this._timeout=setTimeout(e,i)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){let i=Ut.getDataAttributes(this._element);for(let s of Object.keys(i))$d.has(s)&&delete i[s];return e={...i,...typeof e=="object"&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:ei(e.container),typeof e.delay=="number"&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title=="number"&&(e.title=e.title.toString()),typeof e.content=="number"&&(e.content=e.content.toString()),e}_getDelegateConfig(){let e={};for(let[i,s]of Object.entries(this._config))this.constructor.Default[i]!==s&&(e[i]=s);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof i[e]>"u")throw new TypeError(`No method named "${e}"`);i[e]()}})}};mt(nn);var ep="popover",tp=".popover-header",ip=".popover-body",np={...nn.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},rp={...nn.DefaultType,content:"(null|string|element|function)"},oo=class t extends nn{static get Default(){return np}static get DefaultType(){return rp}static get NAME(){return ep}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[tp]:this._getTitle(),[ip]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof i[e]>"u")throw new TypeError(`No method named "${e}"`);i[e]()}})}};mt(oo);var sp="scrollspy",op="bs.scrollspy",co=`.${op}`,ap=".data-api",lp=`activate${co}`,Za=`click${co}`,up=`load${co}${ap}`,cp="dropdown-item",Ji="active",fp='[data-bs-spy="scroll"]',Js="[href]",hp=".nav, .list-group",el=".nav-link",dp=".nav-item",pp=".list-group-item",gp=`${el}, ${dp} > ${el}, ${pp}`,mp=".dropdown",vp=".dropdown-toggle",bp={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},yp={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"},Ir=class t extends nt{constructor(e,i){super(e,i),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return bp}static get DefaultType(){return yp}static get NAME(){return sp}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(let e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=ei(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold=="string"&&(e.threshold=e.threshold.split(",").map(i=>Number.parseFloat(i))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(B.off(this._config.target,Za),B.on(this._config.target,Za,Js,e=>{let i=this._observableSections.get(e.target.hash);if(i){e.preventDefault();let s=this._rootElement||window,o=i.offsetTop-this._element.offsetTop;if(s.scrollTo){s.scrollTo({top:o,behavior:"smooth"});return}s.scrollTop=o}}))}_getNewObserver(){let e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(i=>this._observerCallback(i),e)}_observerCallback(e){let i=d=>this._targetLinks.get(`#${d.target.id}`),s=d=>{this._previousScrollData.visibleEntryTop=d.target.offsetTop,this._process(i(d))},o=(this._rootElement||document.documentElement).scrollTop,c=o>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=o;for(let d of e){if(!d.isIntersecting){this._activeTarget=null,this._clearActiveClass(i(d));continue}let g=d.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(c&&g){if(s(d),!o)return;continue}!c&&!g&&s(d)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;let e=te.find(Js,this._config.target);for(let i of e){if(!i.hash||ti(i))continue;let s=te.findOne(decodeURI(i.hash),this._element);rn(s)&&(this._targetLinks.set(decodeURI(i.hash),i),this._observableSections.set(i.hash,s))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(Ji),this._activateParents(e),B.trigger(this._element,lp,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(cp)){te.findOne(vp,e.closest(mp)).classList.add(Ji);return}for(let i of te.parents(e,hp))for(let s of te.prev(i,gp))s.classList.add(Ji)}_clearActiveClass(e){e.classList.remove(Ji);let i=te.find(`${Js}.${Ji}`,e);for(let s of i)s.classList.remove(Ji)}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(i[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);i[e]()}})}};B.on(window,up,()=>{for(let t of te.find(fp))Ir.getOrCreateInstance(t)});mt(Ir);var _p="tab",Ep="bs.tab",Oi=`.${Ep}`,Ap=`hide${Oi}`,Tp=`hidden${Oi}`,wp=`show${Oi}`,xp=`shown${Oi}`,Cp=`click${Oi}`,Sp=`keydown${Oi}`,kp=`load${Oi}`,Op="ArrowLeft",tl="ArrowRight",Dp="ArrowUp",il="ArrowDown",Qs="Home",nl="End",Ci="active",rl="fade",Zs="show",Lp="dropdown",Ll=".dropdown-toggle",Np=".dropdown-menu",eo=`:not(${Ll})`,Pp='.list-group, .nav, [role="tablist"]',Ip=".nav-item, .list-group-item",Rp=`.nav-link${eo}, .list-group-item${eo}, [role="tab"]${eo}`,Nl='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',to=`${Rp}, ${Nl}`,$p=`.${Ci}[data-bs-toggle="tab"], .${Ci}[data-bs-toggle="pill"], .${Ci}[data-bs-toggle="list"]`,In=class t extends nt{constructor(e){super(e),this._parent=this._element.closest(Pp),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),B.on(this._element,Sp,i=>this._keydown(i)))}static get NAME(){return _p}show(){let e=this._element;if(this._elemIsActive(e))return;let i=this._getActiveElem(),s=i?B.trigger(i,Ap,{relatedTarget:e}):null;B.trigger(e,wp,{relatedTarget:i}).defaultPrevented||s&&s.defaultPrevented||(this._deactivate(i,e),this._activate(e,i))}_activate(e,i){if(!e)return;e.classList.add(Ci),this._activate(te.getElementFromSelector(e));let s=()=>{if(e.getAttribute("role")!=="tab"){e.classList.add(Zs);return}e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),B.trigger(e,xp,{relatedTarget:i})};this._queueCallback(s,e,e.classList.contains(rl))}_deactivate(e,i){if(!e)return;e.classList.remove(Ci),e.blur(),this._deactivate(te.getElementFromSelector(e));let s=()=>{if(e.getAttribute("role")!=="tab"){e.classList.remove(Zs);return}e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),B.trigger(e,Tp,{relatedTarget:i})};this._queueCallback(s,e,e.classList.contains(rl))}_keydown(e){if(![Op,tl,Dp,il,Qs,nl].includes(e.key))return;e.stopPropagation(),e.preventDefault();let i=this._getChildren().filter(o=>!ti(o)),s;if([Qs,nl].includes(e.key))s=i[e.key===Qs?0:i.length-1];else{let o=[tl,il].includes(e.key);s=ao(i,e.target,o,!0)}s&&(s.focus({preventScroll:!0}),t.getOrCreateInstance(s).show())}_getChildren(){return te.find(to,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,i){this._setAttributeIfNotExists(e,"role","tablist");for(let s of i)this._setInitialAttributesOnChild(s)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);let i=this._elemIsActive(e),s=this._getOuterElement(e);e.setAttribute("aria-selected",i),s!==e&&this._setAttributeIfNotExists(s,"role","presentation"),i||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){let i=te.getElementFromSelector(e);i&&(this._setAttributeIfNotExists(i,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(i,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,i){let s=this._getOuterElement(e);if(!s.classList.contains(Lp))return;let o=(c,d)=>{let g=te.findOne(c,s);g&&g.classList.toggle(d,i)};o(Ll,Ci),o(Np,Zs),s.setAttribute("aria-expanded",i)}_setAttributeIfNotExists(e,i,s){e.hasAttribute(i)||e.setAttribute(i,s)}_elemIsActive(e){return e.classList.contains(Ci)}_getInnerElement(e){return e.matches(to)?e:te.findOne(to,e)}_getOuterElement(e){return e.closest(Ip)||e}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this);if(typeof e=="string"){if(i[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);i[e]()}})}};B.on(document,Cp,Nl,function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),!ti(this)&&In.getOrCreateInstance(this).show()});B.on(window,kp,()=>{for(let t of te.find($p))In.getOrCreateInstance(t)});mt(In);var Mp="toast",Hp="bs.toast",si=`.${Hp}`,Fp=`mouseover${si}`,jp=`mouseout${si}`,Bp=`focusin${si}`,Up=`focusout${si}`,Vp=`hide${si}`,Wp=`hidden${si}`,qp=`show${si}`,zp=`shown${si}`,Kp="fade",sl="hide",Ar="show",Tr="showing",Xp={animation:"boolean",autohide:"boolean",delay:"number"},Yp={animation:!0,autohide:!0,delay:5e3},Rr=class t extends nt{constructor(e,i){super(e,i),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Yp}static get DefaultType(){return Xp}static get NAME(){return Mp}show(){if(B.trigger(this._element,qp).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(Kp);let i=()=>{this._element.classList.remove(Tr),B.trigger(this._element,zp),this._maybeScheduleHide()};this._element.classList.remove(sl),Rn(this._element),this._element.classList.add(Ar,Tr),this._queueCallback(i,this._element,this._config.animation)}hide(){if(!this.isShown()||B.trigger(this._element,Vp).defaultPrevented)return;let i=()=>{this._element.classList.add(sl),this._element.classList.remove(Tr,Ar),B.trigger(this._element,Wp)};this._element.classList.add(Tr),this._queueCallback(i,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Ar),super.dispose()}isShown(){return this._element.classList.contains(Ar)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,i){switch(e.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=i;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=i;break}}if(i){this._clearTimeout();return}let s=e.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){B.on(this._element,Fp,e=>this._onInteraction(e,!0)),B.on(this._element,jp,e=>this._onInteraction(e,!1)),B.on(this._element,Bp,e=>this._onInteraction(e,!0)),B.on(this._element,Up,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){let i=t.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof i[e]>"u")throw new TypeError(`No method named "${e}"`);i[e](this)}})}};$r(Rr);mt(Rr);var L_=yn(Pl());var fo=yn(ar());(0,fo.default)(function(){(0,fo.default)("select.tree").change(function(){document.location=this.value})});var Fr=yn(ar());var Jp={"kmx-black":"#1e1f1d","kmx-blue":"#5a60f9","kmx-blue1":"#6f72f9","kmx-blue2":"#9c99fd","kmx-blue3":"#5a60f9","kmx-blue4":"#6f72f9","kmx-blue5":"#9c99fd",index:["kmx-black","kmx-blue","kmx-blue1","kmx-blue2","kmx-blue3","kmx-blue4","kmx-blue5","kmx-cyan","kmx-cyan1","kmx-green","kmx-green1","kmx-orange","kmx-orange1","kmx-orange2","kmx-pink","kmx-white","kmx-white1","kmx-white2","kmx-yellow","kmx-yellow1","kmx-yellow2","kmx-yellow3"],"kmx-cyan":"#d4f3f6","kmx-cyan1":"#d4f3f6","kmx-green":"#c4ed3a","kmx-green1":"#c4ed3a","kmx-orange":"#f8681c","kmx-orange1":"#fa7734","kmx-orange2":"#ffa532","kmx-pink":"#fc9ef9","kmx-white":"#f5f8f4","kmx-white1":"#fff9f2","kmx-white2":"#ffffff","kmx-yellow":"#ecfe49","kmx-yellow1":"#fff43e","kmx-yellow2":"#ecfe49","kmx-yellow3":"#fff43e"},Hr=Jp;function Il(t){return Math.floor(Math.random()*t)}(0,Fr.default)(function(){setInterval(function(){let t=Il(Hr.index.length),e=Hr.index[t],i=Hr[e],s=(Il(99)-48)*.002;(0,Fr.default)("a").css("text-shadow","0 0 0"),(0,Fr.default)("a:hover").css("text-shadow",s+"em 0 0 "+i)},200)});(function(){var t=e();function e(){if(typeof window.CustomEvent=="function")return window.CustomEvent;function o(c,d){d=d||{bubbles:!1,cancelable:!1,detail:void 0};var g=document.createEvent("CustomEvent");return g.initCustomEvent(c,d.bubbles,d.cancelable,d.detail),g}return o.prototype=window.Event.prototype,o}function i(o,c){var d=document.createElement("input");return d.type="hidden",d.name=o,d.value=c,d}function s(o,c){var d=o.getAttribute("data-to"),g=i("_method",o.getAttribute("data-method")),v=i("_csrf_token",o.getAttribute("data-csrf")),C=document.createElement("form"),x=document.createElement("input"),I=o.getAttribute("target");C.method=o.getAttribute("data-method")==="get"?"get":"post",C.action=d,C.style.display="none",I?C.target=I:c&&(C.target="_blank"),C.appendChild(v),C.appendChild(g),document.body.appendChild(C),x.type="submit",C.appendChild(x),x.click()}window.addEventListener("click",function(o){var c=o.target;if(!o.defaultPrevented)for(;c&&c.getAttribute;){var d=new t("phoenix.link.click",{bubbles:!0,cancelable:!0});if(!c.dispatchEvent(d))return o.preventDefault(),o.stopImmediatePropagation(),!1;if(c.getAttribute("data-method"))return s(c,o.metaKey||o.shiftKey),o.preventDefault(),!1;c=c.parentNode}},!1),window.addEventListener("phoenix.link.click",function(o){var c=o.target.getAttribute("data-confirm");c&&!window.confirm(c)&&o.preventDefault()},!1)})();var Hn=t=>typeof t=="function"?t:function(){return t},Qp=typeof self<"u"?self:null,Mn=typeof window<"u"?window:null,Fn=Qp||Mn||Fn,Zp="2.0.0",Ot={connecting:0,open:1,closing:2,closed:3},eg=1e4,tg=1e3,rt={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},Wt={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},po={longpoll:"longpoll",websocket:"websocket"},ig={complete:4},jr=class{constructor(t,e,i,s){this.channel=t,this.event=e,this.payload=i||function(){return{}},this.receivedResp=null,this.timeout=s,this.timeoutTimer=null,this.recHooks=[],this.sent=!1}resend(t){this.timeout=t,this.reset(),this.send()}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}matchReceive({status:t,response:e,_ref:i}){this.recHooks.filter(s=>s.status===t).forEach(s=>s.callback(e))}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent)}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t)}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{})},this.timeout)}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e})}},Rl=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=null,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback()},this.timerCalc(this.tries+1))}},ng=class{constructor(t,e,i){this.state=rt.closed,this.topic=t,this.params=Hn(e||{}),this.socket=i,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new jr(this,Wt.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new Rl(()=>{this.socket.isConnected()&&this.rejoin()},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin()})),this.joinPush.receive("ok",()=>{this.state=rt.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(s=>s.send()),this.pushBuffer=[]}),this.joinPush.receive("error",()=>{this.state=rt.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic} ${this.joinRef()}`),this.state=rt.closed,this.socket.remove(this)}),this.onError(s=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,s),this.isJoining()&&this.joinPush.reset(),this.state=rt.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic} (${this.joinRef()})`,this.joinPush.timeout),new jr(this,Wt.leave,Hn({}),this.timeout).send(),this.state=rt.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(Wt.reply,(s,o)=>{this.trigger(this.replyEventName(o),s)})}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=!0,this.rejoin(),this.joinPush}onClose(t){this.on(Wt.close,t)}onError(t){return this.on(Wt.error,e=>t(e))}on(t,e){let i=this.bindingRef++;return this.bindings.push({event:t,ref:i,callback:e}),i}off(t,e){this.bindings=this.bindings.filter(i=>!(i.event===t&&(typeof e>"u"||e===i.ref)))}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,i=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let s=new jr(this,t,function(){return e},i);return this.canPush()?s.send():(s.startTimeout(),this.pushBuffer.push(s)),s}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=rt.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(Wt.close,"leave")},i=new jr(this,Wt.leave,Hn({}),t);return i.receive("ok",()=>e()).receive("timeout",()=>e()),i.send(),this.canPush()||i.trigger("ok",{}),i}onMessage(t,e,i){return e}isMember(t,e,i,s){return this.topic!==t?!1:s&&s!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:i,joinRef:s}),!1):!0}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=rt.joining,this.joinPush.resend(t))}trigger(t,e,i,s){let o=this.onMessage(t,e,i,s);if(e&&!o)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let c=this.bindings.filter(d=>d.event===t);for(let d=0;d<c.length;d++)c[d].callback(o,i,s||this.joinRef())}replyEventName(t){return`chan_reply_${t}`}isClosed(){return this.state===rt.closed}isErrored(){return this.state===rt.errored}isJoined(){return this.state===rt.joined}isJoining(){return this.state===rt.joining}isLeaving(){return this.state===rt.leaving}},Ur=class{static request(t,e,i,s,o,c,d){if(Fn.XDomainRequest){let g=new Fn.XDomainRequest;return this.xdomainRequest(g,t,e,s,o,c,d)}else{let g=new Fn.XMLHttpRequest;return this.xhrRequest(g,t,e,i,s,o,c,d)}}static xdomainRequest(t,e,i,s,o,c,d){return t.timeout=o,t.open(e,i),t.onload=()=>{let g=this.parseJSON(t.responseText);d&&d(g)},c&&(t.ontimeout=c),t.onprogress=()=>{},t.send(s),t}static xhrRequest(t,e,i,s,o,c,d,g){return t.open(e,i,!0),t.timeout=c,t.setRequestHeader("Content-Type",s),t.onerror=()=>g&&g(null),t.onreadystatechange=()=>{if(t.readyState===ig.complete&&g){let v=this.parseJSON(t.responseText);g(v)}},d&&(t.ontimeout=d),t.send(o),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let i=[];for(var s in t){if(!Object.prototype.hasOwnProperty.call(t,s))continue;let o=e?`${e}[${s}]`:s,c=t[s];typeof c=="object"?i.push(this.serialize(c,o)):i.push(encodeURIComponent(o)+"="+encodeURIComponent(c))}return i.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let i=t.match(/\?/)?"&":"?";return`${t}${i}${this.serialize(e)}`}},ho=class{constructor(t){this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.reqs=new Set,this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=Ot.connecting,this.poll()}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+po.websocket),"$1/"+po.longpoll)}endpointURL(){return Ur.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,i){this.close(t,e,i),this.readyState=Ot.connecting}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",!1)}isActive(){return this.readyState===Ot.open||this.readyState===Ot.connecting}poll(){this.ajax("GET",null,()=>this.ontimeout(),t=>{if(t){var{status:e,token:i,messages:s}=t;this.token=i}else e=0;switch(e){case 200:s.forEach(o=>{setTimeout(()=>this.onmessage({data:o}),0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=Ot.open,this.onopen({}),this.poll();break;case 403:this.onerror(403),this.close(1008,"forbidden",!1);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${e}`)}})}send(t){this.ajax("POST",t,()=>this.onerror("timeout"),e=>{(!e||e.status!==200)&&(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",!1))})}close(t,e,i){for(let o of this.reqs)o.abort();this.readyState=Ot.closed;let s=Object.assign({code:1e3,reason:void 0,wasClean:!0},{code:t,reason:e,wasClean:i});typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",s)):this.onclose(s)}ajax(t,e,i,s){let o,c=()=>{this.reqs.delete(o),i()};o=Ur.request(t,this.endpointURL(),"application/json",e,this.timeout,c,d=>{this.reqs.delete(o),this.isActive()&&s(d)}),this.reqs.add(o)}};var Br={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let i=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(i))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[i,s,o,c,d]=JSON.parse(t);return e({join_ref:i,ref:s,topic:o,event:c,payload:d})}},binaryEncode(t){let{join_ref:e,ref:i,event:s,topic:o,payload:c}=t,d=this.META_LENGTH+e.length+i.length+o.length+s.length,g=new ArrayBuffer(this.HEADER_LENGTH+d),v=new DataView(g),C=0;v.setUint8(C++,this.KINDS.push),v.setUint8(C++,e.length),v.setUint8(C++,i.length),v.setUint8(C++,o.length),v.setUint8(C++,s.length),Array.from(e,I=>v.setUint8(C++,I.charCodeAt(0))),Array.from(i,I=>v.setUint8(C++,I.charCodeAt(0))),Array.from(o,I=>v.setUint8(C++,I.charCodeAt(0))),Array.from(s,I=>v.setUint8(C++,I.charCodeAt(0)));var x=new Uint8Array(g.byteLength+c.byteLength);return x.set(new Uint8Array(g),0),x.set(new Uint8Array(c),g.byteLength),x.buffer},binaryDecode(t){let e=new DataView(t),i=e.getUint8(0),s=new TextDecoder;switch(i){case this.KINDS.push:return this.decodePush(t,e,s);case this.KINDS.reply:return this.decodeReply(t,e,s);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,s)}},decodePush(t,e,i){let s=e.getUint8(1),o=e.getUint8(2),c=e.getUint8(3),d=this.HEADER_LENGTH+this.META_LENGTH-1,g=i.decode(t.slice(d,d+s));d=d+s;let v=i.decode(t.slice(d,d+o));d=d+o;let C=i.decode(t.slice(d,d+c));d=d+c;let x=t.slice(d,t.byteLength);return{join_ref:g,ref:null,topic:v,event:C,payload:x}},decodeReply(t,e,i){let s=e.getUint8(1),o=e.getUint8(2),c=e.getUint8(3),d=e.getUint8(4),g=this.HEADER_LENGTH+this.META_LENGTH,v=i.decode(t.slice(g,g+s));g=g+s;let C=i.decode(t.slice(g,g+o));g=g+o;let x=i.decode(t.slice(g,g+c));g=g+c;let I=i.decode(t.slice(g,g+d));g=g+d;let D=t.slice(g,t.byteLength),S={status:I,response:D};return{join_ref:v,ref:C,topic:x,event:Wt.reply,payload:S}},decodeBroadcast(t,e,i){let s=e.getUint8(1),o=e.getUint8(2),c=this.HEADER_LENGTH+2,d=i.decode(t.slice(c,c+s));c=c+s;let g=i.decode(t.slice(c,c+o));c=c+o;let v=t.slice(c,t.byteLength);return{join_ref:null,ref:null,topic:d,event:g,payload:v}}},$l=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.timeout=e.timeout||eg,this.transport=e.transport||Fn.WebSocket||ho,this.establishedConnections=0,this.defaultEncoder=Br.encode.bind(Br),this.defaultDecoder=Br.decode.bind(Br),this.closeWasClean=!1,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.transport!==ho?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let i=null;Mn&&Mn.addEventListener&&(Mn.addEventListener("pagehide",s=>{this.conn&&(this.disconnect(),i=this.connectClock)}),Mn.addEventListener("pageshow",s=>{i===this.connectClock&&(i=null,this.connect())})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.rejoinAfterMs=s=>e.rejoinAfterMs?e.rejoinAfterMs(s):[1e3,2e3,5e3][s-1]||1e4,this.reconnectAfterMs=s=>e.reconnectAfterMs?e.reconnectAfterMs(s):[10,50,100,150,200,250,500,1e3,2e3][s-1]||5e3,this.logger=e.logger||null,this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=Hn(e.params||{}),this.endPoint=`${t}/${po.websocket}`,this.vsn=e.vsn||Zp,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new Rl(()=>{this.teardown(()=>this.connect())},this.reconnectAfterMs)}getLongPollTransport(){return ho}replaceTransport(t){this.connectClock++,this.closeWasClean=!0,this.reconnectTimer.reset(),this.sendBuffer=[],this.conn&&(this.conn.close(),this.conn=null),this.transport=t}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Ur.appendParams(Ur.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,i){this.connectClock++,this.closeWasClean=!0,this.reconnectTimer.reset(),this.teardown(t,e,i)}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=Hn(t)),!this.conn&&(this.connectClock++,this.closeWasClean=!1,this.conn=new this.transport(this.endPointURL()),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e))}log(t,e,i){this.logger(t,e,i)}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}ping(t){if(!this.isConnected())return!1;let e=this.makeRef(),i=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let s=this.onMessage(o=>{o.ref===e&&(this.off([s]),t(Date.now()-i))});return!0}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer)}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=!1,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.resetHeartbeat(),this.stateChangeCallbacks.open.forEach(([,t])=>t())}heartbeatTimeout(){this.pendingHeartbeatRef&&(this.pendingHeartbeatRef=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection"),this.triggerChanError(),this.closeWasClean=!1,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),tg,"heartbeat timeout"))}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(t,e,i){if(!this.conn)return t&&t();this.waitForBufferDone(()=>{this.conn&&(e?this.conn.close(e,i||""):this.conn.close()),this.waitForSocketClosed(()=>{this.conn&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t()})})}waitForBufferDone(t,e=1){if(e===5||!this.conn||!this.conn.bufferedAmount){t();return}setTimeout(()=>{this.waitForBufferDone(t,e+1)},150*e)}waitForSocketClosed(t,e=1){if(e===5||!this.conn||this.conn.readyState===Ot.closed){t();return}setTimeout(()=>{this.waitForSocketClosed(t,e+1)},150*e)}onConnClose(t){let e=t&&t.code;this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),this.clearHeartbeats(),!this.closeWasClean&&e!==1e3&&this.reconnectTimer.scheduleTimeout(),this.stateChangeCallbacks.close.forEach(([,i])=>i(t))}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,i=this.establishedConnections;this.stateChangeCallbacks.error.forEach(([,s])=>{s(t,e,i)}),(e===this.transport||i>0)&&this.triggerChanError()}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(Wt.error)})}connectionState(){switch(this.conn&&this.conn.readyState){case Ot.connecting:return"connecting";case Ot.open:return"open";case Ot.closing:return"closing";default:return"closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e.joinRef()!==t.joinRef())}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([i])=>t.indexOf(i)===-1)}channel(t,e={}){let i=new ng(t,e,this);return this.channels.push(i),i}push(t){if(this.hasLogger()){let{topic:e,event:i,payload:s,ref:o,join_ref:c}=t;this.log("push",`${e} ${i} (${c}, ${o})`,s)}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)))}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){this.pendingHeartbeatRef&&!this.isConnected()||(this.pendingHeartbeatRef=this.makeRef(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef}),this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs))}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[])}onConnMessage(t){this.decode(t.data,e=>{let{topic:i,event:s,payload:o,ref:c,join_ref:d}=e;c&&c===this.pendingHeartbeatRef&&(this.clearHeartbeats(),this.pendingHeartbeatRef=null,this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs)),this.hasLogger()&&this.log("receive",`${o.status||""} ${i} ${s} ${c&&"("+c+")"||""}`,o);for(let g=0;g<this.channels.length;g++){let v=this.channels[g];v.isMember(i,s,o,d)&&v.trigger(s,o,c,d)}for(let g=0;g<this.stateChangeCallbacks.message.length;g++){let[,v]=this.stateChangeCallbacks.message[g];v(e)}})}leaveOpenTopic(t){let e=this.channels.find(i=>i.topic===t&&(i.isJoined()||i.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave())}};var nu="consecutive-reloads",rg=10,sg=5e3,og=1e4,ag=3e4,ru=["phx-click-loading","phx-change-loading","phx-submit-loading","phx-keydown-loading","phx-keyup-loading","phx-blur-loading","phx-focus-loading"],ot="data-phx-component",go="data-phx-link",lg="track-static",ug="data-phx-link-state",Pt="data-phx-ref",Li="data-phx-ref-src",su="track-uploads",Ni="data-phx-upload-ref",Oo="data-phx-preflighted-refs",cg="data-phx-done-refs",Ml="drop-target",To="data-phx-active-refs",wo="phx:live-file:updated",xo="data-phx-skip",Hl="data-phx-prune",Fl="page-loading",jl="phx-connected",mo="phx-loading",Bl="phx-no-feedback",Ul="phx-error",on="data-phx-parent-id",Do="data-phx-main",Kn="data-phx-root-id",fg="trigger-action",Co="feedback-for",ou="phx-has-focused",hg=["text","textarea","number","email","password","search","tel","url","date","time","datetime-local","color","range"],au=["checkbox","radio"],lu="phx-has-submitted",li="data-phx-session",an=`[${li}]`,Vl="data-phx-sticky",qn="data-phx-static",vo="data-phx-readonly",Vr="data-phx-disabled",So="disable-with",Wr="data-phx-disable-with-restore",jn="hook",dg="debounce",pg="throttle",ko="update",gg="key",Dt="phxPrivate",Wl="auto-recover",qr="phx:live-socket:debug",bo="phx:live-socket:profiling",yo="phx:live-socket:latency-sim",mg="progress",vg=1,bg=200,yg="phx-",_g=3e4,Bn="debounce-trigger",zr="throttled",ql="debounce-prev-key",Eg={debounce:300,throttle:300},zl="d",Lt="s",st="c",Kl="e",Xl="r",Yl="t",Ag="p",Tg=class{constructor(t,e,i){this.liveSocket=i,this.entry=t,this.offset=0,this.chunkSize=e,this.chunkTimer=null,this.uploadChannel=i.channel(`lvu:${t.ref}`,{token:t.metadata()})}error(t){clearTimeout(this.chunkTimer),this.uploadChannel.leave(),this.entry.error(t)}upload(){this.uploadChannel.onError(t=>this.error(t)),this.uploadChannel.join().receive("ok",t=>this.readNextChunk()).receive("error",t=>this.error(t))}isDone(){return this.offset>=this.entry.file.size}readNextChunk(){let t=new window.FileReader,e=this.entry.file.slice(this.offset,this.chunkSize+this.offset);t.onload=i=>{if(i.target.error===null)this.offset+=i.target.result.byteLength,this.pushChunk(i.target.result);else return We("Read error: "+i.target.error)},t.readAsArrayBuffer(e)}pushChunk(t){this.uploadChannel.isJoined()&&this.uploadChannel.push("chunk",t).receive("ok",()=>{this.entry.progress(this.offset/this.entry.file.size*100),this.isDone()||(this.chunkTimer=setTimeout(()=>this.readNextChunk(),this.liveSocket.getLatencySim()||0))})}},We=(t,e)=>console.error&&console.error(t,e),ai=t=>{let e=typeof t;return e==="number"||e==="string"&&/^(0|[1-9]\d*)$/.test(t)};function wg(){let t=new Set,e=document.querySelectorAll("*[id]");for(let i=0,s=e.length;i<s;i++)t.has(e[i].id)?console.error(`Multiple IDs detected: ${e[i].id}. Ensure unique element ids.`):t.add(e[i].id)}var xg=(t,e,i,s)=>{t.liveSocket.isDebugEnabled()&&console.log(`${t.id} ${e}: ${i} - `,s)},_o=t=>typeof t=="function"?t:function(){return t},Jr=t=>JSON.parse(JSON.stringify(t)),zn=(t,e,i)=>{do{if(t.matches(`[${e}]`))return t;t=t.parentElement||t.parentNode}while(t!==null&&t.nodeType===1&&!(i&&i.isSameNode(t)||t.matches(an)));return null},Un=t=>t!==null&&typeof t=="object"&&!(t instanceof Array),Cg=(t,e)=>JSON.stringify(t)===JSON.stringify(e),Gl=t=>{for(let e in t)return!1;return!0},qt=(t,e)=>t&&e(t),Sg=function(t,e,i,s){t.forEach(o=>{new Tg(o,i.config.chunk_size,s).upload()})},uu={canPushState(){return typeof history.pushState<"u"},dropLocal(t,e,i){return t.removeItem(this.localKey(e,i))},updateLocal(t,e,i,s,o){let c=this.getLocal(t,e,i),d=this.localKey(e,i),g=c===null?s:o(c);return t.setItem(d,JSON.stringify(g)),g},getLocal(t,e,i){return JSON.parse(t.getItem(this.localKey(e,i)))},updateCurrentState(t){this.canPushState()&&history.replaceState(t(history.state||{}),"",window.location.href)},pushState(t,e,i){if(this.canPushState()){if(i!==window.location.href){if(e.type=="redirect"&&e.scroll){let o=history.state||{};o.scroll=e.scroll,history.replaceState(o,"",window.location.href)}delete e.scroll,history[t+"State"](e,"",i||null);let s=this.getHashTargetEl(window.location.hash);s?s.scrollIntoView():e.type==="redirect"&&window.scroll(0,0)}}else this.redirect(i)},setCookie(t,e){document.cookie=`${t}=${e}`},getCookie(t){return document.cookie.replace(new RegExp(`(?:(?:^|.*;s*)${t}s*=s*([^;]*).*$)|^.*$`),"$1")},redirect(t,e){e&&uu.setCookie("__phoenix_flash__",e+"; max-age=60000; path=/"),window.location=t},localKey(t,e){return`${t}-${e}`},getHashTargetEl(t){let e=t.toString().substring(1);if(e!=="")return document.getElementById(e)||document.querySelector(`a[name="${e}"]`)}},oi=uu,Et={byId(t){return document.getElementById(t)||We(`no id found for ${t}`)},removeClass(t,e){t.classList.remove(e),t.classList.length===0&&t.removeAttribute("class")},all(t,e,i){if(!t)return[];let s=Array.from(t.querySelectorAll(e));return i?s.forEach(i):s},childNodeLength(t){let e=document.createElement("template");return e.innerHTML=t,e.content.childElementCount},isUploadInput(t){return t.type==="file"&&t.getAttribute(Ni)!==null},findUploadInputs(t){return this.all(t,`input[type="file"][${Ni}]`)},findComponentNodeList(t,e){return this.filterWithinSameLiveView(this.all(t,`[${ot}="${e}"]`),t)},isPhxDestroyed(t){return!!(t.id&&Et.private(t,"destroyed"))},markPhxChildDestroyed(t){this.isPhxChild(t)&&t.setAttribute(li,""),this.putPrivate(t,"destroyed",!0)},findPhxChildrenInFragment(t,e){let i=document.createElement("template");return i.innerHTML=t,this.findPhxChildren(i.content,e)},isIgnored(t,e){return(t.getAttribute(e)||t.getAttribute("data-phx-update"))==="ignore"},isPhxUpdate(t,e,i){return t.getAttribute&&i.indexOf(t.getAttribute(e))>=0},findPhxSticky(t){return this.all(t,`[${Vl}]`)},findPhxChildren(t,e){return this.all(t,`${an}[${on}="${e}"]`)},findParentCIDs(t,e){let i=new Set(e);return e.reduce((s,o)=>{let c=`[${ot}="${o}"] [${ot}]`;return this.filterWithinSameLiveView(this.all(t,c),t).map(d=>parseInt(d.getAttribute(ot))).forEach(d=>s.delete(d)),s},i)},filterWithinSameLiveView(t,e){return e.querySelector(an)?t.filter(i=>this.withinSameLiveView(i,e)):t},withinSameLiveView(t,e){for(;t=t.parentNode;){if(t.isSameNode(e))return!0;if(t.getAttribute(li)!==null)return!1}},private(t,e){return t[Dt]&&t[Dt][e]},deletePrivate(t,e){t[Dt]&&delete t[Dt][e]},putPrivate(t,e,i){t[Dt]||(t[Dt]={}),t[Dt][e]=i},updatePrivate(t,e,i,s){let o=this.private(t,e);o===void 0?this.putPrivate(t,e,s(i)):this.putPrivate(t,e,s(o))},copyPrivates(t,e){e[Dt]&&(t[Dt]=e[Dt])},putTitle(t){let e=document.querySelector("title"),{prefix:i,suffix:s}=e.dataset;document.title=`${i||""}${t}${s||""}`},debounce(t,e,i,s,o,c,d,g){let v=t.getAttribute(i),C=t.getAttribute(o);v===""&&(v=s),C===""&&(C=c);let x=v||C;switch(x){case null:return g();case"blur":this.once(t,"debounce-blur")&&t.addEventListener("blur",()=>g());return;default:let I=parseInt(x),D=()=>C?this.deletePrivate(t,zr):g(),S=this.incCycle(t,Bn,D);if(isNaN(I))return We(`invalid throttle/debounce value: ${x}`);if(C){let A=!1;if(e.type==="keydown"){let _=this.private(t,ql);this.putPrivate(t,ql,e.key),A=_!==e.key}if(!A&&this.private(t,zr))return!1;g(),this.putPrivate(t,zr,!0),setTimeout(()=>{d()&&this.triggerCycle(t,Bn)},I)}else setTimeout(()=>{d()&&this.triggerCycle(t,Bn,S)},I);let N=t.form;N&&this.once(N,"bind-debounce")&&N.addEventListener("submit",()=>{Array.from(new FormData(N).entries(),([A])=>{let _=N.querySelector(`[name="${A}"]`);this.incCycle(_,Bn),this.deletePrivate(_,zr)})}),this.once(t,"bind-debounce")&&t.addEventListener("blur",()=>this.triggerCycle(t,Bn))}},triggerCycle(t,e,i){let[s,o]=this.private(t,e);i||(i=s),i===s&&(this.incCycle(t,e),o())},once(t,e){return this.private(t,e)===!0?!1:(this.putPrivate(t,e,!0),!0)},incCycle(t,e,i=function(){}){let[s]=this.private(t,e)||[0,i];return s++,this.putPrivate(t,e,[s,i]),s},discardError(t,e,i){let s=e.getAttribute&&e.getAttribute(i),o=s&&t.querySelector(`[id="${s}"], [name="${s}"]`);o&&(this.private(o,ou)||this.private(o.form,lu)||e.classList.add(Bl))},showError(t,e){(t.id||t.name)&&this.all(t.form,`[${e}="${t.id}"], [${e}="${t.name}"]`,i=>{this.removeClass(i,Bl)})},isPhxChild(t){return t.getAttribute&&t.getAttribute(on)},isPhxSticky(t){return t.getAttribute&&t.getAttribute(Vl)!==null},firstPhxChild(t){return this.isPhxChild(t)?t:this.all(t,`[${on}]`)[0]},dispatchEvent(t,e,i={}){let o={bubbles:i.bubbles===void 0?!0:!!i.bubbles,cancelable:!0,detail:i.detail||{}},c=e==="click"?new MouseEvent("click",o):new CustomEvent(e,o);t.dispatchEvent(c)},cloneNode(t,e){if(typeof e>"u")return t.cloneNode(!0);{let i=t.cloneNode(!1);return i.innerHTML=e,i}},mergeAttrs(t,e,i={}){let s=i.exclude||[],o=i.isIgnored,c=e.attributes;for(let g=c.length-1;g>=0;g--){let v=c[g].name;s.indexOf(v)<0&&t.setAttribute(v,e.getAttribute(v))}let d=t.attributes;for(let g=d.length-1;g>=0;g--){let v=d[g].name;o?v.startsWith("data-")&&!e.hasAttribute(v)&&t.removeAttribute(v):e.hasAttribute(v)||t.removeAttribute(v)}},mergeFocusedInput(t,e){t instanceof HTMLSelectElement||Et.mergeAttrs(t,e,{exclude:["value"]}),e.readOnly?t.setAttribute("readonly",!0):t.removeAttribute("readonly")},hasSelectionRange(t){return t.setSelectionRange&&(t.type==="text"||t.type==="textarea")},restoreFocus(t,e,i){if(!Et.isTextualInput(t))return;let s=t.matches(":focus");t.readOnly&&t.blur(),s||t.focus(),this.hasSelectionRange(t)&&t.setSelectionRange(e,i)},isFormInput(t){return/^(?:input|select|textarea)$/i.test(t.tagName)&&t.type!=="button"},syncAttrsToProps(t){t instanceof HTMLInputElement&&au.indexOf(t.type.toLocaleLowerCase())>=0&&(t.checked=t.getAttribute("checked")!==null)},isTextualInput(t){return hg.indexOf(t.type)>=0},isNowTriggerFormExternal(t,e){return t.getAttribute&&t.getAttribute(e)!==null},syncPendingRef(t,e,i){let s=t.getAttribute(Pt);if(s===null)return!0;let o=t.getAttribute(Li);return Et.isFormInput(t)||t.getAttribute(i)!==null?(Et.isUploadInput(t)&&Et.mergeAttrs(t,e,{isIgnored:!0}),Et.putPrivate(t,Pt,e),!1):(ru.forEach(c=>{t.classList.contains(c)&&e.classList.add(c)}),e.setAttribute(Pt,s),e.setAttribute(Li,o),!0)},cleanChildNodes(t,e){if(Et.isPhxUpdate(t,e,["append","prepend"])){let i=[];t.childNodes.forEach(s=>{s.id||(s.nodeType===Node.TEXT_NODE&&s.nodeValue.trim()===""||We(`only HTML element tags with an id are allowed inside containers with phx-update.
+(() => {
+ var __create = Object.create;
+ var __defProp = Object.defineProperty;
+ var __defProps = Object.defineProperties;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+ var __getProtoOf = Object.getPrototypeOf;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+ var __spreadValues = (a, b) => {
+ for (var prop in b || (b = {}))
+ if (__hasOwnProp.call(b, prop))
+ __defNormalProp(a, prop, b[prop]);
+ if (__getOwnPropSymbols)
+ for (var prop of __getOwnPropSymbols(b)) {
+ if (__propIsEnum.call(b, prop))
+ __defNormalProp(a, prop, b[prop]);
+ }
+ return a;
+ };
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
+ var __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+ };
+ var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+ ));
-removing illegal node: "${(s.outerHTML||s.nodeValue).trim()}"
+ // node_modules/jquery/dist/jquery.js
+ var require_jquery = __commonJS({
+ "node_modules/jquery/dist/jquery.js"(exports, module) {
+ (function(global3, factory) {
+ "use strict";
+ if (typeof module === "object" && typeof module.exports === "object") {
+ module.exports = global3.document ? factory(global3, true) : function(w) {
+ if (!w.document) {
+ throw new Error("jQuery requires a window with a document");
+ }
+ return factory(w);
+ };
+ } else {
+ factory(global3);
+ }
+ })(typeof window !== "undefined" ? window : exports, function(window2, noGlobal) {
+ "use strict";
+ var arr = [];
+ var getProto = Object.getPrototypeOf;
+ var slice = arr.slice;
+ var flat = arr.flat ? function(array) {
+ return arr.flat.call(array);
+ } : function(array) {
+ return arr.concat.apply([], array);
+ };
+ var push = arr.push;
+ var indexOf = arr.indexOf;
+ var class2type = {};
+ var toString = class2type.toString;
+ var hasOwn = class2type.hasOwnProperty;
+ var fnToString = hasOwn.toString;
+ var ObjectFunctionString = fnToString.call(Object);
+ var support = {};
+ var isFunction = function isFunction2(obj) {
+ return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function";
+ };
+ var isWindow = function isWindow2(obj) {
+ return obj != null && obj === obj.window;
+ };
+ var document2 = window2.document;
+ var preservedScriptAttributes = {
+ type: true,
+ src: true,
+ nonce: true,
+ noModule: true
+ };
+ function DOMEval(code, node, doc2) {
+ doc2 = doc2 || document2;
+ var i, val, script = doc2.createElement("script");
+ script.text = code;
+ if (node) {
+ for (i in preservedScriptAttributes) {
+ val = node[i] || node.getAttribute && node.getAttribute(i);
+ if (val) {
+ script.setAttribute(i, val);
+ }
+ }
+ }
+ doc2.head.appendChild(script).parentNode.removeChild(script);
+ }
+ function toType2(obj) {
+ if (obj == null) {
+ return obj + "";
+ }
+ return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
+ }
+ var version = "3.7.1", rhtmlSuffix = /HTML$/i, jQuery = function(selector, context) {
+ return new jQuery.fn.init(selector, context);
+ };
+ jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: version,
+ constructor: jQuery,
+ // The default length of a jQuery object is 0
+ length: 0,
+ toArray: function() {
+ return slice.call(this);
+ },
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function(num) {
+ if (num == null) {
+ return slice.call(this);
+ }
+ return num < 0 ? this[num + this.length] : this[num];
+ },
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function(elems) {
+ var ret = jQuery.merge(this.constructor(), elems);
+ ret.prevObject = this;
+ return ret;
+ },
+ // Execute a callback for every element in the matched set.
+ each: function(callback) {
+ return jQuery.each(this, callback);
+ },
+ map: function(callback) {
+ return this.pushStack(jQuery.map(this, function(elem, i) {
+ return callback.call(elem, i, elem);
+ }));
+ },
+ slice: function() {
+ return this.pushStack(slice.apply(this, arguments));
+ },
+ first: function() {
+ return this.eq(0);
+ },
+ last: function() {
+ return this.eq(-1);
+ },
+ even: function() {
+ return this.pushStack(jQuery.grep(this, function(_elem, i) {
+ return (i + 1) % 2;
+ }));
+ },
+ odd: function() {
+ return this.pushStack(jQuery.grep(this, function(_elem, i) {
+ return i % 2;
+ }));
+ },
+ eq: function(i) {
+ var len = this.length, j = +i + (i < 0 ? len : 0);
+ return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
+ },
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push,
+ sort: arr.sort,
+ splice: arr.splice
+ };
+ jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone2, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;
+ if (typeof target === "boolean") {
+ deep = target;
+ target = arguments[i] || {};
+ i++;
+ }
+ if (typeof target !== "object" && !isFunction(target)) {
+ target = {};
+ }
+ if (i === length) {
+ target = this;
+ i--;
+ }
+ for (; i < length; i++) {
+ if ((options = arguments[i]) != null) {
+ for (name in options) {
+ copy = options[name];
+ if (name === "__proto__" || target === copy) {
+ continue;
+ }
+ if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
+ src = target[name];
+ if (copyIsArray && !Array.isArray(src)) {
+ clone2 = [];
+ } else if (!copyIsArray && !jQuery.isPlainObject(src)) {
+ clone2 = {};
+ } else {
+ clone2 = src;
+ }
+ copyIsArray = false;
+ target[name] = jQuery.extend(deep, clone2, copy);
+ } else if (copy !== void 0) {
+ target[name] = copy;
+ }
+ }
+ }
+ }
+ return target;
+ };
+ jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+ error: function(msg) {
+ throw new Error(msg);
+ },
+ noop: function() {
+ },
+ isPlainObject: function(obj) {
+ var proto, Ctor;
+ if (!obj || toString.call(obj) !== "[object Object]") {
+ return false;
+ }
+ proto = getProto(obj);
+ if (!proto) {
+ return true;
+ }
+ Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
+ },
+ isEmptyObject: function(obj) {
+ var name;
+ for (name in obj) {
+ return false;
+ }
+ return true;
+ },
+ // Evaluates a script in a provided context; falls back to the global one
+ // if not specified.
+ globalEval: function(code, options, doc2) {
+ DOMEval(code, { nonce: options && options.nonce }, doc2);
+ },
+ each: function(obj, callback) {
+ var length, i = 0;
+ if (isArrayLike(obj)) {
+ length = obj.length;
+ for (; i < length; i++) {
+ if (callback.call(obj[i], i, obj[i]) === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ if (callback.call(obj[i], i, obj[i]) === false) {
+ break;
+ }
+ }
+ }
+ return obj;
+ },
+ // Retrieve the text value of an array of DOM nodes
+ text: function(elem) {
+ var node, ret = "", i = 0, nodeType = elem.nodeType;
+ if (!nodeType) {
+ while (node = elem[i++]) {
+ ret += jQuery.text(node);
+ }
+ }
+ if (nodeType === 1 || nodeType === 11) {
+ return elem.textContent;
+ }
+ if (nodeType === 9) {
+ return elem.documentElement.textContent;
+ }
+ if (nodeType === 3 || nodeType === 4) {
+ return elem.nodeValue;
+ }
+ return ret;
+ },
+ // results is for internal usage only
+ makeArray: function(arr2, results) {
+ var ret = results || [];
+ if (arr2 != null) {
+ if (isArrayLike(Object(arr2))) {
+ jQuery.merge(
+ ret,
+ typeof arr2 === "string" ? [arr2] : arr2
+ );
+ } else {
+ push.call(ret, arr2);
+ }
+ }
+ return ret;
+ },
+ inArray: function(elem, arr2, i) {
+ return arr2 == null ? -1 : indexOf.call(arr2, elem, i);
+ },
+ isXMLDoc: function(elem) {
+ var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement;
+ return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML");
+ },
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function(first, second) {
+ var len = +second.length, j = 0, i = first.length;
+ for (; j < len; j++) {
+ first[i++] = second[j];
+ }
+ first.length = i;
+ return first;
+ },
+ grep: function(elems, callback, invert) {
+ var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;
+ for (; i < length; i++) {
+ callbackInverse = !callback(elems[i], i);
+ if (callbackInverse !== callbackExpect) {
+ matches.push(elems[i]);
+ }
+ }
+ return matches;
+ },
+ // arg is for internal usage only
+ map: function(elems, callback, arg) {
+ var length, value, i = 0, ret = [];
+ if (isArrayLike(elems)) {
+ length = elems.length;
+ for (; i < length; i++) {
+ value = callback(elems[i], i, arg);
+ if (value != null) {
+ ret.push(value);
+ }
+ }
+ } else {
+ for (i in elems) {
+ value = callback(elems[i], i, arg);
+ if (value != null) {
+ ret.push(value);
+ }
+ }
+ }
+ return flat(ret);
+ },
+ // A global GUID counter for objects
+ guid: 1,
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support
+ });
+ if (typeof Symbol === "function") {
+ jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
+ }
+ jQuery.each(
+ "Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),
+ function(_i, name) {
+ class2type["[object " + name + "]"] = name.toLowerCase();
+ }
+ );
+ function isArrayLike(obj) {
+ var length = !!obj && "length" in obj && obj.length, type = toType2(obj);
+ if (isFunction(obj) || isWindow(obj)) {
+ return false;
+ }
+ return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
+ }
+ function nodeName(elem, name) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ }
+ var pop = arr.pop;
+ var sort = arr.sort;
+ var splice = arr.splice;
+ var whitespace = "[\\x20\\t\\r\\n\\f]";
+ var rtrimCSS = new RegExp(
+ "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
+ "g"
+ );
+ jQuery.contains = function(a, b) {
+ var bup = b && b.parentNode;
+ return a === bup || !!(bup && bup.nodeType === 1 && // Support: IE 9 - 11+
+ // IE doesn't have `contains` on SVG.
+ (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
+ };
+ var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
+ function fcssescape(ch, asCodePoint) {
+ if (asCodePoint) {
+ if (ch === "\0") {
+ return "\uFFFD";
+ }
+ return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
+ }
+ return "\\" + ch;
+ }
+ jQuery.escapeSelector = function(sel) {
+ return (sel + "").replace(rcssescape, fcssescape);
+ };
+ var preferredDoc = document2, pushNative = push;
+ (function() {
+ var i, Expr, outermostContext, sortInput, hasDuplicate, push2 = pushNative, document3, documentElement2, documentIsHTML, rbuggyQSA, matches, expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {
+ if (a === b) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ `*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(` + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + `)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|` + attributes + ")*)|.*)\\)|)", rwhitespace = new RegExp(whitespace + "+", "g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = {
+ ID: new RegExp("^#(" + identifier + ")"),
+ CLASS: new RegExp("^\\.(" + identifier + ")"),
+ TAG: new RegExp("^(" + identifier + "|[*])"),
+ ATTR: new RegExp("^" + attributes),
+ PSEUDO: new RegExp("^" + pseudos),
+ CHILD: new RegExp(
+ "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)",
+ "i"
+ ),
+ bool: new RegExp("^(?:" + booleans + ")$", "i"),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
+ }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr2 = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape, nonHex) {
+ var high = "0x" + escape.slice(1) - 65536;
+ if (nonHex) {
+ return nonHex;
+ }
+ return high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);
+ }, unloadHandler = function() {
+ setDocument();
+ }, inDisabledFieldset = addCombinator(
+ function(elem) {
+ return elem.disabled === true && nodeName(elem, "fieldset");
+ },
+ { dir: "parentNode", next: "legend" }
+ );
+ function safeActiveElement() {
+ try {
+ return document3.activeElement;
+ } catch (err) {
+ }
+ }
+ try {
+ push2.apply(
+ arr = slice.call(preferredDoc.childNodes),
+ preferredDoc.childNodes
+ );
+ arr[preferredDoc.childNodes.length].nodeType;
+ } catch (e) {
+ push2 = {
+ apply: function(target, els) {
+ pushNative.apply(target, slice.call(els));
+ },
+ call: function(target) {
+ pushNative.apply(target, slice.call(arguments, 1));
+ }
+ };
+ }
+ function find(selector, context, results, seed) {
+ var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
+ results = results || [];
+ if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
+ return results;
+ }
+ if (!seed) {
+ setDocument(context);
+ context = context || document3;
+ if (documentIsHTML) {
+ if (nodeType !== 11 && (match = rquickExpr2.exec(selector))) {
+ if (m = match[1]) {
+ if (nodeType === 9) {
+ if (elem = context.getElementById(m)) {
+ if (elem.id === m) {
+ push2.call(results, elem);
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) {
+ push2.call(results, elem);
+ return results;
+ }
+ }
+ } else if (match[2]) {
+ push2.apply(results, context.getElementsByTagName(selector));
+ return results;
+ } else if ((m = match[3]) && context.getElementsByClassName) {
+ push2.apply(results, context.getElementsByClassName(m));
+ return results;
+ }
+ }
+ if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
+ newSelector = selector;
+ newContext = context;
+ if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {
+ newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
+ if (newContext != context || !support.scope) {
+ if (nid = context.getAttribute("id")) {
+ nid = jQuery.escapeSelector(nid);
+ } else {
+ context.setAttribute("id", nid = expando);
+ }
+ }
+ groups = tokenize(selector);
+ i2 = groups.length;
+ while (i2--) {
+ groups[i2] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i2]);
+ }
+ newSelector = groups.join(",");
+ }
+ try {
+ push2.apply(
+ results,
+ newContext.querySelectorAll(newSelector)
+ );
+ return results;
+ } catch (qsaError) {
+ nonnativeSelectorCache(selector, true);
+ } finally {
+ if (nid === expando) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+ return select(selector.replace(rtrimCSS, "$1"), context, results, seed);
+ }
+ function createCache() {
+ var keys = [];
+ function cache(key, value) {
+ if (keys.push(key + " ") > Expr.cacheLength) {
+ delete cache[keys.shift()];
+ }
+ return cache[key + " "] = value;
+ }
+ return cache;
+ }
+ function markFunction(fn2) {
+ fn2[expando] = true;
+ return fn2;
+ }
+ function assert(fn2) {
+ var el = document3.createElement("fieldset");
+ try {
+ return !!fn2(el);
+ } catch (e) {
+ return false;
+ } finally {
+ if (el.parentNode) {
+ el.parentNode.removeChild(el);
+ }
+ el = null;
+ }
+ }
+ function createInputPseudo(type) {
+ return function(elem) {
+ return nodeName(elem, "input") && elem.type === type;
+ };
+ }
+ function createButtonPseudo(type) {
+ return function(elem) {
+ return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type;
+ };
+ }
+ function createDisabledPseudo(disabled) {
+ return function(elem) {
+ if ("form" in elem) {
+ if (elem.parentNode && elem.disabled === false) {
+ if ("label" in elem) {
+ if ("label" in elem.parentNode) {
+ return elem.parentNode.disabled === disabled;
+ } else {
+ return elem.disabled === disabled;
+ }
+ }
+ return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
+ elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
+ }
+ return elem.disabled === disabled;
+ } else if ("label" in elem) {
+ return elem.disabled === disabled;
+ }
+ return false;
+ };
+ }
+ function createPositionalPseudo(fn2) {
+ return markFunction(function(argument) {
+ argument = +argument;
+ return markFunction(function(seed, matches2) {
+ var j, matchIndexes = fn2([], seed.length, argument), i2 = matchIndexes.length;
+ while (i2--) {
+ if (seed[j = matchIndexes[i2]]) {
+ seed[j] = !(matches2[j] = seed[j]);
+ }
+ }
+ });
+ });
+ }
+ function testContext(context) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+ }
+ function setDocument(node) {
+ var subWindow, doc2 = node ? node.ownerDocument || node : preferredDoc;
+ if (doc2 == document3 || doc2.nodeType !== 9 || !doc2.documentElement) {
+ return document3;
+ }
+ document3 = doc2;
+ documentElement2 = document3.documentElement;
+ documentIsHTML = !jQuery.isXMLDoc(document3);
+ matches = documentElement2.matches || documentElement2.webkitMatchesSelector || documentElement2.msMatchesSelector;
+ if (documentElement2.msMatchesSelector && // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ preferredDoc != document3 && (subWindow = document3.defaultView) && subWindow.top !== subWindow) {
+ subWindow.addEventListener("unload", unloadHandler);
+ }
+ support.getById = assert(function(el) {
+ documentElement2.appendChild(el).id = jQuery.expando;
+ return !document3.getElementsByName || !document3.getElementsByName(jQuery.expando).length;
+ });
+ support.disconnectedMatch = assert(function(el) {
+ return matches.call(el, "*");
+ });
+ support.scope = assert(function() {
+ return document3.querySelectorAll(":scope");
+ });
+ support.cssHas = assert(function() {
+ try {
+ document3.querySelector(":has(*,:jqfake)");
+ return false;
+ } catch (e) {
+ return true;
+ }
+ });
+ if (support.getById) {
+ Expr.filter.ID = function(id) {
+ var attrId = id.replace(runescape, funescape);
+ return function(elem) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ Expr.find.ID = function(id, context) {
+ if (typeof context.getElementById !== "undefined" && documentIsHTML) {
+ var elem = context.getElementById(id);
+ return elem ? [elem] : [];
+ }
+ };
+ } else {
+ Expr.filter.ID = function(id) {
+ var attrId = id.replace(runescape, funescape);
+ return function(elem) {
+ var node2 = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return node2 && node2.value === attrId;
+ };
+ };
+ Expr.find.ID = function(id, context) {
+ if (typeof context.getElementById !== "undefined" && documentIsHTML) {
+ var node2, i2, elems, elem = context.getElementById(id);
+ if (elem) {
+ node2 = elem.getAttributeNode("id");
+ if (node2 && node2.value === id) {
+ return [elem];
+ }
+ elems = context.getElementsByName(id);
+ i2 = 0;
+ while (elem = elems[i2++]) {
+ node2 = elem.getAttributeNode("id");
+ if (node2 && node2.value === id) {
+ return [elem];
+ }
+ }
+ }
+ return [];
+ }
+ };
+ }
+ Expr.find.TAG = function(tag, context) {
+ if (typeof context.getElementsByTagName !== "undefined") {
+ return context.getElementsByTagName(tag);
+ } else {
+ return context.querySelectorAll(tag);
+ }
+ };
+ Expr.find.CLASS = function(className, context) {
+ if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
+ return context.getElementsByClassName(className);
+ }
+ };
+ rbuggyQSA = [];
+ assert(function(el) {
+ var input;
+ documentElement2.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a><select id='" + expando + "-\r\\' disabled='disabled'><option selected=''></option></select>";
+ if (!el.querySelectorAll("[selected]").length) {
+ rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
+ }
+ if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
+ rbuggyQSA.push("~=");
+ }
+ if (!el.querySelectorAll("a#" + expando + "+*").length) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ if (!el.querySelectorAll(":checked").length) {
+ rbuggyQSA.push(":checked");
+ }
+ input = document3.createElement("input");
+ input.setAttribute("type", "hidden");
+ el.appendChild(input).setAttribute("name", "D");
+ documentElement2.appendChild(el).disabled = true;
+ if (el.querySelectorAll(":disabled").length !== 2) {
+ rbuggyQSA.push(":enabled", ":disabled");
+ }
+ input = document3.createElement("input");
+ input.setAttribute("name", "");
+ el.appendChild(input);
+ if (!el.querySelectorAll("[name='']").length) {
+ rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + `*(?:''|"")`);
+ }
+ });
+ if (!support.cssHas) {
+ rbuggyQSA.push(":has");
+ }
+ rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
+ sortOrder = function(a, b) {
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if (compare) {
+ return compare;
+ }
+ compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : (
+ // Otherwise we know they are disconnected
+ 1
+ );
+ if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
+ if (a === document3 || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) {
+ return -1;
+ }
+ if (b === document3 || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) {
+ return 1;
+ }
+ return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;
+ }
+ return compare & 4 ? -1 : 1;
+ };
+ return document3;
+ }
+ find.matches = function(expr, elements) {
+ return find(expr, null, null, elements);
+ };
+ find.matchesSelector = function(elem, expr) {
+ setDocument(elem);
+ if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
+ try {
+ var ret = matches.call(elem, expr);
+ if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11) {
+ return ret;
+ }
+ } catch (e) {
+ nonnativeSelectorCache(expr, true);
+ }
+ }
+ return find(expr, document3, null, [elem]).length > 0;
+ };
+ find.contains = function(context, elem) {
+ if ((context.ownerDocument || context) != document3) {
+ setDocument(context);
+ }
+ return jQuery.contains(context, elem);
+ };
+ find.attr = function(elem, name) {
+ if ((elem.ownerDocument || elem) != document3) {
+ setDocument(elem);
+ }
+ var fn2 = Expr.attrHandle[name.toLowerCase()], val = fn2 && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn2(elem, name, !documentIsHTML) : void 0;
+ if (val !== void 0) {
+ return val;
+ }
+ return elem.getAttribute(name);
+ };
+ find.error = function(msg) {
+ throw new Error("Syntax error, unrecognized expression: " + msg);
+ };
+ jQuery.uniqueSort = function(results) {
+ var elem, duplicates = [], j = 0, i2 = 0;
+ hasDuplicate = !support.sortStable;
+ sortInput = !support.sortStable && slice.call(results, 0);
+ sort.call(results, sortOrder);
+ if (hasDuplicate) {
+ while (elem = results[i2++]) {
+ if (elem === results[i2]) {
+ j = duplicates.push(i2);
+ }
+ }
+ while (j--) {
+ splice.call(results, duplicates[j], 1);
+ }
+ }
+ sortInput = null;
+ return results;
+ };
+ jQuery.fn.uniqueSort = function() {
+ return this.pushStack(jQuery.uniqueSort(slice.apply(this)));
+ };
+ Expr = jQuery.expr = {
+ // Can be adjusted by the user
+ cacheLength: 50,
+ createPseudo: markFunction,
+ match: matchExpr,
+ attrHandle: {},
+ find: {},
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+ preFilter: {
+ ATTR: function(match) {
+ match[1] = match[1].replace(runescape, funescape);
+ match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
+ if (match[2] === "~=") {
+ match[3] = " " + match[3] + " ";
+ }
+ return match.slice(0, 4);
+ },
+ CHILD: function(match) {
+ match[1] = match[1].toLowerCase();
+ if (match[1].slice(0, 3) === "nth") {
+ if (!match[3]) {
+ find.error(match[0]);
+ }
+ match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
+ match[5] = +(match[7] + match[8] || match[3] === "odd");
+ } else if (match[3]) {
+ find.error(match[0]);
+ }
+ return match;
+ },
+ PSEUDO: function(match) {
+ var excess, unquoted = !match[6] && match[2];
+ if (matchExpr.CHILD.test(match[0])) {
+ return null;
+ }
+ if (match[3]) {
+ match[2] = match[4] || match[5] || "";
+ } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)
+ (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis
+ (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
+ match[0] = match[0].slice(0, excess);
+ match[2] = unquoted.slice(0, excess);
+ }
+ return match.slice(0, 3);
+ }
+ },
+ filter: {
+ TAG: function(nodeNameSelector) {
+ var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
+ return nodeNameSelector === "*" ? function() {
+ return true;
+ } : function(elem) {
+ return nodeName(elem, expectedNodeName);
+ };
+ },
+ CLASS: function(className) {
+ var pattern = classCache[className + " "];
+ return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) {
+ return pattern.test(
+ typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""
+ );
+ });
+ },
+ ATTR: function(name, operator, check) {
+ return function(elem) {
+ var result = find.attr(elem, name);
+ if (result == null) {
+ return operator === "!=";
+ }
+ if (!operator) {
+ return true;
+ }
+ result += "";
+ if (operator === "=") {
+ return result === check;
+ }
+ if (operator === "!=") {
+ return result !== check;
+ }
+ if (operator === "^=") {
+ return check && result.indexOf(check) === 0;
+ }
+ if (operator === "*=") {
+ return check && result.indexOf(check) > -1;
+ }
+ if (operator === "$=") {
+ return check && result.slice(-check.length) === check;
+ }
+ if (operator === "~=") {
+ return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1;
+ }
+ if (operator === "|=") {
+ return result === check || result.slice(0, check.length + 1) === check + "-";
+ }
+ return false;
+ };
+ },
+ CHILD: function(type, what, _argument, first, last) {
+ var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type";
+ return first === 1 && last === 0 ? (
+ // Shortcut for :nth-*(n)
+ function(elem) {
+ return !!elem.parentNode;
+ }
+ ) : function(elem, _context, xml) {
+ var cache, outerCache, node, nodeIndex, start2, dir2 = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
+ if (parent) {
+ if (simple) {
+ while (dir2) {
+ node = elem;
+ while (node = node[dir2]) {
+ if (ofType ? nodeName(node, name) : node.nodeType === 1) {
+ return false;
+ }
+ }
+ start2 = dir2 = type === "only" && !start2 && "nextSibling";
+ }
+ return true;
+ }
+ start2 = [forward ? parent.firstChild : parent.lastChild];
+ if (forward && useCache) {
+ outerCache = parent[expando] || (parent[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = nodeIndex && cache[2];
+ node = nodeIndex && parent.childNodes[nodeIndex];
+ while (node = ++nodeIndex && node && node[dir2] || // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start2.pop()) {
+ if (node.nodeType === 1 && ++diff && node === elem) {
+ outerCache[type] = [dirruns, nodeIndex, diff];
+ break;
+ }
+ }
+ } else {
+ if (useCache) {
+ outerCache = elem[expando] || (elem[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = nodeIndex;
+ }
+ if (diff === false) {
+ while (node = ++nodeIndex && node && node[dir2] || (diff = nodeIndex = 0) || start2.pop()) {
+ if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {
+ if (useCache) {
+ outerCache = node[expando] || (node[expando] = {});
+ outerCache[type] = [dirruns, diff];
+ }
+ if (node === elem) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ diff -= last;
+ return diff === first || diff % first === 0 && diff / first >= 0;
+ }
+ };
+ },
+ PSEUDO: function(pseudo, argument) {
+ var args, fn2 = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo);
+ if (fn2[expando]) {
+ return fn2(argument);
+ }
+ if (fn2.length > 1) {
+ args = [pseudo, pseudo, "", argument];
+ return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches2) {
+ var idx, matched = fn2(seed, argument), i2 = matched.length;
+ while (i2--) {
+ idx = indexOf.call(seed, matched[i2]);
+ seed[idx] = !(matches2[idx] = matched[i2]);
+ }
+ }) : function(elem) {
+ return fn2(elem, 0, args);
+ };
+ }
+ return fn2;
+ }
+ },
+ pseudos: {
+ // Potentially complex pseudos
+ not: markFunction(function(selector) {
+ var input = [], results = [], matcher = compile(selector.replace(rtrimCSS, "$1"));
+ return matcher[expando] ? markFunction(function(seed, matches2, _context, xml) {
+ var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length;
+ while (i2--) {
+ if (elem = unmatched[i2]) {
+ seed[i2] = !(matches2[i2] = elem);
+ }
+ }
+ }) : function(elem, _context, xml) {
+ input[0] = elem;
+ matcher(input, null, xml, results);
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+ has: markFunction(function(selector) {
+ return function(elem) {
+ return find(selector, elem).length > 0;
+ };
+ }),
+ contains: markFunction(function(text) {
+ text = text.replace(runescape, funescape);
+ return function(elem) {
+ return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;
+ };
+ }),
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // https://www.w3.org/TR/selectors/#lang-pseudo
+ lang: markFunction(function(lang) {
+ if (!ridentifier.test(lang || "")) {
+ find.error("unsupported lang: " + lang);
+ }
+ lang = lang.replace(runescape, funescape).toLowerCase();
+ return function(elem) {
+ var elemLang;
+ do {
+ if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
+ }
+ } while ((elem = elem.parentNode) && elem.nodeType === 1);
+ return false;
+ };
+ }),
+ // Miscellaneous
+ target: function(elem) {
+ var hash3 = window2.location && window2.location.hash;
+ return hash3 && hash3.slice(1) === elem.id;
+ },
+ root: function(elem) {
+ return elem === documentElement2;
+ },
+ focus: function(elem) {
+ return elem === safeActiveElement() && document3.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+ // Boolean properties
+ enabled: createDisabledPseudo(false),
+ disabled: createDisabledPseudo(true),
+ checked: function(elem) {
+ return nodeName(elem, "input") && !!elem.checked || nodeName(elem, "option") && !!elem.selected;
+ },
+ selected: function(elem) {
+ if (elem.parentNode) {
+ elem.parentNode.selectedIndex;
+ }
+ return elem.selected === true;
+ },
+ // Contents
+ empty: function(elem) {
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ if (elem.nodeType < 6) {
+ return false;
+ }
+ }
+ return true;
+ },
+ parent: function(elem) {
+ return !Expr.pseudos.empty(elem);
+ },
+ // Element/input types
+ header: function(elem) {
+ return rheader.test(elem.nodeName);
+ },
+ input: function(elem) {
+ return rinputs.test(elem.nodeName);
+ },
+ button: function(elem) {
+ return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button");
+ },
+ text: function(elem) {
+ var attr;
+ return nodeName(elem, "input") && elem.type === "text" && // Support: IE <10 only
+ // New HTML5 attribute values (e.g., "search") appear
+ // with elem.type === "text"
+ ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
+ },
+ // Position-in-collection
+ first: createPositionalPseudo(function() {
+ return [0];
+ }),
+ last: createPositionalPseudo(function(_matchIndexes, length) {
+ return [length - 1];
+ }),
+ eq: createPositionalPseudo(function(_matchIndexes, length, argument) {
+ return [argument < 0 ? argument + length : argument];
+ }),
+ even: createPositionalPseudo(function(matchIndexes, length) {
+ var i2 = 0;
+ for (; i2 < length; i2 += 2) {
+ matchIndexes.push(i2);
+ }
+ return matchIndexes;
+ }),
+ odd: createPositionalPseudo(function(matchIndexes, length) {
+ var i2 = 1;
+ for (; i2 < length; i2 += 2) {
+ matchIndexes.push(i2);
+ }
+ return matchIndexes;
+ }),
+ lt: createPositionalPseudo(function(matchIndexes, length, argument) {
+ var i2;
+ if (argument < 0) {
+ i2 = argument + length;
+ } else if (argument > length) {
+ i2 = length;
+ } else {
+ i2 = argument;
+ }
+ for (; --i2 >= 0; ) {
+ matchIndexes.push(i2);
+ }
+ return matchIndexes;
+ }),
+ gt: createPositionalPseudo(function(matchIndexes, length, argument) {
+ var i2 = argument < 0 ? argument + length : argument;
+ for (; ++i2 < length; ) {
+ matchIndexes.push(i2);
+ }
+ return matchIndexes;
+ })
+ }
+ };
+ Expr.pseudos.nth = Expr.pseudos.eq;
+ for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {
+ Expr.pseudos[i] = createInputPseudo(i);
+ }
+ for (i in { submit: true, reset: true }) {
+ Expr.pseudos[i] = createButtonPseudo(i);
+ }
+ function setFilters() {
+ }
+ setFilters.prototype = Expr.filters = Expr.pseudos;
+ Expr.setFilters = new setFilters();
+ function tokenize(selector, parseOnly) {
+ var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
+ if (cached) {
+ return parseOnly ? 0 : cached.slice(0);
+ }
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+ while (soFar) {
+ if (!matched || (match = rcomma.exec(soFar))) {
+ if (match) {
+ soFar = soFar.slice(match[0].length) || soFar;
+ }
+ groups.push(tokens = []);
+ }
+ matched = false;
+ if (match = rleadingCombinator.exec(soFar)) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace(rtrimCSS, " ")
+ });
+ soFar = soFar.slice(matched.length);
+ }
+ for (type in Expr.filter) {
+ if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type,
+ matches: match
+ });
+ soFar = soFar.slice(matched.length);
+ }
+ }
+ if (!matched) {
+ break;
+ }
+ }
+ if (parseOnly) {
+ return soFar.length;
+ }
+ return soFar ? find.error(selector) : (
+ // Cache the tokens
+ tokenCache(selector, groups).slice(0)
+ );
+ }
+ function toSelector(tokens) {
+ var i2 = 0, len = tokens.length, selector = "";
+ for (; i2 < len; i2++) {
+ selector += tokens[i2].value;
+ }
+ return selector;
+ }
+ function addCombinator(matcher, combinator, base) {
+ var dir2 = combinator.dir, skip = combinator.next, key = skip || dir2, checkNonElements = base && key === "parentNode", doneName = done++;
+ return combinator.first ? (
+ // Check against closest ancestor/preceding element
+ function(elem, context, xml) {
+ while (elem = elem[dir2]) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ return matcher(elem, context, xml);
+ }
+ }
+ return false;
+ }
+ ) : (
+ // Check against all ancestor/preceding elements
+ function(elem, context, xml) {
+ var oldCache, outerCache, newCache = [dirruns, doneName];
+ if (xml) {
+ while (elem = elem[dir2]) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ if (matcher(elem, context, xml)) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while (elem = elem[dir2]) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ outerCache = elem[expando] || (elem[expando] = {});
+ if (skip && nodeName(elem, skip)) {
+ elem = elem[dir2] || elem;
+ } else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
+ return newCache[2] = oldCache[2];
+ } else {
+ outerCache[key] = newCache;
+ if (newCache[2] = matcher(elem, context, xml)) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+ );
+ }
+ function elementMatcher(matchers) {
+ return matchers.length > 1 ? function(elem, context, xml) {
+ var i2 = matchers.length;
+ while (i2--) {
+ if (!matchers[i2](elem, context, xml)) {
+ return false;
+ }
+ }
+ return true;
+ } : matchers[0];
+ }
+ function multipleContexts(selector, contexts, results) {
+ var i2 = 0, len = contexts.length;
+ for (; i2 < len; i2++) {
+ find(selector, contexts[i2], results);
+ }
+ return results;
+ }
+ function condense(unmatched, map, filter, context, xml) {
+ var elem, newUnmatched = [], i2 = 0, len = unmatched.length, mapped = map != null;
+ for (; i2 < len; i2++) {
+ if (elem = unmatched[i2]) {
+ if (!filter || filter(elem, context, xml)) {
+ newUnmatched.push(elem);
+ if (mapped) {
+ map.push(i2);
+ }
+ }
+ }
+ }
+ return newUnmatched;
+ }
+ function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
+ if (postFilter && !postFilter[expando]) {
+ postFilter = setMatcher(postFilter);
+ }
+ if (postFinder && !postFinder[expando]) {
+ postFinder = setMatcher(postFinder, postSelector);
+ }
+ return markFunction(function(seed, results, context, xml) {
+ var temp, i2, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(
+ selector || "*",
+ context.nodeType ? [context] : context,
+ []
+ ), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;
+ if (matcher) {
+ matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? (
+ // ...intermediate processing is necessary
+ []
+ ) : (
+ // ...otherwise use results directly
+ results
+ );
+ matcher(matcherIn, matcherOut, context, xml);
+ } else {
+ matcherOut = matcherIn;
+ }
+ if (postFilter) {
+ temp = condense(matcherOut, postMap);
+ postFilter(temp, [], context, xml);
+ i2 = temp.length;
+ while (i2--) {
+ if (elem = temp[i2]) {
+ matcherOut[postMap[i2]] = !(matcherIn[postMap[i2]] = elem);
+ }
+ }
+ }
+ if (seed) {
+ if (postFinder || preFilter) {
+ if (postFinder) {
+ temp = [];
+ i2 = matcherOut.length;
+ while (i2--) {
+ if (elem = matcherOut[i2]) {
+ temp.push(matcherIn[i2] = elem);
+ }
+ }
+ postFinder(null, matcherOut = [], temp, xml);
+ }
+ i2 = matcherOut.length;
+ while (i2--) {
+ if ((elem = matcherOut[i2]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i2]) > -1) {
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+ } else {
+ matcherOut = condense(
+ matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut
+ );
+ if (postFinder) {
+ postFinder(null, results, matcherOut, xml);
+ } else {
+ push2.apply(results, matcherOut);
+ }
+ }
+ });
+ }
+ function matcherFromTokens(tokens) {
+ var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i2 = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
+ return elem === checkContext;
+ }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
+ return indexOf.call(checkContext, elem) > -1;
+ }, implicitRelative, true), matchers = [function(elem, context, xml) {
+ var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
+ checkContext = null;
+ return ret;
+ }];
+ for (; i2 < len; i2++) {
+ if (matcher = Expr.relative[tokens[i2].type]) {
+ matchers = [addCombinator(elementMatcher(matchers), matcher)];
+ } else {
+ matcher = Expr.filter[tokens[i2].type].apply(null, tokens[i2].matches);
+ if (matcher[expando]) {
+ j = ++i2;
+ for (; j < len; j++) {
+ if (Expr.relative[tokens[j].type]) {
+ break;
+ }
+ }
+ return setMatcher(
+ i2 > 1 && elementMatcher(matchers),
+ i2 > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice(0, i2 - 1).concat({ value: tokens[i2 - 2].type === " " ? "*" : "" })
+ ).replace(rtrimCSS, "$1"),
+ matcher,
+ i2 < j && matcherFromTokens(tokens.slice(i2, j)),
+ j < len && matcherFromTokens(tokens = tokens.slice(j)),
+ j < len && toSelector(tokens)
+ );
+ }
+ matchers.push(matcher);
+ }
+ }
+ return elementMatcher(matchers);
+ }
+ function matcherFromGroupMatchers(elementMatchers, setMatchers) {
+ var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {
+ var elem, j, matcher, matchedCount = 0, i2 = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG("*", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;
+ if (outermost) {
+ outermostContext = context == document3 || context || outermost;
+ }
+ for (; i2 !== len && (elem = elems[i2]) != null; i2++) {
+ if (byElement && elem) {
+ j = 0;
+ if (!context && elem.ownerDocument != document3) {
+ setDocument(elem);
+ xml = !documentIsHTML;
+ }
+ while (matcher = elementMatchers[j++]) {
+ if (matcher(elem, context || document3, xml)) {
+ push2.call(results, elem);
+ break;
+ }
+ }
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ }
+ }
+ if (bySet) {
+ if (elem = !matcher && elem) {
+ matchedCount--;
+ }
+ if (seed) {
+ unmatched.push(elem);
+ }
+ }
+ }
+ matchedCount += i2;
+ if (bySet && i2 !== matchedCount) {
+ j = 0;
+ while (matcher = setMatchers[j++]) {
+ matcher(unmatched, setMatched, context, xml);
+ }
+ if (seed) {
+ if (matchedCount > 0) {
+ while (i2--) {
+ if (!(unmatched[i2] || setMatched[i2])) {
+ setMatched[i2] = pop.call(results);
+ }
+ }
+ }
+ setMatched = condense(setMatched);
+ }
+ push2.apply(results, setMatched);
+ if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
+ jQuery.uniqueSort(results);
+ }
+ }
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+ return unmatched;
+ };
+ return bySet ? markFunction(superMatcher) : superMatcher;
+ }
+ function compile(selector, match) {
+ var i2, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
+ if (!cached) {
+ if (!match) {
+ match = tokenize(selector);
+ }
+ i2 = match.length;
+ while (i2--) {
+ cached = matcherFromTokens(match[i2]);
+ if (cached[expando]) {
+ setMatchers.push(cached);
+ } else {
+ elementMatchers.push(cached);
+ }
+ }
+ cached = compilerCache(
+ selector,
+ matcherFromGroupMatchers(elementMatchers, setMatchers)
+ );
+ cached.selector = selector;
+ }
+ return cached;
+ }
+ function select(selector, context, results, seed) {
+ var i2, tokens, token, type, find2, compiled = typeof selector === "function" && selector, match = !seed && tokenize(selector = compiled.selector || selector);
+ results = results || [];
+ if (match.length === 1) {
+ tokens = match[0] = match[0].slice(0);
+ if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
+ context = (Expr.find.ID(
+ token.matches[0].replace(runescape, funescape),
+ context
+ ) || [])[0];
+ if (!context) {
+ return results;
+ } else if (compiled) {
+ context = context.parentNode;
+ }
+ selector = selector.slice(tokens.shift().value.length);
+ }
+ i2 = matchExpr.needsContext.test(selector) ? 0 : tokens.length;
+ while (i2--) {
+ token = tokens[i2];
+ if (Expr.relative[type = token.type]) {
+ break;
+ }
+ if (find2 = Expr.find[type]) {
+ if (seed = find2(
+ token.matches[0].replace(runescape, funescape),
+ rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
+ )) {
+ tokens.splice(i2, 1);
+ selector = seed.length && toSelector(tokens);
+ if (!selector) {
+ push2.apply(results, seed);
+ return results;
+ }
+ break;
+ }
+ }
+ }
+ }
+ (compiled || compile(selector, match))(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ !context || rsibling.test(selector) && testContext(context.parentNode) || context
+ );
+ return results;
+ }
+ support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
+ setDocument();
+ support.sortDetached = assert(function(el) {
+ return el.compareDocumentPosition(document3.createElement("fieldset")) & 1;
+ });
+ jQuery.find = find;
+ jQuery.expr[":"] = jQuery.expr.pseudos;
+ jQuery.unique = jQuery.uniqueSort;
+ find.compile = compile;
+ find.select = select;
+ find.setDocument = setDocument;
+ find.tokenize = tokenize;
+ find.escape = jQuery.escapeSelector;
+ find.getText = jQuery.text;
+ find.isXML = jQuery.isXMLDoc;
+ find.selectors = jQuery.expr;
+ find.support = jQuery.support;
+ find.uniqueSort = jQuery.uniqueSort;
+ })();
+ var dir = function(elem, dir2, until) {
+ var matched = [], truncate = until !== void 0;
+ while ((elem = elem[dir2]) && elem.nodeType !== 9) {
+ if (elem.nodeType === 1) {
+ if (truncate && jQuery(elem).is(until)) {
+ break;
+ }
+ matched.push(elem);
+ }
+ }
+ return matched;
+ };
+ var siblings = function(n, elem) {
+ var matched = [];
+ for (; n; n = n.nextSibling) {
+ if (n.nodeType === 1 && n !== elem) {
+ matched.push(n);
+ }
+ }
+ return matched;
+ };
+ var rneedsContext = jQuery.expr.match.needsContext;
+ var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
+ function winnow(elements, qualifier, not) {
+ if (isFunction(qualifier)) {
+ return jQuery.grep(elements, function(elem, i) {
+ return !!qualifier.call(elem, i, elem) !== not;
+ });
+ }
+ if (qualifier.nodeType) {
+ return jQuery.grep(elements, function(elem) {
+ return elem === qualifier !== not;
+ });
+ }
+ if (typeof qualifier !== "string") {
+ return jQuery.grep(elements, function(elem) {
+ return indexOf.call(qualifier, elem) > -1 !== not;
+ });
+ }
+ return jQuery.filter(qualifier, elements, not);
+ }
+ jQuery.filter = function(expr, elems, not) {
+ var elem = elems[0];
+ if (not) {
+ expr = ":not(" + expr + ")";
+ }
+ if (elems.length === 1 && elem.nodeType === 1) {
+ return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];
+ }
+ return jQuery.find.matches(expr, jQuery.grep(elems, function(elem2) {
+ return elem2.nodeType === 1;
+ }));
+ };
+ jQuery.fn.extend({
+ find: function(selector) {
+ var i, ret, len = this.length, self2 = this;
+ if (typeof selector !== "string") {
+ return this.pushStack(jQuery(selector).filter(function() {
+ for (i = 0; i < len; i++) {
+ if (jQuery.contains(self2[i], this)) {
+ return true;
+ }
+ }
+ }));
+ }
+ ret = this.pushStack([]);
+ for (i = 0; i < len; i++) {
+ jQuery.find(selector, self2[i], ret);
+ }
+ return len > 1 ? jQuery.uniqueSort(ret) : ret;
+ },
+ filter: function(selector) {
+ return this.pushStack(winnow(this, selector || [], false));
+ },
+ not: function(selector) {
+ return this.pushStack(winnow(this, selector || [], true));
+ },
+ is: function(selector) {
+ return !!winnow(
+ this,
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [],
+ false
+ ).length;
+ }
+ });
+ var rootjQuery, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery.fn.init = function(selector, context, root) {
+ var match, elem;
+ if (!selector) {
+ return this;
+ }
+ root = root || rootjQuery;
+ if (typeof selector === "string") {
+ if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
+ match = [null, selector, null];
+ } else {
+ match = rquickExpr.exec(selector);
+ }
+ if (match && (match[1] || !context)) {
+ if (match[1]) {
+ context = context instanceof jQuery ? context[0] : context;
+ jQuery.merge(this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document2,
+ true
+ ));
+ if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
+ for (match in context) {
+ if (isFunction(this[match])) {
+ this[match](context[match]);
+ } else {
+ this.attr(match, context[match]);
+ }
+ }
+ }
+ return this;
+ } else {
+ elem = document2.getElementById(match[2]);
+ if (elem) {
+ this[0] = elem;
+ this.length = 1;
+ }
+ return this;
+ }
+ } else if (!context || context.jquery) {
+ return (context || root).find(selector);
+ } else {
+ return this.constructor(context).find(selector);
+ }
+ } else if (selector.nodeType) {
+ this[0] = selector;
+ this.length = 1;
+ return this;
+ } else if (isFunction(selector)) {
+ return root.ready !== void 0 ? root.ready(selector) : (
+ // Execute immediately if ready is not present
+ selector(jQuery)
+ );
+ }
+ return jQuery.makeArray(selector, this);
+ };
+ init.prototype = jQuery.fn;
+ rootjQuery = jQuery(document2);
+ var rparentsprev = /^(?:parents|prev(?:Until|All))/, guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+ jQuery.fn.extend({
+ has: function(target) {
+ var targets = jQuery(target, this), l = targets.length;
+ return this.filter(function() {
+ var i = 0;
+ for (; i < l; i++) {
+ if (jQuery.contains(this, targets[i])) {
+ return true;
+ }
+ }
+ });
+ },
+ closest: function(selectors, context) {
+ var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== "string" && jQuery(selectors);
+ if (!rneedsContext.test(selectors)) {
+ for (; i < l; i++) {
+ for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
+ if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : (
+ // Don't pass non-elements to jQuery#find
+ cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)
+ ))) {
+ matched.push(cur);
+ break;
+ }
+ }
+ }
+ }
+ return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
+ },
+ // Determine the position of an element within the set
+ index: function(elem) {
+ if (!elem) {
+ return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
+ }
+ if (typeof elem === "string") {
+ return indexOf.call(jQuery(elem), this[0]);
+ }
+ return indexOf.call(
+ this,
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem
+ );
+ },
+ add: function(selector, context) {
+ return this.pushStack(
+ jQuery.uniqueSort(
+ jQuery.merge(this.get(), jQuery(selector, context))
+ )
+ );
+ },
+ addBack: function(selector) {
+ return this.add(
+ selector == null ? this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+ });
+ function sibling(cur, dir2) {
+ while ((cur = cur[dir2]) && cur.nodeType !== 1) {
+ }
+ return cur;
+ }
+ jQuery.each({
+ parent: function(elem) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function(elem) {
+ return dir(elem, "parentNode");
+ },
+ parentsUntil: function(elem, _i, until) {
+ return dir(elem, "parentNode", until);
+ },
+ next: function(elem) {
+ return sibling(elem, "nextSibling");
+ },
+ prev: function(elem) {
+ return sibling(elem, "previousSibling");
+ },
+ nextAll: function(elem) {
+ return dir(elem, "nextSibling");
+ },
+ prevAll: function(elem) {
+ return dir(elem, "previousSibling");
+ },
+ nextUntil: function(elem, _i, until) {
+ return dir(elem, "nextSibling", until);
+ },
+ prevUntil: function(elem, _i, until) {
+ return dir(elem, "previousSibling", until);
+ },
+ siblings: function(elem) {
+ return siblings((elem.parentNode || {}).firstChild, elem);
+ },
+ children: function(elem) {
+ return siblings(elem.firstChild);
+ },
+ contents: function(elem) {
+ if (elem.contentDocument != null && // Support: IE 11+
+ // <object> elements with no `data` attribute has an object
+ // `contentDocument` with a `null` prototype.
+ getProto(elem.contentDocument)) {
+ return elem.contentDocument;
+ }
+ if (nodeName(elem, "template")) {
+ elem = elem.content || elem;
+ }
+ return jQuery.merge([], elem.childNodes);
+ }
+ }, function(name, fn2) {
+ jQuery.fn[name] = function(until, selector) {
+ var matched = jQuery.map(this, fn2, until);
+ if (name.slice(-5) !== "Until") {
+ selector = until;
+ }
+ if (selector && typeof selector === "string") {
+ matched = jQuery.filter(selector, matched);
+ }
+ if (this.length > 1) {
+ if (!guaranteedUnique[name]) {
+ jQuery.uniqueSort(matched);
+ }
+ if (rparentsprev.test(name)) {
+ matched.reverse();
+ }
+ }
+ return this.pushStack(matched);
+ };
+ });
+ var rnothtmlwhite = /[^\x20\t\r\n\f]+/g;
+ function createOptions(options) {
+ var object = {};
+ jQuery.each(options.match(rnothtmlwhite) || [], function(_, flag) {
+ object[flag] = true;
+ });
+ return object;
+ }
+ jQuery.Callbacks = function(options) {
+ options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
+ var firing, memory, fired, locked, list = [], queue = [], firingIndex = -1, fire = function() {
+ locked = locked || options.once;
+ fired = firing = true;
+ for (; queue.length; firingIndex = -1) {
+ memory = queue.shift();
+ while (++firingIndex < list.length) {
+ if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
+ firingIndex = list.length;
+ memory = false;
+ }
+ }
+ }
+ if (!options.memory) {
+ memory = false;
+ }
+ firing = false;
+ if (locked) {
+ if (memory) {
+ list = [];
+ } else {
+ list = "";
+ }
+ }
+ }, self2 = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if (list) {
+ if (memory && !firing) {
+ firingIndex = list.length - 1;
+ queue.push(memory);
+ }
+ (function add(args) {
+ jQuery.each(args, function(_, arg) {
+ if (isFunction(arg)) {
+ if (!options.unique || !self2.has(arg)) {
+ list.push(arg);
+ }
+ } else if (arg && arg.length && toType2(arg) !== "string") {
+ add(arg);
+ }
+ });
+ })(arguments);
+ if (memory && !firing) {
+ fire();
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ jQuery.each(arguments, function(_, arg) {
+ var index;
+ while ((index = jQuery.inArray(arg, list, index)) > -1) {
+ list.splice(index, 1);
+ if (index <= firingIndex) {
+ firingIndex--;
+ }
+ }
+ });
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function(fn2) {
+ return fn2 ? jQuery.inArray(fn2, list) > -1 : list.length > 0;
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ if (list) {
+ list = [];
+ }
+ return this;
+ },
+ // Disable .fire and .add
+ // Abort any current/pending executions
+ // Clear all callbacks and values
+ disable: function() {
+ locked = queue = [];
+ list = memory = "";
+ return this;
+ },
+ disabled: function() {
+ return !list;
+ },
+ // Disable .fire
+ // Also disable .add unless we have memory (since it would have no effect)
+ // Abort any pending executions
+ lock: function() {
+ locked = queue = [];
+ if (!memory && !firing) {
+ list = memory = "";
+ }
+ return this;
+ },
+ locked: function() {
+ return !!locked;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function(context, args) {
+ if (!locked) {
+ args = args || [];
+ args = [context, args.slice ? args.slice() : args];
+ queue.push(args);
+ if (!firing) {
+ fire();
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self2.fireWith(this, arguments);
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+ return self2;
+ };
+ function Identity(v) {
+ return v;
+ }
+ function Thrower(ex) {
+ throw ex;
+ }
+ function adoptValue(value, resolve, reject, noValue) {
+ var method;
+ try {
+ if (value && isFunction(method = value.promise)) {
+ method.call(value).done(resolve).fail(reject);
+ } else if (value && isFunction(method = value.then)) {
+ method.call(value, resolve, reject);
+ } else {
+ resolve.apply(void 0, [value].slice(noValue));
+ }
+ } catch (value2) {
+ reject.apply(void 0, [value2]);
+ }
+ }
+ jQuery.extend({
+ Deferred: function(func) {
+ var tuples = [
+ // action, add listener, callbacks,
+ // ... .then handlers, argument index, [final state]
+ [
+ "notify",
+ "progress",
+ jQuery.Callbacks("memory"),
+ jQuery.Callbacks("memory"),
+ 2
+ ],
+ [
+ "resolve",
+ "done",
+ jQuery.Callbacks("once memory"),
+ jQuery.Callbacks("once memory"),
+ 0,
+ "resolved"
+ ],
+ [
+ "reject",
+ "fail",
+ jQuery.Callbacks("once memory"),
+ jQuery.Callbacks("once memory"),
+ 1,
+ "rejected"
+ ]
+ ], state = "pending", promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done(arguments).fail(arguments);
+ return this;
+ },
+ "catch": function(fn2) {
+ return promise.then(null, fn2);
+ },
+ // Keep pipe for back-compat
+ pipe: function() {
+ var fns = arguments;
+ return jQuery.Deferred(function(newDefer) {
+ jQuery.each(tuples, function(_i, tuple) {
+ var fn2 = isFunction(fns[tuple[4]]) && fns[tuple[4]];
+ deferred[tuple[1]](function() {
+ var returned = fn2 && fn2.apply(this, arguments);
+ if (returned && isFunction(returned.promise)) {
+ returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
+ } else {
+ newDefer[tuple[0] + "With"](
+ this,
+ fn2 ? [returned] : arguments
+ );
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ then: function(onFulfilled, onRejected, onProgress) {
+ var maxDepth = 0;
+ function resolve(depth, deferred2, handler, special) {
+ return function() {
+ var that = this, args = arguments, mightThrow = function() {
+ var returned, then;
+ if (depth < maxDepth) {
+ return;
+ }
+ returned = handler.apply(that, args);
+ if (returned === deferred2.promise()) {
+ throw new TypeError("Thenable self-resolution");
+ }
+ then = returned && // Support: Promises/A+ section 2.3.4
+ // https://promisesaplus.com/#point-64
+ // Only check objects and functions for thenability
+ (typeof returned === "object" || typeof returned === "function") && returned.then;
+ if (isFunction(then)) {
+ if (special) {
+ then.call(
+ returned,
+ resolve(maxDepth, deferred2, Identity, special),
+ resolve(maxDepth, deferred2, Thrower, special)
+ );
+ } else {
+ maxDepth++;
+ then.call(
+ returned,
+ resolve(maxDepth, deferred2, Identity, special),
+ resolve(maxDepth, deferred2, Thrower, special),
+ resolve(
+ maxDepth,
+ deferred2,
+ Identity,
+ deferred2.notifyWith
+ )
+ );
+ }
+ } else {
+ if (handler !== Identity) {
+ that = void 0;
+ args = [returned];
+ }
+ (special || deferred2.resolveWith)(that, args);
+ }
+ }, process = special ? mightThrow : function() {
+ try {
+ mightThrow();
+ } catch (e) {
+ if (jQuery.Deferred.exceptionHook) {
+ jQuery.Deferred.exceptionHook(
+ e,
+ process.error
+ );
+ }
+ if (depth + 1 >= maxDepth) {
+ if (handler !== Thrower) {
+ that = void 0;
+ args = [e];
+ }
+ deferred2.rejectWith(that, args);
+ }
+ }
+ };
+ if (depth) {
+ process();
+ } else {
+ if (jQuery.Deferred.getErrorHook) {
+ process.error = jQuery.Deferred.getErrorHook();
+ } else if (jQuery.Deferred.getStackHook) {
+ process.error = jQuery.Deferred.getStackHook();
+ }
+ window2.setTimeout(process);
+ }
+ };
+ }
+ return jQuery.Deferred(function(newDefer) {
+ tuples[0][3].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction(onProgress) ? onProgress : Identity,
+ newDefer.notifyWith
+ )
+ );
+ tuples[1][3].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction(onFulfilled) ? onFulfilled : Identity
+ )
+ );
+ tuples[2][3].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction(onRejected) ? onRejected : Thrower
+ )
+ );
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function(obj) {
+ return obj != null ? jQuery.extend(obj, promise) : promise;
+ }
+ }, deferred = {};
+ jQuery.each(tuples, function(i, tuple) {
+ var list = tuple[2], stateString = tuple[5];
+ promise[tuple[1]] = list.add;
+ if (stateString) {
+ list.add(
+ function() {
+ state = stateString;
+ },
+ // rejected_callbacks.disable
+ // fulfilled_callbacks.disable
+ tuples[3 - i][2].disable,
+ // rejected_handlers.disable
+ // fulfilled_handlers.disable
+ tuples[3 - i][3].disable,
+ // progress_callbacks.lock
+ tuples[0][2].lock,
+ // progress_handlers.lock
+ tuples[0][3].lock
+ );
+ }
+ list.add(tuple[3].fire);
+ deferred[tuple[0]] = function() {
+ deferred[tuple[0] + "With"](this === deferred ? void 0 : this, arguments);
+ return this;
+ };
+ deferred[tuple[0] + "With"] = list.fireWith;
+ });
+ promise.promise(deferred);
+ if (func) {
+ func.call(deferred, deferred);
+ }
+ return deferred;
+ },
+ // Deferred helper
+ when: function(singleValue) {
+ var remaining = arguments.length, i = remaining, resolveContexts = Array(i), resolveValues = slice.call(arguments), primary = jQuery.Deferred(), updateFunc = function(i2) {
+ return function(value) {
+ resolveContexts[i2] = this;
+ resolveValues[i2] = arguments.length > 1 ? slice.call(arguments) : value;
+ if (!--remaining) {
+ primary.resolveWith(resolveContexts, resolveValues);
+ }
+ };
+ };
+ if (remaining <= 1) {
+ adoptValue(
+ singleValue,
+ primary.done(updateFunc(i)).resolve,
+ primary.reject,
+ !remaining
+ );
+ if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
+ return primary.then();
+ }
+ }
+ while (i--) {
+ adoptValue(resolveValues[i], updateFunc(i), primary.reject);
+ }
+ return primary.promise();
+ }
+ });
+ var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+ jQuery.Deferred.exceptionHook = function(error, asyncError) {
+ if (window2.console && window2.console.warn && error && rerrorNames.test(error.name)) {
+ window2.console.warn(
+ "jQuery.Deferred exception: " + error.message,
+ error.stack,
+ asyncError
+ );
+ }
+ };
+ jQuery.readyException = function(error) {
+ window2.setTimeout(function() {
+ throw error;
+ });
+ };
+ var readyList = jQuery.Deferred();
+ jQuery.fn.ready = function(fn2) {
+ readyList.then(fn2).catch(function(error) {
+ jQuery.readyException(error);
+ });
+ return this;
+ };
+ jQuery.extend({
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+ // A counter to track how many items to wait for before
+ // the ready event fires. See trac-6781
+ readyWait: 1,
+ // Handle when the DOM is ready
+ ready: function(wait) {
+ if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
+ return;
+ }
+ jQuery.isReady = true;
+ if (wait !== true && --jQuery.readyWait > 0) {
+ return;
+ }
+ readyList.resolveWith(document2, [jQuery]);
+ }
+ });
+ jQuery.ready.then = readyList.then;
+ function completed() {
+ document2.removeEventListener("DOMContentLoaded", completed);
+ window2.removeEventListener("load", completed);
+ jQuery.ready();
+ }
+ if (document2.readyState === "complete" || document2.readyState !== "loading" && !document2.documentElement.doScroll) {
+ window2.setTimeout(jQuery.ready);
+ } else {
+ document2.addEventListener("DOMContentLoaded", completed);
+ window2.addEventListener("load", completed);
+ }
+ var access = function(elems, fn2, key, value, chainable, emptyGet, raw) {
+ var i = 0, len = elems.length, bulk = key == null;
+ if (toType2(key) === "object") {
+ chainable = true;
+ for (i in key) {
+ access(elems, fn2, i, key[i], true, emptyGet, raw);
+ }
+ } else if (value !== void 0) {
+ chainable = true;
+ if (!isFunction(value)) {
+ raw = true;
+ }
+ if (bulk) {
+ if (raw) {
+ fn2.call(elems, value);
+ fn2 = null;
+ } else {
+ bulk = fn2;
+ fn2 = function(elem, _key, value2) {
+ return bulk.call(jQuery(elem), value2);
+ };
+ }
+ }
+ if (fn2) {
+ for (; i < len; i++) {
+ fn2(
+ elems[i],
+ key,
+ raw ? value : value.call(elems[i], i, fn2(elems[i], key))
+ );
+ }
+ }
+ }
+ if (chainable) {
+ return elems;
+ }
+ if (bulk) {
+ return fn2.call(elems);
+ }
+ return len ? fn2(elems[0], key) : emptyGet;
+ };
+ var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g;
+ function fcamelCase(_all, letter) {
+ return letter.toUpperCase();
+ }
+ function camelCase(string) {
+ return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
+ }
+ var acceptData = function(owner) {
+ return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
+ };
+ function Data2() {
+ this.expando = jQuery.expando + Data2.uid++;
+ }
+ Data2.uid = 1;
+ Data2.prototype = {
+ cache: function(owner) {
+ var value = owner[this.expando];
+ if (!value) {
+ value = {};
+ if (acceptData(owner)) {
+ if (owner.nodeType) {
+ owner[this.expando] = value;
+ } else {
+ Object.defineProperty(owner, this.expando, {
+ value,
+ configurable: true
+ });
+ }
+ }
+ }
+ return value;
+ },
+ set: function(owner, data, value) {
+ var prop, cache = this.cache(owner);
+ if (typeof data === "string") {
+ cache[camelCase(data)] = value;
+ } else {
+ for (prop in data) {
+ cache[camelCase(prop)] = data[prop];
+ }
+ }
+ return cache;
+ },
+ get: function(owner, key) {
+ return key === void 0 ? this.cache(owner) : (
+ // Always use camelCase key (gh-2257)
+ owner[this.expando] && owner[this.expando][camelCase(key)]
+ );
+ },
+ access: function(owner, key, value) {
+ if (key === void 0 || key && typeof key === "string" && value === void 0) {
+ return this.get(owner, key);
+ }
+ this.set(owner, key, value);
+ return value !== void 0 ? value : key;
+ },
+ remove: function(owner, key) {
+ var i, cache = owner[this.expando];
+ if (cache === void 0) {
+ return;
+ }
+ if (key !== void 0) {
+ if (Array.isArray(key)) {
+ key = key.map(camelCase);
+ } else {
+ key = camelCase(key);
+ key = key in cache ? [key] : key.match(rnothtmlwhite) || [];
+ }
+ i = key.length;
+ while (i--) {
+ delete cache[key[i]];
+ }
+ }
+ if (key === void 0 || jQuery.isEmptyObject(cache)) {
+ if (owner.nodeType) {
+ owner[this.expando] = void 0;
+ } else {
+ delete owner[this.expando];
+ }
+ }
+ },
+ hasData: function(owner) {
+ var cache = owner[this.expando];
+ return cache !== void 0 && !jQuery.isEmptyObject(cache);
+ }
+ };
+ var dataPriv = new Data2();
+ var dataUser = new Data2();
+ var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /[A-Z]/g;
+ function getData(data) {
+ if (data === "true") {
+ return true;
+ }
+ if (data === "false") {
+ return false;
+ }
+ if (data === "null") {
+ return null;
+ }
+ if (data === +data + "") {
+ return +data;
+ }
+ if (rbrace.test(data)) {
+ return JSON.parse(data);
+ }
+ return data;
+ }
+ function dataAttr(elem, key, data) {
+ var name;
+ if (data === void 0 && elem.nodeType === 1) {
+ name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
+ data = elem.getAttribute(name);
+ if (typeof data === "string") {
+ try {
+ data = getData(data);
+ } catch (e) {
+ }
+ dataUser.set(elem, key, data);
+ } else {
+ data = void 0;
+ }
+ }
+ return data;
+ }
+ jQuery.extend({
+ hasData: function(elem) {
+ return dataUser.hasData(elem) || dataPriv.hasData(elem);
+ },
+ data: function(elem, name, data) {
+ return dataUser.access(elem, name, data);
+ },
+ removeData: function(elem, name) {
+ dataUser.remove(elem, name);
+ },
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to dataPriv methods, these can be deprecated.
+ _data: function(elem, name, data) {
+ return dataPriv.access(elem, name, data);
+ },
+ _removeData: function(elem, name) {
+ dataPriv.remove(elem, name);
+ }
+ });
+ jQuery.fn.extend({
+ data: function(key, value) {
+ var i, name, data, elem = this[0], attrs = elem && elem.attributes;
+ if (key === void 0) {
+ if (this.length) {
+ data = dataUser.get(elem);
+ if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
+ i = attrs.length;
+ while (i--) {
+ if (attrs[i]) {
+ name = attrs[i].name;
+ if (name.indexOf("data-") === 0) {
+ name = camelCase(name.slice(5));
+ dataAttr(elem, name, data[name]);
+ }
+ }
+ }
+ dataPriv.set(elem, "hasDataAttrs", true);
+ }
+ }
+ return data;
+ }
+ if (typeof key === "object") {
+ return this.each(function() {
+ dataUser.set(this, key);
+ });
+ }
+ return access(this, function(value2) {
+ var data2;
+ if (elem && value2 === void 0) {
+ data2 = dataUser.get(elem, key);
+ if (data2 !== void 0) {
+ return data2;
+ }
+ data2 = dataAttr(elem, key);
+ if (data2 !== void 0) {
+ return data2;
+ }
+ return;
+ }
+ this.each(function() {
+ dataUser.set(this, key, value2);
+ });
+ }, null, value, arguments.length > 1, null, true);
+ },
+ removeData: function(key) {
+ return this.each(function() {
+ dataUser.remove(this, key);
+ });
+ }
+ });
+ jQuery.extend({
+ queue: function(elem, type, data) {
+ var queue;
+ if (elem) {
+ type = (type || "fx") + "queue";
+ queue = dataPriv.get(elem, type);
+ if (data) {
+ if (!queue || Array.isArray(data)) {
+ queue = dataPriv.access(elem, type, jQuery.makeArray(data));
+ } else {
+ queue.push(data);
+ }
+ }
+ return queue || [];
+ }
+ },
+ dequeue: function(elem, type) {
+ type = type || "fx";
+ var queue = jQuery.queue(elem, type), startLength = queue.length, fn2 = queue.shift(), hooks = jQuery._queueHooks(elem, type), next = function() {
+ jQuery.dequeue(elem, type);
+ };
+ if (fn2 === "inprogress") {
+ fn2 = queue.shift();
+ startLength--;
+ }
+ if (fn2) {
+ if (type === "fx") {
+ queue.unshift("inprogress");
+ }
+ delete hooks.stop;
+ fn2.call(elem, next, hooks);
+ }
+ if (!startLength && hooks) {
+ hooks.empty.fire();
+ }
+ },
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function(elem, type) {
+ var key = type + "queueHooks";
+ return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ dataPriv.remove(elem, [type + "queue", key]);
+ })
+ });
+ }
+ });
+ jQuery.fn.extend({
+ queue: function(type, data) {
+ var setter = 2;
+ if (typeof type !== "string") {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+ if (arguments.length < setter) {
+ return jQuery.queue(this[0], type);
+ }
+ return data === void 0 ? this : this.each(function() {
+ var queue = jQuery.queue(this, type, data);
+ jQuery._queueHooks(this, type);
+ if (type === "fx" && queue[0] !== "inprogress") {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ dequeue: function(type) {
+ return this.each(function() {
+ jQuery.dequeue(this, type);
+ });
+ },
+ clearQueue: function(type) {
+ return this.queue(type || "fx", []);
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function(type, obj) {
+ var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() {
+ if (!--count) {
+ defer.resolveWith(elements, [elements]);
+ }
+ };
+ if (typeof type !== "string") {
+ obj = type;
+ type = void 0;
+ }
+ type = type || "fx";
+ while (i--) {
+ tmp = dataPriv.get(elements[i], type + "queueHooks");
+ if (tmp && tmp.empty) {
+ count++;
+ tmp.empty.add(resolve);
+ }
+ }
+ resolve();
+ return defer.promise(obj);
+ }
+ });
+ var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
+ var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
+ var cssExpand = ["Top", "Right", "Bottom", "Left"];
+ var documentElement = document2.documentElement;
+ var isAttached = function(elem) {
+ return jQuery.contains(elem.ownerDocument, elem);
+ }, composed = { composed: true };
+ if (documentElement.getRootNode) {
+ isAttached = function(elem) {
+ return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
+ };
+ }
+ var isHiddenWithinTree = function(elem, el) {
+ elem = el || elem;
+ return elem.style.display === "none" || elem.style.display === "" && // Otherwise, check computed style
+ // Support: Firefox <=43 - 45
+ // Disconnected elements can have computed display: none, so first confirm that elem is
+ // in the document.
+ isAttached(elem) && jQuery.css(elem, "display") === "none";
+ };
+ function adjustCSS(elem, prop, valueParts, tween) {
+ var adjusted, scale, maxIterations = 20, currentValue = tween ? function() {
+ return tween.cur();
+ } : function() {
+ return jQuery.css(elem, prop, "");
+ }, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"), initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));
+ if (initialInUnit && initialInUnit[3] !== unit) {
+ initial = initial / 2;
+ unit = unit || initialInUnit[3];
+ initialInUnit = +initial || 1;
+ while (maxIterations--) {
+ jQuery.style(elem, prop, initialInUnit + unit);
+ if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
+ maxIterations = 0;
+ }
+ initialInUnit = initialInUnit / scale;
+ }
+ initialInUnit = initialInUnit * 2;
+ jQuery.style(elem, prop, initialInUnit + unit);
+ valueParts = valueParts || [];
+ }
+ if (valueParts) {
+ initialInUnit = +initialInUnit || +initial || 0;
+ adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
+ if (tween) {
+ tween.unit = unit;
+ tween.start = initialInUnit;
+ tween.end = adjusted;
+ }
+ }
+ return adjusted;
+ }
+ var defaultDisplayMap = {};
+ function getDefaultDisplay(elem) {
+ var temp, doc2 = elem.ownerDocument, nodeName2 = elem.nodeName, display = defaultDisplayMap[nodeName2];
+ if (display) {
+ return display;
+ }
+ temp = doc2.body.appendChild(doc2.createElement(nodeName2));
+ display = jQuery.css(temp, "display");
+ temp.parentNode.removeChild(temp);
+ if (display === "none") {
+ display = "block";
+ }
+ defaultDisplayMap[nodeName2] = display;
+ return display;
+ }
+ function showHide(elements, show) {
+ var display, elem, values = [], index = 0, length = elements.length;
+ for (; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+ display = elem.style.display;
+ if (show) {
+ if (display === "none") {
+ values[index] = dataPriv.get(elem, "display") || null;
+ if (!values[index]) {
+ elem.style.display = "";
+ }
+ }
+ if (elem.style.display === "" && isHiddenWithinTree(elem)) {
+ values[index] = getDefaultDisplay(elem);
+ }
+ } else {
+ if (display !== "none") {
+ values[index] = "none";
+ dataPriv.set(elem, "display", display);
+ }
+ }
+ }
+ for (index = 0; index < length; index++) {
+ if (values[index] != null) {
+ elements[index].style.display = values[index];
+ }
+ }
+ return elements;
+ }
+ jQuery.fn.extend({
+ show: function() {
+ return showHide(this, true);
+ },
+ hide: function() {
+ return showHide(this);
+ },
+ toggle: function(state) {
+ if (typeof state === "boolean") {
+ return state ? this.show() : this.hide();
+ }
+ return this.each(function() {
+ if (isHiddenWithinTree(this)) {
+ jQuery(this).show();
+ } else {
+ jQuery(this).hide();
+ }
+ });
+ }
+ });
+ var rcheckableType = /^(?:checkbox|radio)$/i;
+ var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
+ var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;
+ (function() {
+ var fragment = document2.createDocumentFragment(), div = fragment.appendChild(document2.createElement("div")), input = document2.createElement("input");
+ input.setAttribute("type", "radio");
+ input.setAttribute("checked", "checked");
+ input.setAttribute("name", "t");
+ div.appendChild(input);
+ support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
+ div.innerHTML = "<option></option>";
+ support.option = !!div.lastChild;
+ })();
+ var wrapMap = {
+ // XHTML parsers do not magically insert elements in the
+ // same way that tag soup parsers do. So we cannot shorten
+ // this by omitting <tbody> or other required elements.
+ thead: [1, "<table>", "</table>"],
+ col: [2, "<table><colgroup>", "</colgroup></table>"],
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+ _default: [0, "", ""]
+ };
+ wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+ wrapMap.th = wrapMap.td;
+ if (!support.option) {
+ wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
+ }
+ function getAll(context, tag) {
+ var ret;
+ if (typeof context.getElementsByTagName !== "undefined") {
+ ret = context.getElementsByTagName(tag || "*");
+ } else if (typeof context.querySelectorAll !== "undefined") {
+ ret = context.querySelectorAll(tag || "*");
+ } else {
+ ret = [];
+ }
+ if (tag === void 0 || tag && nodeName(context, tag)) {
+ return jQuery.merge([context], ret);
+ }
+ return ret;
+ }
+ function setGlobalEval(elems, refElements) {
+ var i = 0, l = elems.length;
+ for (; i < l; i++) {
+ dataPriv.set(
+ elems[i],
+ "globalEval",
+ !refElements || dataPriv.get(refElements[i], "globalEval")
+ );
+ }
+ }
+ var rhtml = /<|&#?\w+;/;
+ function buildFragment(elems, context, scripts, selection, ignored) {
+ var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length;
+ for (; i < l; i++) {
+ elem = elems[i];
+ if (elem || elem === 0) {
+ if (toType2(elem) === "object") {
+ jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
+ } else if (!rhtml.test(elem)) {
+ nodes.push(context.createTextNode(elem));
+ } else {
+ tmp = tmp || fragment.appendChild(context.createElement("div"));
+ tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
+ wrap = wrapMap[tag] || wrapMap._default;
+ tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];
+ j = wrap[0];
+ while (j--) {
+ tmp = tmp.lastChild;
+ }
+ jQuery.merge(nodes, tmp.childNodes);
+ tmp = fragment.firstChild;
+ tmp.textContent = "";
+ }
+ }
+ }
+ fragment.textContent = "";
+ i = 0;
+ while (elem = nodes[i++]) {
+ if (selection && jQuery.inArray(elem, selection) > -1) {
+ if (ignored) {
+ ignored.push(elem);
+ }
+ continue;
+ }
+ attached = isAttached(elem);
+ tmp = getAll(fragment.appendChild(elem), "script");
+ if (attached) {
+ setGlobalEval(tmp);
+ }
+ if (scripts) {
+ j = 0;
+ while (elem = tmp[j++]) {
+ if (rscriptType.test(elem.type || "")) {
+ scripts.push(elem);
+ }
+ }
+ }
+ }
+ return fragment;
+ }
+ var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+ function returnTrue() {
+ return true;
+ }
+ function returnFalse() {
+ return false;
+ }
+ function on(elem, types, selector, data, fn2, one) {
+ var origFn, type;
+ if (typeof types === "object") {
+ if (typeof selector !== "string") {
+ data = data || selector;
+ selector = void 0;
+ }
+ for (type in types) {
+ on(elem, type, selector, data, types[type], one);
+ }
+ return elem;
+ }
+ if (data == null && fn2 == null) {
+ fn2 = selector;
+ data = selector = void 0;
+ } else if (fn2 == null) {
+ if (typeof selector === "string") {
+ fn2 = data;
+ data = void 0;
+ } else {
+ fn2 = data;
+ data = selector;
+ selector = void 0;
+ }
+ }
+ if (fn2 === false) {
+ fn2 = returnFalse;
+ } else if (!fn2) {
+ return elem;
+ }
+ if (one === 1) {
+ origFn = fn2;
+ fn2 = function(event) {
+ jQuery().off(event);
+ return origFn.apply(this, arguments);
+ };
+ fn2.guid = origFn.guid || (origFn.guid = jQuery.guid++);
+ }
+ return elem.each(function() {
+ jQuery.event.add(this, types, fn2, data, selector);
+ });
+ }
+ jQuery.event = {
+ global: {},
+ add: function(elem, types, handler, data, selector) {
+ var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem);
+ if (!acceptData(elem)) {
+ return;
+ }
+ if (handler.handler) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+ if (selector) {
+ jQuery.find.matchesSelector(documentElement, selector);
+ }
+ if (!handler.guid) {
+ handler.guid = jQuery.guid++;
+ }
+ if (!(events = elemData.events)) {
+ events = elemData.events = /* @__PURE__ */ Object.create(null);
+ }
+ if (!(eventHandle = elemData.handle)) {
+ eventHandle = elemData.handle = function(e) {
+ return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : void 0;
+ };
+ }
+ types = (types || "").match(rnothtmlwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = (tmp[2] || "").split(".").sort();
+ if (!type) {
+ continue;
+ }
+ special = jQuery.event.special[type] || {};
+ type = (selector ? special.delegateType : special.bindType) || type;
+ special = jQuery.event.special[type] || {};
+ handleObj = jQuery.extend({
+ type,
+ origType,
+ data,
+ handler,
+ guid: handler.guid,
+ selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test(selector),
+ namespace: namespaces.join(".")
+ }, handleObjIn);
+ if (!(handlers = events[type])) {
+ handlers = events[type] = [];
+ handlers.delegateCount = 0;
+ if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
+ if (elem.addEventListener) {
+ elem.addEventListener(type, eventHandle);
+ }
+ }
+ }
+ if (special.add) {
+ special.add.call(elem, handleObj);
+ if (!handleObj.handler.guid) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+ if (selector) {
+ handlers.splice(handlers.delegateCount++, 0, handleObj);
+ } else {
+ handlers.push(handleObj);
+ }
+ jQuery.event.global[type] = true;
+ }
+ },
+ // Detach an event or set of events from an element
+ remove: function(elem, types, handler, selector, mappedTypes) {
+ var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
+ if (!elemData || !(events = elemData.events)) {
+ return;
+ }
+ types = (types || "").match(rnothtmlwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = (tmp[2] || "").split(".").sort();
+ if (!type) {
+ for (type in events) {
+ jQuery.event.remove(elem, type + types[t], handler, selector, true);
+ }
+ continue;
+ }
+ special = jQuery.event.special[type] || {};
+ type = (selector ? special.delegateType : special.bindType) || type;
+ handlers = events[type] || [];
+ tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
+ origCount = j = handlers.length;
+ while (j--) {
+ handleObj = handlers[j];
+ if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
+ handlers.splice(j, 1);
+ if (handleObj.selector) {
+ handlers.delegateCount--;
+ }
+ if (special.remove) {
+ special.remove.call(elem, handleObj);
+ }
+ }
+ }
+ if (origCount && !handlers.length) {
+ if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
+ jQuery.removeEvent(elem, type, elemData.handle);
+ }
+ delete events[type];
+ }
+ }
+ if (jQuery.isEmptyObject(events)) {
+ dataPriv.remove(elem, "handle events");
+ }
+ },
+ dispatch: function(nativeEvent) {
+ var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), event = jQuery.event.fix(nativeEvent), handlers = (dataPriv.get(this, "events") || /* @__PURE__ */ Object.create(null))[event.type] || [], special = jQuery.event.special[event.type] || {};
+ args[0] = event;
+ for (i = 1; i < arguments.length; i++) {
+ args[i] = arguments[i];
+ }
+ event.delegateTarget = this;
+ if (special.preDispatch && special.preDispatch.call(this, event) === false) {
+ return;
+ }
+ handlerQueue = jQuery.event.handlers.call(this, event, handlers);
+ i = 0;
+ while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
+ event.currentTarget = matched.elem;
+ j = 0;
+ while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
+ if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+ ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
+ if (ret !== void 0) {
+ if ((event.result = ret) === false) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+ if (special.postDispatch) {
+ special.postDispatch.call(this, event);
+ }
+ return event.result;
+ },
+ handlers: function(event, handlers) {
+ var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target;
+ if (delegateCount && // Support: IE <=9
+ // Black-hole SVG <use> instance trees (trac-13180)
+ cur.nodeType && // Support: Firefox <=42
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+ // Support: IE 11 only
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+ !(event.type === "click" && event.button >= 1)) {
+ for (; cur !== this; cur = cur.parentNode || this) {
+ if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
+ matchedHandlers = [];
+ matchedSelectors = {};
+ for (i = 0; i < delegateCount; i++) {
+ handleObj = handlers[i];
+ sel = handleObj.selector + " ";
+ if (matchedSelectors[sel] === void 0) {
+ matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
+ }
+ if (matchedSelectors[sel]) {
+ matchedHandlers.push(handleObj);
+ }
+ }
+ if (matchedHandlers.length) {
+ handlerQueue.push({ elem: cur, handlers: matchedHandlers });
+ }
+ }
+ }
+ }
+ cur = this;
+ if (delegateCount < handlers.length) {
+ handlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });
+ }
+ return handlerQueue;
+ },
+ addProp: function(name, hook) {
+ Object.defineProperty(jQuery.Event.prototype, name, {
+ enumerable: true,
+ configurable: true,
+ get: isFunction(hook) ? function() {
+ if (this.originalEvent) {
+ return hook(this.originalEvent);
+ }
+ } : function() {
+ if (this.originalEvent) {
+ return this.originalEvent[name];
+ }
+ },
+ set: function(value) {
+ Object.defineProperty(this, name, {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value
+ });
+ }
+ });
+ },
+ fix: function(originalEvent) {
+ return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
+ },
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ click: {
+ // Utilize native event to ensure correct state for checkable inputs
+ setup: function(data) {
+ var el = this || data;
+ if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
+ leverageNative(el, "click", true);
+ }
+ return false;
+ },
+ trigger: function(data) {
+ var el = this || data;
+ if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
+ leverageNative(el, "click");
+ }
+ return true;
+ },
+ // For cross-browser consistency, suppress native .click() on links
+ // Also prevent it if we're currently inside a leveraged native-event stack
+ _default: function(event) {
+ var target = event.target;
+ return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
+ }
+ },
+ beforeunload: {
+ postDispatch: function(event) {
+ if (event.result !== void 0 && event.originalEvent) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ }
+ };
+ function leverageNative(el, type, isSetup) {
+ if (!isSetup) {
+ if (dataPriv.get(el, type) === void 0) {
+ jQuery.event.add(el, type, returnTrue);
+ }
+ return;
+ }
+ dataPriv.set(el, type, false);
+ jQuery.event.add(el, type, {
+ namespace: false,
+ handler: function(event) {
+ var result, saved = dataPriv.get(this, type);
+ if (event.isTrigger & 1 && this[type]) {
+ if (!saved) {
+ saved = slice.call(arguments);
+ dataPriv.set(this, type, saved);
+ this[type]();
+ result = dataPriv.get(this, type);
+ dataPriv.set(this, type, false);
+ if (saved !== result) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ return result;
+ }
+ } else if ((jQuery.event.special[type] || {}).delegateType) {
+ event.stopPropagation();
+ }
+ } else if (saved) {
+ dataPriv.set(this, type, jQuery.event.trigger(
+ saved[0],
+ saved.slice(1),
+ this
+ ));
+ event.stopPropagation();
+ event.isImmediatePropagationStopped = returnTrue;
+ }
+ }
+ });
+ }
+ jQuery.removeEvent = function(elem, type, handle) {
+ if (elem.removeEventListener) {
+ elem.removeEventListener(type, handle);
+ }
+ };
+ jQuery.Event = function(src, props) {
+ if (!(this instanceof jQuery.Event)) {
+ return new jQuery.Event(src, props);
+ }
+ if (src && src.type) {
+ this.originalEvent = src;
+ this.type = src.type;
+ this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === void 0 && // Support: Android <=2.3 only
+ src.returnValue === false ? returnTrue : returnFalse;
+ this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
+ this.currentTarget = src.currentTarget;
+ this.relatedTarget = src.relatedTarget;
+ } else {
+ this.type = src;
+ }
+ if (props) {
+ jQuery.extend(this, props);
+ }
+ this.timeStamp = src && src.timeStamp || Date.now();
+ this[jQuery.expando] = true;
+ };
+ jQuery.Event.prototype = {
+ constructor: jQuery.Event,
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+ isSimulated: false,
+ preventDefault: function() {
+ var e = this.originalEvent;
+ this.isDefaultPrevented = returnTrue;
+ if (e && !this.isSimulated) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+ this.isPropagationStopped = returnTrue;
+ if (e && !this.isSimulated) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+ this.isImmediatePropagationStopped = returnTrue;
+ if (e && !this.isSimulated) {
+ e.stopImmediatePropagation();
+ }
+ this.stopPropagation();
+ }
+ };
+ jQuery.each({
+ altKey: true,
+ bubbles: true,
+ cancelable: true,
+ changedTouches: true,
+ ctrlKey: true,
+ detail: true,
+ eventPhase: true,
+ metaKey: true,
+ pageX: true,
+ pageY: true,
+ shiftKey: true,
+ view: true,
+ "char": true,
+ code: true,
+ charCode: true,
+ key: true,
+ keyCode: true,
+ button: true,
+ buttons: true,
+ clientX: true,
+ clientY: true,
+ offsetX: true,
+ offsetY: true,
+ pointerId: true,
+ pointerType: true,
+ screenX: true,
+ screenY: true,
+ targetTouches: true,
+ toElement: true,
+ touches: true,
+ which: true
+ }, jQuery.event.addProp);
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function(type, delegateType) {
+ function focusMappedHandler(nativeEvent) {
+ if (document2.documentMode) {
+ var handle = dataPriv.get(this, "handle"), event = jQuery.event.fix(nativeEvent);
+ event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
+ event.isSimulated = true;
+ handle(nativeEvent);
+ if (event.target === event.currentTarget) {
+ handle(event);
+ }
+ } else {
+ jQuery.event.simulate(
+ delegateType,
+ nativeEvent.target,
+ jQuery.event.fix(nativeEvent)
+ );
+ }
+ }
+ jQuery.event.special[type] = {
+ // Utilize native event if possible so blur/focus sequence is correct
+ setup: function() {
+ var attaches;
+ leverageNative(this, type, true);
+ if (document2.documentMode) {
+ attaches = dataPriv.get(this, delegateType);
+ if (!attaches) {
+ this.addEventListener(delegateType, focusMappedHandler);
+ }
+ dataPriv.set(this, delegateType, (attaches || 0) + 1);
+ } else {
+ return false;
+ }
+ },
+ trigger: function() {
+ leverageNative(this, type);
+ return true;
+ },
+ teardown: function() {
+ var attaches;
+ if (document2.documentMode) {
+ attaches = dataPriv.get(this, delegateType) - 1;
+ if (!attaches) {
+ this.removeEventListener(delegateType, focusMappedHandler);
+ dataPriv.remove(this, delegateType);
+ } else {
+ dataPriv.set(this, delegateType, attaches);
+ }
+ } else {
+ return false;
+ }
+ },
+ // Suppress native focus or blur if we're currently inside
+ // a leveraged native-event stack
+ _default: function(event) {
+ return dataPriv.get(event.target, type);
+ },
+ delegateType
+ };
+ jQuery.event.special[delegateType] = {
+ setup: function() {
+ var doc2 = this.ownerDocument || this.document || this, dataHolder = document2.documentMode ? this : doc2, attaches = dataPriv.get(dataHolder, delegateType);
+ if (!attaches) {
+ if (document2.documentMode) {
+ this.addEventListener(delegateType, focusMappedHandler);
+ } else {
+ doc2.addEventListener(type, focusMappedHandler, true);
+ }
+ }
+ dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);
+ },
+ teardown: function() {
+ var doc2 = this.ownerDocument || this.document || this, dataHolder = document2.documentMode ? this : doc2, attaches = dataPriv.get(dataHolder, delegateType) - 1;
+ if (!attaches) {
+ if (document2.documentMode) {
+ this.removeEventListener(delegateType, focusMappedHandler);
+ } else {
+ doc2.removeEventListener(type, focusMappedHandler, true);
+ }
+ dataPriv.remove(dataHolder, delegateType);
+ } else {
+ dataPriv.set(dataHolder, delegateType, attaches);
+ }
+ }
+ };
+ });
+ jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+ }, function(orig, fix) {
+ jQuery.event.special[orig] = {
+ delegateType: fix,
+ bindType: fix,
+ handle: function(event) {
+ var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;
+ if (!related || related !== target && !jQuery.contains(target, related)) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply(this, arguments);
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+ });
+ jQuery.fn.extend({
+ on: function(types, selector, data, fn2) {
+ return on(this, types, selector, data, fn2);
+ },
+ one: function(types, selector, data, fn2) {
+ return on(this, types, selector, data, fn2, 1);
+ },
+ off: function(types, selector, fn2) {
+ var handleObj, type;
+ if (types && types.preventDefault && types.handleObj) {
+ handleObj = types.handleObj;
+ jQuery(types.delegateTarget).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if (typeof types === "object") {
+ for (type in types) {
+ this.off(type, selector, types[type]);
+ }
+ return this;
+ }
+ if (selector === false || typeof selector === "function") {
+ fn2 = selector;
+ selector = void 0;
+ }
+ if (fn2 === false) {
+ fn2 = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove(this, types, fn2, selector);
+ });
+ }
+ });
+ var rnoInnerhtml = /<script|<style|<link/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
+ function manipulationTarget(elem, content) {
+ if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
+ return jQuery(elem).children("tbody")[0] || elem;
+ }
+ return elem;
+ }
+ function disableScript(elem) {
+ elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
+ return elem;
+ }
+ function restoreScript(elem) {
+ if ((elem.type || "").slice(0, 5) === "true/") {
+ elem.type = elem.type.slice(5);
+ } else {
+ elem.removeAttribute("type");
+ }
+ return elem;
+ }
+ function cloneCopyEvent(src, dest) {
+ var i, l, type, pdataOld, udataOld, udataCur, events;
+ if (dest.nodeType !== 1) {
+ return;
+ }
+ if (dataPriv.hasData(src)) {
+ pdataOld = dataPriv.get(src);
+ events = pdataOld.events;
+ if (events) {
+ dataPriv.remove(dest, "handle events");
+ for (type in events) {
+ for (i = 0, l = events[type].length; i < l; i++) {
+ jQuery.event.add(dest, type, events[type][i]);
+ }
+ }
+ }
+ }
+ if (dataUser.hasData(src)) {
+ udataOld = dataUser.access(src);
+ udataCur = jQuery.extend({}, udataOld);
+ dataUser.set(dest, udataCur);
+ }
+ }
+ function fixInput(src, dest) {
+ var nodeName2 = dest.nodeName.toLowerCase();
+ if (nodeName2 === "input" && rcheckableType.test(src.type)) {
+ dest.checked = src.checked;
+ } else if (nodeName2 === "input" || nodeName2 === "textarea") {
+ dest.defaultValue = src.defaultValue;
+ }
+ }
+ function domManip(collection, args, callback, ignored) {
+ args = flat(args);
+ var fragment, first, scripts, hasScripts, node, doc2, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value);
+ if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
+ return collection.each(function(index) {
+ var self2 = collection.eq(index);
+ if (valueIsFunction) {
+ args[0] = value.call(this, index, self2.html());
+ }
+ domManip(self2, args, callback, ignored);
+ });
+ }
+ if (l) {
+ fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
+ first = fragment.firstChild;
+ if (fragment.childNodes.length === 1) {
+ fragment = first;
+ }
+ if (first || ignored) {
+ scripts = jQuery.map(getAll(fragment, "script"), disableScript);
+ hasScripts = scripts.length;
+ for (; i < l; i++) {
+ node = fragment;
+ if (i !== iNoClone) {
+ node = jQuery.clone(node, true, true);
+ if (hasScripts) {
+ jQuery.merge(scripts, getAll(node, "script"));
+ }
+ }
+ callback.call(collection[i], node, i);
+ }
+ if (hasScripts) {
+ doc2 = scripts[scripts.length - 1].ownerDocument;
+ jQuery.map(scripts, restoreScript);
+ for (i = 0; i < hasScripts; i++) {
+ node = scripts[i];
+ if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc2, node)) {
+ if (node.src && (node.type || "").toLowerCase() !== "module") {
+ if (jQuery._evalUrl && !node.noModule) {
+ jQuery._evalUrl(node.src, {
+ nonce: node.nonce || node.getAttribute("nonce")
+ }, doc2);
+ }
+ } else {
+ DOMEval(node.textContent.replace(rcleanScript, ""), node, doc2);
+ }
+ }
+ }
+ }
+ }
+ }
+ return collection;
+ }
+ function remove(elem, selector, keepData) {
+ var node, nodes = selector ? jQuery.filter(selector, elem) : elem, i = 0;
+ for (; (node = nodes[i]) != null; i++) {
+ if (!keepData && node.nodeType === 1) {
+ jQuery.cleanData(getAll(node));
+ }
+ if (node.parentNode) {
+ if (keepData && isAttached(node)) {
+ setGlobalEval(getAll(node, "script"));
+ }
+ node.parentNode.removeChild(node);
+ }
+ }
+ return elem;
+ }
+ jQuery.extend({
+ htmlPrefilter: function(html) {
+ return html;
+ },
+ clone: function(elem, dataAndEvents, deepDataAndEvents) {
+ var i, l, srcElements, destElements, clone2 = elem.cloneNode(true), inPage = isAttached(elem);
+ if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
+ destElements = getAll(clone2);
+ srcElements = getAll(elem);
+ for (i = 0, l = srcElements.length; i < l; i++) {
+ fixInput(srcElements[i], destElements[i]);
+ }
+ }
+ if (dataAndEvents) {
+ if (deepDataAndEvents) {
+ srcElements = srcElements || getAll(elem);
+ destElements = destElements || getAll(clone2);
+ for (i = 0, l = srcElements.length; i < l; i++) {
+ cloneCopyEvent(srcElements[i], destElements[i]);
+ }
+ } else {
+ cloneCopyEvent(elem, clone2);
+ }
+ }
+ destElements = getAll(clone2, "script");
+ if (destElements.length > 0) {
+ setGlobalEval(destElements, !inPage && getAll(elem, "script"));
+ }
+ return clone2;
+ },
+ cleanData: function(elems) {
+ var data, elem, type, special = jQuery.event.special, i = 0;
+ for (; (elem = elems[i]) !== void 0; i++) {
+ if (acceptData(elem)) {
+ if (data = elem[dataPriv.expando]) {
+ if (data.events) {
+ for (type in data.events) {
+ if (special[type]) {
+ jQuery.event.remove(elem, type);
+ } else {
+ jQuery.removeEvent(elem, type, data.handle);
+ }
+ }
+ }
+ elem[dataPriv.expando] = void 0;
+ }
+ if (elem[dataUser.expando]) {
+ elem[dataUser.expando] = void 0;
+ }
+ }
+ }
+ }
+ });
+ jQuery.fn.extend({
+ detach: function(selector) {
+ return remove(this, selector, true);
+ },
+ remove: function(selector) {
+ return remove(this, selector);
+ },
+ text: function(value) {
+ return access(this, function(value2) {
+ return value2 === void 0 ? jQuery.text(this) : this.empty().each(function() {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ this.textContent = value2;
+ }
+ });
+ }, null, value, arguments.length);
+ },
+ append: function() {
+ return domManip(this, arguments, function(elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.appendChild(elem);
+ }
+ });
+ },
+ prepend: function() {
+ return domManip(this, arguments, function(elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.insertBefore(elem, target.firstChild);
+ }
+ });
+ },
+ before: function() {
+ return domManip(this, arguments, function(elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this);
+ }
+ });
+ },
+ after: function() {
+ return domManip(this, arguments, function(elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this.nextSibling);
+ }
+ });
+ },
+ empty: function() {
+ var elem, i = 0;
+ for (; (elem = this[i]) != null; i++) {
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ elem.textContent = "";
+ }
+ }
+ return this;
+ },
+ clone: function(dataAndEvents, deepDataAndEvents) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+ return this.map(function() {
+ return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
+ });
+ },
+ html: function(value) {
+ return access(this, function(value2) {
+ var elem = this[0] || {}, i = 0, l = this.length;
+ if (value2 === void 0 && elem.nodeType === 1) {
+ return elem.innerHTML;
+ }
+ if (typeof value2 === "string" && !rnoInnerhtml.test(value2) && !wrapMap[(rtagName.exec(value2) || ["", ""])[1].toLowerCase()]) {
+ value2 = jQuery.htmlPrefilter(value2);
+ try {
+ for (; i < l; i++) {
+ elem = this[i] || {};
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ elem.innerHTML = value2;
+ }
+ }
+ elem = 0;
+ } catch (e) {
+ }
+ }
+ if (elem) {
+ this.empty().append(value2);
+ }
+ }, null, value, arguments.length);
+ },
+ replaceWith: function() {
+ var ignored = [];
+ return domManip(this, arguments, function(elem) {
+ var parent = this.parentNode;
+ if (jQuery.inArray(this, ignored) < 0) {
+ jQuery.cleanData(getAll(this));
+ if (parent) {
+ parent.replaceChild(elem, this);
+ }
+ }
+ }, ignored);
+ }
+ });
+ jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function(name, original) {
+ jQuery.fn[name] = function(selector) {
+ var elems, ret = [], insert = jQuery(selector), last = insert.length - 1, i = 0;
+ for (; i <= last; i++) {
+ elems = i === last ? this : this.clone(true);
+ jQuery(insert[i])[original](elems);
+ push.apply(ret, elems.get());
+ }
+ return this.pushStack(ret);
+ };
+ });
+ var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
+ var rcustomProp = /^--/;
+ var getStyles = function(elem) {
+ var view = elem.ownerDocument.defaultView;
+ if (!view || !view.opener) {
+ view = window2;
+ }
+ return view.getComputedStyle(elem);
+ };
+ var swap = function(elem, options, callback) {
+ var ret, name, old = {};
+ for (name in options) {
+ old[name] = elem.style[name];
+ elem.style[name] = options[name];
+ }
+ ret = callback.call(elem);
+ for (name in options) {
+ elem.style[name] = old[name];
+ }
+ return ret;
+ };
+ var rboxStyle = new RegExp(cssExpand.join("|"), "i");
+ (function() {
+ function computeStyleTests() {
+ if (!div) {
+ return;
+ }
+ container.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0";
+ div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%";
+ documentElement.appendChild(container).appendChild(div);
+ var divStyle = window2.getComputedStyle(div);
+ pixelPositionVal = divStyle.top !== "1%";
+ reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;
+ div.style.right = "60%";
+ pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;
+ boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;
+ div.style.position = "absolute";
+ scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
+ documentElement.removeChild(container);
+ div = null;
+ }
+ function roundPixelMeasures(measure) {
+ return Math.round(parseFloat(measure));
+ }
+ var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document2.createElement("div"), div = document2.createElement("div");
+ if (!div.style) {
+ return;
+ }
+ div.style.backgroundClip = "content-box";
+ div.cloneNode(true).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+ jQuery.extend(support, {
+ boxSizingReliable: function() {
+ computeStyleTests();
+ return boxSizingReliableVal;
+ },
+ pixelBoxStyles: function() {
+ computeStyleTests();
+ return pixelBoxStylesVal;
+ },
+ pixelPosition: function() {
+ computeStyleTests();
+ return pixelPositionVal;
+ },
+ reliableMarginLeft: function() {
+ computeStyleTests();
+ return reliableMarginLeftVal;
+ },
+ scrollboxSize: function() {
+ computeStyleTests();
+ return scrollboxSizeVal;
+ },
+ // Support: IE 9 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Behavior in IE 9 is more subtle than in newer versions & it passes
+ // some versions of this test; make sure not to make it pass there!
+ //
+ // Support: Firefox 70+
+ // Only Firefox includes border widths
+ // in computed dimensions. (gh-4529)
+ reliableTrDimensions: function() {
+ var table, tr, trChild, trStyle;
+ if (reliableTrDimensionsVal == null) {
+ table = document2.createElement("table");
+ tr = document2.createElement("tr");
+ trChild = document2.createElement("div");
+ table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
+ tr.style.cssText = "box-sizing:content-box;border:1px solid";
+ tr.style.height = "1px";
+ trChild.style.height = "9px";
+ trChild.style.display = "block";
+ documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
+ trStyle = window2.getComputedStyle(tr);
+ reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;
+ documentElement.removeChild(table);
+ }
+ return reliableTrDimensionsVal;
+ }
+ });
+ })();
+ function curCSS(elem, name, computed) {
+ var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test(name), style = elem.style;
+ computed = computed || getStyles(elem);
+ if (computed) {
+ ret = computed.getPropertyValue(name) || computed[name];
+ if (isCustomProp && ret) {
+ ret = ret.replace(rtrimCSS, "$1") || void 0;
+ }
+ if (ret === "" && !isAttached(elem)) {
+ ret = jQuery.style(elem, name);
+ }
+ if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+ return ret !== void 0 ? (
+ // Support: IE <=9 - 11 only
+ // IE returns zIndex value as an integer.
+ ret + ""
+ ) : ret;
+ }
+ function addGetHookIf(conditionFn, hookFn) {
+ return {
+ get: function() {
+ if (conditionFn()) {
+ delete this.get;
+ return;
+ }
+ return (this.get = hookFn).apply(this, arguments);
+ }
+ };
+ }
+ var cssPrefixes = ["Webkit", "Moz", "ms"], emptyStyle = document2.createElement("div").style, vendorProps = {};
+ function vendorPropName(name) {
+ var capName = name[0].toUpperCase() + name.slice(1), i = cssPrefixes.length;
+ while (i--) {
+ name = cssPrefixes[i] + capName;
+ if (name in emptyStyle) {
+ return name;
+ }
+ }
+ }
+ function finalPropName(name) {
+ var final = jQuery.cssProps[name] || vendorProps[name];
+ if (final) {
+ return final;
+ }
+ if (name in emptyStyle) {
+ return name;
+ }
+ return vendorProps[name] = vendorPropName(name) || name;
+ }
+ var rdisplayswap = /^(none|table(?!-c[ea]).+)/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ };
+ function setPositiveNumber(_elem, value, subtract) {
+ var matches = rcssNum.exec(value);
+ return matches ? (
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px")
+ ) : value;
+ }
+ function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
+ var i = dimension === "width" ? 1 : 0, extra = 0, delta = 0, marginDelta = 0;
+ if (box === (isBorderBox ? "border" : "content")) {
+ return 0;
+ }
+ for (; i < 4; i += 2) {
+ if (box === "margin") {
+ marginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);
+ }
+ if (!isBorderBox) {
+ delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+ if (box !== "padding") {
+ delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ } else {
+ extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ } else {
+ if (box === "content") {
+ delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+ }
+ if (box !== "margin") {
+ delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ }
+ }
+ if (!isBorderBox && computedVal >= 0) {
+ delta += Math.max(0, Math.ceil(
+ elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5
+ // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+ // Use an explicit zero to avoid NaN (gh-3964)
+ )) || 0;
+ }
+ return delta + marginDelta;
+ }
+ function getWidthOrHeight(elem, dimension, extra) {
+ var styles = getStyles(elem), boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", valueIsBorderBox = isBorderBox, val = curCSS(elem, dimension, styles), offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
+ if (rnumnonpx.test(val)) {
+ if (!extra) {
+ return val;
+ }
+ val = "auto";
+ }
+ if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Interestingly, in some cases IE 9 doesn't suffer from this issue.
+ !support.reliableTrDimensions() && nodeName(elem, "tr") || // Fall back to offsetWidth/offsetHeight when value is "auto"
+ // This happens for inline elements with no explicit setting (gh-3571)
+ val === "auto" || // Support: Android <=4.1 - 4.3 only
+ // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+ !parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && // Make sure the element is visible & connected
+ elem.getClientRects().length) {
+ isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box";
+ valueIsBorderBox = offsetProp in elem;
+ if (valueIsBorderBox) {
+ val = elem[offsetProp];
+ }
+ }
+ val = parseFloat(val) || 0;
+ return val + boxModelAdjustment(
+ elem,
+ dimension,
+ extra || (isBorderBox ? "border" : "content"),
+ valueIsBorderBox,
+ styles,
+ // Provide the current computed size to request scroll gutter calculation (gh-3589)
+ val
+ ) + "px";
+ }
+ jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function(elem, computed) {
+ if (computed) {
+ var ret = curCSS(elem, "opacity");
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ animationIterationCount: true,
+ aspectRatio: true,
+ borderImageSlice: true,
+ columnCount: true,
+ flexGrow: true,
+ flexShrink: true,
+ fontWeight: true,
+ gridArea: true,
+ gridColumn: true,
+ gridColumnEnd: true,
+ gridColumnStart: true,
+ gridRow: true,
+ gridRowEnd: true,
+ gridRowStart: true,
+ lineHeight: true,
+ opacity: true,
+ order: true,
+ orphans: true,
+ scale: true,
+ widows: true,
+ zIndex: true,
+ zoom: true,
+ // SVG-related
+ fillOpacity: true,
+ floodOpacity: true,
+ stopOpacity: true,
+ strokeMiterlimit: true,
+ strokeOpacity: true
+ },
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {},
+ // Get and set the style property on a DOM Node
+ style: function(elem, name, value, extra) {
+ if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
+ return;
+ }
+ var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style;
+ if (!isCustomProp) {
+ name = finalPropName(origName);
+ }
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+ if (value !== void 0) {
+ type = typeof value;
+ if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
+ value = adjustCSS(elem, name, ret);
+ type = "number";
+ }
+ if (value == null || value !== value) {
+ return;
+ }
+ if (type === "number" && !isCustomProp) {
+ value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
+ }
+ if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
+ style[name] = "inherit";
+ }
+ if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== void 0) {
+ if (isCustomProp) {
+ style.setProperty(name, value);
+ } else {
+ style[name] = value;
+ }
+ }
+ } else {
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== void 0) {
+ return ret;
+ }
+ return style[name];
+ }
+ },
+ css: function(elem, name, extra, styles) {
+ var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name);
+ if (!isCustomProp) {
+ name = finalPropName(origName);
+ }
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+ if (hooks && "get" in hooks) {
+ val = hooks.get(elem, true, extra);
+ }
+ if (val === void 0) {
+ val = curCSS(elem, name, styles);
+ }
+ if (val === "normal" && name in cssNormalTransform) {
+ val = cssNormalTransform[name];
+ }
+ if (extra === "" || extra) {
+ num = parseFloat(val);
+ return extra === true || isFinite(num) ? num || 0 : val;
+ }
+ return val;
+ }
+ });
+ jQuery.each(["height", "width"], function(_i, dimension) {
+ jQuery.cssHooks[dimension] = {
+ get: function(elem, computed, extra) {
+ if (computed) {
+ return rdisplayswap.test(jQuery.css(elem, "display")) && // Support: Safari 8+
+ // Table columns in Safari have non-zero offsetWidth & zero
+ // getBoundingClientRect().width unless display is changed.
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a disconnected node
+ // in IE throws an error.
+ (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() {
+ return getWidthOrHeight(elem, dimension, extra);
+ }) : getWidthOrHeight(elem, dimension, extra);
+ }
+ },
+ set: function(elem, value, extra) {
+ var matches, styles = getStyles(elem), scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", subtract = extra ? boxModelAdjustment(
+ elem,
+ dimension,
+ extra,
+ isBorderBox,
+ styles
+ ) : 0;
+ if (isBorderBox && scrollboxSizeBuggy) {
+ subtract -= Math.ceil(
+ elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5
+ );
+ }
+ if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
+ elem.style[dimension] = value;
+ value = jQuery.css(elem, dimension);
+ }
+ return setPositiveNumber(elem, value, subtract);
+ }
+ };
+ });
+ jQuery.cssHooks.marginLeft = addGetHookIf(
+ support.reliableMarginLeft,
+ function(elem, computed) {
+ if (computed) {
+ return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, { marginLeft: 0 }, function() {
+ return elem.getBoundingClientRect().left;
+ })) + "px";
+ }
+ }
+ );
+ jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function(prefix, suffix) {
+ jQuery.cssHooks[prefix + suffix] = {
+ expand: function(value) {
+ var i = 0, expanded = {}, parts = typeof value === "string" ? value.split(" ") : [value];
+ for (; i < 4; i++) {
+ expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
+ }
+ return expanded;
+ }
+ };
+ if (prefix !== "margin") {
+ jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
+ }
+ });
+ jQuery.fn.extend({
+ css: function(name, value) {
+ return access(this, function(elem, name2, value2) {
+ var styles, len, map = {}, i = 0;
+ if (Array.isArray(name2)) {
+ styles = getStyles(elem);
+ len = name2.length;
+ for (; i < len; i++) {
+ map[name2[i]] = jQuery.css(elem, name2[i], false, styles);
+ }
+ return map;
+ }
+ return value2 !== void 0 ? jQuery.style(elem, name2, value2) : jQuery.css(elem, name2);
+ }, name, value, arguments.length > 1);
+ }
+ });
+ function Tween(elem, options, prop, end2, easing) {
+ return new Tween.prototype.init(elem, options, prop, end2, easing);
+ }
+ jQuery.Tween = Tween;
+ Tween.prototype = {
+ constructor: Tween,
+ init: function(elem, options, prop, end2, easing, unit) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || jQuery.easing._default;
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end2;
+ this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[this.prop];
+ return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
+ },
+ run: function(percent) {
+ var eased, hooks = Tween.propHooks[this.prop];
+ if (this.options.duration) {
+ this.pos = eased = jQuery.easing[this.easing](
+ percent,
+ this.options.duration * percent,
+ 0,
+ 1,
+ this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = (this.end - this.start) * eased + this.start;
+ if (this.options.step) {
+ this.options.step.call(this.elem, this.now, this);
+ }
+ if (hooks && hooks.set) {
+ hooks.set(this);
+ } else {
+ Tween.propHooks._default.set(this);
+ }
+ return this;
+ }
+ };
+ Tween.prototype.init.prototype = Tween.prototype;
+ Tween.propHooks = {
+ _default: {
+ get: function(tween) {
+ var result;
+ if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
+ return tween.elem[tween.prop];
+ }
+ result = jQuery.css(tween.elem, tween.prop, "");
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function(tween) {
+ if (jQuery.fx.step[tween.prop]) {
+ jQuery.fx.step[tween.prop](tween);
+ } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
+ jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
+ } else {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ }
+ };
+ Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function(tween) {
+ if (tween.elem.nodeType && tween.elem.parentNode) {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ };
+ jQuery.easing = {
+ linear: function(p) {
+ return p;
+ },
+ swing: function(p) {
+ return 0.5 - Math.cos(p * Math.PI) / 2;
+ },
+ _default: "swing"
+ };
+ jQuery.fx = Tween.prototype.init;
+ jQuery.fx.step = {};
+ var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/;
+ function schedule() {
+ if (inProgress) {
+ if (document2.hidden === false && window2.requestAnimationFrame) {
+ window2.requestAnimationFrame(schedule);
+ } else {
+ window2.setTimeout(schedule, jQuery.fx.interval);
+ }
+ jQuery.fx.tick();
+ }
+ }
+ function createFxNow() {
+ window2.setTimeout(function() {
+ fxNow = void 0;
+ });
+ return fxNow = Date.now();
+ }
+ function genFx(type, includeWidth) {
+ var which, i = 0, attrs = { height: type };
+ includeWidth = includeWidth ? 1 : 0;
+ for (; i < 4; i += 2 - includeWidth) {
+ which = cssExpand[i];
+ attrs["margin" + which] = attrs["padding" + which] = type;
+ }
+ if (includeWidth) {
+ attrs.opacity = attrs.width = type;
+ }
+ return attrs;
+ }
+ function createTween(value, prop, animation) {
+ var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), index = 0, length = collection.length;
+ for (; index < length; index++) {
+ if (tween = collection[index].call(animation, prop, value)) {
+ return tween;
+ }
+ }
+ }
+ function defaultPrefilter(elem, props, opts) {
+ var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = "width" in props || "height" in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, "fxshow");
+ if (!opts.queue) {
+ hooks = jQuery._queueHooks(elem, "fx");
+ if (hooks.unqueued == null) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if (!hooks.unqueued) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+ anim.always(function() {
+ anim.always(function() {
+ hooks.unqueued--;
+ if (!jQuery.queue(elem, "fx").length) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+ for (prop in props) {
+ value = props[prop];
+ if (rfxtypes.test(value)) {
+ delete props[prop];
+ toggle = toggle || value === "toggle";
+ if (value === (hidden ? "hide" : "show")) {
+ if (value === "show" && dataShow && dataShow[prop] !== void 0) {
+ hidden = true;
+ } else {
+ continue;
+ }
+ }
+ orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
+ }
+ }
+ propTween = !jQuery.isEmptyObject(props);
+ if (!propTween && jQuery.isEmptyObject(orig)) {
+ return;
+ }
+ if (isBox && elem.nodeType === 1) {
+ opts.overflow = [style.overflow, style.overflowX, style.overflowY];
+ restoreDisplay = dataShow && dataShow.display;
+ if (restoreDisplay == null) {
+ restoreDisplay = dataPriv.get(elem, "display");
+ }
+ display = jQuery.css(elem, "display");
+ if (display === "none") {
+ if (restoreDisplay) {
+ display = restoreDisplay;
+ } else {
+ showHide([elem], true);
+ restoreDisplay = elem.style.display || restoreDisplay;
+ display = jQuery.css(elem, "display");
+ showHide([elem]);
+ }
+ }
+ if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
+ if (jQuery.css(elem, "float") === "none") {
+ if (!propTween) {
+ anim.done(function() {
+ style.display = restoreDisplay;
+ });
+ if (restoreDisplay == null) {
+ display = style.display;
+ restoreDisplay = display === "none" ? "" : display;
+ }
+ }
+ style.display = "inline-block";
+ }
+ }
+ }
+ if (opts.overflow) {
+ style.overflow = "hidden";
+ anim.always(function() {
+ style.overflow = opts.overflow[0];
+ style.overflowX = opts.overflow[1];
+ style.overflowY = opts.overflow[2];
+ });
+ }
+ propTween = false;
+ for (prop in orig) {
+ if (!propTween) {
+ if (dataShow) {
+ if ("hidden" in dataShow) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = dataPriv.access(elem, "fxshow", { display: restoreDisplay });
+ }
+ if (toggle) {
+ dataShow.hidden = !hidden;
+ }
+ if (hidden) {
+ showHide([elem], true);
+ }
+ anim.done(function() {
+ if (!hidden) {
+ showHide([elem]);
+ }
+ dataPriv.remove(elem, "fxshow");
+ for (prop in orig) {
+ jQuery.style(elem, prop, orig[prop]);
+ }
+ });
+ }
+ propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
+ if (!(prop in dataShow)) {
+ dataShow[prop] = propTween.start;
+ if (hidden) {
+ propTween.end = propTween.start;
+ propTween.start = 0;
+ }
+ }
+ }
+ }
+ function propFilter(props, specialEasing) {
+ var index, name, easing, value, hooks;
+ for (index in props) {
+ name = camelCase(index);
+ easing = specialEasing[name];
+ value = props[index];
+ if (Array.isArray(value)) {
+ easing = value[1];
+ value = props[index] = value[0];
+ }
+ if (index !== name) {
+ props[name] = value;
+ delete props[index];
+ }
+ hooks = jQuery.cssHooks[name];
+ if (hooks && "expand" in hooks) {
+ value = hooks.expand(value);
+ delete props[name];
+ for (index in value) {
+ if (!(index in props)) {
+ props[index] = value[index];
+ specialEasing[index] = easing;
+ }
+ }
+ } else {
+ specialEasing[name] = easing;
+ }
+ }
+ }
+ function Animation(elem, properties, options) {
+ var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always(function() {
+ delete tick.elem;
+ }), tick = function() {
+ if (stopped) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), temp = remaining / animation.duration || 0, percent = 1 - temp, index2 = 0, length2 = animation.tweens.length;
+ for (; index2 < length2; index2++) {
+ animation.tweens[index2].run(percent);
+ }
+ deferred.notifyWith(elem, [animation, percent, remaining]);
+ if (percent < 1 && length2) {
+ return remaining;
+ }
+ if (!length2) {
+ deferred.notifyWith(elem, [animation, 1, 0]);
+ }
+ deferred.resolveWith(elem, [animation]);
+ return false;
+ }, animation = deferred.promise({
+ elem,
+ props: jQuery.extend({}, properties),
+ opts: jQuery.extend(true, {
+ specialEasing: {},
+ easing: jQuery.easing._default
+ }, options),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function(prop, end2) {
+ var tween = jQuery.Tween(
+ elem,
+ animation.opts,
+ prop,
+ end2,
+ animation.opts.specialEasing[prop] || animation.opts.easing
+ );
+ animation.tweens.push(tween);
+ return tween;
+ },
+ stop: function(gotoEnd) {
+ var index2 = 0, length2 = gotoEnd ? animation.tweens.length : 0;
+ if (stopped) {
+ return this;
+ }
+ stopped = true;
+ for (; index2 < length2; index2++) {
+ animation.tweens[index2].run(1);
+ }
+ if (gotoEnd) {
+ deferred.notifyWith(elem, [animation, 1, 0]);
+ deferred.resolveWith(elem, [animation, gotoEnd]);
+ } else {
+ deferred.rejectWith(elem, [animation, gotoEnd]);
+ }
+ return this;
+ }
+ }), props = animation.props;
+ propFilter(props, animation.opts.specialEasing);
+ for (; index < length; index++) {
+ result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
+ if (result) {
+ if (isFunction(result.stop)) {
+ jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
+ }
+ return result;
+ }
+ }
+ jQuery.map(props, createTween, animation);
+ if (isFunction(animation.opts.start)) {
+ animation.opts.start.call(elem, animation);
+ }
+ animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
+ jQuery.fx.timer(
+ jQuery.extend(tick, {
+ elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+ return animation;
+ }
+ jQuery.Animation = jQuery.extend(Animation, {
+ tweeners: {
+ "*": [function(prop, value) {
+ var tween = this.createTween(prop, value);
+ adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
+ return tween;
+ }]
+ },
+ tweener: function(props, callback) {
+ if (isFunction(props)) {
+ callback = props;
+ props = ["*"];
+ } else {
+ props = props.match(rnothtmlwhite);
+ }
+ var prop, index = 0, length = props.length;
+ for (; index < length; index++) {
+ prop = props[index];
+ Animation.tweeners[prop] = Animation.tweeners[prop] || [];
+ Animation.tweeners[prop].unshift(callback);
+ }
+ },
+ prefilters: [defaultPrefilter],
+ prefilter: function(callback, prepend) {
+ if (prepend) {
+ Animation.prefilters.unshift(callback);
+ } else {
+ Animation.prefilters.push(callback);
+ }
+ }
+ });
+ jQuery.speed = function(speed, easing, fn2) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn2 || !fn2 && easing || isFunction(speed) && speed,
+ duration: speed,
+ easing: fn2 && easing || easing && !isFunction(easing) && easing
+ };
+ if (jQuery.fx.off) {
+ opt.duration = 0;
+ } else {
+ if (typeof opt.duration !== "number") {
+ if (opt.duration in jQuery.fx.speeds) {
+ opt.duration = jQuery.fx.speeds[opt.duration];
+ } else {
+ opt.duration = jQuery.fx.speeds._default;
+ }
+ }
+ }
+ if (opt.queue == null || opt.queue === true) {
+ opt.queue = "fx";
+ }
+ opt.old = opt.complete;
+ opt.complete = function() {
+ if (isFunction(opt.old)) {
+ opt.old.call(this);
+ }
+ if (opt.queue) {
+ jQuery.dequeue(this, opt.queue);
+ }
+ };
+ return opt;
+ };
+ jQuery.fn.extend({
+ fadeTo: function(speed, to, easing, callback) {
+ return this.filter(isHiddenWithinTree).css("opacity", 0).show().end().animate({ opacity: to }, speed, easing, callback);
+ },
+ animate: function(prop, speed, easing, callback) {
+ var empty = jQuery.isEmptyObject(prop), optall = jQuery.speed(speed, easing, callback), doAnimation = function() {
+ var anim = Animation(this, jQuery.extend({}, prop), optall);
+ if (empty || dataPriv.get(this, "finish")) {
+ anim.stop(true);
+ }
+ };
+ doAnimation.finish = doAnimation;
+ return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
+ },
+ stop: function(type, clearQueue, gotoEnd) {
+ var stopQueue = function(hooks) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop(gotoEnd);
+ };
+ if (typeof type !== "string") {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = void 0;
+ }
+ if (clearQueue) {
+ this.queue(type || "fx", []);
+ }
+ return this.each(function() {
+ var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery.timers, data = dataPriv.get(this);
+ if (index) {
+ if (data[index] && data[index].stop) {
+ stopQueue(data[index]);
+ }
+ } else {
+ for (index in data) {
+ if (data[index] && data[index].stop && rrun.test(index)) {
+ stopQueue(data[index]);
+ }
+ }
+ }
+ for (index = timers.length; index--; ) {
+ if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
+ timers[index].anim.stop(gotoEnd);
+ dequeue = false;
+ timers.splice(index, 1);
+ }
+ }
+ if (dequeue || !gotoEnd) {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ finish: function(type) {
+ if (type !== false) {
+ type = type || "fx";
+ }
+ return this.each(function() {
+ var index, data = dataPriv.get(this), queue = data[type + "queue"], hooks = data[type + "queueHooks"], timers = jQuery.timers, length = queue ? queue.length : 0;
+ data.finish = true;
+ jQuery.queue(this, type, []);
+ if (hooks && hooks.stop) {
+ hooks.stop.call(this, true);
+ }
+ for (index = timers.length; index--; ) {
+ if (timers[index].elem === this && timers[index].queue === type) {
+ timers[index].anim.stop(true);
+ timers.splice(index, 1);
+ }
+ }
+ for (index = 0; index < length; index++) {
+ if (queue[index] && queue[index].finish) {
+ queue[index].finish.call(this);
+ }
+ }
+ delete data.finish;
+ });
+ }
+ });
+ jQuery.each(["toggle", "show", "hide"], function(_i, name) {
+ var cssFn = jQuery.fn[name];
+ jQuery.fn[name] = function(speed, easing, callback) {
+ return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
+ };
+ });
+ jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+ }, function(name, props) {
+ jQuery.fn[name] = function(speed, easing, callback) {
+ return this.animate(props, speed, easing, callback);
+ };
+ });
+ jQuery.timers = [];
+ jQuery.fx.tick = function() {
+ var timer, i = 0, timers = jQuery.timers;
+ fxNow = Date.now();
+ for (; i < timers.length; i++) {
+ timer = timers[i];
+ if (!timer() && timers[i] === timer) {
+ timers.splice(i--, 1);
+ }
+ }
+ if (!timers.length) {
+ jQuery.fx.stop();
+ }
+ fxNow = void 0;
+ };
+ jQuery.fx.timer = function(timer) {
+ jQuery.timers.push(timer);
+ jQuery.fx.start();
+ };
+ jQuery.fx.interval = 13;
+ jQuery.fx.start = function() {
+ if (inProgress) {
+ return;
+ }
+ inProgress = true;
+ schedule();
+ };
+ jQuery.fx.stop = function() {
+ inProgress = null;
+ };
+ jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ };
+ jQuery.fn.delay = function(time, type) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+ return this.queue(type, function(next, hooks) {
+ var timeout = window2.setTimeout(next, time);
+ hooks.stop = function() {
+ window2.clearTimeout(timeout);
+ };
+ });
+ };
+ (function() {
+ var input = document2.createElement("input"), select = document2.createElement("select"), opt = select.appendChild(document2.createElement("option"));
+ input.type = "checkbox";
+ support.checkOn = input.value !== "";
+ support.optSelected = opt.selected;
+ input = document2.createElement("input");
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+ })();
+ var boolHook, attrHandle = jQuery.expr.attrHandle;
+ jQuery.fn.extend({
+ attr: function(name, value) {
+ return access(this, jQuery.attr, name, value, arguments.length > 1);
+ },
+ removeAttr: function(name) {
+ return this.each(function() {
+ jQuery.removeAttr(this, name);
+ });
+ }
+ });
+ jQuery.extend({
+ attr: function(elem, name, value) {
+ var ret, hooks, nType = elem.nodeType;
+ if (nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+ if (typeof elem.getAttribute === "undefined") {
+ return jQuery.prop(elem, name, value);
+ }
+ if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
+ hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : void 0);
+ }
+ if (value !== void 0) {
+ if (value === null) {
+ jQuery.removeAttr(elem, name);
+ return;
+ }
+ if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== void 0) {
+ return ret;
+ }
+ elem.setAttribute(name, value + "");
+ return value;
+ }
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
+ return ret;
+ }
+ ret = jQuery.find.attr(elem, name);
+ return ret == null ? void 0 : ret;
+ },
+ attrHooks: {
+ type: {
+ set: function(elem, value) {
+ if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
+ var val = elem.value;
+ elem.setAttribute("type", value);
+ if (val) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+ removeAttr: function(elem, value) {
+ var name, i = 0, attrNames = value && value.match(rnothtmlwhite);
+ if (attrNames && elem.nodeType === 1) {
+ while (name = attrNames[i++]) {
+ elem.removeAttribute(name);
+ }
+ }
+ }
+ });
+ boolHook = {
+ set: function(elem, value, name) {
+ if (value === false) {
+ jQuery.removeAttr(elem, name);
+ } else {
+ elem.setAttribute(name, name);
+ }
+ return name;
+ }
+ };
+ jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function(_i, name) {
+ var getter = attrHandle[name] || jQuery.find.attr;
+ attrHandle[name] = function(elem, name2, isXML) {
+ var ret, handle, lowercaseName = name2.toLowerCase();
+ if (!isXML) {
+ handle = attrHandle[lowercaseName];
+ attrHandle[lowercaseName] = ret;
+ ret = getter(elem, name2, isXML) != null ? lowercaseName : null;
+ attrHandle[lowercaseName] = handle;
+ }
+ return ret;
+ };
+ });
+ var rfocusable = /^(?:input|select|textarea|button)$/i, rclickable = /^(?:a|area)$/i;
+ jQuery.fn.extend({
+ prop: function(name, value) {
+ return access(this, jQuery.prop, name, value, arguments.length > 1);
+ },
+ removeProp: function(name) {
+ return this.each(function() {
+ delete this[jQuery.propFix[name] || name];
+ });
+ }
+ });
+ jQuery.extend({
+ prop: function(elem, name, value) {
+ var ret, hooks, nType = elem.nodeType;
+ if (nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+ if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
+ name = jQuery.propFix[name] || name;
+ hooks = jQuery.propHooks[name];
+ }
+ if (value !== void 0) {
+ if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== void 0) {
+ return ret;
+ }
+ return elem[name] = value;
+ }
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
+ return ret;
+ }
+ return elem[name];
+ },
+ propHooks: {
+ tabIndex: {
+ get: function(elem) {
+ var tabindex = jQuery.find.attr(elem, "tabindex");
+ if (tabindex) {
+ return parseInt(tabindex, 10);
+ }
+ if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
+ return 0;
+ }
+ return -1;
+ }
+ }
+ },
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ }
+ });
+ if (!support.optSelected) {
+ jQuery.propHooks.selected = {
+ get: function(elem) {
+ var parent = elem.parentNode;
+ if (parent && parent.parentNode) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ },
+ set: function(elem) {
+ var parent = elem.parentNode;
+ if (parent) {
+ parent.selectedIndex;
+ if (parent.parentNode) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+ };
+ }
+ jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+ ], function() {
+ jQuery.propFix[this.toLowerCase()] = this;
+ });
+ function stripAndCollapse(value) {
+ var tokens = value.match(rnothtmlwhite) || [];
+ return tokens.join(" ");
+ }
+ function getClass(elem) {
+ return elem.getAttribute && elem.getAttribute("class") || "";
+ }
+ function classesToArray(value) {
+ if (Array.isArray(value)) {
+ return value;
+ }
+ if (typeof value === "string") {
+ return value.match(rnothtmlwhite) || [];
+ }
+ return [];
+ }
+ jQuery.fn.extend({
+ addClass: function(value) {
+ var classNames, cur, curValue, className, i, finalValue;
+ if (isFunction(value)) {
+ return this.each(function(j) {
+ jQuery(this).addClass(value.call(this, j, getClass(this)));
+ });
+ }
+ classNames = classesToArray(value);
+ if (classNames.length) {
+ return this.each(function() {
+ curValue = getClass(this);
+ cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
+ if (cur) {
+ for (i = 0; i < classNames.length; i++) {
+ className = classNames[i];
+ if (cur.indexOf(" " + className + " ") < 0) {
+ cur += className + " ";
+ }
+ }
+ finalValue = stripAndCollapse(cur);
+ if (curValue !== finalValue) {
+ this.setAttribute("class", finalValue);
+ }
+ }
+ });
+ }
+ return this;
+ },
+ removeClass: function(value) {
+ var classNames, cur, curValue, className, i, finalValue;
+ if (isFunction(value)) {
+ return this.each(function(j) {
+ jQuery(this).removeClass(value.call(this, j, getClass(this)));
+ });
+ }
+ if (!arguments.length) {
+ return this.attr("class", "");
+ }
+ classNames = classesToArray(value);
+ if (classNames.length) {
+ return this.each(function() {
+ curValue = getClass(this);
+ cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
+ if (cur) {
+ for (i = 0; i < classNames.length; i++) {
+ className = classNames[i];
+ while (cur.indexOf(" " + className + " ") > -1) {
+ cur = cur.replace(" " + className + " ", " ");
+ }
+ }
+ finalValue = stripAndCollapse(cur);
+ if (curValue !== finalValue) {
+ this.setAttribute("class", finalValue);
+ }
+ }
+ });
+ }
+ return this;
+ },
+ toggleClass: function(value, stateVal) {
+ var classNames, className, i, self2, type = typeof value, isValidValue = type === "string" || Array.isArray(value);
+ if (isFunction(value)) {
+ return this.each(function(i2) {
+ jQuery(this).toggleClass(
+ value.call(this, i2, getClass(this), stateVal),
+ stateVal
+ );
+ });
+ }
+ if (typeof stateVal === "boolean" && isValidValue) {
+ return stateVal ? this.addClass(value) : this.removeClass(value);
+ }
+ classNames = classesToArray(value);
+ return this.each(function() {
+ if (isValidValue) {
+ self2 = jQuery(this);
+ for (i = 0; i < classNames.length; i++) {
+ className = classNames[i];
+ if (self2.hasClass(className)) {
+ self2.removeClass(className);
+ } else {
+ self2.addClass(className);
+ }
+ }
+ } else if (value === void 0 || type === "boolean") {
+ className = getClass(this);
+ if (className) {
+ dataPriv.set(this, "__className__", className);
+ }
+ if (this.setAttribute) {
+ this.setAttribute(
+ "class",
+ className || value === false ? "" : dataPriv.get(this, "__className__") || ""
+ );
+ }
+ }
+ });
+ },
+ hasClass: function(selector) {
+ var className, elem, i = 0;
+ className = " " + selector + " ";
+ while (elem = this[i++]) {
+ if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
+ return true;
+ }
+ }
+ return false;
+ }
+ });
+ var rreturn = /\r/g;
+ jQuery.fn.extend({
+ val: function(value) {
+ var hooks, ret, valueIsFunction, elem = this[0];
+ if (!arguments.length) {
+ if (elem) {
+ hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== void 0) {
+ return ret;
+ }
+ ret = elem.value;
+ if (typeof ret === "string") {
+ return ret.replace(rreturn, "");
+ }
+ return ret == null ? "" : ret;
+ }
+ return;
+ }
+ valueIsFunction = isFunction(value);
+ return this.each(function(i) {
+ var val;
+ if (this.nodeType !== 1) {
+ return;
+ }
+ if (valueIsFunction) {
+ val = value.call(this, i, jQuery(this).val());
+ } else {
+ val = value;
+ }
+ if (val == null) {
+ val = "";
+ } else if (typeof val === "number") {
+ val += "";
+ } else if (Array.isArray(val)) {
+ val = jQuery.map(val, function(value2) {
+ return value2 == null ? "" : value2 + "";
+ });
+ }
+ hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
+ if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === void 0) {
+ this.value = val;
+ }
+ });
+ }
+ });
+ jQuery.extend({
+ valHooks: {
+ option: {
+ get: function(elem) {
+ var val = jQuery.find.attr(elem, "value");
+ return val != null ? val : (
+ // Support: IE <=10 - 11 only
+ // option.text throws exceptions (trac-14686, trac-14858)
+ // Strip and collapse whitespace
+ // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+ stripAndCollapse(jQuery.text(elem))
+ );
+ }
+ },
+ select: {
+ get: function(elem) {
+ var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one", values = one ? null : [], max2 = one ? index + 1 : options.length;
+ if (index < 0) {
+ i = max2;
+ } else {
+ i = one ? index : 0;
+ }
+ for (; i < max2; i++) {
+ option = options[i];
+ if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup
+ !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
+ value = jQuery(option).val();
+ if (one) {
+ return value;
+ }
+ values.push(value);
+ }
+ }
+ return values;
+ },
+ set: function(elem, value) {
+ var optionSet, option, options = elem.options, values = jQuery.makeArray(value), i = options.length;
+ while (i--) {
+ option = options[i];
+ if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
+ optionSet = true;
+ }
+ }
+ if (!optionSet) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+ });
+ jQuery.each(["radio", "checkbox"], function() {
+ jQuery.valHooks[this] = {
+ set: function(elem, value) {
+ if (Array.isArray(value)) {
+ return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;
+ }
+ }
+ };
+ if (!support.checkOn) {
+ jQuery.valHooks[this].get = function(elem) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+ });
+ var location2 = window2.location;
+ var nonce = { guid: Date.now() };
+ var rquery = /\?/;
+ jQuery.parseXML = function(data) {
+ var xml, parserErrorElem;
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+ try {
+ xml = new window2.DOMParser().parseFromString(data, "text/xml");
+ } catch (e) {
+ }
+ parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
+ if (!xml || parserErrorElem) {
+ jQuery.error("Invalid XML: " + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {
+ return el.textContent;
+ }).join("\n") : data));
+ }
+ return xml;
+ };
+ var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function(e) {
+ e.stopPropagation();
+ };
+ jQuery.extend(jQuery.event, {
+ trigger: function(event, data, elem, onlyHandlers) {
+ var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [elem || document2], type = hasOwn.call(event, "type") ? event.type : event, namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
+ cur = lastElement = tmp = elem = elem || document2;
+ if (elem.nodeType === 3 || elem.nodeType === 8) {
+ return;
+ }
+ if (rfocusMorph.test(type + jQuery.event.triggered)) {
+ return;
+ }
+ if (type.indexOf(".") > -1) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+ event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === "object" && event);
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+ event.result = void 0;
+ if (!event.target) {
+ event.target = elem;
+ }
+ data = data == null ? [event] : jQuery.makeArray(data, [event]);
+ special = jQuery.event.special[type] || {};
+ if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
+ return;
+ }
+ if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
+ bubbleType = special.delegateType || type;
+ if (!rfocusMorph.test(bubbleType + type)) {
+ cur = cur.parentNode;
+ }
+ for (; cur; cur = cur.parentNode) {
+ eventPath.push(cur);
+ tmp = cur;
+ }
+ if (tmp === (elem.ownerDocument || document2)) {
+ eventPath.push(tmp.defaultView || tmp.parentWindow || window2);
+ }
+ }
+ i = 0;
+ while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
+ lastElement = cur;
+ event.type = i > 1 ? bubbleType : special.bindType || type;
+ handle = (dataPriv.get(cur, "events") || /* @__PURE__ */ Object.create(null))[event.type] && dataPriv.get(cur, "handle");
+ if (handle) {
+ handle.apply(cur, data);
+ }
+ handle = ontype && cur[ontype];
+ if (handle && handle.apply && acceptData(cur)) {
+ event.result = handle.apply(cur, data);
+ if (event.result === false) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+ if (!onlyHandlers && !event.isDefaultPrevented()) {
+ if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
+ if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
+ tmp = elem[ontype];
+ if (tmp) {
+ elem[ontype] = null;
+ }
+ jQuery.event.triggered = type;
+ if (event.isPropagationStopped()) {
+ lastElement.addEventListener(type, stopPropagationCallback);
+ }
+ elem[type]();
+ if (event.isPropagationStopped()) {
+ lastElement.removeEventListener(type, stopPropagationCallback);
+ }
+ jQuery.event.triggered = void 0;
+ if (tmp) {
+ elem[ontype] = tmp;
+ }
+ }
+ }
+ }
+ return event.result;
+ },
+ // Piggyback on a donor event to simulate a different one
+ // Used only for `focus(in | out)` events
+ simulate: function(type, elem, event) {
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type,
+ isSimulated: true
+ }
+ );
+ jQuery.event.trigger(e, null, elem);
+ }
+ });
+ jQuery.fn.extend({
+ trigger: function(type, data) {
+ return this.each(function() {
+ jQuery.event.trigger(type, data, this);
+ });
+ },
+ triggerHandler: function(type, data) {
+ var elem = this[0];
+ if (elem) {
+ return jQuery.event.trigger(type, data, elem, true);
+ }
+ }
+ });
+ var rbracket = /\[\]$/, rCRLF = /\r?\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i;
+ function buildParams(prefix, obj, traditional, add) {
+ var name;
+ if (Array.isArray(obj)) {
+ jQuery.each(obj, function(i, v) {
+ if (traditional || rbracket.test(prefix)) {
+ add(prefix, v);
+ } else {
+ buildParams(
+ prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]",
+ v,
+ traditional,
+ add
+ );
+ }
+ });
+ } else if (!traditional && toType2(obj) === "object") {
+ for (name in obj) {
+ buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
+ }
+ } else {
+ add(prefix, obj);
+ }
+ }
+ jQuery.param = function(a, traditional) {
+ var prefix, s = [], add = function(key, valueOrFunction) {
+ var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
+ s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
+ };
+ if (a == null) {
+ return "";
+ }
+ if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
+ jQuery.each(a, function() {
+ add(this.name, this.value);
+ });
+ } else {
+ for (prefix in a) {
+ buildParams(prefix, a[prefix], traditional, add);
+ }
+ }
+ return s.join("&");
+ };
+ jQuery.fn.extend({
+ serialize: function() {
+ return jQuery.param(this.serializeArray());
+ },
+ serializeArray: function() {
+ return this.map(function() {
+ var elements = jQuery.prop(this, "elements");
+ return elements ? jQuery.makeArray(elements) : this;
+ }).filter(function() {
+ var type = this.type;
+ return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
+ }).map(function(_i, elem) {
+ var val = jQuery(this).val();
+ if (val == null) {
+ return null;
+ }
+ if (Array.isArray(val)) {
+ return jQuery.map(val, function(val2) {
+ return { name: elem.name, value: val2.replace(rCRLF, "\r\n") };
+ });
+ }
+ return { name: elem.name, value: val.replace(rCRLF, "\r\n") };
+ }).get();
+ }
+ });
+ var r20 = /%20/g, rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, prefilters = {}, transports = {}, allTypes = "*/".concat("*"), originAnchor = document2.createElement("a");
+ originAnchor.href = location2.href;
+ function addToPrefiltersOrTransports(structure) {
+ return function(dataTypeExpression, func) {
+ if (typeof dataTypeExpression !== "string") {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+ var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
+ if (isFunction(func)) {
+ while (dataType = dataTypes[i++]) {
+ if (dataType[0] === "+") {
+ dataType = dataType.slice(1) || "*";
+ (structure[dataType] = structure[dataType] || []).unshift(func);
+ } else {
+ (structure[dataType] = structure[dataType] || []).push(func);
+ }
+ }
+ }
+ };
+ }
+ function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
+ var inspected = {}, seekingTransport = structure === transports;
+ function inspect(dataType) {
+ var selected;
+ inspected[dataType] = true;
+ jQuery.each(structure[dataType] || [], function(_, prefilterOrFactory) {
+ var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
+ if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
+ options.dataTypes.unshift(dataTypeOrTransport);
+ inspect(dataTypeOrTransport);
+ return false;
+ } else if (seekingTransport) {
+ return !(selected = dataTypeOrTransport);
+ }
+ });
+ return selected;
+ }
+ return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
+ }
+ function ajaxExtend(target, src) {
+ var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {};
+ for (key in src) {
+ if (src[key] !== void 0) {
+ (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
+ }
+ }
+ if (deep) {
+ jQuery.extend(true, target, deep);
+ }
+ return target;
+ }
+ function ajaxHandleResponses(s, jqXHR, responses) {
+ var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes;
+ while (dataTypes[0] === "*") {
+ dataTypes.shift();
+ if (ct === void 0) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+ if (ct) {
+ for (type in contents) {
+ if (contents[type] && contents[type].test(ct)) {
+ dataTypes.unshift(type);
+ break;
+ }
+ }
+ }
+ if (dataTypes[0] in responses) {
+ finalDataType = dataTypes[0];
+ } else {
+ for (type in responses) {
+ if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
+ finalDataType = type;
+ break;
+ }
+ if (!firstDataType) {
+ firstDataType = type;
+ }
+ }
+ finalDataType = finalDataType || firstDataType;
+ }
+ if (finalDataType) {
+ if (finalDataType !== dataTypes[0]) {
+ dataTypes.unshift(finalDataType);
+ }
+ return responses[finalDataType];
+ }
+ }
+ function ajaxConvert(s, response, jqXHR, isSuccess) {
+ var conv2, current, conv, tmp, prev, converters = {}, dataTypes = s.dataTypes.slice();
+ if (dataTypes[1]) {
+ for (conv in s.converters) {
+ converters[conv.toLowerCase()] = s.converters[conv];
+ }
+ }
+ current = dataTypes.shift();
+ while (current) {
+ if (s.responseFields[current]) {
+ jqXHR[s.responseFields[current]] = response;
+ }
+ if (!prev && isSuccess && s.dataFilter) {
+ response = s.dataFilter(response, s.dataType);
+ }
+ prev = current;
+ current = dataTypes.shift();
+ if (current) {
+ if (current === "*") {
+ current = prev;
+ } else if (prev !== "*" && prev !== current) {
+ conv = converters[prev + " " + current] || converters["* " + current];
+ if (!conv) {
+ for (conv2 in converters) {
+ tmp = conv2.split(" ");
+ if (tmp[1] === current) {
+ conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
+ if (conv) {
+ if (conv === true) {
+ conv = converters[conv2];
+ } else if (converters[conv2] !== true) {
+ current = tmp[0];
+ dataTypes.unshift(tmp[1]);
+ }
+ break;
+ }
+ }
+ }
+ }
+ if (conv !== true) {
+ if (conv && s.throws) {
+ response = conv(response);
+ } else {
+ try {
+ response = conv(response);
+ } catch (e) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+ return { state: "success", data: response };
+ }
+ jQuery.extend({
+ // Counter for holding the number of active queries
+ active: 0,
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: location2.href,
+ type: "GET",
+ isLocal: rlocalProtocol.test(location2.protocol),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {
+ xml: /\bxml\b/,
+ html: /\bhtml/,
+ json: /\bjson\b/
+ },
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+ // Convert anything to text
+ "* text": String,
+ // Text to html (true = no transformation)
+ "text html": true,
+ // Evaluate text as a json expression
+ "text json": JSON.parse,
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function(target, settings) {
+ return settings ? (
+ // Building a settings object
+ ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings)
+ ) : (
+ // Extending ajaxSettings
+ ajaxExtend(jQuery.ajaxSettings, target)
+ );
+ },
+ ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
+ ajaxTransport: addToPrefiltersOrTransports(transports),
+ // Main method
+ ajax: function(url, options) {
+ if (typeof url === "object") {
+ options = url;
+ url = void 0;
+ }
+ options = options || {};
+ var transport, cacheURL, responseHeadersString, responseHeaders, timeoutTimer, urlAnchor, completed2, fireGlobals, i, uncached, s = jQuery.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks("once memory"), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, strAbort = "canceled", jqXHR = {
+ readyState: 0,
+ // Builds headers hashtable if needed
+ getResponseHeader: function(key) {
+ var match;
+ if (completed2) {
+ if (!responseHeaders) {
+ responseHeaders = {};
+ while (match = rheaders.exec(responseHeadersString)) {
+ responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
+ }
+ }
+ match = responseHeaders[key.toLowerCase() + " "];
+ }
+ return match == null ? null : match.join(", ");
+ },
+ // Raw string
+ getAllResponseHeaders: function() {
+ return completed2 ? responseHeadersString : null;
+ },
+ // Caches the header
+ setRequestHeader: function(name, value) {
+ if (completed2 == null) {
+ name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
+ requestHeaders[name] = value;
+ }
+ return this;
+ },
+ // Overrides response content-type header
+ overrideMimeType: function(type) {
+ if (completed2 == null) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+ // Status-dependent callbacks
+ statusCode: function(map) {
+ var code;
+ if (map) {
+ if (completed2) {
+ jqXHR.always(map[jqXHR.status]);
+ } else {
+ for (code in map) {
+ statusCode[code] = [statusCode[code], map[code]];
+ }
+ }
+ }
+ return this;
+ },
+ // Cancel the request
+ abort: function(statusText) {
+ var finalText = statusText || strAbort;
+ if (transport) {
+ transport.abort(finalText);
+ }
+ done(0, finalText);
+ return this;
+ }
+ };
+ deferred.promise(jqXHR);
+ s.url = ((url || s.url || location2.href) + "").replace(rprotocol, location2.protocol + "//");
+ s.type = options.method || options.type || s.method || s.type;
+ s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""];
+ if (s.crossDomain == null) {
+ urlAnchor = document2.createElement("a");
+ try {
+ urlAnchor.href = s.url;
+ urlAnchor.href = urlAnchor.href;
+ s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
+ } catch (e) {
+ s.crossDomain = true;
+ }
+ }
+ if (s.data && s.processData && typeof s.data !== "string") {
+ s.data = jQuery.param(s.data, s.traditional);
+ }
+ inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
+ if (completed2) {
+ return jqXHR;
+ }
+ fireGlobals = jQuery.event && s.global;
+ if (fireGlobals && jQuery.active++ === 0) {
+ jQuery.event.trigger("ajaxStart");
+ }
+ s.type = s.type.toUpperCase();
+ s.hasContent = !rnoContent.test(s.type);
+ cacheURL = s.url.replace(rhash, "");
+ if (!s.hasContent) {
+ uncached = s.url.slice(cacheURL.length);
+ if (s.data && (s.processData || typeof s.data === "string")) {
+ cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data;
+ delete s.data;
+ }
+ if (s.cache === false) {
+ cacheURL = cacheURL.replace(rantiCache, "$1");
+ uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
+ }
+ s.url = cacheURL + uncached;
+ } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
+ s.data = s.data.replace(r20, "+");
+ }
+ if (s.ifModified) {
+ if (jQuery.lastModified[cacheURL]) {
+ jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
+ }
+ if (jQuery.etag[cacheURL]) {
+ jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
+ }
+ }
+ if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
+ jqXHR.setRequestHeader("Content-Type", s.contentType);
+ }
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]
+ );
+ for (i in s.headers) {
+ jqXHR.setRequestHeader(i, s.headers[i]);
+ }
+ if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed2)) {
+ return jqXHR.abort();
+ }
+ strAbort = "abort";
+ completeDeferred.add(s.complete);
+ jqXHR.done(s.success);
+ jqXHR.fail(s.error);
+ transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
+ if (!transport) {
+ done(-1, "No Transport");
+ } else {
+ jqXHR.readyState = 1;
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxSend", [jqXHR, s]);
+ }
+ if (completed2) {
+ return jqXHR;
+ }
+ if (s.async && s.timeout > 0) {
+ timeoutTimer = window2.setTimeout(function() {
+ jqXHR.abort("timeout");
+ }, s.timeout);
+ }
+ try {
+ completed2 = false;
+ transport.send(requestHeaders, done);
+ } catch (e) {
+ if (completed2) {
+ throw e;
+ }
+ done(-1, e);
+ }
+ }
+ function done(status, nativeStatusText, responses, headers) {
+ var isSuccess, success, error, response, modified, statusText = nativeStatusText;
+ if (completed2) {
+ return;
+ }
+ completed2 = true;
+ if (timeoutTimer) {
+ window2.clearTimeout(timeoutTimer);
+ }
+ transport = void 0;
+ responseHeadersString = headers || "";
+ jqXHR.readyState = status > 0 ? 4 : 0;
+ isSuccess = status >= 200 && status < 300 || status === 304;
+ if (responses) {
+ response = ajaxHandleResponses(s, jqXHR, responses);
+ }
+ if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1 && jQuery.inArray("json", s.dataTypes) < 0) {
+ s.converters["text script"] = function() {
+ };
+ }
+ response = ajaxConvert(s, response, jqXHR, isSuccess);
+ if (isSuccess) {
+ if (s.ifModified) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if (modified) {
+ jQuery.lastModified[cacheURL] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if (modified) {
+ jQuery.etag[cacheURL] = modified;
+ }
+ }
+ if (status === 204 || s.type === "HEAD") {
+ statusText = "nocontent";
+ } else if (status === 304) {
+ statusText = "notmodified";
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ error = statusText;
+ if (status || !statusText) {
+ statusText = "error";
+ if (status < 0) {
+ status = 0;
+ }
+ }
+ }
+ jqXHR.status = status;
+ jqXHR.statusText = (nativeStatusText || statusText) + "";
+ if (isSuccess) {
+ deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
+ } else {
+ deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
+ }
+ jqXHR.statusCode(statusCode);
+ statusCode = void 0;
+ if (fireGlobals) {
+ globalEventContext.trigger(
+ isSuccess ? "ajaxSuccess" : "ajaxError",
+ [jqXHR, s, isSuccess ? success : error]
+ );
+ }
+ completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
+ if (!--jQuery.active) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+ return jqXHR;
+ },
+ getJSON: function(url, data, callback) {
+ return jQuery.get(url, data, callback, "json");
+ },
+ getScript: function(url, callback) {
+ return jQuery.get(url, void 0, callback, "script");
+ }
+ });
+ jQuery.each(["get", "post"], function(_i, method) {
+ jQuery[method] = function(url, data, callback, type) {
+ if (isFunction(data)) {
+ type = type || callback;
+ callback = data;
+ data = void 0;
+ }
+ return jQuery.ajax(jQuery.extend({
+ url,
+ type: method,
+ dataType: type,
+ data,
+ success: callback
+ }, jQuery.isPlainObject(url) && url));
+ };
+ });
+ jQuery.ajaxPrefilter(function(s) {
+ var i;
+ for (i in s.headers) {
+ if (i.toLowerCase() === "content-type") {
+ s.contentType = s.headers[i] || "";
+ }
+ }
+ });
+ jQuery._evalUrl = function(url, options, doc2) {
+ return jQuery.ajax({
+ url,
+ // Make this explicit, since user can override this through ajaxSetup (trac-11264)
+ type: "GET",
+ dataType: "script",
+ cache: true,
+ async: false,
+ global: false,
+ // Only evaluate the response if it is successful (gh-4126)
+ // dataFilter is not invoked for failure responses, so using it instead
+ // of the default converter is kludgy but it works.
+ converters: {
+ "text script": function() {
+ }
+ },
+ dataFilter: function(response) {
+ jQuery.globalEval(response, options, doc2);
+ }
+ });
+ };
+ jQuery.fn.extend({
+ wrapAll: function(html) {
+ var wrap;
+ if (this[0]) {
+ if (isFunction(html)) {
+ html = html.call(this[0]);
+ }
+ wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
+ if (this[0].parentNode) {
+ wrap.insertBefore(this[0]);
+ }
+ wrap.map(function() {
+ var elem = this;
+ while (elem.firstElementChild) {
+ elem = elem.firstElementChild;
+ }
+ return elem;
+ }).append(this);
+ }
+ return this;
+ },
+ wrapInner: function(html) {
+ if (isFunction(html)) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner(html.call(this, i));
+ });
+ }
+ return this.each(function() {
+ var self2 = jQuery(this), contents = self2.contents();
+ if (contents.length) {
+ contents.wrapAll(html);
+ } else {
+ self2.append(html);
+ }
+ });
+ },
+ wrap: function(html) {
+ var htmlIsFunction = isFunction(html);
+ return this.each(function(i) {
+ jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
+ });
+ },
+ unwrap: function(selector) {
+ this.parent(selector).not("body").each(function() {
+ jQuery(this).replaceWith(this.childNodes);
+ });
+ return this;
+ }
+ });
+ jQuery.expr.pseudos.hidden = function(elem) {
+ return !jQuery.expr.pseudos.visible(elem);
+ };
+ jQuery.expr.pseudos.visible = function(elem) {
+ return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
+ };
+ jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new window2.XMLHttpRequest();
+ } catch (e) {
+ }
+ };
+ var xhrSuccessStatus = {
+ // File protocol always yields status code 0, assume 200
+ 0: 200,
+ // Support: IE <=9 only
+ // trac-1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ }, xhrSupported = jQuery.ajaxSettings.xhr();
+ support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
+ support.ajax = xhrSupported = !!xhrSupported;
+ jQuery.ajaxTransport(function(options) {
+ var callback, errorCallback;
+ if (support.cors || xhrSupported && !options.crossDomain) {
+ return {
+ send: function(headers, complete) {
+ var i, xhr = options.xhr();
+ xhr.open(
+ options.type,
+ options.url,
+ options.async,
+ options.username,
+ options.password
+ );
+ if (options.xhrFields) {
+ for (i in options.xhrFields) {
+ xhr[i] = options.xhrFields[i];
+ }
+ }
+ if (options.mimeType && xhr.overrideMimeType) {
+ xhr.overrideMimeType(options.mimeType);
+ }
+ if (!options.crossDomain && !headers["X-Requested-With"]) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+ for (i in headers) {
+ xhr.setRequestHeader(i, headers[i]);
+ }
+ callback = function(type) {
+ return function() {
+ if (callback) {
+ callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
+ if (type === "abort") {
+ xhr.abort();
+ } else if (type === "error") {
+ if (typeof xhr.status !== "number") {
+ complete(0, "error");
+ } else {
+ complete(
+ // File: protocol always yields status 0; see trac-8605, trac-14207
+ xhr.status,
+ xhr.statusText
+ );
+ }
+ } else {
+ complete(
+ xhrSuccessStatus[xhr.status] || xhr.status,
+ xhr.statusText,
+ // Support: IE <=9 only
+ // IE9 has no XHR2 but throws on binary (trac-11426)
+ // For XHR2 non-text, let the caller handle it (gh-2498)
+ (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? { binary: xhr.response } : { text: xhr.responseText },
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+ xhr.onload = callback();
+ errorCallback = xhr.onerror = xhr.ontimeout = callback("error");
+ if (xhr.onabort !== void 0) {
+ xhr.onabort = errorCallback;
+ } else {
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState === 4) {
+ window2.setTimeout(function() {
+ if (callback) {
+ errorCallback();
+ }
+ });
+ }
+ };
+ }
+ callback = callback("abort");
+ try {
+ xhr.send(options.hasContent && options.data || null);
+ } catch (e) {
+ if (callback) {
+ throw e;
+ }
+ }
+ },
+ abort: function() {
+ if (callback) {
+ callback();
+ }
+ }
+ };
+ }
+ });
+ jQuery.ajaxPrefilter(function(s) {
+ if (s.crossDomain) {
+ s.contents.script = false;
+ }
+ });
+ jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /\b(?:java|ecma)script\b/
+ },
+ converters: {
+ "text script": function(text) {
+ jQuery.globalEval(text);
+ return text;
+ }
+ }
+ });
+ jQuery.ajaxPrefilter("script", function(s) {
+ if (s.cache === void 0) {
+ s.cache = false;
+ }
+ if (s.crossDomain) {
+ s.type = "GET";
+ }
+ });
+ jQuery.ajaxTransport("script", function(s) {
+ if (s.crossDomain || s.scriptAttrs) {
+ var script, callback;
+ return {
+ send: function(_, complete) {
+ script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({ charset: s.scriptCharset, src: s.url }).on("load error", callback = function(evt) {
+ script.remove();
+ callback = null;
+ if (evt) {
+ complete(evt.type === "error" ? 404 : 200, evt.type);
+ }
+ });
+ document2.head.appendChild(script[0]);
+ },
+ abort: function() {
+ if (callback) {
+ callback();
+ }
+ }
+ };
+ }
+ });
+ var oldCallbacks = [], rjsonp = /(=)\?(?=&|$)|\?\?/;
+ jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce.guid++;
+ this[callback] = true;
+ return callback;
+ }
+ });
+ jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, jqXHR) {
+ var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data");
+ if (jsonProp || s.dataTypes[0] === "jsonp") {
+ callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
+ if (jsonProp) {
+ s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
+ } else if (s.jsonp !== false) {
+ s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
+ }
+ s.converters["script json"] = function() {
+ if (!responseContainer) {
+ jQuery.error(callbackName + " was not called");
+ }
+ return responseContainer[0];
+ };
+ s.dataTypes[0] = "json";
+ overwritten = window2[callbackName];
+ window2[callbackName] = function() {
+ responseContainer = arguments;
+ };
+ jqXHR.always(function() {
+ if (overwritten === void 0) {
+ jQuery(window2).removeProp(callbackName);
+ } else {
+ window2[callbackName] = overwritten;
+ }
+ if (s[callbackName]) {
+ s.jsonpCallback = originalSettings.jsonpCallback;
+ oldCallbacks.push(callbackName);
+ }
+ if (responseContainer && isFunction(overwritten)) {
+ overwritten(responseContainer[0]);
+ }
+ responseContainer = overwritten = void 0;
+ });
+ return "script";
+ }
+ });
+ support.createHTMLDocument = function() {
+ var body = document2.implementation.createHTMLDocument("").body;
+ body.innerHTML = "<form></form><form></form>";
+ return body.childNodes.length === 2;
+ }();
+ jQuery.parseHTML = function(data, context, keepScripts) {
+ if (typeof data !== "string") {
+ return [];
+ }
+ if (typeof context === "boolean") {
+ keepScripts = context;
+ context = false;
+ }
+ var base, parsed, scripts;
+ if (!context) {
+ if (support.createHTMLDocument) {
+ context = document2.implementation.createHTMLDocument("");
+ base = context.createElement("base");
+ base.href = document2.location.href;
+ context.head.appendChild(base);
+ } else {
+ context = document2;
+ }
+ }
+ parsed = rsingleTag.exec(data);
+ scripts = !keepScripts && [];
+ if (parsed) {
+ return [context.createElement(parsed[1])];
+ }
+ parsed = buildFragment([data], context, scripts);
+ if (scripts && scripts.length) {
+ jQuery(scripts).remove();
+ }
+ return jQuery.merge([], parsed.childNodes);
+ };
+ jQuery.fn.load = function(url, params, callback) {
+ var selector, type, response, self2 = this, off = url.indexOf(" ");
+ if (off > -1) {
+ selector = stripAndCollapse(url.slice(off));
+ url = url.slice(0, off);
+ }
+ if (isFunction(params)) {
+ callback = params;
+ params = void 0;
+ } else if (params && typeof params === "object") {
+ type = "POST";
+ }
+ if (self2.length > 0) {
+ jQuery.ajax({
+ url,
+ // If "type" variable is undefined, then "GET" method will be used.
+ // Make value of this field explicit since
+ // user can override it through ajaxSetup method
+ type: type || "GET",
+ dataType: "html",
+ data: params
+ }).done(function(responseText) {
+ response = arguments;
+ self2.html(selector ? (
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector)
+ ) : (
+ // Otherwise use the full result
+ responseText
+ ));
+ }).always(callback && function(jqXHR, status) {
+ self2.each(function() {
+ callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
+ });
+ });
+ }
+ return this;
+ };
+ jQuery.expr.pseudos.animated = function(elem) {
+ return jQuery.grep(jQuery.timers, function(fn2) {
+ return elem === fn2.elem;
+ }).length;
+ };
+ jQuery.offset = {
+ setOffset: function(elem, options, i) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery.css(elem, "position"), curElem = jQuery(elem), props = {};
+ if (position === "static") {
+ elem.style.position = "relative";
+ }
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css(elem, "top");
+ curCSSLeft = jQuery.css(elem, "left");
+ calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1;
+ if (calculatePosition) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat(curCSSTop) || 0;
+ curLeft = parseFloat(curCSSLeft) || 0;
+ }
+ if (isFunction(options)) {
+ options = options.call(elem, i, jQuery.extend({}, curOffset));
+ }
+ if (options.top != null) {
+ props.top = options.top - curOffset.top + curTop;
+ }
+ if (options.left != null) {
+ props.left = options.left - curOffset.left + curLeft;
+ }
+ if ("using" in options) {
+ options.using.call(elem, props);
+ } else {
+ curElem.css(props);
+ }
+ }
+ };
+ jQuery.fn.extend({
+ // offset() relates an element's border box to the document origin
+ offset: function(options) {
+ if (arguments.length) {
+ return options === void 0 ? this : this.each(function(i) {
+ jQuery.offset.setOffset(this, options, i);
+ });
+ }
+ var rect, win, elem = this[0];
+ if (!elem) {
+ return;
+ }
+ if (!elem.getClientRects().length) {
+ return { top: 0, left: 0 };
+ }
+ rect = elem.getBoundingClientRect();
+ win = elem.ownerDocument.defaultView;
+ return {
+ top: rect.top + win.pageYOffset,
+ left: rect.left + win.pageXOffset
+ };
+ },
+ // position() relates an element's margin box to its offset parent's padding box
+ // This corresponds to the behavior of CSS absolute positioning
+ position: function() {
+ if (!this[0]) {
+ return;
+ }
+ var offsetParent, offset2, doc2, elem = this[0], parentOffset = { top: 0, left: 0 };
+ if (jQuery.css(elem, "position") === "fixed") {
+ offset2 = elem.getBoundingClientRect();
+ } else {
+ offset2 = this.offset();
+ doc2 = elem.ownerDocument;
+ offsetParent = elem.offsetParent || doc2.documentElement;
+ while (offsetParent && (offsetParent === doc2.body || offsetParent === doc2.documentElement) && jQuery.css(offsetParent, "position") === "static") {
+ offsetParent = offsetParent.parentNode;
+ }
+ if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
+ parentOffset = jQuery(offsetParent).offset();
+ parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
+ parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
+ }
+ }
+ return {
+ top: offset2.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
+ left: offset2.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
+ };
+ },
+ // This method will return documentElement in the following cases:
+ // 1) For the element inside the iframe without offsetParent, this method will return
+ // documentElement of the parent window
+ // 2) For the hidden or detached element
+ // 3) For body or html element, i.e. in case of the html node - it will return itself
+ //
+ // but those exceptions were never presented as a real life use-cases
+ // and might be considered as more preferable results.
+ //
+ // This logic, however, is not guaranteed and can change at any point in the future
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent;
+ while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent || documentElement;
+ });
+ }
+ });
+ jQuery.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(method, prop) {
+ var top2 = "pageYOffset" === prop;
+ jQuery.fn[method] = function(val) {
+ return access(this, function(elem, method2, val2) {
+ var win;
+ if (isWindow(elem)) {
+ win = elem;
+ } else if (elem.nodeType === 9) {
+ win = elem.defaultView;
+ }
+ if (val2 === void 0) {
+ return win ? win[prop] : elem[method2];
+ }
+ if (win) {
+ win.scrollTo(
+ !top2 ? val2 : win.pageXOffset,
+ top2 ? val2 : win.pageYOffset
+ );
+ } else {
+ elem[method2] = val2;
+ }
+ }, method, val, arguments.length);
+ };
+ });
+ jQuery.each(["top", "left"], function(_i, prop) {
+ jQuery.cssHooks[prop] = addGetHookIf(
+ support.pixelPosition,
+ function(elem, computed) {
+ if (computed) {
+ computed = curCSS(elem, prop);
+ return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
+ }
+ }
+ );
+ });
+ jQuery.each({ Height: "height", Width: "width" }, function(name, type) {
+ jQuery.each({
+ padding: "inner" + name,
+ content: type,
+ "": "outer" + name
+ }, function(defaultExtra, funcName) {
+ jQuery.fn[funcName] = function(margin, value) {
+ var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
+ return access(this, function(elem, type2, value2) {
+ var doc2;
+ if (isWindow(elem)) {
+ return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
+ }
+ if (elem.nodeType === 9) {
+ doc2 = elem.documentElement;
+ return Math.max(
+ elem.body["scroll" + name],
+ doc2["scroll" + name],
+ elem.body["offset" + name],
+ doc2["offset" + name],
+ doc2["client" + name]
+ );
+ }
+ return value2 === void 0 ? (
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css(elem, type2, extra)
+ ) : (
+ // Set width or height on the element
+ jQuery.style(elem, type2, value2, extra)
+ );
+ }, type, chainable ? margin : void 0, chainable);
+ };
+ });
+ });
+ jQuery.each([
+ "ajaxStart",
+ "ajaxStop",
+ "ajaxComplete",
+ "ajaxError",
+ "ajaxSuccess",
+ "ajaxSend"
+ ], function(_i, type) {
+ jQuery.fn[type] = function(fn2) {
+ return this.on(type, fn2);
+ };
+ });
+ jQuery.fn.extend({
+ bind: function(types, data, fn2) {
+ return this.on(types, null, data, fn2);
+ },
+ unbind: function(types, fn2) {
+ return this.off(types, null, fn2);
+ },
+ delegate: function(selector, types, data, fn2) {
+ return this.on(types, selector, data, fn2);
+ },
+ undelegate: function(selector, types, fn2) {
+ return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn2);
+ },
+ hover: function(fnOver, fnOut) {
+ return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver);
+ }
+ });
+ jQuery.each(
+ "blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),
+ function(_i, name) {
+ jQuery.fn[name] = function(data, fn2) {
+ return arguments.length > 0 ? this.on(name, null, data, fn2) : this.trigger(name);
+ };
+ }
+ );
+ var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
+ jQuery.proxy = function(fn2, context) {
+ var tmp, args, proxy;
+ if (typeof context === "string") {
+ tmp = fn2[context];
+ context = fn2;
+ fn2 = tmp;
+ }
+ if (!isFunction(fn2)) {
+ return void 0;
+ }
+ args = slice.call(arguments, 2);
+ proxy = function() {
+ return fn2.apply(context || this, args.concat(slice.call(arguments)));
+ };
+ proxy.guid = fn2.guid = fn2.guid || jQuery.guid++;
+ return proxy;
+ };
+ jQuery.holdReady = function(hold) {
+ if (hold) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready(true);
+ }
+ };
+ jQuery.isArray = Array.isArray;
+ jQuery.parseJSON = JSON.parse;
+ jQuery.nodeName = nodeName;
+ jQuery.isFunction = isFunction;
+ jQuery.isWindow = isWindow;
+ jQuery.camelCase = camelCase;
+ jQuery.type = toType2;
+ jQuery.now = Date.now;
+ jQuery.isNumeric = function(obj) {
+ var type = jQuery.type(obj);
+ return (type === "number" || type === "string") && // parseFloat NaNs numeric-cast false positives ("")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ !isNaN(obj - parseFloat(obj));
+ };
+ jQuery.trim = function(text) {
+ return text == null ? "" : (text + "").replace(rtrim, "$1");
+ };
+ if (typeof define === "function" && define.amd) {
+ define("jquery", [], function() {
+ return jQuery;
+ });
+ }
+ var _jQuery = window2.jQuery, _$ = window2.$;
+ jQuery.noConflict = function(deep) {
+ if (window2.$ === jQuery) {
+ window2.$ = _$;
+ }
+ if (deep && window2.jQuery === jQuery) {
+ window2.jQuery = _jQuery;
+ }
+ return jQuery;
+ };
+ if (typeof noGlobal === "undefined") {
+ window2.jQuery = window2.$ = jQuery;
+ }
+ return jQuery;
+ });
+ }
+ });
-`),i.push(s))}),i.forEach(s=>s.remove())}},replaceRootContainer(t,e,i){let s=new Set(["id",li,qn,Do,Kn]);if(t.tagName.toLowerCase()===e.toLowerCase())return Array.from(t.attributes).filter(o=>!s.has(o.name.toLowerCase())).forEach(o=>t.removeAttribute(o.name)),Object.keys(i).filter(o=>!s.has(o.toLowerCase())).forEach(o=>t.setAttribute(o,i[o])),t;{let o=document.createElement(e);return Object.keys(i).forEach(c=>o.setAttribute(c,i[c])),s.forEach(c=>o.setAttribute(c,t.getAttribute(c))),o.innerHTML=t.innerHTML,t.replaceWith(o),o}},getSticky(t,e,i){let s=(Et.private(t,"sticky")||[]).find(([o])=>e===o);if(s){let[o,c,d]=s;return d}else return typeof i=="function"?i():i},deleteSticky(t,e){this.updatePrivate(t,"sticky",[],i=>i.filter(([s,o])=>s!==e))},putSticky(t,e,i){let s=i(t);this.updatePrivate(t,"sticky",[],o=>{let c=o.findIndex(([d])=>e===d);return c>=0?o[c]=[e,i,s]:o.push([e,i,s]),o})},applyStickyOperations(t){let e=Et.private(t,"sticky");e&&e.forEach(([i,s,o])=>this.putSticky(t,i,s))}},j=Et,Eo=class{static isActive(t,e){let i=e._phxRef===void 0,o=t.getAttribute(To).split(",").indexOf(Ve.genFileRef(e))>=0;return e.size>0&&(i||o)}static isPreflighted(t,e){return t.getAttribute(Oo).split(",").indexOf(Ve.genFileRef(e))>=0&&this.isActive(t,e)}constructor(t,e,i){this.ref=Ve.genFileRef(e),this.fileEl=t,this.file=e,this.view=i,this.meta=null,this._isCancelled=!1,this._isDone=!1,this._progress=0,this._lastProgressSent=-1,this._onDone=function(){},this._onElUpdated=this.onElUpdated.bind(this),this.fileEl.addEventListener(wo,this._onElUpdated)}metadata(){return this.meta}progress(t){this._progress=Math.floor(t),this._progress>this._lastProgressSent&&(this._progress>=100?(this._progress=100,this._lastProgressSent=100,this._isDone=!0,this.view.pushFileProgress(this.fileEl,this.ref,100,()=>{Ve.untrackFile(this.fileEl,this.file),this._onDone()})):(this._lastProgressSent=this._progress,this.view.pushFileProgress(this.fileEl,this.ref,this._progress)))}cancel(){this._isCancelled=!0,this._isDone=!0,this._onDone()}isDone(){return this._isDone}error(t="failed"){this.view.pushFileProgress(this.fileEl,this.ref,{error:t}),Ve.clearFiles(this.fileEl)}onDone(t){this._onDone=()=>{this.fileEl.removeEventListener(wo,this._onElUpdated),t()}}onElUpdated(){this.fileEl.getAttribute(To).split(",").indexOf(this.ref)===-1&&this.cancel()}toPreflightPayload(){return{last_modified:this.file.lastModified,name:this.file.name,size:this.file.size,type:this.file.type,ref:this.ref}}uploader(t){if(this.meta.uploader){let e=t[this.meta.uploader]||We(`no uploader configured for ${this.meta.uploader}`);return{name:this.meta.uploader,callback:e}}else return{name:"channel",callback:Sg}}zipPostFlight(t){this.meta=t.entries[this.ref],this.meta||We(`no preflight upload response returned with ref ${this.ref}`,{input:this.fileEl,response:t})}},kg=0,Ve=class{static genFileRef(t){let e=t._phxRef;return e!==void 0?e:(t._phxRef=(kg++).toString(),t._phxRef)}static getEntryDataURL(t,e,i){let s=this.activeFiles(t).find(o=>this.genFileRef(o)===e);i(URL.createObjectURL(s))}static hasUploadsInProgress(t){let e=0;return j.findUploadInputs(t).forEach(i=>{i.getAttribute(Oo)!==i.getAttribute(cg)&&e++}),e>0}static serializeUploads(t){let e=this.activeFiles(t),i={};return e.forEach(s=>{let o={path:t.name},c=t.getAttribute(Ni);i[c]=i[c]||[],o.ref=this.genFileRef(s),o.name=s.name||o.ref,o.type=s.type,o.size=s.size,i[c].push(o)}),i}static clearFiles(t){t.value=null,t.removeAttribute(Ni),j.putPrivate(t,"files",[])}static untrackFile(t,e){j.putPrivate(t,"files",j.private(t,"files").filter(i=>!Object.is(i,e)))}static trackFiles(t,e){if(t.getAttribute("multiple")!==null){let i=e.filter(s=>!this.activeFiles(t).find(o=>Object.is(o,s)));j.putPrivate(t,"files",this.activeFiles(t).concat(i)),t.value=null}else j.putPrivate(t,"files",e)}static activeFileInputs(t){let e=j.findUploadInputs(t);return Array.from(e).filter(i=>i.files&&this.activeFiles(i).length>0)}static activeFiles(t){return(j.private(t,"files")||[]).filter(e=>Eo.isActive(t,e))}static inputsAwaitingPreflight(t){let e=j.findUploadInputs(t);return Array.from(e).filter(i=>this.filesAwaitingPreflight(i).length>0)}static filesAwaitingPreflight(t){return this.activeFiles(t).filter(e=>!Eo.isPreflighted(t,e))}constructor(t,e,i){this.view=e,this.onComplete=i,this._entries=Array.from(Ve.filesAwaitingPreflight(t)||[]).map(s=>new Eo(t,s,e)),this.numEntriesInProgress=this._entries.length}entries(){return this._entries}initAdapterUpload(t,e,i){this._entries=this._entries.map(o=>(o.zipPostFlight(t),o.onDone(()=>{this.numEntriesInProgress--,this.numEntriesInProgress===0&&this.onComplete()}),o));let s=this._entries.reduce((o,c)=>{let{name:d,callback:g}=c.uploader(i.uploaders);return o[d]=o[d]||{callback:g,entries:[]},o[d].entries.push(c),o},{});for(let o in s){let{callback:c,entries:d}=s[o];c(d,e,t,i)}}},Og={LiveFileUpload:{activeRefs(){return this.el.getAttribute(To)},preflightedRefs(){return this.el.getAttribute(Oo)},mounted(){this.preflightedWas=this.preflightedRefs()},updated(){let t=this.preflightedRefs();this.preflightedWas!==t&&(this.preflightedWas=t,t===""&&this.__view.cancelSubmit(this.el.form)),this.activeRefs()===""&&(this.el.value=null),this.el.dispatchEvent(new CustomEvent(wo))}},LiveImgPreview:{mounted(){this.ref=this.el.getAttribute("data-phx-entry-ref"),this.inputEl=document.getElementById(this.el.getAttribute(Ni)),Ve.getEntryDataURL(this.inputEl,this.ref,t=>{this.url=t,this.el.src=t})},destroyed(){URL.revokeObjectURL(this.url)}}},Dg=Og,Lg=class{constructor(t,e,i){let s=new Set,o=new Set([...e.children].map(d=>d.id)),c=[];Array.from(t.children).forEach(d=>{if(d.id&&(s.add(d.id),o.has(d.id))){let g=d.previousElementSibling&&d.previousElementSibling.id;c.push({elementId:d.id,previousElementId:g})}}),this.containerId=e.id,this.updateType=i,this.elementsToModify=c,this.elementIdsToAdd=[...o].filter(d=>!s.has(d))}perform(){let t=j.byId(this.containerId);this.elementsToModify.forEach(e=>{e.previousElementId?qt(document.getElementById(e.previousElementId),i=>{qt(document.getElementById(e.elementId),s=>{s.previousElementSibling&&s.previousElementSibling.id==i.id||i.insertAdjacentElement("afterend",s)})}):qt(document.getElementById(e.elementId),i=>{i.previousElementSibling==null||t.insertAdjacentElement("afterbegin",i)})}),this.updateType=="prepend"&&this.elementIdsToAdd.reverse().forEach(e=>{qt(document.getElementById(e),i=>t.insertAdjacentElement("afterbegin",i))})}},Jl=11;function Ng(t,e){var i=e.attributes,s,o,c,d,g;if(!(e.nodeType===Jl||t.nodeType===Jl)){for(var v=i.length-1;v>=0;v--)s=i[v],o=s.name,c=s.namespaceURI,d=s.value,c?(o=s.localName||o,g=t.getAttributeNS(c,o),g!==d&&(s.prefix==="xmlns"&&(o=s.name),t.setAttributeNS(c,o,d))):(g=t.getAttribute(o),g!==d&&t.setAttribute(o,d));for(var C=t.attributes,x=C.length-1;x>=0;x--)s=C[x],o=s.name,c=s.namespaceURI,c?(o=s.localName||o,e.hasAttributeNS(c,o)||t.removeAttributeNS(c,o)):e.hasAttribute(o)||t.removeAttribute(o)}}var Kr,Pg="http://www.w3.org/1999/xhtml",tt=typeof document>"u"?void 0:document,Ig=!!tt&&"content"in tt.createElement("template"),Rg=!!tt&&tt.createRange&&"createContextualFragment"in tt.createRange();function $g(t){var e=tt.createElement("template");return e.innerHTML=t,e.content.childNodes[0]}function Mg(t){Kr||(Kr=tt.createRange(),Kr.selectNode(tt.body));var e=Kr.createContextualFragment(t);return e.childNodes[0]}function Hg(t){var e=tt.createElement("body");return e.innerHTML=t,e.childNodes[0]}function Fg(t){return t=t.trim(),Ig?$g(t):Rg?Mg(t):Hg(t)}function Xr(t,e){var i=t.nodeName,s=e.nodeName,o,c;return i===s?!0:(o=i.charCodeAt(0),c=s.charCodeAt(0),o<=90&&c>=97?i===s.toUpperCase():c<=90&&o>=97?s===i.toUpperCase():!1)}function jg(t,e){return!e||e===Pg?tt.createElement(t):tt.createElementNS(e,t)}function Bg(t,e){for(var i=t.firstChild;i;){var s=i.nextSibling;e.appendChild(i),i=s}return e}function Ao(t,e,i){t[i]!==e[i]&&(t[i]=e[i],t[i]?t.setAttribute(i,""):t.removeAttribute(i))}var Ql={OPTION:function(t,e){var i=t.parentNode;if(i){var s=i.nodeName.toUpperCase();s==="OPTGROUP"&&(i=i.parentNode,s=i&&i.nodeName.toUpperCase()),s==="SELECT"&&!i.hasAttribute("multiple")&&(t.hasAttribute("selected")&&!e.selected&&(t.setAttribute("selected","selected"),t.removeAttribute("selected")),i.selectedIndex=-1)}Ao(t,e,"selected")},INPUT:function(t,e){Ao(t,e,"checked"),Ao(t,e,"disabled"),t.value!==e.value&&(t.value=e.value),e.hasAttribute("value")||t.removeAttribute("value")},TEXTAREA:function(t,e){var i=e.value;t.value!==i&&(t.value=i);var s=t.firstChild;if(s){var o=s.nodeValue;if(o==i||!i&&o==t.placeholder)return;s.nodeValue=i}},SELECT:function(t,e){if(!e.hasAttribute("multiple")){for(var i=-1,s=0,o=t.firstChild,c,d;o;)if(d=o.nodeName&&o.nodeName.toUpperCase(),d==="OPTGROUP")c=o,o=c.firstChild;else{if(d==="OPTION"){if(o.hasAttribute("selected")){i=s;break}s++}o=o.nextSibling,!o&&c&&(o=c.nextSibling,c=null)}t.selectedIndex=i}}},Vn=1,Ug=11,Zl=3,eu=8;function Di(){}function Vg(t){if(t)return t.getAttribute&&t.getAttribute("id")||t.id}function Wg(t){return function(i,s,o){if(o||(o={}),typeof s=="string")if(i.nodeName==="#document"||i.nodeName==="HTML"||i.nodeName==="BODY"){var c=s;s=tt.createElement("html"),s.innerHTML=c}else s=Fg(s);var d=o.getNodeKey||Vg,g=o.onBeforeNodeAdded||Di,v=o.onNodeAdded||Di,C=o.onBeforeElUpdated||Di,x=o.onElUpdated||Di,I=o.onBeforeNodeDiscarded||Di,D=o.onNodeDiscarded||Di,S=o.onBeforeElChildrenUpdated||Di,N=o.childrenOnly===!0,A=Object.create(null),_=[];function R(Y){_.push(Y)}function F(Y,W){if(Y.nodeType===Vn)for(var X=Y.firstChild;X;){var oe=void 0;W&&(oe=d(X))?R(oe):(D(X),X.firstChild&&F(X,W)),X=X.nextSibling}}function T(Y,W,X){I(Y)!==!1&&(W&&W.removeChild(Y),D(Y),F(Y,X))}function H(Y){if(Y.nodeType===Vn||Y.nodeType===Ug)for(var W=Y.firstChild;W;){var X=d(W);X&&(A[X]=W),H(W),W=W.nextSibling}}H(i);function K(Y){v(Y);for(var W=Y.firstChild;W;){var X=W.nextSibling,oe=d(W);if(oe){var de=A[oe];de&&Xr(W,de)?(W.parentNode.replaceChild(de,W),ee(de,W)):K(W)}else K(W);W=X}}function l(Y,W,X){for(;W;){var oe=W.nextSibling;(X=d(W))?R(X):T(W,Y,!0),W=oe}}function ee(Y,W,X){var oe=d(W);oe&&delete A[oe],!(!X&&(C(Y,W)===!1||(t(Y,W),x(Y),S(Y,W)===!1)))&&(Y.nodeName!=="TEXTAREA"?G(Y,W):Ql.TEXTAREA(Y,W))}function G(Y,W){var X=W.firstChild,oe=Y.firstChild,de,Pe,we,Oe,Se;e:for(;X;){for(Oe=X.nextSibling,de=d(X);oe;){if(we=oe.nextSibling,X.isSameNode&&X.isSameNode(oe)){X=Oe,oe=we;continue e}Pe=d(oe);var Ie=oe.nodeType,Ae=void 0;if(Ie===X.nodeType&&(Ie===Vn?(de?de!==Pe&&((Se=A[de])?we===Se?Ae=!1:(Y.insertBefore(Se,oe),Pe?R(Pe):T(oe,Y,!0),oe=Se):Ae=!1):Pe&&(Ae=!1),Ae=Ae!==!1&&Xr(oe,X),Ae&&ee(oe,X)):(Ie===Zl||Ie==eu)&&(Ae=!0,oe.nodeValue!==X.nodeValue&&(oe.nodeValue=X.nodeValue))),Ae){X=Oe,oe=we;continue e}Pe?R(Pe):T(oe,Y,!0),oe=we}if(de&&(Se=A[de])&&Xr(Se,X))Y.appendChild(Se),ee(Se,X);else{var Ge=g(X);Ge!==!1&&(Ge&&(X=Ge),X.actualize&&(X=X.actualize(Y.ownerDocument||tt)),Y.appendChild(X),K(X))}X=Oe,oe=we}l(Y,oe,Pe);var it=Ql[Y.nodeName];it&&it(Y,W)}var re=i,me=re.nodeType,_e=s.nodeType;if(!N){if(me===Vn)_e===Vn?Xr(i,s)||(D(i),re=Bg(i,jg(s.nodeName,s.namespaceURI))):re=s;else if(me===Zl||me===eu){if(_e===me)return re.nodeValue!==s.nodeValue&&(re.nodeValue=s.nodeValue),re;re=s}}if(re===s)D(i);else{if(s.isSameNode&&s.isSameNode(re))return;if(ee(re,s,N),_)for(var se=0,ye=_.length;se<ye;se++){var je=A[_[se]];je&&T(je,je.parentNode,!1)}}return!N&&re!==i&&i.parentNode&&(re.actualize&&(re=re.actualize(i.ownerDocument||tt)),i.parentNode.replaceChild(re,i)),re}}var qg=Wg(Ng),tu=qg,Yr=class{static patchEl(t,e,i){tu(t,e,{childrenOnly:!1,onBeforeElUpdated:(s,o)=>{if(i&&i.isSameNode(s)&&j.isFormInput(s))return j.mergeFocusedInput(s,o),!1}})}constructor(t,e,i,s,o){this.view=t,this.liveSocket=t.liveSocket,this.container=e,this.id=i,this.rootID=t.root.id,this.html=s,this.targetCID=o,this.cidPatch=ai(this.targetCID),this.callbacks={beforeadded:[],beforeupdated:[],beforephxChildAdded:[],afteradded:[],afterupdated:[],afterdiscarded:[],afterphxChildAdded:[],aftertransitionsDiscarded:[]}}before(t,e){this.callbacks[`before${t}`].push(e)}after(t,e){this.callbacks[`after${t}`].push(e)}trackBefore(t,...e){this.callbacks[`before${t}`].forEach(i=>i(...e))}trackAfter(t,...e){this.callbacks[`after${t}`].forEach(i=>i(...e))}markPrunableContentForRemoval(){j.all(this.container,"[phx-update=append] > *, [phx-update=prepend] > *",t=>{t.setAttribute(Hl,"")})}perform(){let{view:t,liveSocket:e,container:i,html:s}=this,o=this.isCIDPatch()?this.targetCIDContainer(s):i;if(this.isCIDPatch()&&!o)return;let c=e.getActiveElement(),{selectionStart:d,selectionEnd:g}=c&&j.hasSelectionRange(c)?c:{},v=e.binding(ko),C=e.binding(Co),x=e.binding(So),I=e.binding(fg),D=e.binding("remove"),S=[],N=[],A=[],_=[],R=null,F=e.time("premorph container prep",()=>this.buildDiffHTML(i,s,v,o));return this.trackBefore("added",i),this.trackBefore("updated",i,i),e.time("morphdom",()=>{tu(o,F,{childrenOnly:o.getAttribute(ot)===null,getNodeKey:T=>j.isPhxDestroyed(T)?null:T.id,onBeforeNodeAdded:T=>(this.trackBefore("added",T),T),onNodeAdded:T=>{T instanceof HTMLImageElement&&T.srcset?T.srcset=T.srcset:T instanceof HTMLVideoElement&&T.autoplay&&T.play(),j.isNowTriggerFormExternal(T,I)&&(R=T),j.discardError(o,T,C),(j.isPhxChild(T)&&t.ownsElement(T)||j.isPhxSticky(T)&&t.ownsElement(T.parentNode))&&this.trackAfter("phxChildAdded",T),S.push(T)},onNodeDiscarded:T=>{(j.isPhxChild(T)||j.isPhxSticky(T))&&e.destroyViewByEl(T),this.trackAfter("discarded",T)},onBeforeNodeDiscarded:T=>T.getAttribute&&T.getAttribute(Hl)!==null?!0:T.parentNode!==null&&j.isPhxUpdate(T.parentNode,v,["append","prepend"])&&T.id?!1:T.getAttribute&&T.getAttribute(D)?(_.push(T),!1):!this.skipCIDSibling(T),onElUpdated:T=>{j.isNowTriggerFormExternal(T,I)&&(R=T),N.push(T)},onBeforeElUpdated:(T,H)=>{if(j.cleanChildNodes(H,v),this.skipCIDSibling(H)||j.isPhxSticky(T))return!1;if(j.isIgnored(T,v))return this.trackBefore("updated",T,H),j.mergeAttrs(T,H,{isIgnored:!0}),N.push(T),j.applyStickyOperations(T),!1;if(T.type==="number"&&T.validity&&T.validity.badInput)return!1;if(!j.syncPendingRef(T,H,x))return j.isUploadInput(T)&&(this.trackBefore("updated",T,H),N.push(T)),j.applyStickyOperations(T),!1;if(j.isPhxChild(H)){let l=T.getAttribute(li);return j.mergeAttrs(T,H,{exclude:[qn]}),l!==""&&T.setAttribute(li,l),T.setAttribute(Kn,this.rootID),j.applyStickyOperations(T),!1}return j.copyPrivates(H,T),j.discardError(o,H,C),c&&T.isSameNode(c)&&j.isFormInput(T)?(this.trackBefore("updated",T,H),j.mergeFocusedInput(T,H),j.syncAttrsToProps(T),N.push(T),j.applyStickyOperations(T),!1):(j.isPhxUpdate(H,v,["append","prepend"])&&A.push(new Lg(T,H,H.getAttribute(v))),j.syncAttrsToProps(H),j.applyStickyOperations(H),this.trackBefore("updated",T,H),!0)}})}),e.isDebugEnabled()&&wg(),A.length>0&&e.time("post-morph append/prepend restoration",()=>{A.forEach(T=>T.perform())}),e.silenceEvents(()=>j.restoreFocus(c,d,g)),j.dispatchEvent(document,"phx:update"),S.forEach(T=>this.trackAfter("added",T)),N.forEach(T=>this.trackAfter("updated",T)),_.length>0&&(e.transitionRemoves(_),e.requestDOMUpdate(()=>{_.forEach(T=>{let H=j.firstPhxChild(T);H&&e.destroyViewByEl(H),T.remove()}),this.trackAfter("transitionsDiscarded",_)})),R&&(e.disconnect(),R.submit()),!0}isCIDPatch(){return this.cidPatch}skipCIDSibling(t){return t.nodeType===Node.ELEMENT_NODE&&t.getAttribute(xo)!==null}targetCIDContainer(t){if(!this.isCIDPatch())return;let[e,...i]=j.findComponentNodeList(this.container,this.targetCID);return i.length===0&&j.childNodeLength(t)===1?e:e&&e.parentNode}buildDiffHTML(t,e,i,s){let o=this.isCIDPatch(),c=o&&s.getAttribute(ot)===this.targetCID.toString();if(!o||c)return e;{let d=null,g=document.createElement("template");d=j.cloneNode(s);let[v,...C]=j.findComponentNodeList(d,this.targetCID);return g.innerHTML=e,C.forEach(x=>x.remove()),Array.from(d.childNodes).forEach(x=>{x.id&&x.nodeType===Node.ELEMENT_NODE&&x.getAttribute(ot)!==this.targetCID.toString()&&(x.setAttribute(xo,""),x.innerHTML="")}),Array.from(g.content.childNodes).forEach(x=>d.insertBefore(x,v)),v.remove(),d.outerHTML}}},iu=class{static extract(t){let{[Xl]:e,[Kl]:i,[Yl]:s}=t;return delete t[Xl],delete t[Kl],delete t[Yl],{diff:t,title:s,reply:e||null,events:i||[]}}constructor(t,e){this.viewId=t,this.rendered={},this.mergeDiff(e)}parentViewId(){return this.viewId}toString(t){return this.recursiveToString(this.rendered,this.rendered[st],t)}recursiveToString(t,e=t[st],i){i=i?new Set(i):null;let s={buffer:"",components:e,onlyCids:i};return this.toOutputBuffer(t,null,s),s.buffer}componentCIDs(t){return Object.keys(t[st]||{}).map(e=>parseInt(e))}isComponentOnlyDiff(t){return t[st]?Object.keys(t).length===1:!1}getComponent(t,e){return t[st][e]}mergeDiff(t){let e=t[st],i={};if(delete t[st],this.rendered=this.mutableMerge(this.rendered,t),this.rendered[st]=this.rendered[st]||{},e){let s=this.rendered[st];for(let o in e)e[o]=this.cachedFindComponent(o,e[o],s,e,i);for(let o in e)s[o]=e[o];t[st]=e}}cachedFindComponent(t,e,i,s,o){if(o[t])return o[t];{let c,d,g=e[Lt];if(ai(g)){let v;g>0?v=this.cachedFindComponent(g,s[g],i,s,o):v=i[-g],d=v[Lt],c=this.cloneMerge(v,e),c[Lt]=d}else c=e[Lt]!==void 0?e:this.cloneMerge(i[t]||{},e);return o[t]=c,c}}mutableMerge(t,e){return e[Lt]!==void 0?e:(this.doMutableMerge(t,e),t)}doMutableMerge(t,e){for(let i in e){let s=e[i],o=t[i];Un(s)&&s[Lt]===void 0&&Un(o)?this.doMutableMerge(o,s):t[i]=s}}cloneMerge(t,e){let i={...t,...e};for(let s in i){let o=e[s],c=t[s];Un(o)&&o[Lt]===void 0&&Un(c)&&(i[s]=this.cloneMerge(c,o))}return i}componentToString(t){return this.recursiveCIDToString(this.rendered[st],t)}pruneCIDs(t){t.forEach(e=>delete this.rendered[st][e])}get(){return this.rendered}isNewFingerprint(t={}){return!!t[Lt]}templateStatic(t,e){return typeof t=="number"?e[t]:t}toOutputBuffer(t,e,i){if(t[zl])return this.comprehensionToBuffer(t,e,i);let{[Lt]:s}=t;s=this.templateStatic(s,e),i.buffer+=s[0];for(let o=1;o<s.length;o++)this.dynamicToBuffer(t[o-1],e,i),i.buffer+=s[o]}comprehensionToBuffer(t,e,i){let{[zl]:s,[Lt]:o}=t;o=this.templateStatic(o,e);let c=e||t[Ag];for(let d=0;d<s.length;d++){let g=s[d];i.buffer+=o[0];for(let v=1;v<o.length;v++)this.dynamicToBuffer(g[v-1],c,i),i.buffer+=o[v]}}dynamicToBuffer(t,e,i){typeof t=="number"?i.buffer+=this.recursiveCIDToString(i.components,t,i.onlyCids):Un(t)?this.toOutputBuffer(t,e,i):i.buffer+=t}recursiveCIDToString(t,e,i){let s=t[e]||We(`no component for CID ${e}`,t),o=document.createElement("template");o.innerHTML=this.recursiveToString(s,t,i);let c=o.content,d=i&&!i.has(e),[g,v]=Array.from(c.childNodes).reduce(([C,x],I,D)=>I.nodeType===Node.ELEMENT_NODE?I.getAttribute(ot)?[C,!0]:(I.setAttribute(ot,e),I.id||(I.id=`${this.parentViewId()}-${e}-${D}`),d&&(I.setAttribute(xo,""),I.innerHTML=""),[!0,x]):I.nodeValue.trim()!==""?(We(`only HTML element tags are allowed at the root of components.
+ // vendor/prism.js
+ var require_prism = __commonJS({
+ "vendor/prism.js"(exports, module) {
+ var _self = typeof window !== "undefined" ? window : typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope ? self : {};
+ var Prism = function(_self2) {
+ var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
+ var uniqueId = 0;
+ var plainTextGrammar = {};
+ var _ = {
+ /**
+ * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the
+ * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load
+ * additional languages or plugins yourself.
+ *
+ * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.
+ *
+ * You obviously have to change this value before the automatic highlighting started. To do this, you can add an
+ * empty Prism object into the global scope before loading the Prism script like this:
+ *
+ * ```js
+ * window.Prism = window.Prism || {};
+ * Prism.manual = true;
+ * // add a new <script> to load Prism's script
+ * ```
+ *
+ * @default false
+ * @type {boolean}
+ * @memberof Prism
+ * @public
+ */
+ manual: _self2.Prism && _self2.Prism.manual,
+ /**
+ * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses
+ * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your
+ * own worker, you don't want it to do this.
+ *
+ * By setting this value to `true`, Prism will not add its own listeners to the worker.
+ *
+ * You obviously have to change this value before Prism executes. To do this, you can add an
+ * empty Prism object into the global scope before loading the Prism script like this:
+ *
+ * ```js
+ * window.Prism = window.Prism || {};
+ * Prism.disableWorkerMessageHandler = true;
+ * // Load Prism's script
+ * ```
+ *
+ * @default false
+ * @type {boolean}
+ * @memberof Prism
+ * @public
+ */
+ disableWorkerMessageHandler: _self2.Prism && _self2.Prism.disableWorkerMessageHandler,
+ /**
+ * A namespace for utility methods.
+ *
+ * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may
+ * change or disappear at any time.
+ *
+ * @namespace
+ * @memberof Prism
+ */
+ util: {
+ encode: function encode(tokens) {
+ if (tokens instanceof Token) {
+ return new Token(tokens.type, encode(tokens.content), tokens.alias);
+ } else if (Array.isArray(tokens)) {
+ return tokens.map(encode);
+ } else {
+ return tokens.replace(/&/g, "&").replace(/</g, "<").replace(/\u00a0/g, " ");
+ }
+ },
+ /**
+ * Returns the name of the type of the given value.
+ *
+ * @param {any} o
+ * @returns {string}
+ * @example
+ * type(null) === 'Null'
+ * type(undefined) === 'Undefined'
+ * type(123) === 'Number'
+ * type('foo') === 'String'
+ * type(true) === 'Boolean'
+ * type([1, 2]) === 'Array'
+ * type({}) === 'Object'
+ * type(String) === 'Function'
+ * type(/abc+/) === 'RegExp'
+ */
+ type: function(o) {
+ return Object.prototype.toString.call(o).slice(8, -1);
+ },
+ /**
+ * Returns a unique number for the given object. Later calls will still return the same number.
+ *
+ * @param {Object} obj
+ * @returns {number}
+ */
+ objId: function(obj) {
+ if (!obj["__id"]) {
+ Object.defineProperty(obj, "__id", { value: ++uniqueId });
+ }
+ return obj["__id"];
+ },
+ /**
+ * Creates a deep clone of the given object.
+ *
+ * The main intended use of this function is to clone language definitions.
+ *
+ * @param {T} o
+ * @param {Record<number, any>} [visited]
+ * @returns {T}
+ * @template T
+ */
+ clone: function deepClone(o, visited) {
+ visited = visited || {};
+ var clone2;
+ var id;
+ switch (_.util.type(o)) {
+ case "Object":
+ id = _.util.objId(o);
+ if (visited[id]) {
+ return visited[id];
+ }
+ clone2 = /** @type {Record<string, any>} */
+ {};
+ visited[id] = clone2;
+ for (var key in o) {
+ if (o.hasOwnProperty(key)) {
+ clone2[key] = deepClone(o[key], visited);
+ }
+ }
+ return (
+ /** @type {any} */
+ clone2
+ );
+ case "Array":
+ id = _.util.objId(o);
+ if (visited[id]) {
+ return visited[id];
+ }
+ clone2 = [];
+ visited[id] = clone2;
+ /** @type {Array} */
+ /** @type {any} */
+ o.forEach(function(v, i) {
+ clone2[i] = deepClone(v, visited);
+ });
+ return (
+ /** @type {any} */
+ clone2
+ );
+ default:
+ return o;
+ }
+ },
+ /**
+ * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.
+ *
+ * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.
+ *
+ * @param {Element} element
+ * @returns {string}
+ */
+ getLanguage: function(element) {
+ while (element) {
+ var m = lang.exec(element.className);
+ if (m) {
+ return m[1].toLowerCase();
+ }
+ element = element.parentElement;
+ }
+ return "none";
+ },
+ /**
+ * Sets the Prism `language-xxxx` class of the given element.
+ *
+ * @param {Element} element
+ * @param {string} language
+ * @returns {void}
+ */
+ setLanguage: function(element, language) {
+ element.className = element.className.replace(RegExp(lang, "gi"), "");
+ element.classList.add("language-" + language);
+ },
+ /**
+ * Returns the script element that is currently executing.
+ *
+ * This does __not__ work for line script element.
+ *
+ * @returns {HTMLScriptElement | null}
+ */
+ currentScript: function() {
+ if (typeof document === "undefined") {
+ return null;
+ }
+ if ("currentScript" in document && 1 < 2) {
+ return (
+ /** @type {any} */
+ document.currentScript
+ );
+ }
+ try {
+ throw new Error();
+ } catch (err) {
+ var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
+ if (src) {
+ var scripts = document.getElementsByTagName("script");
+ for (var i in scripts) {
+ if (scripts[i].src == src) {
+ return scripts[i];
+ }
+ }
+ }
+ return null;
+ }
+ },
+ /**
+ * Returns whether a given class is active for `element`.
+ *
+ * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated
+ * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the
+ * given class is just the given class with a `no-` prefix.
+ *
+ * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is
+ * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its
+ * ancestors have the given class or the negated version of it, then the default activation will be returned.
+ *
+ * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated
+ * version of it, the class is considered active.
+ *
+ * @param {Element} element
+ * @param {string} className
+ * @param {boolean} [defaultActivation=false]
+ * @returns {boolean}
+ */
+ isActive: function(element, className, defaultActivation) {
+ var no = "no-" + className;
+ while (element) {
+ var classList = element.classList;
+ if (classList.contains(className)) {
+ return true;
+ }
+ if (classList.contains(no)) {
+ return false;
+ }
+ element = element.parentElement;
+ }
+ return !!defaultActivation;
+ }
+ },
+ /**
+ * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.
+ *
+ * @namespace
+ * @memberof Prism
+ * @public
+ */
+ languages: {
+ /**
+ * The grammar for plain, unformatted text.
+ */
+ plain: plainTextGrammar,
+ plaintext: plainTextGrammar,
+ text: plainTextGrammar,
+ txt: plainTextGrammar,
+ /**
+ * Creates a deep copy of the language with the given id and appends the given tokens.
+ *
+ * If a token in `redef` also appears in the copied language, then the existing token in the copied language
+ * will be overwritten at its original position.
+ *
+ * ## Best practices
+ *
+ * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)
+ * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to
+ * understand the language definition because, normally, the order of tokens matters in Prism grammars.
+ *
+ * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.
+ * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.
+ *
+ * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.
+ * @param {Grammar} redef The new tokens to append.
+ * @returns {Grammar} The new language created.
+ * @public
+ * @example
+ * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {
+ * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token
+ * // at its original position
+ * 'comment': { ... },
+ * // CSS doesn't have a 'color' token, so this token will be appended
+ * 'color': /\b(?:red|green|blue)\b/
+ * });
+ */
+ extend: function(id, redef) {
+ var lang2 = _.util.clone(_.languages[id]);
+ for (var key in redef) {
+ lang2[key] = redef[key];
+ }
+ return lang2;
+ },
+ /**
+ * Inserts tokens _before_ another token in a language definition or any other grammar.
+ *
+ * ## Usage
+ *
+ * This helper method makes it easy to modify existing languages. For example, the CSS language definition
+ * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded
+ * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the
+ * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do
+ * this:
+ *
+ * ```js
+ * Prism.languages.markup.style = {
+ * // token
+ * };
+ * ```
+ *
+ * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens
+ * before existing tokens. For the CSS example above, you would use it like this:
+ *
+ * ```js
+ * Prism.languages.insertBefore('markup', 'cdata', {
+ * 'style': {
+ * // token
+ * }
+ * });
+ * ```
+ *
+ * ## Special cases
+ *
+ * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar
+ * will be ignored.
+ *
+ * This behavior can be used to insert tokens after `before`:
+ *
+ * ```js
+ * Prism.languages.insertBefore('markup', 'comment', {
+ * 'comment': Prism.languages.markup.comment,
+ * // tokens after 'comment'
+ * });
+ * ```
+ *
+ * ## Limitations
+ *
+ * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object
+ * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave
+ * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily
+ * deleting properties which is necessary to insert at arbitrary positions.
+ *
+ * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.
+ * Instead, it will create a new object and replace all references to the target object with the new one. This
+ * can be done without temporarily deleting properties, so the iteration order is well-defined.
+ *
+ * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if
+ * you hold the target object in a variable, then the value of the variable will not change.
+ *
+ * ```js
+ * var oldMarkup = Prism.languages.markup;
+ * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });
+ *
+ * assert(oldMarkup !== Prism.languages.markup);
+ * assert(newMarkup === Prism.languages.markup);
+ * ```
+ *
+ * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the
+ * object to be modified.
+ * @param {string} before The key to insert before.
+ * @param {Grammar} insert An object containing the key-value pairs to be inserted.
+ * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the
+ * object to be modified.
+ *
+ * Defaults to `Prism.languages`.
+ * @returns {Grammar} The new grammar object.
+ * @public
+ */
+ insertBefore: function(inside, before, insert, root) {
+ root = root || /** @type {any} */
+ _.languages;
+ var grammar = root[inside];
+ var ret = {};
+ for (var token in grammar) {
+ if (grammar.hasOwnProperty(token)) {
+ if (token == before) {
+ for (var newToken in insert) {
+ if (insert.hasOwnProperty(newToken)) {
+ ret[newToken] = insert[newToken];
+ }
+ }
+ }
+ if (!insert.hasOwnProperty(token)) {
+ ret[token] = grammar[token];
+ }
+ }
+ }
+ var old = root[inside];
+ root[inside] = ret;
+ _.languages.DFS(_.languages, function(key, value) {
+ if (value === old && key != inside) {
+ this[key] = ret;
+ }
+ });
+ return ret;
+ },
+ // Traverse a language definition with Depth First Search
+ DFS: function DFS(o, callback, type, visited) {
+ visited = visited || {};
+ var objId = _.util.objId;
+ for (var i in o) {
+ if (o.hasOwnProperty(i)) {
+ callback.call(o, i, o[i], type || i);
+ var property = o[i];
+ var propertyType = _.util.type(property);
+ if (propertyType === "Object" && !visited[objId(property)]) {
+ visited[objId(property)] = true;
+ DFS(property, callback, null, visited);
+ } else if (propertyType === "Array" && !visited[objId(property)]) {
+ visited[objId(property)] = true;
+ DFS(property, callback, i, visited);
+ }
+ }
+ }
+ }
+ },
+ plugins: {},
+ /**
+ * This is the most high-level function in Prism’s API.
+ * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on
+ * each one of them.
+ *
+ * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.
+ *
+ * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.
+ * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.
+ * @memberof Prism
+ * @public
+ */
+ highlightAll: function(async, callback) {
+ _.highlightAllUnder(document, async, callback);
+ },
+ /**
+ * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls
+ * {@link Prism.highlightElement} on each one of them.
+ *
+ * The following hooks will be run:
+ * 1. `before-highlightall`
+ * 2. `before-all-elements-highlight`
+ * 3. All hooks of {@link Prism.highlightElement} for each element.
+ *
+ * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.
+ * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.
+ * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.
+ * @memberof Prism
+ * @public
+ */
+ highlightAllUnder: function(container, async, callback) {
+ var env = {
+ callback,
+ container,
+ selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
+ };
+ _.hooks.run("before-highlightall", env);
+ env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));
+ _.hooks.run("before-all-elements-highlight", env);
+ for (var i = 0, element; element = env.elements[i++]; ) {
+ _.highlightElement(element, async === true, env.callback);
+ }
+ },
+ /**
+ * Highlights the code inside a single element.
+ *
+ * The following hooks will be run:
+ * 1. `before-sanity-check`
+ * 2. `before-highlight`
+ * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.
+ * 4. `before-insert`
+ * 5. `after-highlight`
+ * 6. `complete`
+ *
+ * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for
+ * the element's language.
+ *
+ * @param {Element} element The element containing the code.
+ * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.
+ * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers
+ * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is
+ * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).
+ *
+ * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for
+ * asynchronous highlighting to work. You can build your own bundle on the
+ * [Download page](https://prismjs.com/download.html).
+ * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.
+ * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.
+ * @memberof Prism
+ * @public
+ */
+ highlightElement: function(element, async, callback) {
+ var language = _.util.getLanguage(element);
+ var grammar = _.languages[language];
+ _.util.setLanguage(element, language);
+ var parent = element.parentElement;
+ if (parent && parent.nodeName.toLowerCase() === "pre") {
+ _.util.setLanguage(parent, language);
+ }
+ var code = element.textContent;
+ var env = {
+ element,
+ language,
+ grammar,
+ code
+ };
+ function insertHighlightedCode(highlightedCode) {
+ env.highlightedCode = highlightedCode;
+ _.hooks.run("before-insert", env);
+ env.element.innerHTML = env.highlightedCode;
+ _.hooks.run("after-highlight", env);
+ _.hooks.run("complete", env);
+ callback && callback.call(env.element);
+ }
+ _.hooks.run("before-sanity-check", env);
+ parent = env.element.parentElement;
+ if (parent && parent.nodeName.toLowerCase() === "pre" && !parent.hasAttribute("tabindex")) {
+ parent.setAttribute("tabindex", "0");
+ }
+ if (!env.code) {
+ _.hooks.run("complete", env);
+ callback && callback.call(env.element);
+ return;
+ }
+ _.hooks.run("before-highlight", env);
+ if (!env.grammar) {
+ insertHighlightedCode(_.util.encode(env.code));
+ return;
+ }
+ if (async && _self2.Worker) {
+ var worker = new Worker(_.filename);
+ worker.onmessage = function(evt) {
+ insertHighlightedCode(evt.data);
+ };
+ worker.postMessage(JSON.stringify({
+ language: env.language,
+ code: env.code,
+ immediateClose: true
+ }));
+ } else {
+ insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
+ }
+ },
+ /**
+ * Low-level function, only use if you know what you’re doing. It accepts a string of text as input
+ * and the language definitions to use, and returns a string with the HTML produced.
+ *
+ * The following hooks will be run:
+ * 1. `before-tokenize`
+ * 2. `after-tokenize`
+ * 3. `wrap`: On each {@link Token}.
+ *
+ * @param {string} text A string with the code to be highlighted.
+ * @param {Grammar} grammar An object containing the tokens to use.
+ *
+ * Usually a language definition like `Prism.languages.markup`.
+ * @param {string} language The name of the language definition passed to `grammar`.
+ * @returns {string} The highlighted HTML.
+ * @memberof Prism
+ * @public
+ * @example
+ * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');
+ */
+ highlight: function(text, grammar, language) {
+ var env = {
+ code: text,
+ grammar,
+ language
+ };
+ _.hooks.run("before-tokenize", env);
+ if (!env.grammar) {
+ throw new Error('The language "' + env.language + '" has no grammar.');
+ }
+ env.tokens = _.tokenize(env.code, env.grammar);
+ _.hooks.run("after-tokenize", env);
+ return Token.stringify(_.util.encode(env.tokens), env.language);
+ },
+ /**
+ * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input
+ * and the language definitions to use, and returns an array with the tokenized code.
+ *
+ * When the language definition includes nested tokens, the function is called recursively on each of these tokens.
+ *
+ * This method could be useful in other contexts as well, as a very crude parser.
+ *
+ * @param {string} text A string with the code to be highlighted.
+ * @param {Grammar} grammar An object containing the tokens to use.
+ *
+ * Usually a language definition like `Prism.languages.markup`.
+ * @returns {TokenStream} An array of strings and tokens, a token stream.
+ * @memberof Prism
+ * @public
+ * @example
+ * let code = `var foo = 0;`;
+ * let tokens = Prism.tokenize(code, Prism.languages.javascript);
+ * tokens.forEach(token => {
+ * if (token instanceof Prism.Token && token.type === 'number') {
+ * console.log(`Found numeric literal: ${token.content}`);
+ * }
+ * });
+ */
+ tokenize: function(text, grammar) {
+ var rest = grammar.rest;
+ if (rest) {
+ for (var token in rest) {
+ grammar[token] = rest[token];
+ }
+ delete grammar.rest;
+ }
+ var tokenList = new LinkedList();
+ addAfter(tokenList, tokenList.head, text);
+ matchGrammar(text, tokenList, grammar, tokenList.head, 0);
+ return toArray(tokenList);
+ },
+ /**
+ * @namespace
+ * @memberof Prism
+ * @public
+ */
+ hooks: {
+ all: {},
+ /**
+ * Adds the given callback to the list of callbacks for the given hook.
+ *
+ * The callback will be invoked when the hook it is registered for is run.
+ * Hooks are usually directly run by a highlight function but you can also run hooks yourself.
+ *
+ * One callback function can be registered to multiple hooks and the same hook multiple times.
+ *
+ * @param {string} name The name of the hook.
+ * @param {HookCallback} callback The callback function which is given environment variables.
+ * @public
+ */
+ add: function(name, callback) {
+ var hooks = _.hooks.all;
+ hooks[name] = hooks[name] || [];
+ hooks[name].push(callback);
+ },
+ /**
+ * Runs a hook invoking all registered callbacks with the given environment variables.
+ *
+ * Callbacks will be invoked synchronously and in the order in which they were registered.
+ *
+ * @param {string} name The name of the hook.
+ * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.
+ * @public
+ */
+ run: function(name, env) {
+ var callbacks = _.hooks.all[name];
+ if (!callbacks || !callbacks.length) {
+ return;
+ }
+ for (var i = 0, callback; callback = callbacks[i++]; ) {
+ callback(env);
+ }
+ }
+ },
+ Token
+ };
+ _self2.Prism = _;
+ function Token(type, content, alias, matchedStr) {
+ this.type = type;
+ this.content = content;
+ this.alias = alias;
+ this.length = (matchedStr || "").length | 0;
+ }
+ Token.stringify = function stringify(o, language) {
+ if (typeof o == "string") {
+ return o;
+ }
+ if (Array.isArray(o)) {
+ var s = "";
+ o.forEach(function(e) {
+ s += stringify(e, language);
+ });
+ return s;
+ }
+ var env = {
+ type: o.type,
+ content: stringify(o.content, language),
+ tag: "span",
+ classes: ["token", o.type],
+ attributes: {},
+ language
+ };
+ var aliases = o.alias;
+ if (aliases) {
+ if (Array.isArray(aliases)) {
+ Array.prototype.push.apply(env.classes, aliases);
+ } else {
+ env.classes.push(aliases);
+ }
+ }
+ _.hooks.run("wrap", env);
+ var attributes = "";
+ for (var name in env.attributes) {
+ attributes += " " + name + '="' + (env.attributes[name] || "").replace(/"/g, """) + '"';
+ }
+ return "<" + env.tag + ' class="' + env.classes.join(" ") + '"' + attributes + ">" + env.content + "</" + env.tag + ">";
+ };
+ function matchPattern(pattern, pos, text, lookbehind) {
+ pattern.lastIndex = pos;
+ var match = pattern.exec(text);
+ if (match && lookbehind && match[1]) {
+ var lookbehindLength = match[1].length;
+ match.index += lookbehindLength;
+ match[0] = match[0].slice(lookbehindLength);
+ }
+ return match;
+ }
+ function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {
+ for (var token in grammar) {
+ if (!grammar.hasOwnProperty(token) || !grammar[token]) {
+ continue;
+ }
+ var patterns = grammar[token];
+ patterns = Array.isArray(patterns) ? patterns : [patterns];
+ for (var j = 0; j < patterns.length; ++j) {
+ if (rematch && rematch.cause == token + "," + j) {
+ return;
+ }
+ var patternObj = patterns[j];
+ var inside = patternObj.inside;
+ var lookbehind = !!patternObj.lookbehind;
+ var greedy = !!patternObj.greedy;
+ var alias = patternObj.alias;
+ if (greedy && !patternObj.pattern.global) {
+ var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];
+ patternObj.pattern = RegExp(patternObj.pattern.source, flags + "g");
+ }
+ var pattern = patternObj.pattern || patternObj;
+ for (var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) {
+ if (rematch && pos >= rematch.reach) {
+ break;
+ }
+ var str = currentNode.value;
+ if (tokenList.length > text.length) {
+ return;
+ }
+ if (str instanceof Token) {
+ continue;
+ }
+ var removeCount = 1;
+ var match;
+ if (greedy) {
+ match = matchPattern(pattern, pos, text, lookbehind);
+ if (!match || match.index >= text.length) {
+ break;
+ }
+ var from = match.index;
+ var to = match.index + match[0].length;
+ var p = pos;
+ p += currentNode.value.length;
+ while (from >= p) {
+ currentNode = currentNode.next;
+ p += currentNode.value.length;
+ }
+ p -= currentNode.value.length;
+ pos = p;
+ if (currentNode.value instanceof Token) {
+ continue;
+ }
+ for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === "string"); k = k.next) {
+ removeCount++;
+ p += k.value.length;
+ }
+ removeCount--;
+ str = text.slice(pos, p);
+ match.index -= pos;
+ } else {
+ match = matchPattern(pattern, 0, str, lookbehind);
+ if (!match) {
+ continue;
+ }
+ }
+ var from = match.index;
+ var matchStr = match[0];
+ var before = str.slice(0, from);
+ var after = str.slice(from + matchStr.length);
+ var reach = pos + str.length;
+ if (rematch && reach > rematch.reach) {
+ rematch.reach = reach;
+ }
+ var removeFrom = currentNode.prev;
+ if (before) {
+ removeFrom = addAfter(tokenList, removeFrom, before);
+ pos += before.length;
+ }
+ removeRange(tokenList, removeFrom, removeCount);
+ var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);
+ currentNode = addAfter(tokenList, removeFrom, wrapped);
+ if (after) {
+ addAfter(tokenList, currentNode, after);
+ }
+ if (removeCount > 1) {
+ var nestedRematch = {
+ cause: token + "," + j,
+ reach
+ };
+ matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);
+ if (rematch && nestedRematch.reach > rematch.reach) {
+ rematch.reach = nestedRematch.reach;
+ }
+ }
+ }
+ }
+ }
+ }
+ function LinkedList() {
+ var head = { value: null, prev: null, next: null };
+ var tail = { value: null, prev: head, next: null };
+ head.next = tail;
+ this.head = head;
+ this.tail = tail;
+ this.length = 0;
+ }
+ function addAfter(list, node, value) {
+ var next = node.next;
+ var newNode = { value, prev: node, next };
+ node.next = newNode;
+ next.prev = newNode;
+ list.length++;
+ return newNode;
+ }
+ function removeRange(list, node, count) {
+ var next = node.next;
+ for (var i = 0; i < count && next !== list.tail; i++) {
+ next = next.next;
+ }
+ node.next = next;
+ next.prev = node;
+ list.length -= i;
+ }
+ function toArray(list) {
+ var array = [];
+ var node = list.head.next;
+ while (node !== list.tail) {
+ array.push(node.value);
+ node = node.next;
+ }
+ return array;
+ }
+ if (!_self2.document) {
+ if (!_self2.addEventListener) {
+ return _;
+ }
+ if (!_.disableWorkerMessageHandler) {
+ _self2.addEventListener("message", function(evt) {
+ var message = JSON.parse(evt.data);
+ var lang2 = message.language;
+ var code = message.code;
+ var immediateClose = message.immediateClose;
+ _self2.postMessage(_.highlight(code, _.languages[lang2], lang2));
+ if (immediateClose) {
+ _self2.close();
+ }
+ }, false);
+ }
+ return _;
+ }
+ var script = _.util.currentScript();
+ if (script) {
+ _.filename = script.src;
+ if (script.hasAttribute("data-manual")) {
+ _.manual = true;
+ }
+ }
+ function highlightAutomaticallyCallback() {
+ if (!_.manual) {
+ _.highlightAll();
+ }
+ }
+ if (!_.manual) {
+ var readyState = document.readyState;
+ if (readyState === "loading" || readyState === "interactive" && script && script.defer) {
+ document.addEventListener("DOMContentLoaded", highlightAutomaticallyCallback);
+ } else {
+ if (window.requestAnimationFrame) {
+ window.requestAnimationFrame(highlightAutomaticallyCallback);
+ } else {
+ window.setTimeout(highlightAutomaticallyCallback, 16);
+ }
+ }
+ }
+ return _;
+ }(_self);
+ if (typeof module !== "undefined" && module.exports) {
+ module.exports = Prism;
+ }
+ if (typeof global !== "undefined") {
+ global.Prism = Prism;
+ }
+ Prism.languages.markup = {
+ "comment": {
+ pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
+ greedy: true
+ },
+ "prolog": {
+ pattern: /<\?[\s\S]+?\?>/,
+ greedy: true
+ },
+ "doctype": {
+ // https://www.w3.org/TR/xml/#NT-doctypedecl
+ pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
+ greedy: true,
+ inside: {
+ "internal-subset": {
+ pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
+ lookbehind: true,
+ greedy: true,
+ inside: null
+ // see below
+ },
+ "string": {
+ pattern: /"[^"]*"|'[^']*'/,
+ greedy: true
+ },
+ "punctuation": /^<!|>$|[[\]]/,
+ "doctype-tag": /^DOCTYPE/i,
+ "name": /[^\s<>'"]+/
+ }
+ },
+ "cdata": {
+ pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
+ greedy: true
+ },
+ "tag": {
+ pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
+ greedy: true,
+ inside: {
+ "tag": {
+ pattern: /^<\/?[^\s>\/]+/,
+ inside: {
+ "punctuation": /^<\/?/,
+ "namespace": /^[^\s>\/:]+:/
+ }
+ },
+ "special-attr": [],
+ "attr-value": {
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
+ inside: {
+ "punctuation": [
+ {
+ pattern: /^=/,
+ alias: "attr-equals"
+ },
+ {
+ pattern: /^(\s*)["']|["']$/,
+ lookbehind: true
+ }
+ ]
+ }
+ },
+ "punctuation": /\/?>/,
+ "attr-name": {
+ pattern: /[^\s>\/]+/,
+ inside: {
+ "namespace": /^[^\s>\/:]+:/
+ }
+ }
+ }
+ },
+ "entity": [
+ {
+ pattern: /&[\da-z]{1,8};/i,
+ alias: "named-entity"
+ },
+ /&#x?[\da-f]{1,8};/i
+ ]
+ };
+ Prism.languages.markup["tag"].inside["attr-value"].inside["entity"] = Prism.languages.markup["entity"];
+ Prism.languages.markup["doctype"].inside["internal-subset"].inside = Prism.languages.markup;
+ Prism.hooks.add("wrap", function(env) {
+ if (env.type === "entity") {
+ env.attributes["title"] = env.content.replace(/&/, "&");
+ }
+ });
+ Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
+ /**
+ * Adds an inlined language to markup.
+ *
+ * An example of an inlined language is CSS with `<style>` tags.
+ *
+ * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as
+ * case insensitive.
+ * @param {string} lang The language key.
+ * @example
+ * addInlined('style', 'css');
+ */
+ value: function addInlined(tagName, lang) {
+ var includedCdataInside = {};
+ includedCdataInside["language-" + lang] = {
+ pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
+ lookbehind: true,
+ inside: Prism.languages[lang]
+ };
+ includedCdataInside["cdata"] = /^<!\[CDATA\[|\]\]>$/i;
+ var inside = {
+ "included-cdata": {
+ pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
+ inside: includedCdataInside
+ }
+ };
+ inside["language-" + lang] = {
+ pattern: /[\s\S]+/,
+ inside: Prism.languages[lang]
+ };
+ var def = {};
+ def[tagName] = {
+ pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function() {
+ return tagName;
+ }), "i"),
+ lookbehind: true,
+ greedy: true,
+ inside
+ };
+ Prism.languages.insertBefore("markup", "cdata", def);
+ }
+ });
+ Object.defineProperty(Prism.languages.markup.tag, "addAttribute", {
+ /**
+ * Adds an pattern to highlight languages embedded in HTML attributes.
+ *
+ * An example of an inlined language is CSS with `style` attributes.
+ *
+ * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as
+ * case insensitive.
+ * @param {string} lang The language key.
+ * @example
+ * addAttribute('style', 'css');
+ */
+ value: function(attrName, lang) {
+ Prism.languages.markup.tag.inside["special-attr"].push({
+ pattern: RegExp(
+ /(^|["'\s])/.source + "(?:" + attrName + ")" + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,
+ "i"
+ ),
+ lookbehind: true,
+ inside: {
+ "attr-name": /^[^\s=]+/,
+ "attr-value": {
+ pattern: /=[\s\S]+/,
+ inside: {
+ "value": {
+ pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
+ lookbehind: true,
+ alias: [lang, "language-" + lang],
+ inside: Prism.languages[lang]
+ },
+ "punctuation": [
+ {
+ pattern: /^=/,
+ alias: "attr-equals"
+ },
+ /"|'/
+ ]
+ }
+ }
+ }
+ });
+ }
+ });
+ Prism.languages.html = Prism.languages.markup;
+ Prism.languages.mathml = Prism.languages.markup;
+ Prism.languages.svg = Prism.languages.markup;
+ Prism.languages.xml = Prism.languages.extend("markup", {});
+ Prism.languages.ssml = Prism.languages.xml;
+ Prism.languages.atom = Prism.languages.xml;
+ Prism.languages.rss = Prism.languages.xml;
+ (function(Prism2) {
+ var string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
+ Prism2.languages.css = {
+ "comment": /\/\*[\s\S]*?\*\//,
+ "atrule": {
+ pattern: RegExp("@[\\w-](?:" + /[^;{\s"']|\s+(?!\s)/.source + "|" + string.source + ")*?" + /(?:;|(?=\s*\{))/.source),
+ inside: {
+ "rule": /^@[\w-]+/,
+ "selector-function-argument": {
+ pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
+ lookbehind: true,
+ alias: "selector"
+ },
+ "keyword": {
+ pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
+ lookbehind: true
+ }
+ // See rest below
+ }
+ },
+ "url": {
+ // https://drafts.csswg.org/css-values-3/#urls
+ pattern: RegExp("\\burl\\((?:" + string.source + "|" + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ")\\)", "i"),
+ greedy: true,
+ inside: {
+ "function": /^url/i,
+ "punctuation": /^\(|\)$/,
+ "string": {
+ pattern: RegExp("^" + string.source + "$"),
+ alias: "url"
+ }
+ }
+ },
+ "selector": {
+ pattern: RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|` + string.source + ")*(?=\\s*\\{)"),
+ lookbehind: true
+ },
+ "string": {
+ pattern: string,
+ greedy: true
+ },
+ "property": {
+ pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
+ lookbehind: true
+ },
+ "important": /!important\b/i,
+ "function": {
+ pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
+ lookbehind: true
+ },
+ "punctuation": /[(){};:,]/
+ };
+ Prism2.languages.css["atrule"].inside.rest = Prism2.languages.css;
+ var markup = Prism2.languages.markup;
+ if (markup) {
+ markup.tag.addInlined("style", "css");
+ markup.tag.addAttribute("style", "css");
+ }
+ })(Prism);
+ Prism.languages.clike = {
+ "comment": [
+ {
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
+ lookbehind: true,
+ inside: {
+ "punctuation": /[.\\]/
+ }
+ },
+ "keyword": /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "function": /\b\w+(?=\()/,
+ "number": /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+ "operator": /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.javascript = Prism.languages.extend("clike", {
+ "class-name": [
+ Prism.languages.clike["class-name"],
+ {
+ pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
+ lookbehind: true
+ }
+ ],
+ "keyword": [
+ {
+ pattern: /((?:^|\})\s*)catch\b/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
+ lookbehind: true
+ }
+ ],
+ // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
+ "function": /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
+ "number": {
+ pattern: RegExp(
+ /(^|[^\w$])/.source + "(?:" + // constant
+ (/NaN|Infinity/.source + "|" + // binary integer
+ /0[bB][01]+(?:_[01]+)*n?/.source + "|" + // octal integer
+ /0[oO][0-7]+(?:_[0-7]+)*n?/.source + "|" + // hexadecimal integer
+ /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + "|" + // decimal bigint
+ /\d+(?:_\d+)*n/.source + "|" + // decimal number (integer or float) but no bigint
+ /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ")" + /(?![\w$])/.source
+ ),
+ lookbehind: true
+ },
+ "operator": /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
+ });
+ Prism.languages.javascript["class-name"][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;
+ Prism.languages.insertBefore("javascript", "keyword", {
+ "regex": {
+ pattern: RegExp(
+ // lookbehind
+ // eslint-disable-next-line regexp/no-dupe-characters-character-class
+ /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + // Regex pattern:
+ // There are 2 regex patterns here. The RegExp set notation proposal added support for nested character
+ // classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible
+ // with the only syntax, so we have to define 2 different regex patterns.
+ /\//.source + "(?:" + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + "|" + // `v` flag syntax. This supports 3 levels of nested character classes.
+ /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ")" + // lookahead
+ /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "regex-source": {
+ pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
+ lookbehind: true,
+ alias: "language-regex",
+ inside: Prism.languages.regex
+ },
+ "regex-delimiter": /^\/|\/$/,
+ "regex-flags": /^[a-z]+$/
+ }
+ },
+ // This must be declared before keyword because we use "function" inside the look-forward
+ "function-variable": {
+ pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
+ alias: "function"
+ },
+ "parameter": [
+ {
+ pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ },
+ {
+ pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ },
+ {
+ pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ },
+ {
+ pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ }
+ ],
+ "constant": /\b[A-Z](?:[A-Z_]|\dx?)*\b/
+ });
+ Prism.languages.insertBefore("javascript", "string", {
+ "hashbang": {
+ pattern: /^#!.*/,
+ greedy: true,
+ alias: "comment"
+ },
+ "template-string": {
+ pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
+ greedy: true,
+ inside: {
+ "template-punctuation": {
+ pattern: /^`|`$/,
+ alias: "string"
+ },
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "punctuation"
+ },
+ rest: Prism.languages.javascript
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "string-property": {
+ pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "property"
+ }
+ });
+ Prism.languages.insertBefore("javascript", "operator", {
+ "literal-property": {
+ pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
+ lookbehind: true,
+ alias: "property"
+ }
+ });
+ if (Prism.languages.markup) {
+ Prism.languages.markup.tag.addInlined("script", "javascript");
+ Prism.languages.markup.tag.addAttribute(
+ /on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,
+ "javascript"
+ );
+ }
+ Prism.languages.js = Prism.languages.javascript;
+ Prism.languages.abap = {
+ "comment": /^\*.*/m,
+ "string": /(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ "string-template": {
+ pattern: /([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,
+ lookbehind: true,
+ alias: "string"
+ },
+ /* End Of Line comments should not interfere with strings when the
+ quote character occurs within them. We assume a string being highlighted
+ inside an EOL comment is more acceptable than the opposite.
+ */
+ "eol-comment": {
+ pattern: /(^|\s)".*/m,
+ lookbehind: true,
+ alias: "comment"
+ },
+ "keyword": {
+ pattern: /(\s|\.|^)(?:\*-INPUT|\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\/MM\/YY|DD\/MM\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\/DD\/YY|MM\/DD\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\w-])/i,
+ lookbehind: true
+ },
+ /* Numbers can be only integers. Decimal or Hex appear only as strings */
+ "number": /\b\d+\b/,
+ /* Operators must always be surrounded by whitespace, they cannot be put
+ adjacent to operands.
+ */
+ "operator": {
+ pattern: /(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,
+ lookbehind: true
+ },
+ "string-operator": {
+ pattern: /(\s)&&?(?=\s)/,
+ lookbehind: true,
+ /* The official editor highlights */
+ alias: "keyword"
+ },
+ "token-operator": [{
+ /* Special operators used to access structure components, class methods/attributes, etc. */
+ pattern: /(\w)(?:->?|=>|[~|{}])(?=\w)/,
+ lookbehind: true,
+ alias: "punctuation"
+ }, {
+ /* Special tokens used do delimit string templates */
+ pattern: /[|{}]/,
+ alias: "punctuation"
+ }],
+ "punctuation": /[,.:()]/
+ };
+ (function(Prism2) {
+ var coreRules = "(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";
+ Prism2.languages.abnf = {
+ "comment": /;.*/,
+ "string": {
+ pattern: /(?:%[is])?"[^"\n\r]*"/,
+ greedy: true,
+ inside: {
+ "punctuation": /^%[is]/
+ }
+ },
+ "range": {
+ pattern: /%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,
+ alias: "number"
+ },
+ "terminal": {
+ pattern: /%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,
+ alias: "number"
+ },
+ "repetition": {
+ pattern: /(^|[^\w-])(?:\d*\*\d*|\d+)/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "definition": {
+ pattern: /(^[ \t]*)(?:[a-z][\w-]*|<[^<>\r\n]*>)(?=\s*=)/m,
+ lookbehind: true,
+ alias: "keyword",
+ inside: {
+ "punctuation": /<|>/
+ }
+ },
+ "core-rule": {
+ pattern: RegExp("(?:(^|[^<\\w-])" + coreRules + "|<" + coreRules + ">)(?![\\w-])", "i"),
+ lookbehind: true,
+ alias: ["rule", "constant"],
+ inside: {
+ "punctuation": /<|>/
+ }
+ },
+ "rule": {
+ pattern: /(^|[^<\w-])[a-z][\w-]*|<[^<>\r\n]*>/i,
+ lookbehind: true,
+ inside: {
+ "punctuation": /<|>/
+ }
+ },
+ "operator": /=\/?|\//,
+ "punctuation": /[()\[\]]/
+ };
+ })(Prism);
+ Prism.languages.actionscript = Prism.languages.extend("javascript", {
+ "keyword": /\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,
+ "operator": /\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/
+ });
+ Prism.languages.actionscript["class-name"].alias = "function";
+ delete Prism.languages.actionscript["parameter"];
+ delete Prism.languages.actionscript["literal-property"];
+ if (Prism.languages.markup) {
+ Prism.languages.insertBefore("actionscript", "string", {
+ "xml": {
+ pattern: /(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,
+ lookbehind: true,
+ inside: Prism.languages.markup
+ }
+ });
+ }
+ Prism.languages.ada = {
+ "comment": /--.*/,
+ "string": /"(?:""|[^"\r\f\n])*"/,
+ "number": [
+ {
+ pattern: /\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i
+ },
+ {
+ pattern: /\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i
+ }
+ ],
+ "attribute": {
+ pattern: /\b'\w+/,
+ alias: "attr-name"
+ },
+ "keyword": /\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "operator": /<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,
+ "punctuation": /\.\.?|[,;():]/,
+ "char": /'.'/,
+ "variable": /\b[a-z](?:\w)*\b/i
+ };
+ (function(Prism2) {
+ Prism2.languages.agda = {
+ "comment": /\{-[\s\S]*?(?:-\}|$)|--.*/,
+ "string": {
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,
+ greedy: true
+ },
+ "punctuation": /[(){}⦃⦄.;@]/,
+ "class-name": {
+ pattern: /((?:data|record) +)\S+/,
+ lookbehind: true
+ },
+ "function": {
+ pattern: /(^[ \t]*)(?!\s)[^:\r\n]+(?=:)/m,
+ lookbehind: true
+ },
+ "operator": {
+ pattern: /(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/
+ };
+ })(Prism);
+ Prism.languages.al = {
+ "comment": /\/\/.*|\/\*[\s\S]*?\*\//,
+ "string": {
+ pattern: /'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,
+ greedy: true
+ },
+ "function": {
+ pattern: /(\b(?:event|procedure|trigger)\s+|(?:^|[^.])\.\s*)[a-z_]\w*(?=\s*\()/i,
+ lookbehind: true
+ },
+ "keyword": [
+ // keywords
+ /\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\b/i,
+ // objects and metadata that are used like keywords
+ /\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\b/i
+ ],
+ "number": /\b(?:0x[\da-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)(?:F|LL?|U(?:LL?)?)?\b/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "variable": /\b(?:Curr(?:FieldNo|Page|Report)|x?Rec|RequestOptionsPage)\b/,
+ "class-name": /\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\b/i,
+ "operator": /\.\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\b(?:and|div|mod|not|or|xor)\b/i,
+ "punctuation": /[()\[\]{}:.;,]/
+ };
+ Prism.languages.antlr4 = {
+ "comment": /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ "string": {
+ pattern: /'(?:\\.|[^\\'\r\n])*'/,
+ greedy: true
+ },
+ "character-class": {
+ pattern: /\[(?:\\.|[^\\\]\r\n])*\]/,
+ greedy: true,
+ alias: "regex",
+ inside: {
+ "range": {
+ pattern: /([^[]|(?:^|[^\\])(?:\\\\)*\\\[)-(?!\])/,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "escape": /\\(?:u(?:[a-fA-F\d]{4}|\{[a-fA-F\d]+\})|[pP]\{[=\w-]+\}|[^\r\nupP])/,
+ "punctuation": /[\[\]]/
+ }
+ },
+ "action": {
+ pattern: /\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\}/,
+ greedy: true,
+ inside: {
+ "content": {
+ // this might be C, C++, Python, Java, C#, or any other language ANTLR4 compiles to
+ pattern: /(\{)[\s\S]+(?=\})/,
+ lookbehind: true
+ },
+ "punctuation": /[{}]/
+ }
+ },
+ "command": {
+ pattern: /(->\s*(?!\s))(?:\s*(?:,\s*)?\b[a-z]\w*(?:\s*\([^()\r\n]*\))?)+(?=\s*;)/i,
+ lookbehind: true,
+ inside: {
+ "function": /\b\w+(?=\s*(?:[,(]|$))/,
+ "punctuation": /[,()]/
+ }
+ },
+ "annotation": {
+ pattern: /@\w+(?:::\w+)*/,
+ alias: "keyword"
+ },
+ "label": {
+ pattern: /#[ \t]*\w+/,
+ alias: "punctuation"
+ },
+ "keyword": /\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\b/,
+ "definition": [
+ {
+ pattern: /\b[a-z]\w*(?=\s*:)/,
+ alias: ["rule", "class-name"]
+ },
+ {
+ pattern: /\b[A-Z]\w*(?=\s*:)/,
+ alias: ["token", "constant"]
+ }
+ ],
+ "constant": /\b[A-Z][A-Z_]*\b/,
+ "operator": /\.\.|->|[|~]|[*+?]\??/,
+ "punctuation": /[;:()=]/
+ };
+ Prism.languages.g4 = Prism.languages.antlr4;
+ Prism.languages.apacheconf = {
+ "comment": /#.*/,
+ "directive-inline": {
+ pattern: /(^[\t ]*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,
+ lookbehind: true,
+ alias: "property"
+ },
+ "directive-block": {
+ pattern: /<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b.*>/i,
+ inside: {
+ "directive-block": {
+ pattern: /^<\/?\w+/,
+ inside: {
+ "punctuation": /^<\/?/
+ },
+ alias: "tag"
+ },
+ "directive-block-parameter": {
+ pattern: /.*[^>]/,
+ inside: {
+ "punctuation": /:/,
+ "string": {
+ pattern: /("|').*\1/,
+ inside: {
+ "variable": /[$%]\{?(?:\w\.?[-+:]?)+\}?/
+ }
+ }
+ },
+ alias: "attr-value"
+ },
+ "punctuation": />/
+ },
+ alias: "tag"
+ },
+ "directive-flags": {
+ pattern: /\[(?:[\w=],?)+\]/,
+ alias: "keyword"
+ },
+ "string": {
+ pattern: /("|').*\1/,
+ inside: {
+ "variable": /[$%]\{?(?:\w\.?[-+:]?)+\}?/
+ }
+ },
+ "variable": /[$%]\{?(?:\w\.?[-+:]?)+\}?/,
+ "regex": /\^?.*\$|\^.*\$?/
+ };
+ Prism.languages.sql = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
+ lookbehind: true
+ },
+ "variable": [
+ {
+ pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
+ greedy: true
+ },
+ /@[\w.$]+/
+ ],
+ "string": {
+ pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
+ greedy: true,
+ lookbehind: true
+ },
+ "identifier": {
+ pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "punctuation": /^`|`$/
+ }
+ },
+ "function": /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,
+ // Should we highlight user defined functions too?
+ "keyword": /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
+ "boolean": /\b(?:FALSE|NULL|TRUE)\b/i,
+ "number": /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
+ "operator": /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
+ "punctuation": /[;[\]()`,.]/
+ };
+ (function(Prism2) {
+ var keywords = /\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i;
+ var className = /\b(?:(?=[a-z_]\w*\s*[<\[])|(?!<keyword>))[A-Z_]\w*(?:\s*\.\s*[A-Z_]\w*)*\b(?:\s*(?:\[\s*\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*/.source.replace(/<keyword>/g, function() {
+ return keywords.source;
+ });
+ function insertClassName(pattern) {
+ return RegExp(pattern.replace(/<CLASS-NAME>/g, function() {
+ return className;
+ }), "i");
+ }
+ var classNameInside = {
+ "keyword": keywords,
+ "punctuation": /[()\[\]{};,:.<>]/
+ };
+ Prism2.languages.apex = {
+ "comment": Prism2.languages.clike.comment,
+ "string": Prism2.languages.clike.string,
+ "sql": {
+ pattern: /((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i,
+ lookbehind: true,
+ greedy: true,
+ alias: "language-sql",
+ inside: Prism2.languages.sql
+ },
+ "annotation": {
+ pattern: /@\w+\b/,
+ alias: "punctuation"
+ },
+ "class-name": [
+ {
+ pattern: insertClassName(/(\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\s+\w+\s+on)\s+)<CLASS-NAME>/.source),
+ lookbehind: true,
+ inside: classNameInside
+ },
+ {
+ // cast
+ pattern: insertClassName(/(\(\s*)<CLASS-NAME>(?=\s*\)\s*[\w(])/.source),
+ lookbehind: true,
+ inside: classNameInside
+ },
+ {
+ // variable/parameter declaration and return types
+ pattern: insertClassName(/<CLASS-NAME>(?=\s*\w+\s*[;=,(){:])/.source),
+ inside: classNameInside
+ }
+ ],
+ "trigger": {
+ pattern: /(\btrigger\s+)\w+\b/i,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ "keyword": keywords,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "number": /(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i,
+ "operator": /[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<<?=?|>{1,3}=?/,
+ "punctuation": /[()\[\]{};,.]/
+ };
+ })(Prism);
+ Prism.languages.apl = {
+ "comment": /(?:⍝|#[! ]).*$/m,
+ "string": {
+ pattern: /'(?:[^'\r\n]|'')*'/,
+ greedy: true
+ },
+ "number": /¯?(?:\d*\.?\b\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:(?:\d+(?:\.\d+)?|\.\d+)(?:e[+¯]?\d+)?|¯|∞))?/i,
+ "statement": /:[A-Z][a-z][A-Za-z]*\b/,
+ "system-function": {
+ pattern: /⎕[A-Z]+/i,
+ alias: "function"
+ },
+ "constant": /[⍬⌾#⎕⍞]/,
+ "function": /[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,
+ "monadic-operator": {
+ pattern: /[\\\/⌿⍀¨⍨⌶&∥]/,
+ alias: "operator"
+ },
+ "dyadic-operator": {
+ pattern: /[.⍣⍠⍤∘⌸@⌺⍥]/,
+ alias: "operator"
+ },
+ "assignment": {
+ pattern: /←/,
+ alias: "keyword"
+ },
+ "punctuation": /[\[;\]()◇⋄]/,
+ "dfn": {
+ pattern: /[{}⍺⍵⍶⍹∇⍫:]/,
+ alias: "builtin"
+ }
+ };
+ Prism.languages.applescript = {
+ "comment": [
+ // Allow one level of nesting
+ /\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,
+ /--.+/,
+ /#.+/
+ ],
+ "string": /"(?:\\.|[^"\\\r\n])*"/,
+ "number": /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?\b/i,
+ "operator": [
+ /[&=≠≤≥*+\-\/÷^]|[<>]=?/,
+ /\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\b/
+ ],
+ "keyword": /\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,
+ "class-name": /\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\b/,
+ "punctuation": /[{}():,¬«»《》]/
+ };
+ Prism.languages.aql = {
+ "comment": /\/\/.*|\/\*[\s\S]*?\*\//,
+ "property": {
+ pattern: /([{,]\s*)(?:(?!\d)\w+|(["'´`])(?:(?!\2)[^\\\r\n]|\\.)*\2)(?=\s*:)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /(["'])(?:(?!\1)[^\\\r\n]|\\.)*\1/,
+ greedy: true
+ },
+ "identifier": {
+ pattern: /([´`])(?:(?!\1)[^\\\r\n]|\\.)*\1/,
+ greedy: true
+ },
+ "variable": /@@?\w+/,
+ "keyword": [
+ {
+ pattern: /(\bWITH\s+)COUNT(?=\s+INTO\b)/i,
+ lookbehind: true
+ },
+ /\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WINDOW|WITH)\b/i,
+ // pseudo keywords get a lookbehind to avoid false positives
+ {
+ pattern: /(^|[^\w.[])(?:KEEP|PRUNE|SEARCH|TO)\b/i,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^\w.[])(?:CURRENT|NEW|OLD)\b/,
+ lookbehind: true
+ },
+ {
+ pattern: /\bOPTIONS(?=\s*\{)/i
+ }
+ ],
+ "function": /\b(?!\d)\w+(?=\s*\()/,
+ "boolean": /\b(?:false|true)\b/i,
+ "range": {
+ pattern: /\.\./,
+ alias: "operator"
+ },
+ "number": [
+ /\b0b[01]+/i,
+ /\b0x[0-9a-f]+/i,
+ /(?:\B\.\d+|\b(?:0|[1-9]\d*)(?:\.\d+)?)(?:e[+-]?\d+)?/i
+ ],
+ "operator": /\*{2,}|[=!]~|[!=<>]=?|&&|\|\||[-+*/%]/,
+ "punctuation": /::|[?.:,;()[\]{}]/
+ };
+ Prism.languages.c = Prism.languages.extend("clike", {
+ "comment": {
+ pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,
+ greedy: true
+ },
+ "string": {
+ // https://en.cppreference.com/w/c/language/string_literal
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "number": /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
+ "operator": />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/
+ });
+ Prism.languages.insertBefore("c", "string", {
+ "char": {
+ // https://en.cppreference.com/w/c/language/character_constant
+ pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,
+ greedy: true
+ }
+ });
+ Prism.languages.insertBefore("c", "string", {
+ "macro": {
+ // allow for multiline macro definitions
+ // spaces after the # character compile fine with gcc
+ pattern: /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,
+ lookbehind: true,
+ greedy: true,
+ alias: "property",
+ inside: {
+ "string": [
+ {
+ // highlight the path of the include statement as a string
+ pattern: /^(#\s*include\s*)<[^>]+>/,
+ lookbehind: true
+ },
+ Prism.languages.c["string"]
+ ],
+ "char": Prism.languages.c["char"],
+ "comment": Prism.languages.c["comment"],
+ "macro-name": [
+ {
+ pattern: /(^#\s*define\s+)\w+\b(?!\()/i,
+ lookbehind: true
+ },
+ {
+ pattern: /(^#\s*define\s+)\w+\b(?=\()/i,
+ lookbehind: true,
+ alias: "function"
+ }
+ ],
+ // highlight macro directives as keywords
+ "directive": {
+ pattern: /^(#\s*)[a-z]+/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "directive-hash": /^#/,
+ "punctuation": /##|\\(?=[\r\n])/,
+ "expression": {
+ pattern: /\S[\s\S]*/,
+ inside: Prism.languages.c
+ }
+ }
+ }
+ });
+ Prism.languages.insertBefore("c", "function", {
+ // highlight predefined macros as constants
+ "constant": /\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/
+ });
+ delete Prism.languages.c["boolean"];
+ (function(Prism2) {
+ var keyword = /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;
+ var modName = /\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g, function() {
+ return keyword.source;
+ });
+ Prism2.languages.cpp = Prism2.languages.extend("c", {
+ "class-name": [
+ {
+ pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g, function() {
+ return keyword.source;
+ })),
+ lookbehind: true
+ },
+ // This is intended to capture the class name of method implementations like:
+ // void foo::bar() const {}
+ // However! The `foo` in the above example could also be a namespace, so we only capture the class name if
+ // it starts with an uppercase letter. This approximation should give decent results.
+ /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,
+ // This will capture the class name before destructors like:
+ // Foo::~Foo() {}
+ /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,
+ // This also intends to capture the class name of method implementations but here the class has template
+ // parameters, so it can't be a namespace (until C++ adds generic namespaces).
+ /\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/
+ ],
+ "keyword": keyword,
+ "number": {
+ pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,
+ greedy: true
+ },
+ "operator": />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,
+ "boolean": /\b(?:false|true)\b/
+ });
+ Prism2.languages.insertBefore("cpp", "string", {
+ "module": {
+ // https://en.cppreference.com/w/cpp/language/modules
+ pattern: RegExp(
+ /(\b(?:import|module)\s+)/.source + "(?:" + // header-name
+ /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source + "|" + // module name or partition or both
+ /<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g, function() {
+ return modName;
+ }) + ")"
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "string": /^[<"][\s\S]+/,
+ "operator": /:/,
+ "punctuation": /\./
+ }
+ },
+ "raw-string": {
+ pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
+ alias: "string",
+ greedy: true
+ }
+ });
+ Prism2.languages.insertBefore("cpp", "keyword", {
+ "generic-function": {
+ pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,
+ inside: {
+ "function": /^\w+/,
+ "generic": {
+ pattern: /<[\s\S]+/,
+ alias: "class-name",
+ inside: Prism2.languages.cpp
+ }
+ }
+ }
+ });
+ Prism2.languages.insertBefore("cpp", "operator", {
+ "double-colon": {
+ pattern: /::/,
+ alias: "punctuation"
+ }
+ });
+ Prism2.languages.insertBefore("cpp", "class-name", {
+ // the base clause is an optional list of parent classes
+ // https://en.cppreference.com/w/cpp/language/class
+ "base-clause": {
+ pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,
+ lookbehind: true,
+ greedy: true,
+ inside: Prism2.languages.extend("cpp", {})
+ }
+ });
+ Prism2.languages.insertBefore("inside", "double-colon", {
+ // All untokenized words that are not namespaces should be class names
+ "class-name": /\b[a-z_]\w*\b(?!\s*::)/i
+ }, Prism2.languages.cpp["base-clause"]);
+ })(Prism);
+ Prism.languages.arduino = Prism.languages.extend("cpp", {
+ "keyword": /\b(?:String|array|bool|boolean|break|byte|case|catch|continue|default|do|double|else|finally|for|function|goto|if|in|instanceof|int|integer|long|loop|new|null|return|setup|string|switch|throw|try|void|while|word)\b/,
+ "constant": /\b(?:ANALOG_MESSAGE|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FIRMATA_STRING|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL2V56|LED_BUILTIN|LOW|OUTPUT|REPORT_ANALOG|REPORT_DIGITAL|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET)\b/,
+ "builtin": /\b(?:Audio|BSSID|Bridge|Client|Console|EEPROM|Esplora|EsploraTFT|Ethernet|EthernetClient|EthernetServer|EthernetUDP|File|FileIO|FileSystem|Firmata|GPRS|GSM|GSMBand|GSMClient|GSMModem|GSMPIN|GSMScanner|GSMServer|GSMVoiceCall|GSM_SMS|HttpClient|IPAddress|IRread|Keyboard|KeyboardController|LiquidCrystal|LiquidCrystal_I2C|Mailbox|Mouse|MouseController|PImage|Process|RSSI|RobotControl|RobotMotor|SD|SPI|SSID|Scheduler|Serial|Server|Servo|SoftwareSerial|Stepper|Stream|TFT|Task|USBHost|WiFi|WiFiClient|WiFiServer|WiFiUDP|Wire|YunClient|YunServer|abs|addParameter|analogRead|analogReadResolution|analogReference|analogWrite|analogWriteResolution|answerCall|attach|attachGPRS|attachInterrupt|attached|autoscroll|available|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|bitClear|bitRead|bitSet|bitWrite|blink|blinkVersion|buffer|changePIN|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compassRead|config|connect|connected|constrain|cos|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|delay|delayMicroseconds|detach|detachInterrupt|digitalRead|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endTransmission|endWrite|exists|exitValue|fill|find|findUntil|flush|gatewayIP|get|getAsynchronously|getBand|getButton|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|home|image|interrupts|isActionDone|isDirectory|isListening|isPIN|isPressed|isValid|keyPressed|keyReleased|keyboardRead|knobRead|leftToRight|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|lowByte|macAddress|maintain|map|max|messageAvailable|micros|millis|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|noListenOnLocalhost|noStroke|noTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|pinMode|playFile|playMelody|point|pointTo|position|pow|prepare|press|print|printFirmwareVersion|printVersion|println|process|processInput|pulseIn|put|random|randomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|run|runAsynchronously|runShellCommand|runShellCommandAsynchronously|running|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|serialEvent|setBand|setBitOrder|setClockDivider|setCursor|setDNS|setDataMode|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|shiftIn|shiftOut|shutdown|sin|size|sqrt|startLoop|step|stop|stroke|subnetMask|switchPIN|tan|tempoWrite|text|tone|transfer|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRGB|writeRed|yield)\b/
+ });
+ Prism.languages.ino = Prism.languages.arduino;
+ Prism.languages.arff = {
+ "comment": /%.*/,
+ "string": {
+ pattern: /(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "keyword": /@(?:attribute|data|end|relation)\b/i,
+ "number": /\b\d+(?:\.\d+)?\b/,
+ "punctuation": /[{},]/
+ };
+ Prism.languages.armasm = {
+ "comment": {
+ pattern: /;.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:[^"\r\n]|"")*"/,
+ greedy: true,
+ inside: {
+ "variable": {
+ pattern: /((?:^|[^$])(?:\${2})*)\$\w+/,
+ lookbehind: true
+ }
+ }
+ },
+ "char": {
+ pattern: /'(?:[^'\r\n]{0,4}|'')'/,
+ greedy: true
+ },
+ "version-symbol": {
+ pattern: /\|[\w@]+\|/,
+ greedy: true,
+ alias: "property"
+ },
+ "boolean": /\b(?:FALSE|TRUE)\b/,
+ "directive": {
+ pattern: /\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\b/,
+ alias: "property"
+ },
+ "instruction": {
+ pattern: /((?:^|(?:^|[^\\])(?:\r\n?|\n))[ \t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\w*|[a-z]\w*|\d+)[ \t]+)?)\b[A-Z.]+\b/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "variable": /\$\w+/,
+ "number": /(?:\b[2-9]_\d+|(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e-?\d+)?|\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\b/i,
+ "register": {
+ pattern: /\b(?:r\d|lr)\b/,
+ alias: "symbol"
+ },
+ "operator": /<>|<<|>>|&&|\|\||[=!<>/]=?|[+\-*%#?&|^]|:[A-Z]+:/,
+ "punctuation": /[()[\],]/
+ };
+ Prism.languages["arm-asm"] = Prism.languages.armasm;
+ (function(Prism2) {
+ var createLanguageString = function(lang, pattern) {
+ return {
+ pattern: RegExp(/\{!/.source + "(?:" + (pattern || lang) + ")" + /$[\s\S]*\}/.source, "m"),
+ greedy: true,
+ inside: {
+ "embedded": {
+ pattern: /(^\{!\w+\b)[\s\S]+(?=\}$)/,
+ lookbehind: true,
+ alias: "language-" + lang,
+ inside: Prism2.languages[lang]
+ },
+ "string": /[\s\S]+/
+ }
+ };
+ };
+ Prism2.languages.arturo = {
+ "comment": {
+ pattern: /;.*/,
+ greedy: true
+ },
+ "character": {
+ pattern: /`.`/,
+ alias: "char",
+ greedy: true
+ },
+ "number": {
+ pattern: /\b\d+(?:\.\d+(?:\.\d+(?:-[\w+-]+)?)?)?\b/
+ },
+ "string": {
+ pattern: /"(?:[^"\\\r\n]|\\.)*"/,
+ greedy: true
+ },
+ "regex": {
+ pattern: /\{\/.*?\/\}/,
+ greedy: true
+ },
+ "html-string": createLanguageString("html"),
+ "css-string": createLanguageString("css"),
+ "js-string": createLanguageString("js"),
+ "md-string": createLanguageString("md"),
+ "sql-string": createLanguageString("sql"),
+ "sh-string": createLanguageString("shell", "sh"),
+ "multistring": {
+ pattern: /».*|\{:[\s\S]*?:\}|\{[\s\S]*?\}|^-{6}$[\s\S]*/m,
+ alias: "string",
+ greedy: true
+ },
+ "label": {
+ pattern: /\w+\b\??:/,
+ alias: "property"
+ },
+ "literal": {
+ pattern: /'(?:\w+\b\??:?)/,
+ alias: "constant"
+ },
+ "type": {
+ pattern: /:(?:\w+\b\??:?)/,
+ alias: "class-name"
+ },
+ "color": /#\w+/,
+ "predicate": {
+ pattern: /\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\?/,
+ alias: "keyword"
+ },
+ "builtin-function": {
+ pattern: /\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\b/,
+ alias: "keyword"
+ },
+ "sugar": {
+ pattern: /->|=>|\||::/,
+ alias: "operator"
+ },
+ "punctuation": /[()[\],]/,
+ "symbol": {
+ pattern: /<:|-:|ø|@|#|\+|\||\*|\$|---|-|%|\/|\.\.|\^|~|=|<|>|\\/
+ },
+ "boolean": {
+ pattern: /\b(?:false|maybe|true)\b/
+ }
+ };
+ Prism2.languages.art = Prism2.languages["arturo"];
+ })(Prism);
+ (function(Prism2) {
+ var attributes = {
+ pattern: /(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\[\]\\]|\\.)*\]|[^\[\]\\"'$`]|\\.)*\]/m,
+ lookbehind: true,
+ inside: {
+ "quoted": {
+ pattern: /([$`])(?:(?!\1)[^\\]|\\.)*\1/,
+ inside: {
+ "punctuation": /^[$`]|[$`]$/
+ }
+ },
+ "interpreted": {
+ pattern: /'(?:[^'\\]|\\.)*'/,
+ inside: {
+ "punctuation": /^'|'$/
+ // See rest below
+ }
+ },
+ "string": /"(?:[^"\\]|\\.)*"/,
+ "variable": /\w+(?==)/,
+ "punctuation": /^\[|\]$|,/,
+ "operator": /=/,
+ // The negative look-ahead prevents blank matches
+ "attr-value": /(?!^\s+$).+/
+ }
+ };
+ var asciidoc = Prism2.languages.asciidoc = {
+ "comment-block": {
+ pattern: /^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m,
+ alias: "comment"
+ },
+ "table": {
+ pattern: /^\|={3,}(?:(?:\r?\n|\r(?!\n)).*)*?(?:\r?\n|\r)\|={3,}$/m,
+ inside: {
+ "specifiers": {
+ pattern: /(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*](?:[<^>](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,
+ alias: "attr-value"
+ },
+ "punctuation": {
+ pattern: /(^|[^\\])[|!]=*/,
+ lookbehind: true
+ }
+ // See rest below
+ }
+ },
+ "passthrough-block": {
+ pattern: /^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,
+ inside: {
+ "punctuation": /^\++|\++$/
+ // See rest below
+ }
+ },
+ // Literal blocks and listing blocks
+ "literal-block": {
+ pattern: /^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,
+ inside: {
+ "punctuation": /^(?:-+|\.+)|(?:-+|\.+)$/
+ // See rest below
+ }
+ },
+ // Sidebar blocks, quote blocks, example blocks and open blocks
+ "other-block": {
+ pattern: /^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,
+ inside: {
+ "punctuation": /^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/
+ // See rest below
+ }
+ },
+ // list-punctuation and list-label must appear before indented-block
+ "list-punctuation": {
+ pattern: /(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "list-label": {
+ pattern: /(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "indented-block": {
+ pattern: /((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,
+ lookbehind: true
+ },
+ "comment": /^\/\/.*/m,
+ "title": {
+ pattern: /^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,
+ alias: "important",
+ inside: {
+ "punctuation": /^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/
+ // See rest below
+ }
+ },
+ "attribute-entry": {
+ pattern: /^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,
+ alias: "tag"
+ },
+ "attributes": attributes,
+ "hr": {
+ pattern: /^'{3,}$/m,
+ alias: "punctuation"
+ },
+ "page-break": {
+ pattern: /^<{3,}$/m,
+ alias: "punctuation"
+ },
+ "admonition": {
+ pattern: /^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,
+ alias: "keyword"
+ },
+ "callout": [
+ {
+ pattern: /(^[ \t]*)<?\d*>/m,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ {
+ pattern: /<\d+>/,
+ alias: "symbol"
+ }
+ ],
+ "macro": {
+ pattern: /\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,
+ inside: {
+ "function": /^[a-z\d-]+(?=:)/,
+ "punctuation": /^::?/,
+ "attributes": {
+ pattern: /(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,
+ inside: attributes.inside
+ }
+ }
+ },
+ "inline": {
+ /*
+ The initial look-behind prevents the highlighting of escaped quoted text.
+
+ Quoted text can be multi-line but cannot span an empty line.
+ All quoted text can have attributes before [foobar, 'foobar', baz="bar"].
+
+ First, we handle the constrained quotes.
+ Those must be bounded by non-word chars and cannot have spaces between the delimiter and the first char.
+ They are, in order: _emphasis_, ``double quotes'', `single quotes', `monospace`, 'emphasis', *strong*, +monospace+ and #unquoted#
+
+ Then we handle the unconstrained quotes.
+ Those do not have the restrictions of the constrained quotes.
+ They are, in order: __emphasis__, **strong**, ++monospace++, +++passthrough+++, ##unquoted##, $$passthrough$$, ~subscript~, ^superscript^, {attribute-reference}, [[anchor]], [[[bibliography anchor]]], <<xref>>, (((indexes))) and ((indexes))
+ */
+ pattern: /(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,
+ lookbehind: true,
+ inside: {
+ "attributes": attributes,
+ "url": {
+ pattern: /^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,
+ inside: {
+ "punctuation": /^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/
+ }
+ },
+ "attribute-ref": {
+ pattern: /^\{.+\}$/,
+ inside: {
+ "variable": {
+ pattern: /(^\{)[a-z\d,+_-]+/,
+ lookbehind: true
+ },
+ "operator": /^[=?!#%@$]|!(?=[:}])/,
+ "punctuation": /^\{|\}$|::?/
+ }
+ },
+ "italic": {
+ pattern: /^(['_])[\s\S]+\1$/,
+ inside: {
+ "punctuation": /^(?:''?|__?)|(?:''?|__?)$/
+ }
+ },
+ "bold": {
+ pattern: /^\*[\s\S]+\*$/,
+ inside: {
+ punctuation: /^\*\*?|\*\*?$/
+ }
+ },
+ "punctuation": /^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/
+ }
+ },
+ "replacement": {
+ pattern: /\((?:C|R|TM)\)/,
+ alias: "builtin"
+ },
+ "entity": /&#?[\da-z]{1,8};/i,
+ "line-continuation": {
+ pattern: /(^| )\+$/m,
+ lookbehind: true,
+ alias: "punctuation"
+ }
+ };
+ function copyFromAsciiDoc(keys) {
+ keys = keys.split(" ");
+ var o = {};
+ for (var i = 0, l = keys.length; i < l; i++) {
+ o[keys[i]] = asciidoc[keys[i]];
+ }
+ return o;
+ }
+ attributes.inside["interpreted"].inside.rest = copyFromAsciiDoc("macro inline replacement entity");
+ asciidoc["passthrough-block"].inside.rest = copyFromAsciiDoc("macro");
+ asciidoc["literal-block"].inside.rest = copyFromAsciiDoc("callout");
+ asciidoc["table"].inside.rest = copyFromAsciiDoc("comment-block passthrough-block literal-block other-block list-punctuation indented-block comment title attribute-entry attributes hr page-break admonition list-label callout macro inline replacement entity line-continuation");
+ asciidoc["other-block"].inside.rest = copyFromAsciiDoc("table list-punctuation indented-block comment attribute-entry attributes hr page-break admonition list-label macro inline replacement entity line-continuation");
+ asciidoc["title"].inside.rest = copyFromAsciiDoc("macro inline replacement entity");
+ Prism2.hooks.add("wrap", function(env) {
+ if (env.type === "entity") {
+ env.attributes["title"] = env.content.replace(/&/, "&");
+ }
+ });
+ Prism2.languages.adoc = Prism2.languages.asciidoc;
+ })(Prism);
+ (function(Prism2) {
+ function replace(pattern, replacements) {
+ return pattern.replace(/<<(\d+)>>/g, function(m, index) {
+ return "(?:" + replacements[+index] + ")";
+ });
+ }
+ function re(pattern, replacements, flags) {
+ return RegExp(replace(pattern, replacements), flags || "");
+ }
+ function nested(pattern, depthLog2) {
+ for (var i = 0; i < depthLog2; i++) {
+ pattern = pattern.replace(/<<self>>/g, function() {
+ return "(?:" + pattern + ")";
+ });
+ }
+ return pattern.replace(/<<self>>/g, "[^\\s\\S]");
+ }
+ var keywordKinds = {
+ // keywords which represent a return or variable type
+ type: "bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",
+ // keywords which are used to declare a type
+ typeDeclaration: "class enum interface record struct",
+ // contextual keywords
+ // ("var" and "dynamic" are missing because they are used like types)
+ contextual: "add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",
+ // all other keywords
+ other: "abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield"
+ };
+ function keywordsToPattern(words) {
+ return "\\b(?:" + words.trim().replace(/ /g, "|") + ")\\b";
+ }
+ var typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration);
+ var keywords = RegExp(keywordsToPattern(keywordKinds.type + " " + keywordKinds.typeDeclaration + " " + keywordKinds.contextual + " " + keywordKinds.other));
+ var nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + " " + keywordKinds.contextual + " " + keywordKinds.other);
+ var nonContextualKeywords = keywordsToPattern(keywordKinds.type + " " + keywordKinds.typeDeclaration + " " + keywordKinds.other);
+ var generic = nested(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source, 2);
+ var nestedRound = nested(/\((?:[^()]|<<self>>)*\)/.source, 2);
+ var name = /@?\b[A-Za-z_]\w*\b/.source;
+ var genericName = replace(/<<0>>(?:\s*<<1>>)?/.source, [name, generic]);
+ var identifier = replace(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source, [nonTypeKeywords, genericName]);
+ var array = /\[\s*(?:,\s*)*\]/.source;
+ var typeExpressionWithoutTuple = replace(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source, [identifier, array]);
+ var tupleElement = replace(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [generic, nestedRound, array]);
+ var tuple = replace(/\(<<0>>+(?:,<<0>>+)+\)/.source, [tupleElement]);
+ var typeExpression = replace(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source, [tuple, identifier, array]);
+ var typeInside = {
+ "keyword": keywords,
+ "punctuation": /[<>()?,.:[\]]/
+ };
+ var character = /'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source;
+ var regularString = /"(?:\\.|[^\\"\r\n])*"/.source;
+ var verbatimString = /@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;
+ Prism2.languages.csharp = Prism2.languages.extend("clike", {
+ "string": [
+ {
+ pattern: re(/(^|[^$\\])<<0>>/.source, [verbatimString]),
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: re(/(^|[^@$\\])<<0>>/.source, [regularString]),
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "class-name": [
+ {
+ // Using static
+ // using static System.Math;
+ pattern: re(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source, [identifier]),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // Using alias (type)
+ // using Project = PC.MyCompany.Project;
+ pattern: re(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source, [name, typeExpression]),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // Using alias (alias)
+ // using Project = PC.MyCompany.Project;
+ pattern: re(/(\busing\s+)<<0>>(?=\s*=)/.source, [name]),
+ lookbehind: true
+ },
+ {
+ // Type declarations
+ // class Foo<A, B>
+ // interface Foo<out A, B>
+ pattern: re(/(\b<<0>>\s+)<<1>>/.source, [typeDeclarationKeywords, genericName]),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // Single catch exception declaration
+ // catch(Foo)
+ // (things like catch(Foo e) is covered by variable declaration)
+ pattern: re(/(\bcatch\s*\(\s*)<<0>>/.source, [identifier]),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // Name of the type parameter of generic constraints
+ // where Foo : class
+ pattern: re(/(\bwhere\s+)<<0>>/.source, [name]),
+ lookbehind: true
+ },
+ {
+ // Casts and checks via as and is.
+ // as Foo<A>, is Bar<B>
+ // (things like if(a is Foo b) is covered by variable declaration)
+ pattern: re(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source, [typeExpressionWithoutTuple]),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // Variable, field and parameter declaration
+ // (Foo bar, Bar baz, Foo[,,] bay, Foo<Bar, FooBar<Bar>> bax)
+ pattern: re(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source, [typeExpression, nonContextualKeywords, name]),
+ inside: typeInside
+ }
+ ],
+ "keyword": keywords,
+ // https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure#literals
+ "number": /(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,
+ "operator": />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,
+ "punctuation": /\?\.?|::|[{}[\];(),.:]/
+ });
+ Prism2.languages.insertBefore("csharp", "number", {
+ "range": {
+ pattern: /\.\./,
+ alias: "operator"
+ }
+ });
+ Prism2.languages.insertBefore("csharp", "punctuation", {
+ "named-parameter": {
+ pattern: re(/([(,]\s*)<<0>>(?=\s*:)/.source, [name]),
+ lookbehind: true,
+ alias: "punctuation"
+ }
+ });
+ Prism2.languages.insertBefore("csharp", "class-name", {
+ "namespace": {
+ // namespace Foo.Bar {}
+ // using Foo.Bar;
+ pattern: re(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source, [name]),
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "type-expression": {
+ // default(Foo), typeof(Foo<Bar>), sizeof(int)
+ pattern: re(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source, [nestedRound]),
+ lookbehind: true,
+ alias: "class-name",
+ inside: typeInside
+ },
+ "return-type": {
+ // Foo<Bar> ForBar(); Foo IFoo.Bar() => 0
+ // int this[int index] => 0; T IReadOnlyList<T>.this[int index] => this[index];
+ // int Foo => 0; int Foo { get; set } = 0;
+ pattern: re(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source, [typeExpression, identifier]),
+ inside: typeInside,
+ alias: "class-name"
+ },
+ "constructor-invocation": {
+ // new List<Foo<Bar[]>> { }
+ pattern: re(/(\bnew\s+)<<0>>(?=\s*[[({])/.source, [typeExpression]),
+ lookbehind: true,
+ inside: typeInside,
+ alias: "class-name"
+ },
+ /*'explicit-implementation': {
+ // int IFoo<Foo>.Bar => 0; void IFoo<Foo<Foo>>.Foo<T>();
+ pattern: replace(/\b<<0>>(?=\.<<1>>)/, className, methodOrPropertyDeclaration),
+ inside: classNameInside,
+ alias: 'class-name'
+ },*/
+ "generic-method": {
+ // foo<Bar>()
+ pattern: re(/<<0>>\s*<<1>>(?=\s*\()/.source, [name, generic]),
+ inside: {
+ "function": re(/^<<0>>/.source, [name]),
+ "generic": {
+ pattern: RegExp(generic),
+ alias: "class-name",
+ inside: typeInside
+ }
+ }
+ },
+ "type-list": {
+ // The list of types inherited or of generic constraints
+ // class Foo<F> : Bar, IList<FooBar>
+ // where F : Bar, IList<int>
+ pattern: re(
+ /\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,
+ [typeDeclarationKeywords, genericName, name, typeExpression, keywords.source, nestedRound, /\bnew\s*\(\s*\)/.source]
+ ),
+ lookbehind: true,
+ inside: {
+ "record-arguments": {
+ pattern: re(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source, [genericName, nestedRound]),
+ lookbehind: true,
+ greedy: true,
+ inside: Prism2.languages.csharp
+ },
+ "keyword": keywords,
+ "class-name": {
+ pattern: RegExp(typeExpression),
+ greedy: true,
+ inside: typeInside
+ },
+ "punctuation": /[,()]/
+ }
+ },
+ "preprocessor": {
+ pattern: /(^[\t ]*)#.*/m,
+ lookbehind: true,
+ alias: "property",
+ inside: {
+ // highlight preprocessor directives as keywords
+ "directive": {
+ pattern: /(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,
+ lookbehind: true,
+ alias: "keyword"
+ }
+ }
+ }
+ });
+ var regularStringOrCharacter = regularString + "|" + character;
+ var regularStringCharacterOrComment = replace(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source, [regularStringOrCharacter]);
+ var roundExpression = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
+ var attrTarget = /\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source;
+ var attr = replace(/<<0>>(?:\s*\(<<1>>*\))?/.source, [identifier, roundExpression]);
+ Prism2.languages.insertBefore("csharp", "class-name", {
+ "attribute": {
+ // Attributes
+ // [Foo], [Foo(1), Bar(2, Prop = "foo")], [return: Foo(1), Bar(2)], [assembly: Foo(Bar)]
+ pattern: re(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source, [attrTarget, attr]),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "target": {
+ pattern: re(/^<<0>>(?=\s*:)/.source, [attrTarget]),
+ alias: "keyword"
+ },
+ "attribute-arguments": {
+ pattern: re(/\(<<0>>*\)/.source, [roundExpression]),
+ inside: Prism2.languages.csharp
+ },
+ "class-name": {
+ pattern: RegExp(identifier),
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "punctuation": /[:,]/
+ }
+ }
+ });
+ var formatString = /:[^}\r\n]+/.source;
+ var mInterpolationRound = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
+ var mInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [mInterpolationRound, formatString]);
+ var sInterpolationRound = nested(replace(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source, [regularStringOrCharacter]), 2);
+ var sInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [sInterpolationRound, formatString]);
+ function createInterpolationInside(interpolation, interpolationRound) {
+ return {
+ "interpolation": {
+ pattern: re(/((?:^|[^{])(?:\{\{)*)<<0>>/.source, [interpolation]),
+ lookbehind: true,
+ inside: {
+ "format-string": {
+ pattern: re(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source, [interpolationRound, formatString]),
+ lookbehind: true,
+ inside: {
+ "punctuation": /^:/
+ }
+ },
+ "punctuation": /^\{|\}$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ alias: "language-csharp",
+ inside: Prism2.languages.csharp
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ };
+ }
+ Prism2.languages.insertBefore("csharp", "string", {
+ "interpolation-string": [
+ {
+ pattern: re(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source, [mInterpolation]),
+ lookbehind: true,
+ greedy: true,
+ inside: createInterpolationInside(mInterpolation, mInterpolationRound)
+ },
+ {
+ pattern: re(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source, [sInterpolation]),
+ lookbehind: true,
+ greedy: true,
+ inside: createInterpolationInside(sInterpolation, sInterpolationRound)
+ }
+ ],
+ "char": {
+ pattern: RegExp(character),
+ greedy: true
+ }
+ });
+ Prism2.languages.dotnet = Prism2.languages.cs = Prism2.languages.csharp;
+ })(Prism);
+ Prism.languages.aspnet = Prism.languages.extend("markup", {
+ "page-directive": {
+ pattern: /<%\s*@.*%>/,
+ alias: "tag",
+ inside: {
+ "page-directive": {
+ pattern: /<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,
+ alias: "tag"
+ },
+ rest: Prism.languages.markup.tag.inside
+ }
+ },
+ "directive": {
+ pattern: /<%.*%>/,
+ alias: "tag",
+ inside: {
+ "directive": {
+ pattern: /<%\s*?[$=%#:]{0,2}|%>/,
+ alias: "tag"
+ },
+ rest: Prism.languages.csharp
+ }
+ }
+ });
+ Prism.languages.aspnet.tag.pattern = /<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/;
+ Prism.languages.insertBefore("inside", "punctuation", {
+ "directive": Prism.languages.aspnet["directive"]
+ }, Prism.languages.aspnet.tag.inside["attr-value"]);
+ Prism.languages.insertBefore("aspnet", "comment", {
+ "asp-comment": {
+ pattern: /<%--[\s\S]*?--%>/,
+ alias: ["asp", "comment"]
+ }
+ });
+ Prism.languages.insertBefore("aspnet", Prism.languages.javascript ? "script" : "tag", {
+ "asp-script": {
+ pattern: /(<script(?=.*runat=['"]?server\b)[^>]*>)[\s\S]*?(?=<\/script>)/i,
+ lookbehind: true,
+ alias: ["asp", "script"],
+ inside: Prism.languages.csharp || {}
+ }
+ });
+ Prism.languages.asm6502 = {
+ "comment": /;.*/,
+ "directive": {
+ pattern: /\.\w+(?= )/,
+ alias: "property"
+ },
+ "string": /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ "op-code": {
+ pattern: /\b(?:ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX|DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR|NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC|SEC|SED|SEI|STA|STX|STY|TAX|TAY|TSX|TXA|TXS|TYA|adc|and|asl|bcc|bcs|beq|bit|bmi|bne|bpl|brk|bvc|bvs|clc|cld|cli|clv|cmp|cpx|cpy|dec|dex|dey|eor|inc|inx|iny|jmp|jsr|lda|ldx|ldy|lsr|nop|ora|pha|php|pla|plp|rol|ror|rti|rts|sbc|sec|sed|sei|sta|stx|sty|tax|tay|tsx|txa|txs|tya)\b/,
+ alias: "keyword"
+ },
+ "hex-number": {
+ pattern: /#?\$[\da-f]{1,4}\b/i,
+ alias: "number"
+ },
+ "binary-number": {
+ pattern: /#?%[01]+\b/,
+ alias: "number"
+ },
+ "decimal-number": {
+ pattern: /#?\b\d+\b/,
+ alias: "number"
+ },
+ "register": {
+ pattern: /\b[xya]\b/i,
+ alias: "variable"
+ },
+ "punctuation": /[(),:]/
+ };
+ Prism.languages.asmatmel = {
+ "comment": {
+ pattern: /;.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "constant": /\b(?:PORT[A-Z]|DDR[A-Z]|(?:DD|P)[A-Z](?:\d|[0-2]\d|3[01]))\b/,
+ "directive": {
+ pattern: /\.\w+(?= )/,
+ alias: "property"
+ },
+ "r-register": {
+ pattern: /\br(?:\d|[12]\d|3[01])\b/,
+ alias: "variable"
+ },
+ "op-code": {
+ pattern: /\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREAK|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|DES|EICALL|EIJMP|ELPM|EOR|FMUL|FMULS|FMULSU|ICALL|IJMP|IN|INC|JMP|LAC|LAS|LAT|LD|LD[A-Za-z0-9]|LPM|LSL|LSR|MOV|MOVW|MUL|MULS|MULSU|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|SPM|ST|ST[A-Z0-9]|SUB|SUBI|SWAP|TST|WDR|XCH|adc|add|adiw|and|andi|asr|bclr|bld|brbc|brbs|brcc|brcs|break|breq|brge|brhc|brhs|brid|brie|brlo|brlt|brmi|brne|brpl|brsh|brtc|brts|brvc|brvs|bset|bst|call|cbi|cbr|clc|clh|cli|cln|clr|cls|clt|clv|clz|com|cp|cpc|cpi|cpse|dec|des|eicall|eijmp|elpm|eor|fmul|fmuls|fmulsu|icall|ijmp|in|inc|jmp|lac|las|lat|ld|ld[a-z0-9]|lpm|lsl|lsr|mov|movw|mul|muls|mulsu|neg|nop|or|ori|out|pop|push|rcall|ret|reti|rjmp|rol|ror|sbc|sbci|sbi|sbic|sbis|sbiw|sbr|sbrc|sbrs|sec|seh|sei|sen|ser|ses|set|sev|sez|sleep|spm|st|st[a-zA-Z0-9]|sub|subi|swap|tst|wdr|xch)\b/,
+ alias: "keyword"
+ },
+ "hex-number": {
+ pattern: /#?\$[\da-f]{2,4}\b/i,
+ alias: "number"
+ },
+ "binary-number": {
+ pattern: /#?%[01]+\b/,
+ alias: "number"
+ },
+ "decimal-number": {
+ pattern: /#?\b\d+\b/,
+ alias: "number"
+ },
+ "register": {
+ pattern: /\b[acznvshtixy]\b/i,
+ alias: "variable"
+ },
+ "operator": />>=?|<<=?|&[&=]?|\|[\|=]?|[-+*/%^!=<>?]=?/,
+ "punctuation": /[(),:]/
+ };
+ Prism.languages.autohotkey = {
+ "comment": [
+ {
+ pattern: /(^|\s);.*/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^[\t ]*)\/\*(?:[\r\n](?![ \t]*\*\/)|[^\r\n])*(?:[\r\n][ \t]*\*\/)?/m,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "tag": {
+ // labels
+ pattern: /^([ \t]*)[^\s,`":]+(?=:[ \t]*$)/m,
+ lookbehind: true
+ },
+ "string": /"(?:[^"\n\r]|"")*"/,
+ "variable": /%\w+%/,
+ "number": /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,
+ "operator": /\?|\/\/?=?|:=|\|[=|]?|&[=&]?|\+[=+]?|-[=-]?|\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\b(?:AND|NOT|OR)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "command": {
+ pattern: /\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i,
+ alias: "selector"
+ },
+ "constant": /\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\b/i,
+ "builtin": /\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|isfunc|islabel|IsObject|ln|log|ltrim|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|numget|numput|onmessage|regexmatch|regexreplace|registercallback|round|rtrim|sb_seticon|sb_setparts|sb_settext|sin|sqrt|strlen|strreplace|strsplit|substr|tan|tv_add|tv_delete|tv_get|tv_getchild|tv_getcount|tv_getnext|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__Call|__Get|__New|__Set)\b/i,
+ "symbol": /\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\b/i,
+ "directive": {
+ pattern: /#[a-z]+\b/i,
+ alias: "important"
+ },
+ "keyword": /\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\b/i,
+ "function": /[^(); \t,\n+*\-=?>:\\\/<&%\[\]]+(?=\()/,
+ "punctuation": /[{}[\]():,]/
+ };
+ Prism.languages.autoit = {
+ "comment": [
+ /;.*/,
+ {
+ // The multi-line comments delimiters can actually be commented out with ";"
+ pattern: /(^[\t ]*)#(?:comments-start|cs)[\s\S]*?^[ \t]*#(?:ce|comments-end)/m,
+ lookbehind: true
+ }
+ ],
+ "url": {
+ pattern: /(^[\t ]*#include\s+)(?:<[^\r\n>]+>|"[^\r\n"]+")/m,
+ lookbehind: true
+ },
+ "string": {
+ pattern: /(["'])(?:\1\1|(?!\1)[^\r\n])*\1/,
+ greedy: true,
+ inside: {
+ "variable": /([%$@])\w+\1/
+ }
+ },
+ "directive": {
+ pattern: /(^[\t ]*)#[\w-]+/m,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "function": /\b\w+(?=\()/,
+ // Variables and macros
+ "variable": /[$@]\w+/,
+ "keyword": /\b(?:Case|Const|Continue(?:Case|Loop)|Default|Dim|Do|Else(?:If)?|End(?:Func|If|Select|Switch|With)|Enum|Exit(?:Loop)?|For|Func|Global|If|In|Local|Next|Null|ReDim|Select|Static|Step|Switch|Then|To|Until|Volatile|WEnd|While|With)\b/i,
+ "number": /\b(?:0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,
+ "boolean": /\b(?:False|True)\b/i,
+ "operator": /<[=>]?|[-+*\/=&>]=?|[?^]|\b(?:And|Not|Or)\b/i,
+ "punctuation": /[\[\]().,:]/
+ };
+ (function(Prism2) {
+ function replace(pattern, replacements) {
+ return pattern.replace(/<<(\d+)>>/g, function(m, index) {
+ return replacements[+index];
+ });
+ }
+ function re(pattern, replacements, flags) {
+ return RegExp(replace(pattern, replacements), flags || "");
+ }
+ var types = /bool|clip|float|int|string|val/.source;
+ var internals = [
+ // bools
+ /is(?:bool|clip|float|int|string)|defined|(?:(?:internal)?function|var)?exists?/.source,
+ // control
+ /apply|assert|default|eval|import|nop|select|undefined/.source,
+ // global
+ /opt_(?:allowfloataudio|avipadscanlines|dwchannelmask|enable_(?:b64a|planartopackedrgb|v210|y3_10_10|y3_10_16)|usewaveextensible|vdubplanarhack)|set(?:cachemode|maxcpu|memorymax|planarlegacyalignment|workingdir)/.source,
+ // conv
+ /hex(?:value)?|value/.source,
+ // numeric
+ /abs|ceil|continued(?:denominator|numerator)?|exp|floor|fmod|frac|log(?:10)?|max|min|muldiv|pi|pow|rand|round|sign|spline|sqrt/.source,
+ // trig
+ /a?sinh?|a?cosh?|a?tan[2h]?/.source,
+ // bit
+ /(?:bit(?:and|not|x?or|[lr]?shift[aslu]?|sh[lr]|sa[lr]|[lr]rotatel?|ro[rl]|te?st|set(?:count)?|cl(?:ea)?r|ch(?:an)?ge?))/.source,
+ // runtime
+ /average(?:[bgr]|chroma[uv]|luma)|(?:[rgb]|chroma[uv]|luma|rgb|[yuv](?=difference(?:fromprevious|tonext)))difference(?:fromprevious|tonext)?|[yuvrgb]plane(?:median|min|max|minmaxdifference)/.source,
+ // script
+ /getprocessinfo|logmsg|script(?:dir(?:utf8)?|file(?:utf8)?|name(?:utf8)?)|setlogparams/.source,
+ // string
+ /chr|(?:fill|find|left|mid|replace|rev|right)str|format|[lu]case|ord|str(?:cmpi?|fromutf8|len|toutf8)|time|trim(?:all|left|right)/.source,
+ // version
+ /isversionorgreater|version(?:number|string)/.source,
+ // helper
+ /buildpixeltype|colorspacenametopixeltype/.source,
+ // avsplus
+ /addautoloaddir|on(?:cpu|cuda)|prefetch|setfiltermtmode/.source
+ ].join("|");
+ var properties = [
+ // content
+ /has(?:audio|video)/.source,
+ // resolution
+ /height|width/.source,
+ // framerate
+ /frame(?:count|rate)|framerate(?:denominator|numerator)/.source,
+ // interlacing
+ /getparity|is(?:field|frame)based/.source,
+ // color format
+ /bitspercomponent|componentsize|hasalpha|is(?:planar(?:rgba?)?|interleaved|rgb(?:24|32|48|64)?|y(?:8|u(?:va?|y2))?|yv(?:12|16|24|411)|420|422|444|packedrgb)|numcomponents|pixeltype/.source,
+ // audio
+ /audio(?:bits|channels|duration|length(?:[fs]|hi|lo)?|rate)|isaudio(?:float|int)/.source
+ ].join("|");
+ var filters = [
+ // source
+ /avi(?:file)?source|directshowsource|image(?:reader|source|sourceanim)|opendmlsource|segmented(?:avisource|directshowsource)|wavsource/.source,
+ // color
+ /coloryuv|convertbacktoyuy2|convertto(?:RGB(?:24|32|48|64)|(?:planar)?RGBA?|Y8?|YV(?:12|16|24|411)|YUVA?(?:411|420|422|444)|YUY2)|fixluminance|gr[ae]yscale|invert|levels|limiter|mergea?rgb|merge(?:chroma|luma)|rgbadjust|show(?:alpha|blue|green|red)|swapuv|tweak|[uv]toy8?|ytouv/.source,
+ // overlay
+ /(?:colorkey|reset)mask|layer|mask(?:hs)?|merge|overlay|subtract/.source,
+ // geometry
+ /addborders|(?:bicubic|bilinear|blackman|gauss|lanczos4|lanczos|point|sinc|spline(?:16|36|64))resize|crop(?:bottom)?|flip(?:horizontal|vertical)|(?:horizontal|vertical)?reduceby2|letterbox|skewrows|turn(?:180|left|right)/.source,
+ // pixel
+ /blur|fixbrokenchromaupsampling|generalconvolution|(?:spatial|temporal)soften|sharpen/.source,
+ // timeline
+ /trim|(?:un)?alignedsplice|(?:assume|assumescaled|change|convert)FPS|(?:delete|duplicate)frame|dissolve|fade(?:in|io|out)[02]?|freezeframe|interleave|loop|reverse|select(?:even|odd|(?:range)?every)/.source,
+ // interlace
+ /assume[bt]ff|assume(?:field|frame)based|bob|complementparity|doubleweave|peculiarblend|pulldown|separate(?:columns|fields|rows)|swapfields|weave(?:columns|rows)?/.source,
+ // audio
+ /amplify(?:db)?|assumesamplerate|audiodub(?:ex)?|audiotrim|convertaudioto(?:(?:8|16|24|32)bit|float)|converttomono|delayaudio|ensurevbrmp3sync|get(?:left|right)?channel|kill(?:audio|video)|mergechannels|mixaudio|monotostereo|normalize|resampleaudio|ssrc|supereq|timestretch/.source,
+ // conditional
+ /animate|applyrange|conditional(?:filter|reader|select)|frameevaluate|scriptclip|tcp(?:server|source)|writefile(?:end|if|start)?/.source,
+ // export
+ /imagewriter/.source,
+ // debug
+ /blackness|blankclip|colorbars(?:hd)?|compare|dumpfiltergraph|echo|histogram|info|messageclip|preroll|setgraphanalysis|show(?:framenumber|smpte|time)|showfiveversions|stack(?:horizontal|vertical)|subtitle|tone|version/.source
+ ].join("|");
+ var allinternals = [internals, properties, filters].join("|");
+ Prism2.languages.avisynth = {
+ "comment": [
+ {
+ // Matches [* *] nestable block comments, but only supports 1 level of nested comments
+ // /\[\*(?:[^\[*]|\[(?!\*)|\*(?!\])|<self>)*\*\]/
+ pattern: /(^|[^\\])\[\*(?:[^\[*]|\[(?!\*)|\*(?!\])|\[\*(?:[^\[*]|\[(?!\*)|\*(?!\]))*\*\])*\*\]/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // Matches /* */ block comments
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // Matches # comments
+ pattern: /(^|[^\\$])#.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ // Handle before strings because optional arguments are surrounded by double quotes
+ "argument": {
+ pattern: re(/\b(?:<<0>>)\s+("?)\w+\1/.source, [types], "i"),
+ inside: {
+ "keyword": /^\w+/
+ }
+ },
+ // Optional argument assignment
+ "argument-label": {
+ pattern: /([,(][\s\\]*)\w+\s*=(?!=)/,
+ lookbehind: true,
+ inside: {
+ "argument-name": {
+ pattern: /^\w+/,
+ alias: "punctuation"
+ },
+ "punctuation": /=$/
+ }
+ },
+ "string": [
+ {
+ // triple double-quoted
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true
+ },
+ {
+ // single double-quoted
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
+ greedy: true,
+ inside: {
+ "constant": {
+ // These *are* case-sensitive!
+ pattern: /\b(?:DEFAULT_MT_MODE|(?:MAINSCRIPT|PROGRAM|SCRIPT)DIR|(?:MACHINE|USER)_(?:CLASSIC|PLUS)_PLUGINS)\b/
+ }
+ }
+ }
+ ],
+ // The special "last" variable that takes the value of the last implicitly returned clip
+ "variable": /\b(?:last)\b/i,
+ "boolean": /\b(?:false|no|true|yes)\b/i,
+ "keyword": /\b(?:catch|else|for|function|global|if|return|try|while|__END__)\b/i,
+ "constant": /\bMT_(?:MULTI_INSTANCE|NICE_FILTER|SERIALIZED|SPECIAL_MT)\b/,
+ // AviSynth's internal functions, filters, and properties
+ "builtin-function": {
+ pattern: re(/\b(?:<<0>>)\b/.source, [allinternals], "i"),
+ alias: "function"
+ },
+ "type-cast": {
+ pattern: re(/\b(?:<<0>>)(?=\s*\()/.source, [types], "i"),
+ alias: "keyword"
+ },
+ // External/user-defined filters
+ "function": {
+ pattern: /\b[a-z_]\w*(?=\s*\()|(\.)[a-z_]\w*\b/i,
+ lookbehind: true
+ },
+ // Matches a \ as the first or last character on a line
+ "line-continuation": {
+ pattern: /(^[ \t]*)\\|\\(?=[ \t]*$)/m,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "number": /\B\$(?:[\da-f]{6}|[\da-f]{8})\b|(?:(?:\b|\B-)\d+(?:\.\d*)?\b|\B\.\d+\b)/i,
+ "operator": /\+\+?|[!=<>]=?|&&|\|\||[?:*/%-]/,
+ "punctuation": /[{}\[\]();,.]/
+ };
+ Prism2.languages.avs = Prism2.languages.avisynth;
+ })(Prism);
+ Prism.languages["avro-idl"] = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\])"(?:[^\r\n"\\]|\\.)*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ "annotation": {
+ pattern: /@(?:[$\w.-]|`[^\r\n`]+`)+/,
+ greedy: true,
+ alias: "function"
+ },
+ "function-identifier": {
+ pattern: /`[^\r\n`]+`(?=\s*\()/,
+ greedy: true,
+ alias: "function"
+ },
+ "identifier": {
+ pattern: /`[^\r\n`]+`/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:enum|error|protocol|record|throws)\b\s+)[$\w]+/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /\b(?:array|boolean|bytes|date|decimal|double|enum|error|false|fixed|float|idl|import|int|local_timestamp_ms|long|map|null|oneway|protocol|record|schema|string|throws|time_ms|timestamp_ms|true|union|uuid|void)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "number": [
+ {
+ pattern: /(^|[^\w.])-?(?:(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|0x(?:[a-f0-9]+(?:\.[a-f0-9]*)?|\.[a-f0-9]+)(?:p[+-]?\d+)?)[dfl]?(?![\w.])/i,
+ lookbehind: true
+ },
+ /-?\b(?:Infinity|NaN)\b/
+ ],
+ "operator": /=/,
+ "punctuation": /[()\[\]{}<>.:,;-]/
+ };
+ Prism.languages.avdl = Prism.languages["avro-idl"];
+ Prism.languages.awk = {
+ "hashbang": {
+ pattern: /^#!.*/,
+ greedy: true,
+ alias: "comment"
+ },
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\])"(?:[^\\"\r\n]|\\.)*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ "regex": {
+ pattern: /((?:^|[^\w\s)])\s*)\/(?:[^\/\\\r\n]|\\.)*\//,
+ lookbehind: true,
+ greedy: true
+ },
+ "variable": /\$\w+/,
+ "keyword": /\b(?:BEGIN|BEGINFILE|END|ENDFILE|break|case|continue|default|delete|do|else|exit|for|function|getline|if|in|next|nextfile|printf?|return|switch|while)\b|@(?:include|load)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "number": /\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[a-fA-F0-9]+)\b/,
+ "operator": /--|\+\+|!?~|>&|>>|<<|(?:\*\*|[<>!=+\-*/%^])=?|&&|\|[|&]|[?:]/,
+ "punctuation": /[()[\]{},;]/
+ };
+ Prism.languages.gawk = Prism.languages.awk;
+ (function(Prism2) {
+ var envVars = "\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b";
+ var commandAfterHeredoc = {
+ pattern: /(^(["']?)\w+\2)[ \t]+\S.*/,
+ lookbehind: true,
+ alias: "punctuation",
+ // this looks reasonably well in all themes
+ inside: null
+ // see below
+ };
+ var insideString = {
+ "bash": commandAfterHeredoc,
+ "environment": {
+ pattern: RegExp("\\$" + envVars),
+ alias: "constant"
+ },
+ "variable": [
+ // [0]: Arithmetic Environment
+ {
+ pattern: /\$?\(\([\s\S]+?\)\)/,
+ greedy: true,
+ inside: {
+ // If there is a $ sign at the beginning highlight $(( and )) as variable
+ "variable": [
+ {
+ pattern: /(^\$\(\([\s\S]+)\)\)/,
+ lookbehind: true
+ },
+ /^\$\(\(/
+ ],
+ "number": /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,
+ // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
+ "operator": /--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,
+ // If there is no $ sign at the beginning highlight (( and )) as punctuation
+ "punctuation": /\(\(?|\)\)?|,|;/
+ }
+ },
+ // [1]: Command Substitution
+ {
+ pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,
+ greedy: true,
+ inside: {
+ "variable": /^\$\(|^`|\)$|`$/
+ }
+ },
+ // [2]: Brace expansion
+ {
+ pattern: /\$\{[^}]+\}/,
+ greedy: true,
+ inside: {
+ "operator": /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,
+ "punctuation": /[\[\]]/,
+ "environment": {
+ pattern: RegExp("(\\{)" + envVars),
+ lookbehind: true,
+ alias: "constant"
+ }
+ }
+ },
+ /\$(?:\w+|[#?*!@$])/
+ ],
+ // Escape sequences from echo and printf's manuals, and escaped quotes.
+ "entity": /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/
+ };
+ Prism2.languages.bash = {
+ "shebang": {
+ pattern: /^#!\s*\/.*/,
+ alias: "important"
+ },
+ "comment": {
+ pattern: /(^|[^"{\\$])#.*/,
+ lookbehind: true
+ },
+ "function-name": [
+ // a) function foo {
+ // b) foo() {
+ // c) function foo() {
+ // but not “foo {”
+ {
+ // a) and c)
+ pattern: /(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,
+ lookbehind: true,
+ alias: "function"
+ },
+ {
+ // b)
+ pattern: /\b[\w-]+(?=\s*\(\s*\)\s*\{)/,
+ alias: "function"
+ }
+ ],
+ // Highlight variable names as variables in for and select beginnings.
+ "for-or-select": {
+ pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/,
+ alias: "variable",
+ lookbehind: true
+ },
+ // Highlight variable names as variables in the left-hand part
+ // of assignments (“=” and “+=”).
+ "assign-left": {
+ pattern: /(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,
+ inside: {
+ "environment": {
+ pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + envVars),
+ lookbehind: true,
+ alias: "constant"
+ }
+ },
+ alias: "variable",
+ lookbehind: true
+ },
+ "string": [
+ // Support for Here-documents https://en.wikipedia.org/wiki/Here_document
+ {
+ pattern: /((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,
+ lookbehind: true,
+ greedy: true,
+ inside: insideString
+ },
+ // Here-document with quotes around the tag
+ // → No expansion (so no “inside”).
+ {
+ pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "bash": commandAfterHeredoc
+ }
+ },
+ // “Normal” string
+ {
+ // https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
+ pattern: /(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,
+ lookbehind: true,
+ greedy: true,
+ inside: insideString
+ },
+ {
+ // https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html
+ pattern: /(^|[^$\\])'[^']*'/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
+ pattern: /\$'(?:[^'\\]|\\[\s\S])*'/,
+ greedy: true,
+ inside: {
+ "entity": insideString.entity
+ }
+ }
+ ],
+ "environment": {
+ pattern: RegExp("\\$?" + envVars),
+ alias: "constant"
+ },
+ "variable": insideString.variable,
+ "function": {
+ pattern: /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,
+ lookbehind: true
+ },
+ "keyword": {
+ pattern: /(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,
+ lookbehind: true
+ },
+ // https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
+ "builtin": {
+ pattern: /(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,
+ lookbehind: true,
+ // Alias added to make those easier to distinguish from strings.
+ alias: "class-name"
+ },
+ "boolean": {
+ pattern: /(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,
+ lookbehind: true
+ },
+ "file-descriptor": {
+ pattern: /\B&\d\b/,
+ alias: "important"
+ },
+ "operator": {
+ // Lots of redirections here, but not just that.
+ pattern: /\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,
+ inside: {
+ "file-descriptor": {
+ pattern: /^\d/,
+ alias: "important"
+ }
+ }
+ },
+ "punctuation": /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,
+ "number": {
+ pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,
+ lookbehind: true
+ }
+ };
+ commandAfterHeredoc.inside = Prism2.languages.bash;
+ var toBeCopied = [
+ "comment",
+ "function-name",
+ "for-or-select",
+ "assign-left",
+ "string",
+ "environment",
+ "function",
+ "keyword",
+ "builtin",
+ "boolean",
+ "file-descriptor",
+ "operator",
+ "punctuation",
+ "number"
+ ];
+ var inside = insideString.variable[1].inside;
+ for (var i = 0; i < toBeCopied.length; i++) {
+ inside[toBeCopied[i]] = Prism2.languages.bash[toBeCopied[i]];
+ }
+ Prism2.languages.shell = Prism2.languages.bash;
+ })(Prism);
+ Prism.languages.basic = {
+ "comment": {
+ pattern: /(?:!|REM\b).+/i,
+ inside: {
+ "keyword": /^REM/i
+ }
+ },
+ "string": {
+ pattern: /"(?:""|[!#$%&'()*,\/:;<=>?^\w +\-.])*"/,
+ greedy: true
+ },
+ "number": /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,
+ "keyword": /\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SELECT CASE|SHARED|SHELL|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,
+ "function": /\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,
+ "operator": /<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,
+ "punctuation": /[,;:()]/
+ };
+ (function(Prism2) {
+ var variable = /%%?[~:\w]+%?|!\S+!/;
+ var parameter = {
+ pattern: /\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,
+ alias: "attr-name",
+ inside: {
+ "punctuation": /:/
+ }
+ };
+ var string = /"(?:[\\"]"|[^"])*"(?!")/;
+ var number = /(?:\b|-)\d+\b/;
+ Prism2.languages.batch = {
+ "comment": [
+ /^::.*/m,
+ {
+ pattern: /((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,
+ lookbehind: true
+ }
+ ],
+ "label": {
+ pattern: /^:.*/m,
+ alias: "property"
+ },
+ "command": [
+ {
+ // FOR command
+ pattern: /((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,
+ lookbehind: true,
+ inside: {
+ "keyword": /\b(?:do|in)\b|^for\b/i,
+ "string": string,
+ "parameter": parameter,
+ "variable": variable,
+ "number": number,
+ "punctuation": /[()',]/
+ }
+ },
+ {
+ // IF command
+ pattern: /((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:"[^"]*"|[^\s"]\S*))/im,
+ lookbehind: true,
+ inside: {
+ "keyword": /\b(?:cmdextversion|defined|errorlevel|exist|not)\b|^if\b/i,
+ "string": string,
+ "parameter": parameter,
+ "variable": variable,
+ "number": number,
+ "operator": /\^|==|\b(?:equ|geq|gtr|leq|lss|neq)\b/i
+ }
+ },
+ {
+ // ELSE command
+ pattern: /((?:^|[&()])[ \t]*)else\b/im,
+ lookbehind: true,
+ inside: {
+ "keyword": /^else\b/i
+ }
+ },
+ {
+ // SET command
+ pattern: /((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,
+ lookbehind: true,
+ inside: {
+ "keyword": /^set\b/i,
+ "string": string,
+ "parameter": parameter,
+ "variable": [
+ variable,
+ /\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/
+ ],
+ "number": number,
+ "operator": /[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,
+ "punctuation": /[()',]/
+ }
+ },
+ {
+ // Other commands
+ pattern: /((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /^\w+\b/,
+ "string": string,
+ "parameter": parameter,
+ "label": {
+ pattern: /(^\s*):\S+/m,
+ lookbehind: true,
+ alias: "property"
+ },
+ "variable": variable,
+ "number": number,
+ "operator": /\^/
+ }
+ }
+ ],
+ "operator": /[&@]/,
+ "punctuation": /[()']/
+ };
+ })(Prism);
+ Prism.languages.bbcode = {
+ "tag": {
+ pattern: /\[\/?[^\s=\]]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))?(?:\s+[^\s=\]]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))*\s*\]/,
+ inside: {
+ "tag": {
+ pattern: /^\[\/?[^\s=\]]+/,
+ inside: {
+ "punctuation": /^\[\/?/
+ }
+ },
+ "attr-value": {
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+)/,
+ inside: {
+ "punctuation": [
+ /^=/,
+ {
+ pattern: /^(\s*)["']|["']$/,
+ lookbehind: true
+ }
+ ]
+ }
+ },
+ "punctuation": /\]/,
+ "attr-name": /[^\s=\]]+/
+ }
+ }
+ };
+ Prism.languages.shortcode = Prism.languages.bbcode;
+ Prism.languages.bicep = {
+ "comment": [
+ {
+ // multiline comments eg /* ASDF */
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // singleline comments eg // ASDF
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "property": [
+ {
+ pattern: /([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,
+ lookbehind: true
+ },
+ {
+ pattern: /([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": [
+ {
+ pattern: /'''[^'][\s\S]*?'''/,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "interpolated-string": {
+ pattern: /(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /\$\{[^{}\r\n]*\}/,
+ inside: {
+ "expression": {
+ pattern: /(^\$\{)[\s\S]+(?=\}$)/,
+ lookbehind: true
+ },
+ "punctuation": /^\$\{|\}$/
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "datatype": {
+ pattern: /(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ "boolean": /\b(?:false|true)\b/,
+ // https://github.com/Azure/bicep/blob/114a3251b4e6e30082a58729f19a8cc4e374ffa6/src/textmate/bicep.tmlanguage#L184
+ "keyword": /\b(?:existing|for|if|in|module|null|output|param|resource|targetScope|var)\b/,
+ "decorator": /@\w+\b/,
+ "function": /\b[a-z_]\w*(?=[ \t]*\()/i,
+ "number": /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,
+ "operator": /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.bicep["interpolated-string"].inside["interpolation"].inside["expression"].inside = Prism.languages.bicep;
+ Prism.languages.birb = Prism.languages.extend("clike", {
+ "string": {
+ pattern: /r?("|')(?:\\.|(?!\1)[^\\])*\1/,
+ greedy: true
+ },
+ "class-name": [
+ /\b[A-Z](?:[\d_]*[a-zA-Z]\w*)?\b/,
+ // matches variable and function return types (parameters as well).
+ /\b(?:[A-Z]\w*|(?!(?:var|void)\b)[a-z]\w*)(?=\s+\w+\s*[;,=()])/
+ ],
+ "keyword": /\b(?:assert|break|case|class|const|default|else|enum|final|follows|for|grab|if|nest|new|next|noSeeb|return|static|switch|throw|var|void|while)\b/,
+ "operator": /\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?|:/,
+ "variable": /\b[a-z_]\w*\b/
+ });
+ Prism.languages.insertBefore("birb", "function", {
+ "metadata": {
+ pattern: /<\w+>/,
+ greedy: true,
+ alias: "symbol"
+ }
+ });
+ Prism.languages.bison = Prism.languages.extend("c", {});
+ Prism.languages.insertBefore("bison", "comment", {
+ "bison": {
+ // This should match all the beginning of the file
+ // including the prologue(s), the bison declarations and
+ // the grammar rules.
+ pattern: /^(?:[^%]|%(?!%))*%%[\s\S]*?%%/,
+ inside: {
+ "c": {
+ // Allow for one level of nested braces
+ pattern: /%\{[\s\S]*?%\}|\{(?:\{[^}]*\}|[^{}])*\}/,
+ inside: {
+ "delimiter": {
+ pattern: /^%?\{|%?\}$/,
+ alias: "punctuation"
+ },
+ "bison-variable": {
+ pattern: /[$@](?:<[^\s>]+>)?[\w$]+/,
+ alias: "variable",
+ inside: {
+ "punctuation": /<|>/
+ }
+ },
+ rest: Prism.languages.c
+ }
+ },
+ "comment": Prism.languages.c.comment,
+ "string": Prism.languages.c.string,
+ "property": /\S+(?=:)/,
+ "keyword": /%\w+/,
+ "number": {
+ pattern: /(^|[^@])\b(?:0x[\da-f]+|\d+)/i,
+ lookbehind: true
+ },
+ "punctuation": /%[%?]|[|:;\[\]<>]/
+ }
+ }
+ });
+ Prism.languages.bnf = {
+ "string": {
+ pattern: /"[^\r\n"]*"|'[^\r\n']*'/
+ },
+ "definition": {
+ pattern: /<[^<>\r\n\t]+>(?=\s*::=)/,
+ alias: ["rule", "keyword"],
+ inside: {
+ "punctuation": /^<|>$/
+ }
+ },
+ "rule": {
+ pattern: /<[^<>\r\n\t]+>/,
+ inside: {
+ "punctuation": /^<|>$/
+ }
+ },
+ "operator": /::=|[|()[\]{}*+?]|\.{3}/
+ };
+ Prism.languages.rbnf = Prism.languages.bnf;
+ Prism.languages.brainfuck = {
+ "pointer": {
+ pattern: /<|>/,
+ alias: "keyword"
+ },
+ "increment": {
+ pattern: /\+/,
+ alias: "inserted"
+ },
+ "decrement": {
+ pattern: /-/,
+ alias: "deleted"
+ },
+ "branching": {
+ pattern: /\[|\]/,
+ alias: "important"
+ },
+ "operator": /[.,]/,
+ "comment": /\S+/
+ };
+ Prism.languages.brightscript = {
+ "comment": /(?:\brem|').*/i,
+ "directive-statement": {
+ pattern: /(^[\t ]*)#(?:const|else(?:[\t ]+if)?|end[\t ]+if|error|if).*/im,
+ lookbehind: true,
+ alias: "property",
+ inside: {
+ "error-message": {
+ pattern: /(^#error).+/,
+ lookbehind: true
+ },
+ "directive": {
+ pattern: /^#(?:const|else(?:[\t ]+if)?|end[\t ]+if|error|if)/,
+ alias: "keyword"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ // see below
+ }
+ }
+ },
+ "property": {
+ pattern: /([\r\n{,][\t ]*)(?:(?!\d)\w+|"(?:[^"\r\n]|"")*"(?!"))(?=[ \t]*:)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:[^"\r\n]|"")*"(?!")/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\bAs[\t ]+)\w+/i,
+ lookbehind: true
+ },
+ "keyword": /\b(?:As|Dim|Each|Else|Elseif|End|Exit|For|Function|Goto|If|In|Print|Return|Step|Stop|Sub|Then|To|While)\b/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "function": /\b(?!\d)\w+(?=[\t ]*\()/,
+ "number": /(?:\b\d+(?:\.\d+)?(?:[ed][+-]\d+)?|&h[a-f\d]+)\b[%&!#]?/i,
+ "operator": /--|\+\+|>>=?|<<=?|<>|[-+*/\\<>]=?|[:^=?]|\b(?:and|mod|not|or)\b/i,
+ "punctuation": /[.,;()[\]{}]/,
+ "constant": /\b(?:LINE_NUM)\b/i
+ };
+ Prism.languages.brightscript["directive-statement"].inside.expression.inside = Prism.languages.brightscript;
+ Prism.languages.bro = {
+ "comment": {
+ pattern: /(^|[^\\$])#.*/,
+ lookbehind: true,
+ inside: {
+ "italic": /\b(?:FIXME|TODO|XXX)\b/
+ }
+ },
+ "string": {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "boolean": /\b[TF]\b/,
+ "function": {
+ pattern: /(\b(?:event|function|hook)[ \t]+)\w+(?:::\w+)?/,
+ lookbehind: true
+ },
+ "builtin": /(?:@(?:load(?:-(?:plugin|sigs))?|unload|prefixes|ifn?def|else|(?:end)?if|DIR|FILENAME))|(?:&?(?:add_func|create_expire|default|delete_func|encrypt|error_handler|expire_func|group|log|mergeable|optional|persistent|priority|raw_output|read_expire|redef|rotate_interval|rotate_size|synchronized|type_column|write_expire))/,
+ "constant": {
+ pattern: /(\bconst[ \t]+)\w+/i,
+ lookbehind: true
+ },
+ "keyword": /\b(?:add|addr|alarm|any|bool|break|const|continue|count|delete|double|else|enum|event|export|file|for|function|global|hook|if|in|int|interval|local|module|next|of|opaque|pattern|port|print|record|return|schedule|set|string|subnet|table|time|timeout|using|vector|when)\b/,
+ "operator": /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&|\|\|?|\?|\*|\/|~|\^|%/,
+ "number": /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.bsl = {
+ "comment": /\/\/.*/,
+ "string": [
+ // Строки
+ // Strings
+ {
+ pattern: /"(?:[^"]|"")*"(?!")/,
+ greedy: true
+ },
+ // Дата и время
+ // Date & time
+ {
+ pattern: /'(?:[^'\r\n\\]|\\.)*'/
+ }
+ ],
+ "keyword": [
+ {
+ // RU
+ pattern: /(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,
+ lookbehind: true
+ },
+ {
+ // EN
+ pattern: /\b(?:break|do|each|else|elseif|enddo|endfunction|endif|endprocedure|endtry|except|execute|export|false|for|function|if|in|new|null|procedure|raise|return|then|to|true|try|undefined|val|var|while)\b/i
+ }
+ ],
+ "number": {
+ pattern: /(^(?=\d)|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?/i,
+ lookbehind: true
+ },
+ "operator": [
+ /[<>+\-*/]=?|[%=]/,
+ // RU
+ {
+ pattern: /(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:и|или|не)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,
+ lookbehind: true
+ },
+ // EN
+ {
+ pattern: /\b(?:and|not|or)\b/i
+ }
+ ],
+ "punctuation": /\(\.|\.\)|[()\[\]:;,.]/,
+ "directive": [
+ // Теги препроцессора вида &Клиент, &Сервер, ...
+ // Preprocessor tags of the type &Client, &Server, ...
+ {
+ pattern: /^([ \t]*)&.*/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "important"
+ },
+ // Инструкции препроцессора вида:
+ // #Если Сервер Тогда
+ // ...
+ // #КонецЕсли
+ // Preprocessor instructions of the form:
+ // #If Server Then
+ // ...
+ // #EndIf
+ {
+ pattern: /^([ \t]*)#.*/gm,
+ lookbehind: true,
+ greedy: true,
+ alias: "important"
+ }
+ ]
+ };
+ Prism.languages.oscript = Prism.languages["bsl"];
+ Prism.languages.cfscript = Prism.languages.extend("clike", {
+ "comment": [
+ {
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: true,
+ inside: {
+ "annotation": {
+ pattern: /(?:^|[^.])@[\w\.]+/,
+ alias: "punctuation"
+ }
+ }
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "keyword": /\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\b(?!\s*=)/,
+ "operator": [
+ /\+\+|--|&&|\|\||::|=>|[!=]==|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|:/,
+ /\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\b/
+ ],
+ "scope": {
+ pattern: /\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\b/,
+ alias: "global"
+ },
+ "type": {
+ pattern: /\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\b/,
+ alias: "builtin"
+ }
+ });
+ Prism.languages.insertBefore("cfscript", "keyword", {
+ // This must be declared before keyword because we use "function" inside the lookahead
+ "function-variable": {
+ pattern: /[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
+ alias: "function"
+ }
+ });
+ delete Prism.languages.cfscript["class-name"];
+ Prism.languages.cfc = Prism.languages["cfscript"];
+ Prism.languages.chaiscript = Prism.languages.extend("clike", {
+ "string": {
+ pattern: /(^|[^\\])'(?:[^'\\]|\\[\s\S])*'/,
+ lookbehind: true,
+ greedy: true
+ },
+ "class-name": [
+ {
+ // e.g. class Rectangle { ... }
+ pattern: /(\bclass\s+)\w+/,
+ lookbehind: true
+ },
+ {
+ // e.g. attr Rectangle::height, def Rectangle::area() { ... }
+ pattern: /(\b(?:attr|def)\s+)\w+(?=\s*::)/,
+ lookbehind: true
+ }
+ ],
+ "keyword": /\b(?:attr|auto|break|case|catch|class|continue|def|default|else|finally|for|fun|global|if|return|switch|this|try|var|while)\b/,
+ "number": [
+ Prism.languages.cpp.number,
+ /\b(?:Infinity|NaN)\b/
+ ],
+ "operator": />>=?|<<=?|\|\||&&|:[:=]?|--|\+\+|[=!<>+\-*/%|&^]=?|[?~]|`[^`\r\n]{1,4}`/
+ });
+ Prism.languages.insertBefore("chaiscript", "operator", {
+ "parameter-type": {
+ // e.g. def foo(int x, Vector y) {...}
+ pattern: /([,(]\s*)\w+(?=\s+\w)/,
+ lookbehind: true,
+ alias: "class-name"
+ }
+ });
+ Prism.languages.insertBefore("chaiscript", "string", {
+ "string-interpolation": {
+ pattern: /(^|[^\\])"(?:[^"$\\]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*"/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/,
+ lookbehind: true,
+ inside: {
+ "interpolation-expression": {
+ pattern: /(^\$\{)[\s\S]+(?=\}$)/,
+ lookbehind: true,
+ inside: Prism.languages.chaiscript
+ },
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "punctuation"
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism.languages.cil = {
+ "comment": /\/\/.*/,
+ "string": {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "directive": {
+ pattern: /(^|\W)\.[a-z]+(?=\s)/,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ // Actually an assembly reference
+ "variable": /\[[\w\.]+\]/,
+ "keyword": /\b(?:abstract|ansi|assembly|auto|autochar|beforefieldinit|bool|bstr|byvalstr|catch|char|cil|class|currency|date|decimal|default|enum|error|explicit|extends|extern|famandassem|family|famorassem|final(?:ly)?|float32|float64|hidebysig|u?int(?:8|16|32|64)?|iant|idispatch|implements|import|initonly|instance|interface|iunknown|literal|lpstr|lpstruct|lptstr|lpwstr|managed|method|native(?:Type)?|nested|newslot|object(?:ref)?|pinvokeimpl|private|privatescope|public|reqsecobj|rtspecialname|runtime|sealed|sequential|serializable|specialname|static|string|struct|syschar|tbstr|unicode|unmanagedexp|unsigned|value(?:type)?|variant|virtual|void)\b/,
+ "function": /\b(?:(?:constrained|no|readonly|tail|unaligned|volatile)\.)?(?:conv\.(?:[iu][1248]?|ovf\.[iu][1248]?(?:\.un)?|r\.un|r4|r8)|ldc\.(?:i4(?:\.\d+|\.[mM]1|\.s)?|i8|r4|r8)|ldelem(?:\.[iu][1248]?|\.r[48]|\.ref|a)?|ldind\.(?:[iu][1248]?|r[48]|ref)|stelem\.?(?:i[1248]?|r[48]|ref)?|stind\.(?:i[1248]?|r[48]|ref)?|end(?:fault|filter|finally)|ldarg(?:\.[0-3s]|a(?:\.s)?)?|ldloc(?:\.\d+|\.s)?|sub(?:\.ovf(?:\.un)?)?|mul(?:\.ovf(?:\.un)?)?|add(?:\.ovf(?:\.un)?)?|stloc(?:\.[0-3s])?|refany(?:type|val)|blt(?:\.un)?(?:\.s)?|ble(?:\.un)?(?:\.s)?|bgt(?:\.un)?(?:\.s)?|bge(?:\.un)?(?:\.s)?|unbox(?:\.any)?|init(?:blk|obj)|call(?:i|virt)?|brfalse(?:\.s)?|bne\.un(?:\.s)?|ldloca(?:\.s)?|brzero(?:\.s)?|brtrue(?:\.s)?|brnull(?:\.s)?|brinst(?:\.s)?|starg(?:\.s)?|leave(?:\.s)?|shr(?:\.un)?|rem(?:\.un)?|div(?:\.un)?|clt(?:\.un)?|alignment|castclass|ldvirtftn|beq(?:\.s)?|ckfinite|ldsflda|ldtoken|localloc|mkrefany|rethrow|cgt\.un|arglist|switch|stsfld|sizeof|newobj|newarr|ldsfld|ldnull|ldflda|isinst|throw|stobj|stfld|ldstr|ldobj|ldlen|ldftn|ldfld|cpobj|cpblk|break|br\.s|xor|shl|ret|pop|not|nop|neg|jmp|dup|cgt|ceq|box|and|or|br)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /\b-?(?:0x[0-9a-f]+|\d+)(?:\.[0-9a-f]+)?\b/i,
+ "punctuation": /[{}[\];(),:=]|IL_[0-9A-Za-z]+/
+ };
+ Prism.languages.clojure = {
+ "comment": {
+ pattern: /;.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:[^"\\]|\\.)*"/,
+ greedy: true
+ },
+ "char": /\\\w+/,
+ "symbol": {
+ pattern: /(^|[\s()\[\]{},])::?[\w*+!?'<>=/.-]+/,
+ lookbehind: true
+ },
+ "keyword": {
+ pattern: /(\()(?:-|->|->>|\.|\.\.|\*|\/|\+|<|<=|=|==|>|>=|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|cond|conj|cons|constantly|construct-proxy|contains\?|count|create-ns|create-struct|cycle|dec|declare|def|def-|definline|definterface|defmacro|defmethod|defmulti|defn|defn-|defonce|defproject|defprotocol|defrecord|defstruct|deftype|deref|difference|disj|dissoc|distinct|do|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\?|ensure|eval|every\?|false\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|fn|fnseq|for|frest|gensym|get|get-proxy-class|hash-map|hash-set|identical\?|identity|if|if-let|if-not|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\?|last|lazy-cat|lazy-cons|left|lefts|let|line-seq|list|list\*|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|monitor-enter|name|namespace|neg\?|new|newline|next|nil\?|node|not|not-any\?|not-every\?|not=|ns|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|quote|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|recur|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\?|set|set!|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\?|split-at|split-with|str|string\?|struct|struct-map|subs|subvec|symbol|symbol\?|sync|take|take-nth|take-while|test|throw|time|to-array|to-array-2d|tree-seq|true\?|try|union|up|update-proxy|val|vals|var|var-get|var-set|var\?|vector|vector-zip|vector\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\?|zipmap|zipper)(?=[\s)]|$)/,
+ lookbehind: true
+ },
+ "boolean": /\b(?:false|nil|true)\b/,
+ "number": {
+ pattern: /(^|[^\w$@])(?:\d+(?:[/.]\d+)?(?:e[+-]?\d+)?|0x[a-f0-9]+|[1-9]\d?r[a-z0-9]+)[lmn]?(?![\w$@])/i,
+ lookbehind: true
+ },
+ "function": {
+ pattern: /((?:^|[^'])\()[\w*+!?'<>=/.-]+(?=[\s)]|$)/,
+ lookbehind: true
+ },
+ "operator": /[#@^`~]/,
+ "punctuation": /[{}\[\](),]/
+ };
+ Prism.languages.cmake = {
+ "comment": /#.*/,
+ "string": {
+ pattern: /"(?:[^\\"]|\\.)*"/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,
+ inside: {
+ "punctuation": /\$\{|\}/,
+ "variable": /\w+/
+ }
+ }
+ }
+ },
+ "variable": /\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_NAME|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE))\b/,
+ "property": /\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,
+ "keyword": /\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,
+ "boolean": /\b(?:FALSE|OFF|ON|TRUE)\b/,
+ "namespace": /\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\b/,
+ "operator": /\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\b/,
+ "inserted": {
+ pattern: /\b\w+::\w+\b/,
+ alias: "class-name"
+ },
+ "number": /\b\d+(?:\.\d+)*\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()\b/i,
+ "punctuation": /[()>}]|\$[<{]/
+ };
+ Prism.languages.cobol = {
+ "comment": {
+ pattern: /\*>.*|(^[ \t]*)\*.*/m,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /[xzgn]?(?:"(?:[^\r\n"]|"")*"(?!")|'(?:[^\r\n']|'')*'(?!'))/i,
+ greedy: true
+ },
+ "level": {
+ pattern: /(^[ \t]*)\d+\b/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "number"
+ },
+ "class-name": {
+ // https://github.com/antlr/grammars-v4/blob/42edd5b687d183b5fa679e858a82297bd27141e7/cobol85/Cobol85.g4#L1015
+ pattern: /(\bpic(?:ture)?\s+)(?:(?:[-\w$/,:*+<>]|\.(?!\s|$))(?:\(\d+\))?)+/i,
+ lookbehind: true,
+ inside: {
+ "number": {
+ pattern: /(\()\d+/,
+ lookbehind: true
+ },
+ "punctuation": /[()]/
+ }
+ },
+ "keyword": {
+ pattern: /(^|[^\w-])(?:ABORT|ACCEPT|ACCESS|ADD|ADDRESS|ADVANCING|AFTER|ALIGNED|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALSO|ALTER|ALTERNATE|ANY|ARE|AREA|AREAS|AS|ASCENDING|ASCII|ASSIGN|ASSOCIATED-DATA|ASSOCIATED-DATA-LENGTH|AT|ATTRIBUTE|AUTHOR|AUTO|AUTO-SKIP|BACKGROUND-COLOR|BACKGROUND-COLOUR|BASIS|BEEP|BEFORE|BEGINNING|BELL|BINARY|BIT|BLANK|BLINK|BLOCK|BOTTOM|BOUNDS|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CCSVERSION|CD|CF|CH|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CLASS|CLASS-ID|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|COBOL|CODE|CODE-SET|COL|COLLATING|COLUMN|COM-REG|COMMA|COMMITMENT|COMMON|COMMUNICATION|COMP|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONTROL-POINT|CONTROLS|CONVENTION|CONVERTING|COPY|CORR|CORRESPONDING|COUNT|CRUNCH|CURRENCY|CURSOR|DATA|DATA-BASE|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DBCS|DE|DEBUG-CONTENTS|DEBUG-ITEM|DEBUG-LINE|DEBUG-NAME|DEBUG-SUB-1|DEBUG-SUB-2|DEBUG-SUB-3|DEBUGGING|DECIMAL-POINT|DECLARATIVES|DEFAULT|DEFAULT-DISPLAY|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESTINATION|DETAIL|DFHRESP|DFHVALUE|DISABLE|DISK|DISPLAY|DISPLAY-1|DIVIDE|DIVISION|DONTCARE|DOUBLE|DOWN|DUPLICATES|DYNAMIC|EBCDIC|EGCS|EGI|ELSE|EMI|EMPTY-CHECK|ENABLE|END|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|ENDING|ENTER|ENTRY|ENTRY-PROCEDURE|ENVIRONMENT|EOL|EOP|EOS|ERASE|ERROR|ESCAPE|ESI|EVALUATE|EVENT|EVERY|EXCEPTION|EXCLUSIVE|EXHIBIT|EXIT|EXPORT|EXTEND|EXTENDED|EXTERNAL|FD|FILE|FILE-CONTROL|FILLER|FINAL|FIRST|FOOTING|FOR|FOREGROUND-COLOR|FOREGROUND-COLOUR|FROM|FULL|FUNCTION|FUNCTION-POINTER|FUNCTIONNAME|GENERATE|GIVING|GLOBAL|GO|GOBACK|GRID|GROUP|HEADING|HIGH-VALUE|HIGH-VALUES|HIGHLIGHT|I-O|I-O-CONTROL|ID|IDENTIFICATION|IF|IMPLICIT|IMPORT|IN|INDEX|INDEXED|INDICATE|INITIAL|INITIALIZE|INITIATE|INPUT|INPUT-OUTPUT|INSPECT|INSTALLATION|INTEGER|INTO|INVALID|INVOKE|IS|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANGUAGE|LAST|LB|LD|LEADING|LEFT|LEFTLINE|LENGTH|LENGTH-CHECK|LIBACCESS|LIBPARAMETER|LIBRARY|LIMIT|LIMITS|LINAGE|LINAGE-COUNTER|LINE|LINE-COUNTER|LINES|LINKAGE|LIST|LOCAL|LOCAL-STORAGE|LOCK|LONG-DATE|LONG-TIME|LOW-VALUE|LOW-VALUES|LOWER|LOWLIGHT|MEMORY|MERGE|MESSAGE|MMDDYYYY|MODE|MODULES|MORE-LABELS|MOVE|MULTIPLE|MULTIPLY|NAMED|NATIONAL|NATIONAL-EDITED|NATIVE|NEGATIVE|NETWORK|NEXT|NO|NO-ECHO|NULL|NULLS|NUMBER|NUMERIC|NUMERIC-DATE|NUMERIC-EDITED|NUMERIC-TIME|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OMITTED|ON|OPEN|OPTIONAL|ORDER|ORDERLY|ORGANIZATION|OTHER|OUTPUT|OVERFLOW|OVERLINE|OWN|PACKED-DECIMAL|PADDING|PAGE|PAGE-COUNTER|PASSWORD|PERFORM|PF|PH|PIC|PICTURE|PLUS|POINTER|PORT|POSITION|POSITIVE|PRINTER|PRINTING|PRIVATE|PROCEDURE|PROCEDURE-POINTER|PROCEDURES|PROCEED|PROCESS|PROGRAM|PROGRAM-ID|PROGRAM-LIBRARY|PROMPT|PURGE|QUEUE|QUOTE|QUOTES|RANDOM|RD|READ|READER|REAL|RECEIVE|RECEIVED|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REF|REFERENCE|REFERENCES|RELATIVE|RELEASE|REMAINDER|REMARKS|REMOTE|REMOVAL|REMOVE|RENAMES|REPLACE|REPLACING|REPORT|REPORTING|REPORTS|REQUIRED|RERUN|RESERVE|RESET|RETURN|RETURN-CODE|RETURNING|REVERSE-VIDEO|REVERSED|REWIND|REWRITE|RF|RH|RIGHT|ROUNDED|RUN|SAME|SAVE|SCREEN|SD|SEARCH|SECTION|SECURE|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEPARATE|SEQUENCE|SEQUENTIAL|SET|SHARED|SHAREDBYALL|SHAREDBYRUNUNIT|SHARING|SHIFT-IN|SHIFT-OUT|SHORT-DATE|SIGN|SIZE|SORT|SORT-CONTROL|SORT-CORE-SIZE|SORT-FILE-SIZE|SORT-MERGE|SORT-MESSAGE|SORT-MODE-SIZE|SORT-RETURN|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|STANDARD|STANDARD-1|STANDARD-2|START|STATUS|STOP|STRING|SUB-QUEUE-1|SUB-QUEUE-2|SUB-QUEUE-3|SUBTRACT|SUM|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|TABLE|TALLY|TALLYING|TAPE|TASK|TERMINAL|TERMINATE|TEST|TEXT|THEN|THREAD|THREAD-LOCAL|THROUGH|THRU|TIME|TIMER|TIMES|TITLE|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRAILING|TRUNCATED|TYPE|TYPEDEF|UNDERLINE|UNIT|UNSTRING|UNTIL|UP|UPON|USAGE|USE|USING|VALUE|VALUES|VARYING|VIRTUAL|WAIT|WHEN|WHEN-COMPILED|WITH|WORDS|WORKING-STORAGE|WRITE|YEAR|YYYYDDD|YYYYMMDD|ZERO-FILL|ZEROES|ZEROS)(?![\w-])/i,
+ lookbehind: true
+ },
+ "boolean": {
+ pattern: /(^|[^\w-])(?:false|true)(?![\w-])/i,
+ lookbehind: true
+ },
+ "number": {
+ pattern: /(^|[^\w-])(?:[+-]?(?:(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:e[+-]?\d+)?|zero))(?![\w-])/i,
+ lookbehind: true
+ },
+ "operator": [
+ /<>|[<>]=?|[=+*/&]/,
+ {
+ pattern: /(^|[^\w-])(?:-|and|equal|greater|less|not|or|than)(?![\w-])/i,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /[.:,()]/
+ };
+ (function(Prism2) {
+ var comment = /#(?!\{).+/;
+ var interpolation = {
+ pattern: /#\{[^}]+\}/,
+ alias: "variable"
+ };
+ Prism2.languages.coffeescript = Prism2.languages.extend("javascript", {
+ "comment": comment,
+ "string": [
+ // Strings are multiline
+ {
+ pattern: /'(?:\\[\s\S]|[^\\'])*'/,
+ greedy: true
+ },
+ {
+ // Strings are multiline
+ pattern: /"(?:\\[\s\S]|[^\\"])*"/,
+ greedy: true,
+ inside: {
+ "interpolation": interpolation
+ }
+ }
+ ],
+ "keyword": /\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,
+ "class-member": {
+ pattern: /@(?!\d)\w+/,
+ alias: "variable"
+ }
+ });
+ Prism2.languages.insertBefore("coffeescript", "comment", {
+ "multiline-comment": {
+ pattern: /###[\s\S]+?###/,
+ alias: "comment"
+ },
+ // Block regexp can contain comments and interpolation
+ "block-regex": {
+ pattern: /\/{3}[\s\S]*?\/{3}/,
+ alias: "regex",
+ inside: {
+ "comment": comment,
+ "interpolation": interpolation
+ }
+ }
+ });
+ Prism2.languages.insertBefore("coffeescript", "string", {
+ "inline-javascript": {
+ pattern: /`(?:\\[\s\S]|[^\\`])*`/,
+ inside: {
+ "delimiter": {
+ pattern: /^`|`$/,
+ alias: "punctuation"
+ },
+ "script": {
+ pattern: /[\s\S]+/,
+ alias: "language-javascript",
+ inside: Prism2.languages.javascript
+ }
+ }
+ },
+ // Block strings
+ "multiline-string": [
+ {
+ pattern: /'''[\s\S]*?'''/,
+ greedy: true,
+ alias: "string"
+ },
+ {
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true,
+ alias: "string",
+ inside: {
+ interpolation
+ }
+ }
+ ]
+ });
+ Prism2.languages.insertBefore("coffeescript", "keyword", {
+ // Object property
+ "property": /(?!\d)\w+(?=\s*:(?!:))/
+ });
+ delete Prism2.languages.coffeescript["template-string"];
+ Prism2.languages.coffee = Prism2.languages.coffeescript;
+ })(Prism);
+ Prism.languages.concurnas = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\/\/.*)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "langext": {
+ pattern: /\b\w+\s*\|\|[\s\S]+?\|\|/,
+ greedy: true,
+ inside: {
+ "class-name": /^\w+/,
+ "string": {
+ pattern: /(^\s*\|\|)[\s\S]+(?=\|\|$)/,
+ lookbehind: true
+ },
+ "punctuation": /\|\|/
+ }
+ },
+ "function": {
+ pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:abstract|actor|also|annotation|assert|async|await|bool|boolean|break|byte|case|catch|changed|char|class|closed|constant|continue|def|default|del|double|elif|else|enum|every|extends|false|finally|float|for|from|global|gpudef|gpukernel|if|import|in|init|inject|int|lambda|local|long|loop|match|new|nodefault|null|of|onchange|open|out|override|package|parfor|parforsync|post|pre|private|protected|provide|provider|public|return|shared|short|single|size_t|sizeof|super|sync|this|throw|trait|trans|transient|true|try|typedef|unchecked|using|val|var|void|while|with)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /\b0b[01][01_]*L?\b|\b0x(?:[\da-f_]*\.)?[\da-f_p+-]+\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfls]?/i,
+ "punctuation": /[{}[\];(),.:]/,
+ "operator": /<==|>==|=>|->|<-|<>|&==|&<>|\?:?|\.\?|\+\+|--|[-+*/=<>]=?|[!^~]|\b(?:and|as|band|bor|bxor|comp|is|isnot|mod|or)\b=?/,
+ "annotation": {
+ pattern: /@(?:\w+:)?(?:\w+|\[[^\]]+\])?/,
+ alias: "builtin"
+ }
+ };
+ Prism.languages.insertBefore("concurnas", "langext", {
+ "regex-literal": {
+ pattern: /\br("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+ lookbehind: true,
+ inside: Prism.languages.concurnas
+ },
+ "regex": /[\s\S]+/
+ }
+ },
+ "string-literal": {
+ pattern: /(?:\B|\bs)("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+ lookbehind: true,
+ inside: Prism.languages.concurnas
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism.languages.conc = Prism.languages.concurnas;
+ (function(Prism2) {
+ function value(source) {
+ return RegExp(/([ \t])/.source + "(?:" + source + ")" + /(?=[\s;]|$)/.source, "i");
+ }
+ Prism2.languages.csp = {
+ "directive": {
+ pattern: /(^|[\s;])(?:base-uri|block-all-mixed-content|(?:child|connect|default|font|frame|img|manifest|media|object|prefetch|script|style|worker)-src|disown-opener|form-action|frame-(?:ancestors|options)|input-protection(?:-(?:clip|selectors))?|navigate-to|plugin-types|policy-uri|referrer|reflected-xss|report-(?:to|uri)|require-sri-for|sandbox|(?:script|style)-src-(?:attr|elem)|upgrade-insecure-requests)(?=[\s;]|$)/i,
+ lookbehind: true,
+ alias: "property"
+ },
+ "scheme": {
+ pattern: value(/[a-z][a-z0-9.+-]*:/.source),
+ lookbehind: true
+ },
+ "none": {
+ pattern: value(/'none'/.source),
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "nonce": {
+ pattern: value(/'nonce-[-+/\w=]+'/.source),
+ lookbehind: true,
+ alias: "number"
+ },
+ "hash": {
+ pattern: value(/'sha(?:256|384|512)-[-+/\w=]+'/.source),
+ lookbehind: true,
+ alias: "number"
+ },
+ "host": {
+ pattern: value(
+ /[a-z][a-z0-9.+-]*:\/\/[^\s;,']*/.source + "|" + /\*[^\s;,']*/.source + "|" + /[a-z0-9-]+(?:\.[a-z0-9-]+)+(?::[\d*]+)?(?:\/[^\s;,']*)?/.source
+ ),
+ lookbehind: true,
+ alias: "url",
+ inside: {
+ "important": /\*/
+ }
+ },
+ "keyword": [
+ {
+ pattern: value(/'unsafe-[a-z-]+'/.source),
+ lookbehind: true,
+ alias: "unsafe"
+ },
+ {
+ pattern: value(/'[a-z-]+'/.source),
+ lookbehind: true,
+ alias: "safe"
+ }
+ ],
+ "punctuation": /;/
+ };
+ })(Prism);
+ (function(Prism2) {
+ var single_token_suffix = /(?:(?!\s)[\d$+<=a-zA-Z\x80-\uFFFF])+/.source;
+ var multi_token_infix = /[^{}@#]+/.source;
+ var multi_token_suffix = /\{[^}#@]*\}/.source;
+ var multi_token = multi_token_infix + multi_token_suffix;
+ var timer_units = /(?:h|hours|hrs|m|min|minutes)/.source;
+ var amount_group_impl = {
+ pattern: /\{[^{}]*\}/,
+ inside: {
+ "amount": {
+ pattern: /([\{|])[^{}|*%]+/,
+ lookbehind: true,
+ alias: "number"
+ },
+ "unit": {
+ pattern: /(%)[^}]+/,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "servings-scaler": {
+ pattern: /\*/,
+ alias: "operator"
+ },
+ "servings-alternative-separator": {
+ pattern: /\|/,
+ alias: "operator"
+ },
+ "unit-separator": {
+ pattern: /(?:%|(\*)%)/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "punctuation": /[{}]/
+ }
+ };
+ Prism2.languages.cooklang = {
+ "comment": {
+ // [- comment -]
+ // -- comment
+ pattern: /\[-[\s\S]*?-\]|--.*/,
+ greedy: true
+ },
+ "meta": {
+ // >> key: value
+ pattern: />>.*:.*/,
+ inside: {
+ "property": {
+ // key:
+ pattern: /(>>\s*)[^\s:](?:[^:]*[^\s:])?/,
+ lookbehind: true
+ }
+ }
+ },
+ "cookware-group": {
+ // #...{...}, #...
+ pattern: new RegExp(
+ "#(?:" + multi_token + "|" + single_token_suffix + ")"
+ ),
+ inside: {
+ "cookware": {
+ pattern: new RegExp(
+ "(^#)(?:" + multi_token_infix + ")"
+ ),
+ lookbehind: true,
+ alias: "variable"
+ },
+ "cookware-keyword": {
+ pattern: /^#/,
+ alias: "keyword"
+ },
+ "quantity-group": {
+ pattern: new RegExp(/\{[^{}@#]*\}/),
+ inside: {
+ "quantity": {
+ pattern: new RegExp(/(^\{)/.source + multi_token_infix),
+ lookbehind: true,
+ alias: "number"
+ },
+ "punctuation": /[{}]/
+ }
+ }
+ }
+ },
+ "ingredient-group": {
+ // @...{...}, @...
+ pattern: new RegExp("@(?:" + multi_token + "|" + single_token_suffix + ")"),
+ inside: {
+ "ingredient": {
+ pattern: new RegExp("(^@)(?:" + multi_token_infix + ")"),
+ lookbehind: true,
+ alias: "variable"
+ },
+ "ingredient-keyword": {
+ pattern: /^@/,
+ alias: "keyword"
+ },
+ "amount-group": amount_group_impl
+ }
+ },
+ "timer-group": {
+ // ~timer{...}
+ // eslint-disable-next-line regexp/sort-alternatives
+ pattern: /~(?!\s)[^@#~{}]*\{[^{}]*\}/,
+ inside: {
+ "timer": {
+ pattern: /(^~)[^{]+/,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "duration-group": {
+ // {...}
+ pattern: /\{[^{}]*\}/,
+ inside: {
+ "punctuation": /[{}]/,
+ "unit": {
+ pattern: new RegExp(/(%\s*)/.source + timer_units + /\b/.source),
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "operator": /%/,
+ "duration": {
+ pattern: /\d+/,
+ alias: "number"
+ }
+ }
+ },
+ "timer-keyword": {
+ pattern: /^~/,
+ alias: "keyword"
+ }
+ }
+ }
+ };
+ })(Prism);
+ (function(Prism2) {
+ var commentSource = /\(\*(?:[^(*]|\((?!\*)|\*(?!\))|<self>)*\*\)/.source;
+ for (var i = 0; i < 2; i++) {
+ commentSource = commentSource.replace(/<self>/g, function() {
+ return commentSource;
+ });
+ }
+ commentSource = commentSource.replace(/<self>/g, "[]");
+ Prism2.languages.coq = {
+ "comment": RegExp(commentSource),
+ "string": {
+ pattern: /"(?:[^"]|"")*"(?!")/,
+ greedy: true
+ },
+ "attribute": [
+ {
+ pattern: RegExp(
+ /#\[(?:[^\[\]("]|"(?:[^"]|"")*"(?!")|\((?!\*)|<comment>)*\]/.source.replace(/<comment>/g, function() {
+ return commentSource;
+ })
+ ),
+ greedy: true,
+ alias: "attr-name",
+ inside: {
+ "comment": RegExp(commentSource),
+ "string": {
+ pattern: /"(?:[^"]|"")*"(?!")/,
+ greedy: true
+ },
+ "operator": /=/,
+ "punctuation": /^#\[|\]$|[,()]/
+ }
+ },
+ {
+ pattern: /\b(?:Cumulative|Global|Local|Monomorphic|NonCumulative|Polymorphic|Private|Program)\b/,
+ alias: "attr-name"
+ }
+ ],
+ "keyword": /\b(?:Abort|About|Add|Admit|Admitted|All|Arguments|As|Assumptions|Axiom|Axioms|Back|BackTo|Backtrace|BinOp|BinOpSpec|BinRel|Bind|Blacklist|Canonical|Case|Cd|Check|Class|Classes|Close|CoFixpoint|CoInductive|Coercion|Coercions|Collection|Combined|Compute|Conjecture|Conjectures|Constant|Constants|Constraint|Constructors|Context|Corollary|Create|CstOp|Custom|Cut|Debug|Declare|Defined|Definition|Delimit|Dependencies|Dependent|Derive|Diffs|Drop|Elimination|End|Entry|Equality|Eval|Example|Existential|Existentials|Existing|Export|Extern|Extraction|Fact|Fail|Field|File|Firstorder|Fixpoint|Flags|Focus|From|Funclass|Function|Functional|GC|Generalizable|Goal|Grab|Grammar|Graph|Guarded|Haskell|Heap|Hide|Hint|HintDb|Hints|Hypotheses|Hypothesis|IF|Identity|Immediate|Implicit|Implicits|Import|Include|Induction|Inductive|Infix|Info|Initial|InjTyp|Inline|Inspect|Instance|Instances|Intro|Intros|Inversion|Inversion_clear|JSON|Language|Left|Lemma|Let|Lia|Libraries|Library|Load|LoadPath|Locate|Ltac|Ltac2|ML|Match|Method|Minimality|Module|Modules|Morphism|Next|NoInline|Notation|Number|OCaml|Obligation|Obligations|Opaque|Open|Optimize|Parameter|Parameters|Parametric|Path|Paths|Prenex|Preterm|Primitive|Print|Profile|Projections|Proof|Prop|PropBinOp|PropOp|PropUOp|Property|Proposition|Pwd|Qed|Quit|Rec|Record|Recursive|Redirect|Reduction|Register|Relation|Remark|Remove|Require|Reserved|Reset|Resolve|Restart|Rewrite|Right|Ring|Rings|SProp|Saturate|Save|Scheme|Scope|Scopes|Search|SearchHead|SearchPattern|SearchRewrite|Section|Separate|Set|Setoid|Show|Signatures|Solve|Solver|Sort|Sortclass|Sorted|Spec|Step|Strategies|Strategy|String|Structure|SubClass|Subgraph|SuchThat|Tactic|Term|TestCompile|Theorem|Time|Timeout|To|Transparent|Type|Typeclasses|Types|Typing|UnOp|UnOpSpec|Undelimit|Undo|Unfocus|Unfocused|Unfold|Universe|Universes|Unshelve|Variable|Variables|Variant|Verbose|View|Visibility|Zify|_|apply|as|at|by|cofix|else|end|exists|exists2|fix|for|forall|fun|if|in|let|match|measure|move|removed|return|struct|then|using|wf|where|with)\b/,
+ "number": /\b(?:0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]+)?(?:p[+-]?\d[\d_]*)?|\d[\d_]*(?:\.[\d_]+)?(?:e[+-]?\d[\d_]*)?)\b/i,
+ "punct": {
+ pattern: /@\{|\{\||\[=|:>/,
+ alias: "punctuation"
+ },
+ "operator": /\/\\|\\\/|\.{2,3}|:{1,2}=|\*\*|[-=]>|<(?:->?|[+:=>]|<:)|>(?:=|->)|\|[-|]?|[-!%&*+/<=>?@^~']/,
+ "punctuation": /\.\(|`\(|@\{|`\{|\{\||\[=|:>|[:.,;(){}\[\]]/
+ };
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.ruby = Prism2.languages.extend("clike", {
+ "comment": {
+ pattern: /#.*|^=begin\s[\s\S]*?^=end/m,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /[.\\]/
+ }
+ },
+ "keyword": /\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,
+ "operator": /\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,
+ "punctuation": /[(){}[\].,;]/
+ });
+ Prism2.languages.insertBefore("ruby", "operator", {
+ "double-colon": {
+ pattern: /::/,
+ alias: "punctuation"
+ }
+ });
+ var interpolation = {
+ pattern: /((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,
+ lookbehind: true,
+ inside: {
+ "content": {
+ pattern: /^(#\{)[\s\S]+(?=\}$)/,
+ lookbehind: true,
+ inside: Prism2.languages.ruby
+ },
+ "delimiter": {
+ pattern: /^#\{|\}$/,
+ alias: "punctuation"
+ }
+ }
+ };
+ delete Prism2.languages.ruby.function;
+ var percentExpression = "(?:" + [
+ /([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
+ /\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,
+ /\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,
+ /\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,
+ /<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source
+ ].join("|") + ")";
+ var symbolName = /(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;
+ Prism2.languages.insertBefore("ruby", "keyword", {
+ "regex-literal": [
+ {
+ pattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source),
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "regex": /[\s\S]+/
+ }
+ },
+ {
+ pattern: /(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "regex": /[\s\S]+/
+ }
+ }
+ ],
+ "variable": /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,
+ "symbol": [
+ {
+ pattern: RegExp(/(^|[^:]):/.source + symbolName),
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: RegExp(/([\r\n{(,][ \t]*)/.source + symbolName + /(?=:(?!:))/.source),
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "method-definition": {
+ pattern: /(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,
+ lookbehind: true,
+ inside: {
+ "function": /\b\w+$/,
+ "keyword": /^self\b/,
+ "class-name": /^\w+/,
+ "punctuation": /\./
+ }
+ }
+ });
+ Prism2.languages.insertBefore("ruby", "string", {
+ "string-literal": [
+ {
+ pattern: RegExp(/%[qQiIwWs]?/.source + percentExpression),
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "string": /[\s\S]+/
+ }
+ },
+ {
+ pattern: /("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "string": /[\s\S]+/
+ }
+ },
+ {
+ pattern: /<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
+ alias: "heredoc-string",
+ greedy: true,
+ inside: {
+ "delimiter": {
+ pattern: /^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,
+ inside: {
+ "symbol": /\b\w+/,
+ "punctuation": /^<<[-~]?/
+ }
+ },
+ "interpolation": interpolation,
+ "string": /[\s\S]+/
+ }
+ },
+ {
+ pattern: /<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
+ alias: "heredoc-string",
+ greedy: true,
+ inside: {
+ "delimiter": {
+ pattern: /^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,
+ inside: {
+ "symbol": /\b\w+/,
+ "punctuation": /^<<[-~]?'|'$/
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ ],
+ "command-literal": [
+ {
+ pattern: RegExp(/%x/.source + percentExpression),
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "command": {
+ pattern: /[\s\S]+/,
+ alias: "string"
+ }
+ }
+ },
+ {
+ pattern: /`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "command": {
+ pattern: /[\s\S]+/,
+ alias: "string"
+ }
+ }
+ }
+ ]
+ });
+ delete Prism2.languages.ruby.string;
+ Prism2.languages.insertBefore("ruby", "number", {
+ "builtin": /\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,
+ "constant": /\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/
+ });
+ Prism2.languages.rb = Prism2.languages.ruby;
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.crystal = Prism2.languages.extend("ruby", {
+ "keyword": [
+ /\b(?:__DIR__|__END_LINE__|__FILE__|__LINE__|abstract|alias|annotation|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|ifdef|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|ptr|require|rescue|return|select|self|sizeof|struct|super|then|type|typeof|undef|uninitialized|union|unless|until|when|while|with|yield)\b/,
+ {
+ pattern: /(\.\s*)(?:is_a|responds_to)\?/,
+ lookbehind: true
+ }
+ ],
+ "number": /\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\da-fA-F_]*[\da-fA-F]|(?:\d(?:[\d_]*\d)?)(?:\.[\d_]*\d)?(?:[eE][+-]?[\d_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/,
+ "operator": [
+ /->/,
+ Prism2.languages.ruby.operator
+ ],
+ "punctuation": /[(){}[\].,;\\]/
+ });
+ Prism2.languages.insertBefore("crystal", "string-literal", {
+ "attribute": {
+ pattern: /@\[.*?\]/,
+ inside: {
+ "delimiter": {
+ pattern: /^@\[|\]$/,
+ alias: "punctuation"
+ },
+ "attribute": {
+ pattern: /^(\s*)\w+/,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ "args": {
+ pattern: /\S(?:[\s\S]*\S)?/,
+ inside: Prism2.languages.crystal
+ }
+ }
+ },
+ "expansion": {
+ pattern: /\{(?:\{.*?\}|%.*?%)\}/,
+ inside: {
+ "content": {
+ pattern: /^(\{.)[\s\S]+(?=.\}$)/,
+ lookbehind: true,
+ inside: Prism2.languages.crystal
+ },
+ "delimiter": {
+ pattern: /^\{[\{%]|[\}%]\}$/,
+ alias: "operator"
+ }
+ }
+ },
+ "char": {
+ pattern: /'(?:[^\\\r\n]{1,2}|\\(?:.|u(?:[A-Fa-f0-9]{1,4}|\{[A-Fa-f0-9]{1,6}\})))'/,
+ greedy: true
+ }
+ });
+ })(Prism);
+ (function(Prism2) {
+ var string = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;
+ var selectorInside;
+ Prism2.languages.css.selector = {
+ pattern: Prism2.languages.css.selector.pattern,
+ lookbehind: true,
+ inside: selectorInside = {
+ "pseudo-element": /:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,
+ "pseudo-class": /:[-\w]+/,
+ "class": /\.[-\w]+/,
+ "id": /#[-\w]+/,
+ "attribute": {
+ pattern: RegExp(`\\[(?:[^[\\]"']|` + string.source + ")*\\]"),
+ greedy: true,
+ inside: {
+ "punctuation": /^\[|\]$/,
+ "case-sensitivity": {
+ pattern: /(\s)[si]$/i,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "namespace": {
+ pattern: /^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\|$/
+ }
+ },
+ "attr-name": {
+ pattern: /^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,
+ lookbehind: true
+ },
+ "attr-value": [
+ string,
+ {
+ pattern: /(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,
+ lookbehind: true
+ }
+ ],
+ "operator": /[|~*^$]?=/
+ }
+ },
+ "n-th": [
+ {
+ pattern: /(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,
+ lookbehind: true,
+ inside: {
+ "number": /[\dn]+/,
+ "operator": /[+-]/
+ }
+ },
+ {
+ pattern: /(\(\s*)(?:even|odd)(?=\s*\))/i,
+ lookbehind: true
+ }
+ ],
+ "combinator": />|\+|~|\|\|/,
+ // the `tag` token has been existed and removed.
+ // because we can't find a perfect tokenize to match it.
+ // if you want to add it, please read https://github.com/PrismJS/prism/pull/2373 first.
+ "punctuation": /[(),]/
+ }
+ };
+ Prism2.languages.css["atrule"].inside["selector-function-argument"].inside = selectorInside;
+ Prism2.languages.insertBefore("css", "property", {
+ "variable": {
+ pattern: /(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,
+ lookbehind: true
+ }
+ });
+ var unit = {
+ pattern: /(\b\d+)(?:%|[a-z]+(?![\w-]))/,
+ lookbehind: true
+ };
+ var number = {
+ pattern: /(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,
+ lookbehind: true
+ };
+ Prism2.languages.insertBefore("css", "function", {
+ "operator": {
+ pattern: /(\s)[+\-*\/](?=\s)/,
+ lookbehind: true
+ },
+ // CAREFUL!
+ // Previewers and Inline color use hexcode and color.
+ "hexcode": {
+ pattern: /\B#[\da-f]{3,8}\b/i,
+ alias: "color"
+ },
+ "color": [
+ {
+ pattern: /(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,
+ lookbehind: true
+ },
+ {
+ pattern: /\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,
+ inside: {
+ "unit": unit,
+ "number": number,
+ "function": /[\w-]+(?=\()/,
+ "punctuation": /[(),]/
+ }
+ }
+ ],
+ // it's important that there is no boundary assertion after the hex digits
+ "entity": /\\[\da-f]{1,8}/i,
+ "unit": unit,
+ "number": number
+ });
+ })(Prism);
+ Prism.languages.csv = {
+ "value": /[^\r\n,"]+|"(?:[^"]|"")*"(?!")/,
+ "punctuation": /,/
+ };
+ (function(Prism2) {
+ var stringEscape = /\\(?:(?!\2)|\2(?:[^()\r\n]|\([^()]*\)))/.source;
+ var stringTypes = /"""(?:[^\\"]|"(?!""\2)|<esc>)*"""/.source + // eslint-disable-next-line regexp/strict
+ "|" + /'''(?:[^\\']|'(?!''\2)|<esc>)*'''/.source + // eslint-disable-next-line regexp/strict
+ "|" + /"(?:[^\\\r\n"]|"(?!\2)|<esc>)*"/.source + // eslint-disable-next-line regexp/strict
+ "|" + /'(?:[^\\\r\n']|'(?!\2)|<esc>)*'/.source;
+ var stringLiteral = "(?:" + stringTypes.replace(/<esc>/g, stringEscape) + ")";
+ Prism2.languages.cue = {
+ "comment": {
+ pattern: /\/\/.*/,
+ greedy: true
+ },
+ "string-literal": {
+ // eslint-disable-next-line regexp/strict
+ pattern: RegExp(/(^|[^#"'\\])(#*)/.source + stringLiteral + /(?!["'])\2/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ // I'm using dirty hack here. We have to know the number hashes at the start of the string somehow,
+ // but we can't look back. So instead, we will use a lookahead, go to the end of the string, and
+ // capture the hashes at the end of the string.
+ "escape": {
+ pattern: /(?=[\s\S]*["'](#*)$)\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\d{2,3}|[^(])/,
+ greedy: true,
+ alias: "string"
+ },
+ "interpolation": {
+ pattern: /(?=[\s\S]*["'](#*)$)\\\1\([^()]*\)/,
+ greedy: true,
+ inside: {
+ "punctuation": /^\\#*\(|\)$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "keyword": {
+ pattern: /(^|[^\w$])(?:for|if|import|in|let|null|package)(?![\w$])/,
+ lookbehind: true
+ },
+ "boolean": {
+ pattern: /(^|[^\w$])(?:false|true)(?![\w$])/,
+ lookbehind: true
+ },
+ "builtin": {
+ pattern: /(^|[^\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\w$])/,
+ lookbehind: true
+ },
+ "attribute": {
+ pattern: /@[\w$]+(?=\s*\()/,
+ alias: "function"
+ },
+ "function": {
+ pattern: /(^|[^\w$])[a-z_$][\w$]*(?=\s*\()/i,
+ lookbehind: true
+ },
+ "number": {
+ pattern: /(^|[^\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[eE][+-]?\d+(?:_\d+)*)?(?:[KMGTP]i?)?)(?![\w$])/,
+ lookbehind: true
+ },
+ "operator": /\.{3}|_\|_|&&?|\|\|?|[=!]~|[<>=!]=?|[+\-*/?]/,
+ "punctuation": /[()[\]{},.:]/
+ };
+ Prism2.languages.cue["string-literal"].inside.interpolation.inside.expression.inside = Prism2.languages.cue;
+ })(Prism);
+ Prism.languages.cypher = {
+ // https://neo4j.com/docs/cypher-manual/current/syntax/comments/
+ "comment": /\/\/.*/,
+ "string": {
+ pattern: /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(:\s*)(?:\w+|`(?:[^`\\\r\n])*`)(?=\s*[{):])/,
+ lookbehind: true,
+ greedy: true
+ },
+ "relationship": {
+ pattern: /(-\[\s*(?:\w+\s*|`(?:[^`\\\r\n])*`\s*)?:\s*|\|\s*:\s*)(?:\w+|`(?:[^`\\\r\n])*`)/,
+ lookbehind: true,
+ greedy: true,
+ alias: "property"
+ },
+ "identifier": {
+ pattern: /`(?:[^`\\\r\n])*`/,
+ greedy: true
+ },
+ "variable": /\$\w+/,
+ // https://neo4j.com/docs/cypher-manual/current/syntax/reserved/
+ "keyword": /\b(?:ADD|ALL|AND|AS|ASC|ASCENDING|ASSERT|BY|CALL|CASE|COMMIT|CONSTRAINT|CONTAINS|CREATE|CSV|DELETE|DESC|DESCENDING|DETACH|DISTINCT|DO|DROP|ELSE|END|ENDS|EXISTS|FOR|FOREACH|IN|INDEX|IS|JOIN|KEY|LIMIT|LOAD|MANDATORY|MATCH|MERGE|NODE|NOT|OF|ON|OPTIONAL|OR|ORDER(?=\s+BY)|PERIODIC|REMOVE|REQUIRE|RETURN|SCALAR|SCAN|SET|SKIP|START|STARTS|THEN|UNION|UNIQUE|UNWIND|USING|WHEN|WHERE|WITH|XOR|YIELD)\b/i,
+ "function": /\b\w+\b(?=\s*\()/,
+ "boolean": /\b(?:false|null|true)\b/i,
+ "number": /\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)\b/,
+ // https://neo4j.com/docs/cypher-manual/current/syntax/operators/
+ "operator": /:|<--?|--?>?|<>|=~?|[<>]=?|[+*/%^|]|\.\.\.?/,
+ "punctuation": /[()[\]{},;.]/
+ };
+ Prism.languages.d = Prism.languages.extend("clike", {
+ "comment": [
+ {
+ // Shebang
+ pattern: /^\s*#!.+/,
+ greedy: true
+ },
+ {
+ pattern: RegExp(/(^|[^\\])/.source + "(?:" + [
+ // /+ comment +/
+ // Allow one level of nesting
+ /\/\+(?:\/\+(?:[^+]|\+(?!\/))*\+\/|(?!\/\+)[\s\S])*?\+\//.source,
+ // // comment
+ /\/\/.*/.source,
+ // /* comment */
+ /\/\*[\s\S]*?\*\//.source
+ ].join("|") + ")"),
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": [
+ {
+ pattern: RegExp([
+ // r"", x""
+ /\b[rx]"(?:\\[\s\S]|[^\\"])*"[cwd]?/.source,
+ // q"[]", q"()", q"<>", q"{}"
+ /\bq"(?:\[[\s\S]*?\]|\([\s\S]*?\)|<[\s\S]*?>|\{[\s\S]*?\})"/.source,
+ // q"IDENT
+ // ...
+ // IDENT"
+ /\bq"((?!\d)\w+)$[\s\S]*?^\1"/.source,
+ // q"//", q"||", etc.
+ // eslint-disable-next-line regexp/strict
+ /\bq"(.)[\s\S]*?\2"/.source,
+ // eslint-disable-next-line regexp/strict
+ /(["`])(?:\\[\s\S]|(?!\3)[^\\])*\3[cwd]?/.source
+ ].join("|"), "m"),
+ greedy: true
+ },
+ {
+ pattern: /\bq\{(?:\{[^{}]*\}|[^{}])*\}/,
+ greedy: true,
+ alias: "token-string"
+ }
+ ],
+ // In order: $, keywords and special tokens, globally defined symbols
+ "keyword": /\$|\b(?:__(?:(?:DATE|EOF|FILE|FUNCTION|LINE|MODULE|PRETTY_FUNCTION|TIMESTAMP|TIME|VENDOR|VERSION)__|gshared|parameters|traits|vector)|abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|dstring|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|ptrdiff_t|public|pure|real|ref|return|scope|shared|short|size_t|static|string|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|wstring)\b/,
+ "number": [
+ // The lookbehind and the negative look-ahead try to prevent bad highlighting of the .. operator
+ // Hexadecimal numbers must be handled separately to avoid problems with exponent "e"
+ /\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]{0,4}/i,
+ {
+ pattern: /((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]{0,4}/i,
+ lookbehind: true
+ }
+ ],
+ "operator": /\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/
+ });
+ Prism.languages.insertBefore("d", "string", {
+ // Characters
+ // 'a', '\\', '\n', '\xFF', '\377', '\uFFFF', '\U0010FFFF', '\quot'
+ "char": /'(?:\\(?:\W|\w+)|[^\\])'/
+ });
+ Prism.languages.insertBefore("d", "keyword", {
+ "property": /\B@\w*/
+ });
+ Prism.languages.insertBefore("d", "function", {
+ "register": {
+ // Iasm registers
+ pattern: /\b(?:[ABCD][LHX]|E?(?:BP|DI|SI|SP)|[BS]PL|[ECSDGF]S|CR[0234]|[DS]IL|DR[012367]|E[ABCD]X|X?MM[0-7]|R(?:1[0-5]|[89])[BWD]?|R[ABCD]X|R[BS]P|R[DS]I|TR[3-7]|XMM(?:1[0-5]|[89])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/,
+ alias: "variable"
+ }
+ });
+ (function(Prism2) {
+ var keywords = [
+ /\b(?:async|sync|yield)\*/,
+ /\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/
+ ];
+ var packagePrefix = /(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
+ var className = {
+ pattern: RegExp(packagePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
+ lookbehind: true,
+ inside: {
+ "namespace": {
+ pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
+ inside: {
+ "punctuation": /\./
+ }
+ }
+ }
+ };
+ Prism2.languages.dart = Prism2.languages.extend("clike", {
+ "class-name": [
+ className,
+ {
+ // variables and parameters
+ // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)
+ pattern: RegExp(packagePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),
+ lookbehind: true,
+ inside: className.inside
+ }
+ ],
+ "keyword": keywords,
+ "operator": /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/
+ });
+ Prism2.languages.insertBefore("dart", "string", {
+ "string-literal": {
+ pattern: /r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /^\$\{?|\}$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: Prism2.languages.dart
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "string": void 0
+ });
+ Prism2.languages.insertBefore("dart", "class-name", {
+ "metadata": {
+ pattern: /@\w+/,
+ alias: "function"
+ }
+ });
+ Prism2.languages.insertBefore("dart", "class-name", {
+ "generics": {
+ pattern: /<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,
+ inside: {
+ "class-name": className,
+ "keyword": keywords,
+ "punctuation": /[<>(),.:]/,
+ "operator": /[?&|]/
+ }
+ }
+ });
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.dataweave = {
+ "url": /\b[A-Za-z]+:\/\/[\w/:.?=&-]+|\burn:[\w:.?=&-]+/,
+ "property": {
+ pattern: /(?:\b\w+#)?(?:"(?:\\.|[^\\"\r\n])*"|\b\w+)(?=\s*[:@])/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,
+ greedy: true
+ },
+ "mime-type": /\b(?:application|audio|image|multipart|text|video)\/[\w+-]+/,
+ "date": {
+ pattern: /\|[\w:+-]+\|/,
+ greedy: true
+ },
+ "comment": [
+ {
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "regex": {
+ pattern: /\/(?:[^\\\/\r\n]|\\[^\r\n])+\//,
+ greedy: true
+ },
+ "keyword": /\b(?:and|as|at|case|do|else|fun|if|input|is|match|not|ns|null|or|output|type|unless|update|using|var)\b/,
+ "function": /\b[A-Z_]\w*(?=\s*\()/i,
+ "number": /-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,
+ "punctuation": /[{}[\];(),.:@]/,
+ "operator": /<<|>>|->|[<>~=]=?|!=|--?-?|\+\+?|!|\?/,
+ "boolean": /\b(?:false|true)\b/
+ };
+ })(Prism);
+ Prism.languages.dax = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/).*)/,
+ lookbehind: true
+ },
+ "data-field": {
+ pattern: /'(?:[^']|'')*'(?!')(?:\[[ \w\xA0-\uFFFF]+\])?|\w+\[[ \w\xA0-\uFFFF]+\]/,
+ alias: "symbol"
+ },
+ "measure": {
+ pattern: /\[[ \w\xA0-\uFFFF]+\]/,
+ alias: "constant"
+ },
+ "string": {
+ pattern: /"(?:[^"]|"")*"(?!")/,
+ greedy: true
+ },
+ "function": /\b(?:ABS|ACOS|ACOSH|ACOT|ACOTH|ADDCOLUMNS|ADDMISSINGITEMS|ALL|ALLCROSSFILTERED|ALLEXCEPT|ALLNOBLANKROW|ALLSELECTED|AND|APPROXIMATEDISTINCTCOUNT|ASIN|ASINH|ATAN|ATANH|AVERAGE|AVERAGEA|AVERAGEX|BETA\.DIST|BETA\.INV|BLANK|CALCULATE|CALCULATETABLE|CALENDAR|CALENDARAUTO|CEILING|CHISQ\.DIST|CHISQ\.DIST\.RT|CHISQ\.INV|CHISQ\.INV\.RT|CLOSINGBALANCEMONTH|CLOSINGBALANCEQUARTER|CLOSINGBALANCEYEAR|COALESCE|COMBIN|COMBINA|COMBINEVALUES|CONCATENATE|CONCATENATEX|CONFIDENCE\.NORM|CONFIDENCE\.T|CONTAINS|CONTAINSROW|CONTAINSSTRING|CONTAINSSTRINGEXACT|CONVERT|COS|COSH|COT|COTH|COUNT|COUNTA|COUNTAX|COUNTBLANK|COUNTROWS|COUNTX|CROSSFILTER|CROSSJOIN|CURRENCY|CURRENTGROUP|CUSTOMDATA|DATATABLE|DATE|DATEADD|DATEDIFF|DATESBETWEEN|DATESINPERIOD|DATESMTD|DATESQTD|DATESYTD|DATEVALUE|DAY|DEGREES|DETAILROWS|DISTINCT|DISTINCTCOUNT|DISTINCTCOUNTNOBLANK|DIVIDE|EARLIER|EARLIEST|EDATE|ENDOFMONTH|ENDOFQUARTER|ENDOFYEAR|EOMONTH|ERROR|EVEN|EXACT|EXCEPT|EXP|EXPON\.DIST|FACT|FALSE|FILTER|FILTERS|FIND|FIRSTDATE|FIRSTNONBLANK|FIRSTNONBLANKVALUE|FIXED|FLOOR|FORMAT|GCD|GENERATE|GENERATEALL|GENERATESERIES|GEOMEAN|GEOMEANX|GROUPBY|HASONEFILTER|HASONEVALUE|HOUR|IF|IF\.EAGER|IFERROR|IGNORE|INT|INTERSECT|ISBLANK|ISCROSSFILTERED|ISEMPTY|ISERROR|ISEVEN|ISFILTERED|ISINSCOPE|ISLOGICAL|ISNONTEXT|ISNUMBER|ISO\.CEILING|ISODD|ISONORAFTER|ISSELECTEDMEASURE|ISSUBTOTAL|ISTEXT|KEEPFILTERS|KEYWORDMATCH|LASTDATE|LASTNONBLANK|LASTNONBLANKVALUE|LCM|LEFT|LEN|LN|LOG|LOG10|LOOKUPVALUE|LOWER|MAX|MAXA|MAXX|MEDIAN|MEDIANX|MID|MIN|MINA|MINUTE|MINX|MOD|MONTH|MROUND|NATURALINNERJOIN|NATURALLEFTOUTERJOIN|NEXTDAY|NEXTMONTH|NEXTQUARTER|NEXTYEAR|NONVISUAL|NORM\.DIST|NORM\.INV|NORM\.S\.DIST|NORM\.S\.INV|NOT|NOW|ODD|OPENINGBALANCEMONTH|OPENINGBALANCEQUARTER|OPENINGBALANCEYEAR|OR|PARALLELPERIOD|PATH|PATHCONTAINS|PATHITEM|PATHITEMREVERSE|PATHLENGTH|PERCENTILE\.EXC|PERCENTILE\.INC|PERCENTILEX\.EXC|PERCENTILEX\.INC|PERMUT|PI|POISSON\.DIST|POWER|PREVIOUSDAY|PREVIOUSMONTH|PREVIOUSQUARTER|PREVIOUSYEAR|PRODUCT|PRODUCTX|QUARTER|QUOTIENT|RADIANS|RAND|RANDBETWEEN|RANK\.EQ|RANKX|RELATED|RELATEDTABLE|REMOVEFILTERS|REPLACE|REPT|RIGHT|ROLLUP|ROLLUPADDISSUBTOTAL|ROLLUPGROUP|ROLLUPISSUBTOTAL|ROUND|ROUNDDOWN|ROUNDUP|ROW|SAMEPERIODLASTYEAR|SAMPLE|SEARCH|SECOND|SELECTCOLUMNS|SELECTEDMEASURE|SELECTEDMEASUREFORMATSTRING|SELECTEDMEASURENAME|SELECTEDVALUE|SIGN|SIN|SINH|SQRT|SQRTPI|STARTOFMONTH|STARTOFQUARTER|STARTOFYEAR|STDEV\.P|STDEV\.S|STDEVX\.P|STDEVX\.S|SUBSTITUTE|SUBSTITUTEWITHINDEX|SUM|SUMMARIZE|SUMMARIZECOLUMNS|SUMX|SWITCH|T\.DIST|T\.DIST\.2T|T\.DIST\.RT|T\.INV|T\.INV\.2T|TAN|TANH|TIME|TIMEVALUE|TODAY|TOPN|TOPNPERLEVEL|TOPNSKIP|TOTALMTD|TOTALQTD|TOTALYTD|TREATAS|TRIM|TRUE|TRUNC|UNICHAR|UNICODE|UNION|UPPER|USERELATIONSHIP|USERNAME|USEROBJECTID|USERPRINCIPALNAME|UTCNOW|UTCTODAY|VALUE|VALUES|VAR\.P|VAR\.S|VARX\.P|VARX\.S|WEEKDAY|WEEKNUM|XIRR|XNPV|YEAR|YEARFRAC)(?=\s*\()/i,
+ "keyword": /\b(?:DEFINE|EVALUATE|MEASURE|ORDER\s+BY|RETURN|VAR|START\s+AT|ASC|DESC)\b/i,
+ "boolean": {
+ pattern: /\b(?:FALSE|NULL|TRUE)\b/i,
+ alias: "constant"
+ },
+ "number": /\b\d+(?:\.\d*)?|\B\.\d+\b/,
+ "operator": /:=|[-+*\/=^]|&&?|\|\||<(?:=>?|<|>)?|>[>=]?|\b(?:IN|NOT)\b/i,
+ "punctuation": /[;\[\](){}`,.]/
+ };
+ Prism.languages.dhall = {
+ // Multi-line comments can be nested. E.g. {- foo {- bar -} -}
+ // The multi-line pattern is essentially this:
+ // \{-(?:[^-{]|-(?!\})|\{(?!-)|<SELF>)*-\}
+ "comment": /--.*|\{-(?:[^-{]|-(?!\})|\{(?!-)|\{-(?:[^-{]|-(?!\})|\{(?!-))*-\})*-\}/,
+ "string": {
+ pattern: /"(?:[^"\\]|\\.)*"|''(?:[^']|'(?!')|'''|''\$\{)*''(?!'|\$)/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /\$\{[^{}]*\}/,
+ inside: {
+ "expression": {
+ pattern: /(^\$\{)[\s\S]+(?=\}$)/,
+ lookbehind: true,
+ alias: "language-dhall",
+ inside: null
+ // see blow
+ },
+ "punctuation": /\$\{|\}/
+ }
+ }
+ }
+ },
+ "label": {
+ pattern: /`[^`]*`/,
+ greedy: true
+ },
+ "url": {
+ // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L596
+ pattern: /\bhttps?:\/\/[\w.:%!$&'*+;=@~-]+(?:\/[\w.:%!$&'*+;=@~-]*)*(?:\?[/?\w.:%!$&'*+;=@~-]*)?/,
+ greedy: true
+ },
+ "env": {
+ // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L661
+ pattern: /\benv:(?:(?!\d)\w+|"(?:[^"\\=]|\\.)*")/,
+ greedy: true,
+ inside: {
+ "function": /^env/,
+ "operator": /^:/,
+ "variable": /[\s\S]+/
+ }
+ },
+ "hash": {
+ // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L725
+ pattern: /\bsha256:[\da-fA-F]{64}\b/,
+ inside: {
+ "function": /sha256/,
+ "operator": /:/,
+ "number": /[\da-fA-F]{64}/
+ }
+ },
+ // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L359
+ "keyword": /\b(?:as|assert|else|forall|if|in|let|merge|missing|then|toMap|using|with)\b|\u2200/,
+ "builtin": /\b(?:None|Some)\b/,
+ "boolean": /\b(?:False|True)\b/,
+ "number": /\bNaN\b|-?\bInfinity\b|[+-]?\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/,
+ "operator": /\/\\|\/\/\\\\|&&|\|\||===|[!=]=|\/\/|->|\+\+|::|[+*#@=:?<>|\\\u2227\u2a53\u2261\u2afd\u03bb\u2192]/,
+ "punctuation": /\.\.|[{}\[\](),./]/,
+ // we'll just assume that every capital word left is a type name
+ "class-name": /\b[A-Z]\w*\b/
+ };
+ Prism.languages.dhall.string.inside.interpolation.inside.expression.inside = Prism.languages.dhall;
+ (function(Prism2) {
+ Prism2.languages.diff = {
+ "coord": [
+ // Match all kinds of coord lines (prefixed by "+++", "---" or "***").
+ /^(?:\*{3}|-{3}|\+{3}).*$/m,
+ // Match "@@ ... @@" coord lines in unified diff.
+ /^@@.*@@$/m,
+ // Match coord lines in normal diff (starts with a number).
+ /^\d.*$/m
+ ]
+ // deleted, inserted, unchanged, diff
+ };
+ var PREFIXES = {
+ "deleted-sign": "-",
+ "deleted-arrow": "<",
+ "inserted-sign": "+",
+ "inserted-arrow": ">",
+ "unchanged": " ",
+ "diff": "!"
+ };
+ Object.keys(PREFIXES).forEach(function(name) {
+ var prefix = PREFIXES[name];
+ var alias = [];
+ if (!/^\w+$/.test(name)) {
+ alias.push(/\w+/.exec(name)[0]);
+ }
+ if (name === "diff") {
+ alias.push("bold");
+ }
+ Prism2.languages.diff[name] = {
+ pattern: RegExp("^(?:[" + prefix + "].*(?:\r\n?|\n|(?![\\s\\S])))+", "m"),
+ alias,
+ inside: {
+ "line": {
+ pattern: /(.)(?=[\s\S]).*(?:\r\n?|\n)?/,
+ lookbehind: true
+ },
+ "prefix": {
+ pattern: /[\s\S]/,
+ alias: /\w+/.exec(name)[0]
+ }
+ }
+ };
+ });
+ Object.defineProperty(Prism2.languages.diff, "PREFIXES", {
+ value: PREFIXES
+ });
+ })(Prism);
+ (function(Prism2) {
+ function getPlaceholder(language, index) {
+ return "___" + language.toUpperCase() + index + "___";
+ }
+ Object.defineProperties(Prism2.languages["markup-templating"] = {}, {
+ buildPlaceholders: {
+ /**
+ * Tokenize all inline templating expressions matching `placeholderPattern`.
+ *
+ * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns
+ * `true` will be replaced.
+ *
+ * @param {object} env The environment of the `before-tokenize` hook.
+ * @param {string} language The language id.
+ * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders.
+ * @param {(match: string) => boolean} [replaceFilter]
+ */
+ value: function(env, language, placeholderPattern, replaceFilter) {
+ if (env.language !== language) {
+ return;
+ }
+ var tokenStack = env.tokenStack = [];
+ env.code = env.code.replace(placeholderPattern, function(match) {
+ if (typeof replaceFilter === "function" && !replaceFilter(match)) {
+ return match;
+ }
+ var i = tokenStack.length;
+ var placeholder;
+ while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {
+ ++i;
+ }
+ tokenStack[i] = match;
+ return placeholder;
+ });
+ env.grammar = Prism2.languages.markup;
+ }
+ },
+ tokenizePlaceholders: {
+ /**
+ * Replace placeholders with proper tokens after tokenizing.
+ *
+ * @param {object} env The environment of the `after-tokenize` hook.
+ * @param {string} language The language id.
+ */
+ value: function(env, language) {
+ if (env.language !== language || !env.tokenStack) {
+ return;
+ }
+ env.grammar = Prism2.languages[language];
+ var j = 0;
+ var keys = Object.keys(env.tokenStack);
+ function walkTokens(tokens) {
+ for (var i = 0; i < tokens.length; i++) {
+ if (j >= keys.length) {
+ break;
+ }
+ var token = tokens[i];
+ if (typeof token === "string" || token.content && typeof token.content === "string") {
+ var k = keys[j];
+ var t = env.tokenStack[k];
+ var s = typeof token === "string" ? token : token.content;
+ var placeholder = getPlaceholder(language, k);
+ var index = s.indexOf(placeholder);
+ if (index > -1) {
+ ++j;
+ var before = s.substring(0, index);
+ var middle = new Prism2.Token(language, Prism2.tokenize(t, env.grammar), "language-" + language, t);
+ var after = s.substring(index + placeholder.length);
+ var replacement = [];
+ if (before) {
+ replacement.push.apply(replacement, walkTokens([before]));
+ }
+ replacement.push(middle);
+ if (after) {
+ replacement.push.apply(replacement, walkTokens([after]));
+ }
+ if (typeof token === "string") {
+ tokens.splice.apply(tokens, [i, 1].concat(replacement));
+ } else {
+ token.content = replacement;
+ }
+ }
+ } else if (token.content) {
+ walkTokens(token.content);
+ }
+ }
+ return tokens;
+ }
+ walkTokens(env.tokens);
+ }
+ }
+ });
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.django = {
+ "comment": /^\{#[\s\S]*?#\}$/,
+ "tag": {
+ pattern: /(^\{%[+-]?\s*)\w+/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "delimiter": {
+ pattern: /^\{[{%][+-]?|[+-]?[}%]\}$/,
+ alias: "punctuation"
+ },
+ "string": {
+ pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "filter": {
+ pattern: /(\|)\w+/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "test": {
+ pattern: /(\bis\s+(?:not\s+)?)(?!not\b)\w+/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "function": /\b[a-z_]\w+(?=\s*\()/i,
+ "keyword": /\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\b/,
+ "operator": /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
+ "number": /\b\d+(?:\.\d+)?\b/,
+ "boolean": /[Ff]alse|[Nn]one|[Tt]rue/,
+ "variable": /\b\w+\b/,
+ "punctuation": /[{}[\](),.:;]/
+ };
+ var pattern = /\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}|\{#[\s\S]*?#\}/g;
+ var markupTemplating = Prism2.languages["markup-templating"];
+ Prism2.hooks.add("before-tokenize", function(env) {
+ markupTemplating.buildPlaceholders(env, "django", pattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ markupTemplating.tokenizePlaceholders(env, "django");
+ });
+ Prism2.languages.jinja2 = Prism2.languages.django;
+ Prism2.hooks.add("before-tokenize", function(env) {
+ markupTemplating.buildPlaceholders(env, "jinja2", pattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ markupTemplating.tokenizePlaceholders(env, "jinja2");
+ });
+ })(Prism);
+ Prism.languages["dns-zone-file"] = {
+ "comment": /;.*/,
+ "string": {
+ pattern: /"(?:\\.|[^"\\\r\n])*"/,
+ greedy: true
+ },
+ "variable": [
+ {
+ pattern: /(^\$ORIGIN[ \t]+)\S+/m,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|\s)@(?=\s|$)/,
+ lookbehind: true
+ }
+ ],
+ "keyword": /^\$(?:INCLUDE|ORIGIN|TTL)(?=\s|$)/m,
+ "class": {
+ // https://tools.ietf.org/html/rfc1035#page-13
+ pattern: /(^|\s)(?:CH|CS|HS|IN)(?=\s|$)/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "type": {
+ // https://en.wikipedia.org/wiki/List_of_DNS_record_types
+ pattern: /(^|\s)(?:A|A6|AAAA|AFSDB|APL|ATMA|CAA|CDNSKEY|CDS|CERT|CNAME|DHCID|DLV|DNAME|DNSKEY|DS|EID|GID|GPOS|HINFO|HIP|IPSECKEY|ISDN|KEY|KX|LOC|MAILA|MAILB|MB|MD|MF|MG|MINFO|MR|MX|NAPTR|NB|NBSTAT|NIMLOC|NINFO|NS|NSAP|NSAP-PTR|NSEC|NSEC3|NSEC3PARAM|NULL|NXT|OPENPGPKEY|PTR|PX|RKEY|RP|RRSIG|RT|SIG|SINK|SMIMEA|SOA|SPF|SRV|SSHFP|TA|TKEY|TLSA|TSIG|TXT|UID|UINFO|UNSPEC|URI|WKS|X25)(?=\s|$)/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "punctuation": /[()]/
+ };
+ Prism.languages["dns-zone"] = Prism.languages["dns-zone-file"];
+ (function(Prism2) {
+ var spaceAfterBackSlash = /\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source;
+ var space = /(?:[ \t]+(?![ \t])(?:<SP_BS>)?|<SP_BS>)/.source.replace(/<SP_BS>/g, function() {
+ return spaceAfterBackSlash;
+ });
+ var string = /"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source;
+ var option = /--[\w-]+=(?:<STR>|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(/<STR>/g, function() {
+ return string;
+ });
+ var stringRule = {
+ pattern: RegExp(string),
+ greedy: true
+ };
+ var commentRule = {
+ pattern: /(^[ \t]*)#.*/m,
+ lookbehind: true,
+ greedy: true
+ };
+ function re(source, flags) {
+ source = source.replace(/<OPT>/g, function() {
+ return option;
+ }).replace(/<SP>/g, function() {
+ return space;
+ });
+ return RegExp(source, flags);
+ }
+ Prism2.languages.docker = {
+ "instruction": {
+ pattern: /(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "options": {
+ pattern: re(/(^(?:ONBUILD<SP>)?\w+<SP>)<OPT>(?:<SP><OPT>)*/.source, "i"),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "property": {
+ pattern: /(^|\s)--[\w-]+/,
+ lookbehind: true
+ },
+ "string": [
+ stringRule,
+ {
+ pattern: /(=)(?!["'])(?:[^\s\\]|\\.)+/,
+ lookbehind: true
+ }
+ ],
+ "operator": /\\$/m,
+ "punctuation": /=/
+ }
+ },
+ "keyword": [
+ {
+ // https://docs.docker.com/engine/reference/builder/#healthcheck
+ pattern: re(/(^(?:ONBUILD<SP>)?HEALTHCHECK<SP>(?:<OPT><SP>)*)(?:CMD|NONE)\b/.source, "i"),
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // https://docs.docker.com/engine/reference/builder/#from
+ pattern: re(/(^(?:ONBUILD<SP>)?FROM<SP>(?:<OPT><SP>)*(?!--)[^ \t\\]+<SP>)AS/.source, "i"),
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // https://docs.docker.com/engine/reference/builder/#onbuild
+ pattern: re(/(^ONBUILD<SP>)\w+/.source, "i"),
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /^\w+/,
+ greedy: true
+ }
+ ],
+ "comment": commentRule,
+ "string": stringRule,
+ "variable": /\$(?:\w+|\{[^{}"'\\]*\})/,
+ "operator": /\\$/m
+ }
+ },
+ "comment": commentRule
+ };
+ Prism2.languages.dockerfile = Prism2.languages.docker;
+ })(Prism);
+ (function(Prism2) {
+ var ID = "(?:" + [
+ // an identifier
+ /[a-zA-Z_\x80-\uFFFF][\w\x80-\uFFFF]*/.source,
+ // a number
+ /-?(?:\.\d+|\d+(?:\.\d*)?)/.source,
+ // a double-quoted string
+ /"[^"\\]*(?:\\[\s\S][^"\\]*)*"/.source,
+ // HTML-like string
+ /<(?:[^<>]|(?!<!--)<(?:[^<>"']|"[^"]*"|'[^']*')+>|<!--(?:[^-]|-(?!->))*-->)*>/.source
+ ].join("|") + ")";
+ var IDInside = {
+ "markup": {
+ pattern: /(^<)[\s\S]+(?=>$)/,
+ lookbehind: true,
+ alias: ["language-markup", "language-html", "language-xml"],
+ inside: Prism2.languages.markup
+ }
+ };
+ function withID(source, flags) {
+ return RegExp(source.replace(/<ID>/g, function() {
+ return ID;
+ }), flags);
+ }
+ Prism2.languages.dot = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,
+ greedy: true
+ },
+ "graph-name": {
+ pattern: withID(/(\b(?:digraph|graph|subgraph)[ \t\r\n]+)<ID>/.source, "i"),
+ lookbehind: true,
+ greedy: true,
+ alias: "class-name",
+ inside: IDInside
+ },
+ "attr-value": {
+ pattern: withID(/(=[ \t\r\n]*)<ID>/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: IDInside
+ },
+ "attr-name": {
+ pattern: withID(/([\[;, \t\r\n])<ID>(?=[ \t\r\n]*=)/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: IDInside
+ },
+ "keyword": /\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,
+ "compass-point": {
+ pattern: /(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,
+ lookbehind: true,
+ alias: "builtin"
+ },
+ "node": {
+ pattern: withID(/(^|[^-.\w\x80-\uFFFF\\])<ID>/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: IDInside
+ },
+ "operator": /[=:]|-[->]/,
+ "punctuation": /[\[\]{};,]/
+ };
+ Prism2.languages.gv = Prism2.languages.dot;
+ })(Prism);
+ Prism.languages.ebnf = {
+ "comment": /\(\*[\s\S]*?\*\)/,
+ "string": {
+ pattern: /"[^"\r\n]*"|'[^'\r\n]*'/,
+ greedy: true
+ },
+ "special": {
+ pattern: /\?[^?\r\n]*\?/,
+ greedy: true,
+ alias: "class-name"
+ },
+ "definition": {
+ pattern: /^([\t ]*)[a-z]\w*(?:[ \t]+[a-z]\w*)*(?=\s*=)/im,
+ lookbehind: true,
+ alias: ["rule", "keyword"]
+ },
+ "rule": /\b[a-z]\w*(?:[ \t]+[a-z]\w*)*\b/i,
+ "punctuation": /\([:/]|[:/]\)|[.,;()[\]{}]/,
+ "operator": /[-=|*/!]/
+ };
+ Prism.languages.editorconfig = {
+ // https://editorconfig-specification.readthedocs.io
+ "comment": /[;#].*/,
+ "section": {
+ pattern: /(^[ \t]*)\[.+\]/m,
+ lookbehind: true,
+ alias: "selector",
+ inside: {
+ "regex": /\\\\[\[\]{},!?.*]/,
+ // Escape special characters with '\\'
+ "operator": /[!?]|\.\.|\*{1,2}/,
+ "punctuation": /[\[\]{},]/
+ }
+ },
+ "key": {
+ pattern: /(^[ \t]*)[^\s=]+(?=[ \t]*=)/m,
+ lookbehind: true,
+ alias: "attr-name"
+ },
+ "value": {
+ pattern: /=.*/,
+ alias: "attr-value",
+ inside: {
+ "punctuation": /^=/
+ }
+ }
+ };
+ Prism.languages.eiffel = {
+ "comment": /--.*/,
+ "string": [
+ // Aligned-verbatim-strings
+ {
+ pattern: /"([^[]*)\[[\s\S]*?\]\1"/,
+ greedy: true
+ },
+ // Non-aligned-verbatim-strings
+ {
+ pattern: /"([^{]*)\{[\s\S]*?\}\1"/,
+ greedy: true
+ },
+ // Single-line string
+ {
+ pattern: /"(?:%(?:(?!\n)\s)*\n\s*%|%\S|[^%"\r\n])*"/,
+ greedy: true
+ }
+ ],
+ // normal char | special char | char code
+ "char": /'(?:%.|[^%'\r\n])+'/,
+ "keyword": /\b(?:across|agent|alias|all|and|as|assign|attached|attribute|check|class|convert|create|Current|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|implies|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|or|Precursor|redefine|rename|require|rescue|Result|retry|select|separate|some|then|undefine|until|variant|Void|when|xor)\b/i,
+ "boolean": /\b(?:False|True)\b/i,
+ // Convention: class-names are always all upper-case characters
+ "class-name": /\b[A-Z][\dA-Z_]*\b/,
+ "number": [
+ // hexa | octal | bin
+ /\b0[xcb][\da-f](?:_*[\da-f])*\b/i,
+ // Decimal
+ /(?:\b\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?e[+-]?)?\d(?:_*\d)*\b|\b\d(?:_*\d)*\b\.?/i
+ ],
+ "punctuation": /:=|<<|>>|\(\||\|\)|->|\.(?=\w)|[{}[\];(),:?]/,
+ "operator": /\\\\|\|\.\.\||\.\.|\/[~\/=]?|[><]=?|[-+*^=~]/
+ };
+ (function(Prism2) {
+ Prism2.languages.ejs = {
+ "delimiter": {
+ pattern: /^<%[-_=]?|[-_]?%>$/,
+ alias: "punctuation"
+ },
+ "comment": /^#[\s\S]*/,
+ "language-javascript": {
+ pattern: /[\s\S]+/,
+ inside: Prism2.languages.javascript
+ }
+ };
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var ejsPattern = /<%(?!%)[\s\S]+?%>/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "ejs", ejsPattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "ejs");
+ });
+ Prism2.languages.eta = Prism2.languages.ejs;
+ })(Prism);
+ Prism.languages.elixir = {
+ "doc": {
+ pattern: /@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,
+ inside: {
+ "attribute": /^@\w+/,
+ "string": /['"][\s\S]+/
+ }
+ },
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ // ~r"""foo""" (multi-line), ~r'''foo''' (multi-line), ~r/foo/, ~r|foo|, ~r"foo", ~r'foo', ~r(foo), ~r[foo], ~r{foo}, ~r<foo>
+ "regex": {
+ pattern: /~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,
+ greedy: true
+ },
+ "string": [
+ {
+ // ~s"""foo""" (multi-line), ~s'''foo''' (multi-line), ~s/foo/, ~s|foo|, ~s"foo", ~s'foo', ~s(foo), ~s[foo], ~s{foo} (with interpolation care), ~s<foo>
+ pattern: /~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,
+ greedy: true,
+ inside: {
+ // See interpolation below
+ }
+ },
+ {
+ pattern: /("""|''')[\s\S]*?\1/,
+ greedy: true,
+ inside: {
+ // See interpolation below
+ }
+ },
+ {
+ // Multi-line strings are allowed
+ pattern: /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true,
+ inside: {
+ // See interpolation below
+ }
+ }
+ ],
+ "atom": {
+ // Look-behind prevents bad highlighting of the :: operator
+ pattern: /(^|[^:]):\w+/,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "module": {
+ pattern: /\b[A-Z]\w*\b/,
+ alias: "class-name"
+ },
+ // Look-ahead prevents bad highlighting of the :: operator
+ "attr-name": /\b\w+\??:(?!:)/,
+ "argument": {
+ // Look-behind prevents bad highlighting of the && operator
+ pattern: /(^|[^&])&\d+/,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "attribute": {
+ pattern: /@\w+/,
+ alias: "variable"
+ },
+ "function": /\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,
+ "number": /\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,
+ "keyword": /\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,
+ "boolean": /\b(?:false|nil|true)\b/,
+ "operator": [
+ /\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,
+ {
+ // We don't want to match <<
+ pattern: /([^<])<(?!<)/,
+ lookbehind: true
+ },
+ {
+ // We don't want to match >>
+ pattern: /([^>])>(?!>)/,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /<<|>>|[.,%\[\]{}()]/
+ };
+ Prism.languages.elixir.string.forEach(function(o) {
+ o.inside = {
+ "interpolation": {
+ pattern: /#\{[^}]+\}/,
+ inside: {
+ "delimiter": {
+ pattern: /^#\{|\}$/,
+ alias: "punctuation"
+ },
+ rest: Prism.languages.elixir
+ }
+ }
+ };
+ });
+ Prism.languages.elm = {
+ "comment": /--.*|\{-[\s\S]*?-\}/,
+ "char": {
+ pattern: /'(?:[^\\'\r\n]|\\(?:[abfnrtv\\']|\d+|x[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}))'/,
+ greedy: true
+ },
+ "string": [
+ {
+ // Multiline strings are wrapped in triple ". Quotes may appear unescaped.
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true
+ },
+ {
+ pattern: /"(?:[^\\"\r\n]|\\.)*"/,
+ greedy: true
+ }
+ ],
+ "import-statement": {
+ // The imported or hidden names are not included in this import
+ // statement. This is because we want to highlight those exactly like
+ // we do for the names in the program.
+ pattern: /(^[\t ]*)import\s+[A-Z]\w*(?:\.[A-Z]\w*)*(?:\s+as\s+(?:[A-Z]\w*)(?:\.[A-Z]\w*)*)?(?:\s+exposing\s+)?/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /\b(?:as|exposing|import)\b/
+ }
+ },
+ "keyword": /\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\b/,
+ // These are builtin variables only. Constructors are highlighted later as a constant.
+ "builtin": /\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\b/,
+ // decimal integers and floating point numbers | hexadecimal integers
+ "number": /\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[0-9a-f]+)\b/i,
+ // Most of this is needed because of the meaning of a single '.'.
+ // If it stands alone freely, it is the function composition.
+ // It may also be a separator between a module name and an identifier => no
+ // operator. If it comes together with other special characters it is an
+ // operator too.
+ // Valid operator characters in 0.18: +-/*=.$<>:&|^?%#@~!
+ // Ref: https://groups.google.com/forum/#!msg/elm-dev/0AHSnDdkSkQ/E0SVU70JEQAJ
+ "operator": /\s\.\s|[+\-/*=.$<>:&|^?%#@~!]{2,}|[+\-/*=$<>:&|^?%#@~!]/,
+ // In Elm, nearly everything is a variable, do not highlight these.
+ "hvariable": /\b(?:[A-Z]\w*\.)*[a-z]\w*\b/,
+ "constant": /\b(?:[A-Z]\w*\.)*[A-Z]\w*\b/,
+ "punctuation": /[{}[\]|(),.:]/
+ };
+ Prism.languages.lua = {
+ "comment": /^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,
+ // \z may be used to skip the following space
+ "string": {
+ pattern: /(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,
+ greedy: true
+ },
+ "number": /\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,
+ "keyword": /\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,
+ "function": /(?!\d)\w+(?=\s*(?:[({]))/,
+ "operator": [
+ /[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,
+ {
+ // Match ".." but don't break "..."
+ pattern: /(^|[^.])\.\.(?!\.)/,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /[\[\](){},;]|\.+|:+/
+ };
+ (function(Prism2) {
+ Prism2.languages.etlua = {
+ "delimiter": {
+ pattern: /^<%[-=]?|-?%>$/,
+ alias: "punctuation"
+ },
+ "language-lua": {
+ pattern: /[\s\S]+/,
+ inside: Prism2.languages.lua
+ }
+ };
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var pattern = /<%[\s\S]+?%>/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "etlua", pattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "etlua");
+ });
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.erb = {
+ "delimiter": {
+ pattern: /^(\s*)<%=?|%>(?=\s*$)/,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "ruby": {
+ pattern: /\s*\S[\s\S]*/,
+ alias: "language-ruby",
+ inside: Prism2.languages.ruby
+ }
+ };
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var erbPattern = /<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s(?:[^\r\n]|[\r\n](?!=end))*[\r\n]=end)+?%>/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "erb", erbPattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "erb");
+ });
+ })(Prism);
+ Prism.languages.erlang = {
+ "comment": /%.+/,
+ "string": {
+ pattern: /"(?:\\.|[^\\"\r\n])*"/,
+ greedy: true
+ },
+ "quoted-function": {
+ pattern: /'(?:\\.|[^\\'\r\n])+'(?=\()/,
+ alias: "function"
+ },
+ "quoted-atom": {
+ pattern: /'(?:\\.|[^\\'\r\n])+'/,
+ alias: "atom"
+ },
+ "boolean": /\b(?:false|true)\b/,
+ "keyword": /\b(?:after|begin|case|catch|end|fun|if|of|receive|try|when)\b/,
+ "number": [
+ /\$\\?./,
+ /\b\d+#[a-z0-9]+/i,
+ /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i
+ ],
+ "function": /\b[a-z][\w@]*(?=\()/,
+ "variable": {
+ // Look-behind is used to prevent wrong highlighting of atoms containing "@"
+ pattern: /(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,
+ lookbehind: true
+ },
+ "operator": [
+ /[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\b/,
+ {
+ // We don't want to match <<
+ pattern: /(^|[^<])<(?!<)/,
+ lookbehind: true
+ },
+ {
+ // We don't want to match >>
+ pattern: /(^|[^>])>(?!>)/,
+ lookbehind: true
+ }
+ ],
+ "atom": /\b[a-z][\w@]*/,
+ "punctuation": /[()[\]{}:;,.#|]|<<|>>/
+ };
+ Prism.languages["excel-formula"] = {
+ "comment": {
+ pattern: /(\bN\(\s*)"(?:[^"]|"")*"(?=\s*\))/i,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:[^"]|"")*"(?!")/,
+ greedy: true
+ },
+ "reference": {
+ // https://www.ablebits.com/office-addins-blog/2015/12/08/excel-reference-another-sheet-workbook/
+ // Sales!B2
+ // 'Winter sales'!B2
+ // [Sales.xlsx]Jan!B2:B5
+ // D:\Reports\[Sales.xlsx]Jan!B2:B5
+ // '[Sales.xlsx]Jan sales'!B2:B5
+ // 'D:\Reports\[Sales.xlsx]Jan sales'!B2:B5
+ pattern: /(?:'[^']*'|(?:[^\s()[\]{}<>*?"';,$&]*\[[^^\s()[\]{}<>*?"']+\])?\w+)!/,
+ greedy: true,
+ alias: "string",
+ inside: {
+ "operator": /!$/,
+ "punctuation": /'/,
+ "sheet": {
+ pattern: /[^[\]]+$/,
+ alias: "function"
+ },
+ "file": {
+ pattern: /\[[^[\]]+\]$/,
+ inside: {
+ "punctuation": /[[\]]/
+ }
+ },
+ "path": /[\s\S]+/
+ }
+ },
+ "function-name": {
+ pattern: /\b[A-Z]\w*(?=\()/i,
+ alias: "builtin"
+ },
+ "range": {
+ pattern: /\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i,
+ alias: "selector",
+ inside: {
+ "operator": /:/,
+ "cell": /\$?[A-Z]+\$?\d+/i,
+ "column": /\$?[A-Z]+/i,
+ "row": /\$?\d+/
+ }
+ },
+ "cell": {
+ // Excel is case insensitive, so the string "foo1" could be either a variable or a cell.
+ // To combat this, we match cells case insensitive, if the contain at least one "$", and case sensitive otherwise.
+ pattern: /\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/,
+ alias: "selector"
+ },
+ "number": /(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i,
+ "boolean": /\b(?:FALSE|TRUE)\b/i,
+ "operator": /[-+*/^%=&,]|<[=>]?|>=?/,
+ "punctuation": /[[\]();{}|]/
+ };
+ Prism.languages["xlsx"] = Prism.languages["xls"] = Prism.languages["excel-formula"];
+ Prism.languages.fsharp = Prism.languages.extend("clike", {
+ "comment": [
+ {
+ pattern: /(^|[^\\])\(\*(?!\))[\s\S]*?\*\)/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /(?:"""[\s\S]*?"""|@"(?:""|[^"])*"|"(?:\\[\s\S]|[^\\"])*")B?/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:exception|inherit|interface|new|of|type)\s+|\w\s*:\s*|\s:\??>\s*)[.\w]+\b(?:\s*(?:->|\*)\s*[.\w]+\b)*(?!\s*[:.])/,
+ lookbehind: true,
+ inside: {
+ "operator": /->|\*/,
+ "punctuation": /\./
+ }
+ },
+ "keyword": /\b(?:let|return|use|yield)(?:!\B|\b)|\b(?:abstract|and|as|asr|assert|atomic|base|begin|break|checked|class|component|const|constraint|constructor|continue|default|delegate|do|done|downcast|downto|eager|elif|else|end|event|exception|extern|external|false|finally|fixed|for|fun|function|functor|global|if|in|include|inherit|inline|interface|internal|land|lazy|lor|lsl|lsr|lxor|match|member|method|mixin|mod|module|mutable|namespace|new|not|null|object|of|open|or|override|parallel|private|process|protected|public|pure|rec|sealed|select|sig|static|struct|tailcall|then|to|trait|true|try|type|upcast|val|virtual|void|volatile|when|while|with)\b/,
+ "number": [
+ /\b0x[\da-fA-F]+(?:LF|lf|un)?\b/,
+ /\b0b[01]+(?:uy|y)?\b/,
+ /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[fm]|e[+-]?\d+)?\b/i,
+ /\b\d+(?:[IlLsy]|UL|u[lsy]?)?\b/
+ ],
+ "operator": /([<>~&^])\1\1|([*.:<>&])\2|<-|->|[!=:]=|<?\|{1,3}>?|\??(?:<=|>=|<>|[-+*/%=<>])\??|[!?^&]|~[+~-]|:>|:\?>?/
+ });
+ Prism.languages.insertBefore("fsharp", "keyword", {
+ "preprocessor": {
+ pattern: /(^[\t ]*)#.*/m,
+ lookbehind: true,
+ alias: "property",
+ inside: {
+ "directive": {
+ pattern: /(^#)\b(?:else|endif|if|light|line|nowarn)\b/,
+ lookbehind: true,
+ alias: "keyword"
+ }
+ }
+ }
+ });
+ Prism.languages.insertBefore("fsharp", "punctuation", {
+ "computation-expression": {
+ pattern: /\b[_a-z]\w*(?=\s*\{)/i,
+ alias: "keyword"
+ }
+ });
+ Prism.languages.insertBefore("fsharp", "string", {
+ "annotation": {
+ pattern: /\[<.+?>\]/,
+ greedy: true,
+ inside: {
+ "punctuation": /^\[<|>\]$/,
+ "class-name": {
+ pattern: /^\w+$|(^|;\s*)[A-Z]\w*(?=\()/,
+ lookbehind: true
+ },
+ "annotation-content": {
+ pattern: /[\s\S]+/,
+ inside: Prism.languages.fsharp
+ }
+ }
+ },
+ "char": {
+ pattern: /'(?:[^\\']|\\(?:.|\d{3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}|U[a-fA-F\d]{8}))'B?/,
+ greedy: true
+ }
+ });
+ (function(Prism2) {
+ var comment_inside = {
+ "function": /\b(?:BUGS?|FIX(?:MES?)?|NOTES?|TODOS?|XX+|HACKS?|WARN(?:ING)?|\?{2,}|!{2,})\b/
+ };
+ var string_inside = {
+ "number": /\\[^\s']|%\w/
+ };
+ var factor = {
+ "comment": [
+ {
+ // ! single-line exclamation point comments with whitespace after/around the !
+ pattern: /(^|\s)(?:! .*|!$)/,
+ lookbehind: true,
+ inside: comment_inside
+ },
+ /* from basis/multiline: */
+ {
+ // /* comment */, /* comment*/
+ pattern: /(^|\s)\/\*\s[\s\S]*?\*\/(?=\s|$)/,
+ lookbehind: true,
+ greedy: true,
+ inside: comment_inside
+ },
+ {
+ // ![[ comment ]] , ![===[ comment]===]
+ pattern: /(^|\s)!\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,
+ lookbehind: true,
+ greedy: true,
+ inside: comment_inside
+ }
+ ],
+ "number": [
+ {
+ // basic base 10 integers 9, -9
+ pattern: /(^|\s)[+-]?\d+(?=\s|$)/,
+ lookbehind: true
+ },
+ {
+ // base prefix integers 0b010 0o70 0xad 0d10 0XAD -0xa9
+ pattern: /(^|\s)[+-]?0(?:b[01]+|o[0-7]+|d\d+|x[\dA-F]+)(?=\s|$)/i,
+ lookbehind: true
+ },
+ {
+ // fractional ratios 1/5 -1/5 and the literal float approximations 1/5. -1/5.
+ pattern: /(^|\s)[+-]?\d+\/\d+\.?(?=\s|$)/,
+ lookbehind: true
+ },
+ {
+ // positive mixed numbers 23+1/5 +23+1/5
+ pattern: /(^|\s)\+?\d+\+\d+\/\d+(?=\s|$)/,
+ lookbehind: true
+ },
+ {
+ // negative mixed numbers -23-1/5
+ pattern: /(^|\s)-\d+-\d+\/\d+(?=\s|$)/,
+ lookbehind: true
+ },
+ {
+ // basic decimal floats -0.01 0. .0 .1 -.1 -1. -12.13 +12.13
+ // and scientific notation with base 10 exponents 3e4 3e-4 .3e-4
+ pattern: /(^|\s)[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?\d+)?(?=\s|$)/i,
+ lookbehind: true
+ },
+ {
+ // NAN literal syntax NAN: 80000deadbeef, NAN: a
+ pattern: /(^|\s)NAN:\s+[\da-fA-F]+(?=\s|$)/,
+ lookbehind: true
+ },
+ {
+ /*
+ base prefix floats 0x1.0p3 (8.0) 0b1.010p2 (5.0) 0x1.p1 0b1.11111111p11111...
+ "The normalized hex form ±0x1.MMMMMMMMMMMMM[pP]±EEEE allows any floating-point number to be specified precisely.
+ The values of MMMMMMMMMMMMM and EEEE map directly to the mantissa and exponent fields of the binary IEEE 754 representation."
+ <https://docs.factorcode.org/content/article-syntax-floats.html>
+ */
+ pattern: /(^|\s)[+-]?0(?:b1\.[01]*|o1\.[0-7]*|d1\.\d*|x1\.[\dA-F]*)p\d+(?=\s|$)/i,
+ lookbehind: true
+ }
+ ],
+ // R/ regexp?\/\\/
+ "regexp": {
+ pattern: /(^|\s)R\/\s(?:\\\S|[^\\/])*\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\s|$)/,
+ lookbehind: true,
+ alias: "number",
+ inside: {
+ "variable": /\\\S/,
+ "keyword": /[+?*\[\]^$(){}.|]/,
+ "operator": {
+ pattern: /(\/)[idmsr]+(?:-[idmsr]+)?/,
+ lookbehind: true
+ }
+ }
+ },
+ "boolean": {
+ pattern: /(^|\s)[tf](?=\s|$)/,
+ lookbehind: true
+ },
+ // SBUF" asd", URL" ://...", P" /etc/"
+ "custom-string": {
+ pattern: /(^|\s)[A-Z0-9\-]+"\s(?:\\\S|[^"\\])*"/,
+ lookbehind: true,
+ greedy: true,
+ alias: "string",
+ inside: {
+ "number": /\\\S|%\w|\//
+ }
+ },
+ "multiline-string": [
+ {
+ // STRING: name \n content \n ; -> CONSTANT: name "content" (symbol)
+ pattern: /(^|\s)STRING:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*;(?=\s|$)/,
+ lookbehind: true,
+ greedy: true,
+ alias: "string",
+ inside: {
+ "number": string_inside.number,
+ // trailing semicolon on its own line
+ "semicolon-or-setlocal": {
+ pattern: /([\r\n][ \t]*);(?=\s|$)/,
+ lookbehind: true,
+ alias: "function"
+ }
+ }
+ },
+ {
+ // HEREDOC: marker \n content \n marker ; -> "content" (immediate)
+ pattern: /(^|\s)HEREDOC:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*\S+(?=\s|$)/,
+ lookbehind: true,
+ greedy: true,
+ alias: "string",
+ inside: string_inside
+ },
+ {
+ // [[ string ]], [==[ string]==]
+ pattern: /(^|\s)\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,
+ lookbehind: true,
+ greedy: true,
+ alias: "string",
+ inside: string_inside
+ }
+ ],
+ "special-using": {
+ pattern: /(^|\s)USING:(?:\s\S+)*(?=\s+;(?:\s|$))/,
+ lookbehind: true,
+ alias: "function",
+ inside: {
+ // this is essentially a regex for vocab names, which i don't want to specify
+ // but the USING: gets picked up as a vocab name
+ "string": {
+ pattern: /(\s)[^:\s]+/,
+ lookbehind: true
+ }
+ }
+ },
+ /* this description of stack effect literal syntax is not complete and not as specific as theoretically possible
+ trying to do better is more work and regex-computation-time than it's worth though.
+ - we'd like to have the "delimiter" parts of the stack effect [ (, --, and ) ] be a different (less-important or comment-like) colour to the stack effect contents
+ - we'd like if nested stack effects were treated as such rather than just appearing flat (with `inside`)
+ - we'd like if the following variable name conventions were recognised specifically:
+ special row variables = ..a b..
+ type and stack effect annotations end with a colon = ( quot: ( a: ( -- ) -- b ) -- x ), ( x: number -- )
+ word throws unconditional error = *
+ any other word-like variable name = a ? q' etc
+
+ https://docs.factorcode.org/content/article-effects.html
+
+ these are pretty complicated to highlight properly without a real parser, and therefore out of scope
+ the old pattern, which may be later useful, was: (^|\s)(?:call|execute|eval)?\((?:\s+[^"\r\n\t ]\S*)*?\s+--(?:\s+[^"\n\t ]\S*)*?\s+\)(?=\s|$)
+ */
+ // current solution is not great
+ "stack-effect-delimiter": [
+ {
+ // opening parenthesis
+ pattern: /(^|\s)(?:call|eval|execute)?\((?=\s)/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // middle --
+ pattern: /(\s)--(?=\s)/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // closing parenthesis
+ pattern: /(\s)\)(?=\s|$)/,
+ lookbehind: true,
+ alias: "operator"
+ }
+ ],
+ "combinators": {
+ pattern: null,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "kernel-builtin": {
+ pattern: null,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "sequences-builtin": {
+ pattern: null,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "math-builtin": {
+ pattern: null,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "constructor-word": {
+ // <array> but not <=>
+ pattern: /(^|\s)<(?!=+>|-+>)\S+>(?=\s|$)/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "other-builtin-syntax": {
+ pattern: null,
+ lookbehind: true,
+ alias: "operator"
+ },
+ /*
+ full list of supported word naming conventions: (the convention appears outside of the [brackets])
+ set-[x]
+ change-[x]
+ with-[x]
+ new-[x]
+ >[string]
+ [base]>
+ [string]>[number]
+ +[symbol]+
+ [boolean-word]?
+ ?[of]
+ [slot-reader]>>
+ >>[slot-setter]
+ [slot-writer]<<
+ ([implementation-detail])
+ [mutater]!
+ [variant]*
+ [prettyprint].
+ $[help-markup]
+
+ <constructors>, SYNTAX:, etc are supported by their own patterns.
+
+ `with` and `new` from `kernel` are their own builtins.
+
+ see <https://docs.factorcode.org/content/article-conventions.html>
+ */
+ "conventionally-named-word": {
+ pattern: /(^|\s)(?!")(?:(?:change|new|set|with)-\S+|\$\S+|>[^>\s]+|[^:>\s]+>|[^>\s]+>[^>\s]+|\+[^+\s]+\+|[^?\s]+\?|\?[^?\s]+|[^>\s]+>>|>>[^>\s]+|[^<\s]+<<|\([^()\s]+\)|[^!\s]+!|[^*\s]\S*\*|[^.\s]\S*\.)(?=\s|$)/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "colon-syntax": {
+ pattern: /(^|\s)(?:[A-Z0-9\-]+#?)?:{1,2}\s+(?:;\S+|(?!;)\S+)(?=\s|$)/,
+ lookbehind: true,
+ greedy: true,
+ alias: "function"
+ },
+ "semicolon-or-setlocal": {
+ pattern: /(\s)(?:;|:>)(?=\s|$)/,
+ lookbehind: true,
+ alias: "function"
+ },
+ // do not highlight leading } or trailing X{ at the begin/end of the file as it's invalid syntax
+ "curly-brace-literal-delimiter": [
+ {
+ // opening
+ pattern: /(^|\s)[a-z]*\{(?=\s)/i,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // closing
+ pattern: /(\s)\}(?=\s|$)/,
+ lookbehind: true,
+ alias: "operator"
+ }
+ ],
+ // do not highlight leading ] or trailing [ at the begin/end of the file as it's invalid syntax
+ "quotation-delimiter": [
+ {
+ // opening
+ pattern: /(^|\s)\[(?=\s)/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // closing
+ pattern: /(\s)\](?=\s|$)/,
+ lookbehind: true,
+ alias: "operator"
+ }
+ ],
+ "normal-word": {
+ pattern: /(^|\s)[^"\s]\S*(?=\s|$)/,
+ lookbehind: true
+ },
+ /*
+ basic first-class string "a"
+ with escaped double-quote "a\""
+ escaped backslash "\\"
+ and general escapes since Factor has so many "\N"
+
+ syntax that works in the reference implementation that isn't fully
+ supported because it's an implementation detail:
+ "string 1""string 2" -> 2 strings (works anyway)
+ "string"5 -> string, 5
+ "string"[ ] -> string, quotation
+ { "a"} -> array<string>
+
+ the rest of those examples all properly recognise the string, but not
+ the other object (number, quotation, etc)
+ this is fine for a regex-only implementation.
+ */
+ "string": {
+ pattern: /"(?:\\\S|[^"\\])*"/,
+ greedy: true,
+ inside: string_inside
+ }
+ };
+ var escape = function(str) {
+ return (str + "").replace(/([.?*+\^$\[\]\\(){}|\-])/g, "\\$1");
+ };
+ var arrToWordsRegExp = function(arr) {
+ return new RegExp(
+ "(^|\\s)(?:" + arr.map(escape).join("|") + ")(?=\\s|$)"
+ );
+ };
+ var builtins = {
+ "kernel-builtin": [
+ "or",
+ "2nipd",
+ "4drop",
+ "tuck",
+ "wrapper",
+ "nip",
+ "wrapper?",
+ "callstack>array",
+ "die",
+ "dupd",
+ "callstack",
+ "callstack?",
+ "3dup",
+ "hashcode",
+ "pick",
+ "4nip",
+ "build",
+ ">boolean",
+ "nipd",
+ "clone",
+ "5nip",
+ "eq?",
+ "?",
+ "=",
+ "swapd",
+ "2over",
+ "clear",
+ "2dup",
+ "get-retainstack",
+ "not",
+ "tuple?",
+ "dup",
+ "3nipd",
+ "call",
+ "-rotd",
+ "object",
+ "drop",
+ "assert=",
+ "assert?",
+ "-rot",
+ "execute",
+ "boa",
+ "get-callstack",
+ "curried?",
+ "3drop",
+ "pickd",
+ "overd",
+ "over",
+ "roll",
+ "3nip",
+ "swap",
+ "and",
+ "2nip",
+ "rotd",
+ "throw",
+ "(clone)",
+ "hashcode*",
+ "spin",
+ "reach",
+ "4dup",
+ "equal?",
+ "get-datastack",
+ "assert",
+ "2drop",
+ "<wrapper>",
+ "boolean?",
+ "identity-hashcode",
+ "identity-tuple?",
+ "null",
+ "composed?",
+ "new",
+ "5drop",
+ "rot",
+ "-roll",
+ "xor",
+ "identity-tuple",
+ "boolean"
+ ],
+ "other-builtin-syntax": [
+ // syntax
+ "=======",
+ "recursive",
+ "flushable",
+ ">>",
+ "<<<<<<",
+ "M\\",
+ "B",
+ "PRIVATE>",
+ "\\",
+ "======",
+ "final",
+ "inline",
+ "delimiter",
+ "deprecated",
+ "<PRIVATE",
+ ">>>>>>",
+ "<<<<<<<",
+ "parse-complex",
+ "malformed-complex",
+ "read-only",
+ ">>>>>>>",
+ "call-next-method",
+ "<<",
+ "foldable",
+ // literals
+ "$",
+ "$[",
+ "${"
+ ],
+ "sequences-builtin": [
+ "member-eq?",
+ "mismatch",
+ "append",
+ "assert-sequence=",
+ "longer",
+ "repetition",
+ "clone-like",
+ "3sequence",
+ "assert-sequence?",
+ "last-index-from",
+ "reversed",
+ "index-from",
+ "cut*",
+ "pad-tail",
+ "join-as",
+ "remove-eq!",
+ "concat-as",
+ "but-last",
+ "snip",
+ "nths",
+ "nth",
+ "sequence",
+ "longest",
+ "slice?",
+ "<slice>",
+ "remove-nth",
+ "tail-slice",
+ "empty?",
+ "tail*",
+ "member?",
+ "virtual-sequence?",
+ "set-length",
+ "drop-prefix",
+ "iota",
+ "unclip",
+ "bounds-error?",
+ "unclip-last-slice",
+ "non-negative-integer-expected",
+ "non-negative-integer-expected?",
+ "midpoint@",
+ "longer?",
+ "?set-nth",
+ "?first",
+ "rest-slice",
+ "prepend-as",
+ "prepend",
+ "fourth",
+ "sift",
+ "subseq-start",
+ "new-sequence",
+ "?last",
+ "like",
+ "first4",
+ "1sequence",
+ "reverse",
+ "slice",
+ "virtual@",
+ "repetition?",
+ "set-last",
+ "index",
+ "4sequence",
+ "max-length",
+ "set-second",
+ "immutable-sequence",
+ "first2",
+ "first3",
+ "supremum",
+ "unclip-slice",
+ "suffix!",
+ "insert-nth",
+ "tail",
+ "3append",
+ "short",
+ "suffix",
+ "concat",
+ "flip",
+ "immutable?",
+ "reverse!",
+ "2sequence",
+ "sum",
+ "delete-all",
+ "indices",
+ "snip-slice",
+ "<iota>",
+ "check-slice",
+ "sequence?",
+ "head",
+ "append-as",
+ "halves",
+ "sequence=",
+ "collapse-slice",
+ "?second",
+ "slice-error?",
+ "product",
+ "bounds-check?",
+ "bounds-check",
+ "immutable",
+ "virtual-exemplar",
+ "harvest",
+ "remove",
+ "pad-head",
+ "last",
+ "set-fourth",
+ "cartesian-product",
+ "remove-eq",
+ "shorten",
+ "shorter",
+ "reversed?",
+ "shorter?",
+ "shortest",
+ "head-slice",
+ "pop*",
+ "tail-slice*",
+ "but-last-slice",
+ "iota?",
+ "append!",
+ "cut-slice",
+ "new-resizable",
+ "head-slice*",
+ "sequence-hashcode",
+ "pop",
+ "set-nth",
+ "?nth",
+ "second",
+ "join",
+ "immutable-sequence?",
+ "<reversed>",
+ "3append-as",
+ "virtual-sequence",
+ "subseq?",
+ "remove-nth!",
+ "length",
+ "last-index",
+ "lengthen",
+ "assert-sequence",
+ "copy",
+ "move",
+ "third",
+ "first",
+ "tail?",
+ "set-first",
+ "prefix",
+ "bounds-error",
+ "<repetition>",
+ "exchange",
+ "surround",
+ "cut",
+ "min-length",
+ "set-third",
+ "push-all",
+ "head?",
+ "subseq-start-from",
+ "delete-slice",
+ "rest",
+ "sum-lengths",
+ "head*",
+ "infimum",
+ "remove!",
+ "glue",
+ "slice-error",
+ "subseq",
+ "push",
+ "replace-slice",
+ "subseq-as",
+ "unclip-last"
+ ],
+ "math-builtin": [
+ "number=",
+ "next-power-of-2",
+ "?1+",
+ "fp-special?",
+ "imaginary-part",
+ "float>bits",
+ "number?",
+ "fp-infinity?",
+ "bignum?",
+ "fp-snan?",
+ "denominator",
+ "gcd",
+ "*",
+ "+",
+ "fp-bitwise=",
+ "-",
+ "u>=",
+ "/",
+ ">=",
+ "bitand",
+ "power-of-2?",
+ "log2-expects-positive",
+ "neg?",
+ "<",
+ "log2",
+ ">",
+ "integer?",
+ "number",
+ "bits>double",
+ "2/",
+ "zero?",
+ "bits>float",
+ "float?",
+ "shift",
+ "ratio?",
+ "rect>",
+ "even?",
+ "ratio",
+ "fp-sign",
+ "bitnot",
+ ">fixnum",
+ "complex?",
+ "/i",
+ "integer>fixnum",
+ "/f",
+ "sgn",
+ ">bignum",
+ "next-float",
+ "u<",
+ "u>",
+ "mod",
+ "recip",
+ "rational",
+ ">float",
+ "2^",
+ "integer",
+ "fixnum?",
+ "neg",
+ "fixnum",
+ "sq",
+ "bignum",
+ ">rect",
+ "bit?",
+ "fp-qnan?",
+ "simple-gcd",
+ "complex",
+ "<fp-nan>",
+ "real",
+ ">fraction",
+ "double>bits",
+ "bitor",
+ "rem",
+ "fp-nan-payload",
+ "real-part",
+ "log2-expects-positive?",
+ "prev-float",
+ "align",
+ "unordered?",
+ "float",
+ "fp-nan?",
+ "abs",
+ "bitxor",
+ "integer>fixnum-strict",
+ "u<=",
+ "odd?",
+ "<=",
+ "/mod",
+ ">integer",
+ "real?",
+ "rational?",
+ "numerator"
+ ]
+ // that's all for now
+ };
+ Object.keys(builtins).forEach(function(k) {
+ factor[k].pattern = arrToWordsRegExp(builtins[k]);
+ });
+ var combinators = [
+ // kernel
+ "2bi",
+ "while",
+ "2tri",
+ "bi*",
+ "4dip",
+ "both?",
+ "same?",
+ "tri@",
+ "curry",
+ "prepose",
+ "3bi",
+ "?if",
+ "tri*",
+ "2keep",
+ "3keep",
+ "curried",
+ "2keepd",
+ "when",
+ "2bi*",
+ "2tri*",
+ "4keep",
+ "bi@",
+ "keepdd",
+ "do",
+ "unless*",
+ "tri-curry",
+ "if*",
+ "loop",
+ "bi-curry*",
+ "when*",
+ "2bi@",
+ "2tri@",
+ "with",
+ "2with",
+ "either?",
+ "bi",
+ "until",
+ "3dip",
+ "3curry",
+ "tri-curry*",
+ "tri-curry@",
+ "bi-curry",
+ "keepd",
+ "compose",
+ "2dip",
+ "if",
+ "3tri",
+ "unless",
+ "tuple",
+ "keep",
+ "2curry",
+ "tri",
+ "most",
+ "while*",
+ "dip",
+ "composed",
+ "bi-curry@",
+ // sequences
+ "find-last-from",
+ "trim-head-slice",
+ "map-as",
+ "each-from",
+ "none?",
+ "trim-tail",
+ "partition",
+ "if-empty",
+ "accumulate*",
+ "reject!",
+ "find-from",
+ "accumulate-as",
+ "collector-for-as",
+ "reject",
+ "map",
+ "map-sum",
+ "accumulate!",
+ "2each-from",
+ "follow",
+ "supremum-by",
+ "map!",
+ "unless-empty",
+ "collector",
+ "padding",
+ "reduce-index",
+ "replicate-as",
+ "infimum-by",
+ "trim-tail-slice",
+ "count",
+ "find-index",
+ "filter",
+ "accumulate*!",
+ "reject-as",
+ "map-integers",
+ "map-find",
+ "reduce",
+ "selector",
+ "interleave",
+ "2map",
+ "filter-as",
+ "binary-reduce",
+ "map-index-as",
+ "find",
+ "produce",
+ "filter!",
+ "replicate",
+ "cartesian-map",
+ "cartesian-each",
+ "find-index-from",
+ "map-find-last",
+ "3map-as",
+ "3map",
+ "find-last",
+ "selector-as",
+ "2map-as",
+ "2map-reduce",
+ "accumulate",
+ "each",
+ "each-index",
+ "accumulate*-as",
+ "when-empty",
+ "all?",
+ "collector-as",
+ "push-either",
+ "new-like",
+ "collector-for",
+ "2selector",
+ "push-if",
+ "2all?",
+ "map-reduce",
+ "3each",
+ "any?",
+ "trim-slice",
+ "2reduce",
+ "change-nth",
+ "produce-as",
+ "2each",
+ "trim",
+ "trim-head",
+ "cartesian-find",
+ "map-index",
+ // math
+ "if-zero",
+ "each-integer",
+ "unless-zero",
+ "(find-integer)",
+ "when-zero",
+ "find-last-integer",
+ "(all-integers?)",
+ "times",
+ "(each-integer)",
+ "find-integer",
+ "all-integers?",
+ // math.combinators
+ "unless-negative",
+ "if-positive",
+ "when-positive",
+ "when-negative",
+ "unless-positive",
+ "if-negative",
+ // combinators
+ "case",
+ "2cleave",
+ "cond>quot",
+ "case>quot",
+ "3cleave",
+ "wrong-values",
+ "to-fixed-point",
+ "alist>quot",
+ "cond",
+ "cleave",
+ "call-effect",
+ "recursive-hashcode",
+ "spread",
+ "deep-spread>quot",
+ // combinators.short-circuit
+ "2||",
+ "0||",
+ "n||",
+ "0&&",
+ "2&&",
+ "3||",
+ "1||",
+ "1&&",
+ "n&&",
+ "3&&",
+ // combinators.smart
+ "smart-unless*",
+ "keep-inputs",
+ "reduce-outputs",
+ "smart-when*",
+ "cleave>array",
+ "smart-with",
+ "smart-apply",
+ "smart-if",
+ "inputs/outputs",
+ "output>sequence-n",
+ "map-outputs",
+ "map-reduce-outputs",
+ "dropping",
+ "output>array",
+ "smart-map-reduce",
+ "smart-2map-reduce",
+ "output>array-n",
+ "nullary",
+ "input<sequence",
+ "append-outputs",
+ "drop-inputs",
+ "inputs",
+ "smart-2reduce",
+ "drop-outputs",
+ "smart-reduce",
+ "preserving",
+ "smart-when",
+ "outputs",
+ "append-outputs-as",
+ "smart-unless",
+ "smart-if*",
+ "sum-outputs",
+ "input<sequence-unsafe",
+ "output>sequence"
+ // tafn
+ ];
+ factor.combinators.pattern = arrToWordsRegExp(combinators);
+ Prism2.languages.factor = factor;
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages["false"] = {
+ "comment": {
+ pattern: /\{[^}]*\}/
+ },
+ "string": {
+ pattern: /"[^"]*"/,
+ greedy: true
+ },
+ "character-code": {
+ pattern: /'(?:[^\r]|\r\n?)/,
+ alias: "number"
+ },
+ "assembler-code": {
+ pattern: /\d+`/,
+ alias: "important"
+ },
+ "number": /\d+/,
+ "operator": /[-!#$%&'*+,./:;=>?@\\^_`|~ßø]/,
+ "punctuation": /\[|\]/,
+ "variable": /[a-z]/,
+ "non-standard": {
+ pattern: /[()<BDO®]/,
+ alias: "bold"
+ }
+ };
+ })(Prism);
+ Prism.languages["firestore-security-rules"] = Prism.languages.extend("clike", {
+ "comment": /\/\/.*/,
+ "keyword": /\b(?:allow|function|if|match|null|return|rules_version|service)\b/,
+ "operator": /&&|\|\||[<>!=]=?|[-+*/%]|\b(?:in|is)\b/
+ });
+ delete Prism.languages["firestore-security-rules"]["class-name"];
+ Prism.languages.insertBefore("firestore-security-rules", "keyword", {
+ "path": {
+ pattern: /(^|[\s(),])(?:\/(?:[\w\xA0-\uFFFF]+|\{[\w\xA0-\uFFFF]+(?:=\*\*)?\}|\$\([\w\xA0-\uFFFF.]+\)))+/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "variable": {
+ pattern: /\{[\w\xA0-\uFFFF]+(?:=\*\*)?\}|\$\([\w\xA0-\uFFFF.]+\)/,
+ inside: {
+ "operator": /=/,
+ "keyword": /\*\*/,
+ "punctuation": /[.$(){}]/
+ }
+ },
+ "punctuation": /\//
+ }
+ },
+ "method": {
+ // to make the pattern shorter, the actual method names are omitted
+ pattern: /(\ballow\s+)[a-z]+(?:\s*,\s*[a-z]+)*(?=\s*[:;])/,
+ lookbehind: true,
+ alias: "builtin",
+ inside: {
+ "punctuation": /,/
+ }
+ }
+ });
+ (function(Prism2) {
+ Prism2.languages.flow = Prism2.languages.extend("javascript", {});
+ Prism2.languages.insertBefore("flow", "keyword", {
+ "type": [
+ {
+ pattern: /\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,
+ alias: "class-name"
+ }
+ ]
+ });
+ Prism2.languages.flow["function-variable"].pattern = /(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i;
+ delete Prism2.languages.flow["parameter"];
+ Prism2.languages.insertBefore("flow", "operator", {
+ "flow-punctuation": {
+ pattern: /\{\||\|\}/,
+ alias: "punctuation"
+ }
+ });
+ if (!Array.isArray(Prism2.languages.flow.keyword)) {
+ Prism2.languages.flow.keyword = [Prism2.languages.flow.keyword];
+ }
+ Prism2.languages.flow.keyword.unshift(
+ {
+ pattern: /(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,
+ lookbehind: true
+ }
+ );
+ })(Prism);
+ Prism.languages.fortran = {
+ "quoted-number": {
+ pattern: /[BOZ](['"])[A-F0-9]+\1/i,
+ alias: "number"
+ },
+ "string": {
+ pattern: /(?:\b\w+_)?(['"])(?:\1\1|&(?:\r\n?|\n)(?:[ \t]*!.*(?:\r\n?|\n)|(?![ \t]*!))|(?!\1).)*(?:\1|&)/,
+ inside: {
+ "comment": {
+ pattern: /(&(?:\r\n?|\n)\s*)!.*/,
+ lookbehind: true
+ }
+ }
+ },
+ "comment": {
+ pattern: /!.*/,
+ greedy: true
+ },
+ "boolean": /\.(?:FALSE|TRUE)\.(?:_\w+)?/i,
+ "number": /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[ED][+-]?\d+)?(?:_\w+)?/i,
+ "keyword": [
+ // Types
+ /\b(?:CHARACTER|COMPLEX|DOUBLE ?PRECISION|INTEGER|LOGICAL|REAL)\b/i,
+ // END statements
+ /\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\b/i,
+ // Statements
+ /\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\b/i,
+ // Others
+ /\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEIF|ELSEWHERE|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\b/i
+ ],
+ "operator": [
+ /\*\*|\/\/|=>|[=\/]=|[<>]=?|::|[+\-*=%]|\.[A-Z]+\./i,
+ {
+ // Use lookbehind to prevent confusion with (/ /)
+ pattern: /(^|(?!\().)\/(?!\))/,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /\(\/|\/\)|[(),;:&]/
+ };
+ (function(Prism2) {
+ var FTL_EXPR = /[^<()"']|\((?:<expr>)*\)|<(?!#--)|<#--(?:[^-]|-(?!->))*-->|"(?:[^\\"]|\\.)*"|'(?:[^\\']|\\.)*'/.source;
+ for (var i = 0; i < 2; i++) {
+ FTL_EXPR = FTL_EXPR.replace(/<expr>/g, function() {
+ return FTL_EXPR;
+ });
+ }
+ FTL_EXPR = FTL_EXPR.replace(/<expr>/g, /[^\s\S]/.source);
+ var ftl = {
+ "comment": /<#--[\s\S]*?-->/,
+ "string": [
+ {
+ // raw string
+ pattern: /\br("|')(?:(?!\1)[^\\]|\\.)*\1/,
+ greedy: true
+ },
+ {
+ pattern: RegExp(/("|')(?:(?!\1|\$\{)[^\\]|\\.|\$\{(?:(?!\})(?:<expr>))*\})*\1/.source.replace(/<expr>/g, function() {
+ return FTL_EXPR;
+ })),
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: RegExp(/((?:^|[^\\])(?:\\\\)*)\$\{(?:(?!\})(?:<expr>))*\}/.source.replace(/<expr>/g, function() {
+ return FTL_EXPR;
+ })),
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "punctuation"
+ },
+ rest: null
+ }
+ }
+ }
+ }
+ ],
+ "keyword": /\b(?:as)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "builtin-function": {
+ pattern: /((?:^|[^?])\?\s*)\w+/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "function": /\b\w+(?=\s*\()/,
+ "number": /\b\d+(?:\.\d+)?\b/,
+ "operator": /\.\.[<*!]?|->|--|\+\+|&&|\|\||\?{1,2}|[-+*/%!=<>]=?|\b(?:gt|gte|lt|lte)\b/,
+ "punctuation": /[,;.:()[\]{}]/
+ };
+ ftl.string[1].inside.interpolation.inside.rest = ftl;
+ Prism2.languages.ftl = {
+ "ftl-comment": {
+ // the pattern is shortened to be more efficient
+ pattern: /^<#--[\s\S]*/,
+ alias: "comment"
+ },
+ "ftl-directive": {
+ pattern: /^<[\s\S]+>$/,
+ inside: {
+ "directive": {
+ pattern: /(^<\/?)[#@][a-z]\w*/i,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "punctuation": /^<\/?|\/?>$/,
+ "content": {
+ pattern: /\s*\S[\s\S]*/,
+ alias: "ftl",
+ inside: ftl
+ }
+ }
+ },
+ "ftl-interpolation": {
+ pattern: /^\$\{[\s\S]*\}$/,
+ inside: {
+ "punctuation": /^\$\{|\}$/,
+ "content": {
+ pattern: /\s*\S[\s\S]*/,
+ alias: "ftl",
+ inside: ftl
+ }
+ }
+ }
+ };
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var pattern = RegExp(/<#--[\s\S]*?-->|<\/?[#@][a-zA-Z](?:<expr>)*?>|\$\{(?:<expr>)*?\}/.source.replace(/<expr>/g, function() {
+ return FTL_EXPR;
+ }), "gi");
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "ftl", pattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "ftl");
+ });
+ })(Prism);
+ Prism.languages.gamemakerlanguage = Prism.languages.gml = Prism.languages.extend("clike", {
+ "keyword": /\b(?:break|case|continue|default|do|else|enum|exit|for|globalvar|if|repeat|return|switch|until|var|while)\b/,
+ "number": /(?:\b0x[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ulf]{0,4}/i,
+ "operator": /--|\+\+|[-+%/=]=?|!=|\*\*?=?|<[<=>]?|>[=>]?|&&?|\^\^?|\|\|?|~|\b(?:and|at|not|or|with|xor)\b/,
+ "constant": /\b(?:GM_build_date|GM_version|action_(?:continue|restart|reverse|stop)|all|gamespeed_(?:fps|microseconds)|global|local|noone|other|pi|pointer_(?:invalid|null)|self|timezone_(?:local|utc)|undefined|ev_(?:create|destroy|step|alarm|keyboard|mouse|collision|other|draw|draw_(?:begin|end|post|pre)|keypress|keyrelease|trigger|(?:left|middle|no|right)_button|(?:left|middle|right)_press|(?:left|middle|right)_release|mouse_(?:enter|leave|wheel_down|wheel_up)|global_(?:left|middle|right)_button|global_(?:left|middle|right)_press|global_(?:left|middle|right)_release|joystick(?:1|2)_(?:button1|button2|button3|button4|button5|button6|button7|button8|down|left|right|up)|outside|boundary|game_start|game_end|room_start|room_end|no_more_lives|animation_end|end_of_path|no_more_health|user\d|gui|gui_begin|gui_end|step_(?:begin|end|normal))|vk_(?:alt|anykey|backspace|control|delete|down|end|enter|escape|home|insert|left|nokey|pagedown|pageup|pause|printscreen|return|right|shift|space|tab|up|f\d|numpad\d|add|decimal|divide|lalt|lcontrol|lshift|multiply|ralt|rcontrol|rshift|subtract)|achievement_(?:filter_(?:all_players|favorites_only|friends_only)|friends_info|info|leaderboard_info|our_info|pic_loaded|show_(?:achievement|bank|friend_picker|leaderboard|profile|purchase_prompt|ui)|type_challenge|type_score_challenge)|asset_(?:font|object|path|room|script|shader|sound|sprite|tiles|timeline|unknown)|audio_(?:3d|falloff_(?:exponent_distance|exponent_distance_clamped|inverse_distance|inverse_distance_clamped|linear_distance|linear_distance_clamped|none)|mono|new_system|old_system|stereo)|bm_(?:add|complex|dest_alpha|dest_color|dest_colour|inv_dest_alpha|inv_dest_color|inv_dest_colour|inv_src_alpha|inv_src_color|inv_src_colour|max|normal|one|src_alpha|src_alpha_sat|src_color|src_colour|subtract|zero)|browser_(?:chrome|firefox|ie|ie_mobile|not_a_browser|opera|safari|safari_mobile|tizen|unknown|windows_store)|buffer_(?:bool|f16|f32|f64|fast|fixed|generalerror|grow|invalidtype|network|outofbounds|outofspace|s16|s32|s8|seek_end|seek_relative|seek_start|string|text|u16|u32|u64|u8|vbuffer|wrap)|c_(?:aqua|black|blue|dkgray|fuchsia|gray|green|lime|ltgray|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)|cmpfunc_(?:always|equal|greater|greaterequal|less|lessequal|never|notequal)|cr_(?:appstart|arrow|beam|cross|default|drag|handpoint|hourglass|none|size_all|size_nesw|size_ns|size_nwse|size_we|uparrow)|cull_(?:clockwise|counterclockwise|noculling)|device_(?:emulator|tablet)|device_ios_(?:ipad|ipad_retina|iphone|iphone5|iphone6|iphone6plus|iphone_retina|unknown)|display_(?:landscape|landscape_flipped|portrait|portrait_flipped)|dll_(?:cdecl|cdel|stdcall)|ds_type_(?:grid|list|map|priority|queue|stack)|ef_(?:cloud|ellipse|explosion|firework|flare|rain|ring|smoke|smokeup|snow|spark|star)|fa_(?:archive|bottom|center|directory|hidden|left|middle|readonly|right|sysfile|top|volumeid)|fb_login_(?:default|fallback_to_webview|forcing_safari|forcing_webview|no_fallback_to_webview|use_system_account)|iap_(?:available|canceled|ev_consume|ev_product|ev_purchase|ev_restore|ev_storeload|failed|purchased|refunded|status_available|status_loading|status_processing|status_restoring|status_unavailable|status_uninitialised|storeload_failed|storeload_ok|unavailable)|leaderboard_type_(?:number|time_mins_secs)|lighttype_(?:dir|point)|matrix_(?:projection|view|world)|mb_(?:any|left|middle|none|right)|network_(?:config_(?:connect_timeout|disable_reliable_udp|enable_reliable_udp|use_non_blocking_socket)|socket_(?:bluetooth|tcp|udp)|type_(?:connect|data|disconnect|non_blocking_connect))|of_challenge_(?:lose|tie|win)|os_(?:android|ios|linux|macosx|ps3|ps4|psvita|unknown|uwp|win32|win8native|windows|winphone|xboxone)|phy_debug_render_(?:aabb|collision_pairs|coms|core_shapes|joints|obb|shapes)|phy_joint_(?:anchor_1_x|anchor_1_y|anchor_2_x|anchor_2_y|angle|angle_limits|damping_ratio|frequency|length_1|length_2|lower_angle_limit|max_force|max_length|max_motor_force|max_motor_torque|max_torque|motor_force|motor_speed|motor_torque|reaction_force_x|reaction_force_y|reaction_torque|speed|translation|upper_angle_limit)|phy_particle_data_flag_(?:category|color|colour|position|typeflags|velocity)|phy_particle_flag_(?:colormixing|colourmixing|elastic|powder|spring|tensile|viscous|wall|water|zombie)|phy_particle_group_flag_(?:rigid|solid)|pr_(?:linelist|linestrip|pointlist|trianglefan|trianglelist|trianglestrip)|ps_(?:distr|shape)_(?:diamond|ellipse|gaussian|invgaussian|line|linear|rectangle)|pt_shape_(?:circle|cloud|disk|explosion|flare|line|pixel|ring|smoke|snow|spark|sphere|square|star)|ty_(?:real|string)|gp_(?:face\d|axislh|axislv|axisrh|axisrv|padd|padl|padr|padu|select|shoulderl|shoulderlb|shoulderr|shoulderrb|start|stickl|stickr)|lb_disp_(?:none|numeric|time_ms|time_sec)|lb_sort_(?:ascending|descending|none)|ov_(?:achievements|community|friends|gamegroup|players|settings)|ugc_(?:filetype_(?:community|microtrans)|list_(?:Favorited|Followed|Published|Subscribed|UsedOrPlayed|VotedDown|VotedOn|VotedUp|WillVoteLater)|match_(?:AllGuides|Artwork|Collections|ControllerBindings|IntegratedGuides|Items|Items_Mtx|Items_ReadyToUse|Screenshots|UsableInGame|Videos|WebGuides)|query_(?:AcceptedForGameRankedByAcceptanceDate|CreatedByFriendsRankedByPublicationDate|FavoritedByFriendsRankedByPublicationDate|NotYetRated)|query_RankedBy(?:NumTimesReported|PublicationDate|TextSearch|TotalVotesAsc|Trend|Vote|VotesUp)|result_success|sortorder_CreationOrder(?:Asc|Desc)|sortorder_(?:ForModeration|LastUpdatedDesc|SubscriptionDateDesc|TitleAsc|VoteScoreDesc)|visibility_(?:friends_only|private|public))|vertex_usage_(?:binormal|blendindices|blendweight|color|colour|depth|fog|normal|position|psize|sample|tangent|texcoord|textcoord)|vertex_type_(?:float\d|color|colour|ubyte4)|input_type|layerelementtype_(?:background|instance|oldtilemap|particlesystem|sprite|tile|tilemap|undefined)|se_(?:chorus|compressor|echo|equalizer|flanger|gargle|none|reverb)|text_type|tile_(?:flip|index_mask|mirror|rotate)|(?:obj|rm|scr|spr)\w+)\b/,
+ "variable": /\b(?:alarm|application_surface|async_load|background_(?:alpha|blend|color|colour|foreground|height|hspeed|htiled|index|showcolor|showcolour|visible|vspeed|vtiled|width|x|xscale|y|yscale)|bbox_(?:bottom|left|right|top)|browser_(?:height|width)|caption_(?:health|lives|score)|current_(?:day|hour|minute|month|second|time|weekday|year)|cursor_sprite|debug_mode|delta_time|direction|display_aa|error_(?:last|occurred)|event_(?:action|number|object|type)|fps|fps_real|friction|game_(?:display|project|save)_(?:id|name)|gamemaker_(?:pro|registered|version)|gravity|gravity_direction|(?:h|v)speed|health|iap_data|id|image_(?:alpha|angle|blend|depth|index|number|speed|xscale|yscale)|instance_(?:count|id)|keyboard_(?:key|lastchar|lastkey|string)|layer|lives|mask_index|mouse_(?:button|lastbutton|x|y)|object_index|os_(?:browser|device|type|version)|path_(?:endaction|index|orientation|position|positionprevious|scale|speed)|persistent|phy_(?:rotation|(?:col_normal|collision|com|linear_velocity|position|speed)_(?:x|y)|angular_(?:damping|velocity)|position_(?:x|y)previous|speed|linear_damping|bullet|fixed_rotation|active|mass|inertia|dynamic|kinematic|sleeping|collision_points)|pointer_(?:invalid|null)|room|room_(?:caption|first|height|last|persistent|speed|width)|score|secure_mode|show_(?:health|lives|score)|solid|speed|sprite_(?:height|index|width|xoffset|yoffset)|temp_directory|timeline_(?:index|loop|position|running|speed)|transition_(?:color|kind|steps)|undefined|view_(?:angle|current|enabled|(?:h|v)(?:border|speed)|(?:h|w|x|y)port|(?:h|w|x|y)view|object|surface_id|visible)|visible|webgl_enabled|working_directory|(?:x|y)(?:previous|start)|x|y|argument(?:_relitive|_count|\d)|argument|global|local|other|self)\b/
+ });
+ Prism.languages.gap = {
+ "shell": {
+ pattern: /^gap>[\s\S]*?(?=^gap>|$(?![\s\S]))/m,
+ greedy: true,
+ inside: {
+ "gap": {
+ pattern: /^(gap>).+(?:(?:\r(?:\n|(?!\n))|\n)>.*)*/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "punctuation": /^gap>/
+ }
+ },
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\'"])(?:'(?:[^\r\n\\']|\\.){1,10}'|"(?:[^\r\n\\"]|\\.)*"(?!")|"""[\s\S]*?""")/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "continuation": {
+ pattern: /([\r\n])>/,
+ lookbehind: true,
+ alias: "punctuation"
+ }
+ }
+ },
+ "keyword": /\b(?:Assert|Info|IsBound|QUIT|TryNextMethod|Unbind|and|atomic|break|continue|do|elif|else|end|fi|for|function|if|in|local|mod|not|od|or|quit|readonly|readwrite|rec|repeat|return|then|until|while)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "number": {
+ pattern: /(^|[^\w.]|\.\.)(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?:_[a-z]?)?(?=$|[^\w.]|\.\.)/,
+ lookbehind: true
+ },
+ "continuation": {
+ pattern: /([\r\n])>/,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "operator": /->|[-+*/^~=!]|<>|[<>]=?|:=|\.\./,
+ "punctuation": /[()[\]{},;.:]/
+ };
+ Prism.languages.gap.shell.inside.gap.inside = Prism.languages.gap;
+ Prism.languages.gcode = {
+ "comment": /;.*|\B\(.*?\)\B/,
+ "string": {
+ pattern: /"(?:""|[^"])*"/,
+ greedy: true
+ },
+ "keyword": /\b[GM]\d+(?:\.\d+)?\b/,
+ "property": /\b[A-Z]/,
+ "checksum": {
+ pattern: /(\*)\d+/,
+ lookbehind: true,
+ alias: "number"
+ },
+ // T0:0:0
+ "punctuation": /[:*]/
+ };
+ Prism.languages.gdscript = {
+ "comment": /#.*/,
+ "string": {
+ pattern: /@?(?:("|')(?:(?!\1)[^\n\\]|\\[\s\S])*\1(?!"|')|"""(?:[^\\]|\\[\s\S])*?""")/,
+ greedy: true
+ },
+ "class-name": {
+ // class_name Foo, extends Bar, class InnerClass
+ // export(int) var baz, export(int, 0) var i
+ // as Node
+ // const FOO: int = 9, var bar: bool = true
+ // func add(reference: Item, amount: int) -> Item:
+ pattern: /(^(?:class|class_name|extends)[ \t]+|^export\([ \t]*|\bas[ \t]+|(?:\b(?:const|var)[ \t]|[,(])[ \t]*\w+[ \t]*:[ \t]*|->[ \t]*)[a-zA-Z_]\w*/m,
+ lookbehind: true
+ },
+ "keyword": /\b(?:and|as|assert|break|breakpoint|class|class_name|const|continue|elif|else|enum|export|extends|for|func|if|in|is|master|mastersync|match|not|null|onready|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|signal|static|tool|var|while|yield)\b/,
+ "function": /\b[a-z_]\w*(?=[ \t]*\()/i,
+ "variable": /\$\w+/,
+ "number": [
+ /\b0b[01_]+\b|\b0x[\da-fA-F_]+\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.[\d_]+)(?:e[+-]?[\d_]+)?\b/,
+ /\b(?:INF|NAN|PI|TAU)\b/
+ ],
+ "constant": /\b[A-Z][A-Z_\d]*\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "operator": /->|:=|&&|\|\||<<|>>|[-+*/%&|!<>=]=?|[~^]/,
+ "punctuation": /[.:,;()[\]{}]/
+ };
+ Prism.languages.gedcom = {
+ "line-value": {
+ // Preceded by level, optional pointer, and tag
+ pattern: /(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?\w+ ).+/m,
+ lookbehind: true,
+ inside: {
+ "pointer": {
+ pattern: /^@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@$/,
+ alias: "variable"
+ }
+ }
+ },
+ "record": {
+ // Preceded by level and optional pointer
+ pattern: /(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?)\w+/m,
+ lookbehind: true,
+ alias: "tag"
+ },
+ "level": {
+ pattern: /(^[\t ]*)\d+/m,
+ lookbehind: true,
+ alias: "number"
+ },
+ "pointer": {
+ pattern: /@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@/,
+ alias: "variable"
+ }
+ };
+ Prism.languages.gettext = {
+ "comment": [
+ {
+ pattern: /# .*/,
+ greedy: true,
+ alias: "translator-comment"
+ },
+ {
+ pattern: /#\..*/,
+ greedy: true,
+ alias: "extracted-comment"
+ },
+ {
+ pattern: /#:.*/,
+ greedy: true,
+ alias: "reference-comment"
+ },
+ {
+ pattern: /#,.*/,
+ greedy: true,
+ alias: "flag-comment"
+ },
+ {
+ pattern: /#\|.*/,
+ greedy: true,
+ alias: "previously-untranslated-comment"
+ },
+ {
+ pattern: /#.*/,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /(^|[^\\])"(?:[^"\\]|\\.)*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /^msg(?:ctxt|id|id_plural|str)\b/m,
+ "number": /\b\d+\b/,
+ "punctuation": /[\[\]]/
+ };
+ Prism.languages.po = Prism.languages.gettext;
+ (function(Prism2) {
+ var tableRow = /(?:\r?\n|\r)[ \t]*\|.+\|(?:(?!\|).)*/.source;
+ Prism2.languages.gherkin = {
+ "pystring": {
+ pattern: /("""|''')[\s\S]+?\1/,
+ alias: "string"
+ },
+ "comment": {
+ pattern: /(^[ \t]*)#.*/m,
+ lookbehind: true
+ },
+ "tag": {
+ pattern: /(^[ \t]*)@\S*/m,
+ lookbehind: true
+ },
+ "feature": {
+ pattern: /((?:^|\r?\n|\r)[ \t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|Lastnost|Mak|Mogucnost|laH|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|Potrzeba biznesowa|perbogh|poQbogh malja'|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:\r\n]+(?:\r?\n|\r|$))*/,
+ lookbehind: true,
+ inside: {
+ "important": {
+ pattern: /(:)[^\r\n]+/,
+ lookbehind: true
+ },
+ "keyword": /[^:\r\n]+:/
+ }
+ },
+ "scenario": {
+ pattern: /(^[ \t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram Senaryo|Dyagram senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|EXAMPLZ|Examples|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|Grundlage|Hannergrond|ghantoH|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut chovnatlh|lut|lutmey|Lýsing Atburðarásar|Lýsing Dæma|MISHUN SRSLY|MISHUN|Menggariskan Senario|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan Senaryo|Plan senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo Deskripsyon|Senaryo deskripsyon|Senaryo|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie Uiteensetting|Situasie|Skenario konsep|Skenario|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa hwaer swa|Swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo-ho-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\r\n]*/m,
+ lookbehind: true,
+ inside: {
+ "important": {
+ pattern: /(:)[^\r\n]*/,
+ lookbehind: true
+ },
+ "keyword": /[^:\r\n]+:/
+ }
+ },
+ "table-body": {
+ // Look-behind is used to skip the table head, which has the same format as any table row
+ pattern: RegExp("(" + tableRow + ")(?:" + tableRow + ")+"),
+ lookbehind: true,
+ inside: {
+ "outline": {
+ pattern: /<[^>]+>/,
+ alias: "variable"
+ },
+ "td": {
+ pattern: /\s*[^\s|][^|]*/,
+ alias: "string"
+ },
+ "punctuation": /\|/
+ }
+ },
+ "table-head": {
+ pattern: RegExp(tableRow),
+ inside: {
+ "th": {
+ pattern: /\s*[^\s|][^|]*/,
+ alias: "variable"
+ },
+ "punctuation": /\|/
+ }
+ },
+ "atrule": {
+ pattern: /(^[ \t]+)(?:'a|'ach|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cand|Cando|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|DEN|Dato|De|Den youse gotta|Dengan|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|E|En|Entonces|Epi|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kad|Kada|Kadar|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Ma|Majd|Maka|Manawa|Mas|Men|Menawa|Mutta|Nalika|Nalikaning|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Och|Og|Oletetaan|Ond|Onda|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|Quan|Quand|Quando|qaSDI'|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|Un|Und|ugeholl|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadan|Zadani|Zadano|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \t])/m,
+ lookbehind: true
+ },
+ "string": {
+ pattern: /"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,
+ inside: {
+ "outline": {
+ pattern: /<[^>]+>/,
+ alias: "variable"
+ }
+ }
+ },
+ "outline": {
+ pattern: /<[^>]+>/,
+ alias: "variable"
+ }
+ };
+ })(Prism);
+ Prism.languages.git = {
+ /*
+ * A simple one line comment like in a git status command
+ * For instance:
+ * $ git status
+ * # On branch infinite-scroll
+ * # Your branch and 'origin/sharedBranches/frontendTeam/infinite-scroll' have diverged,
+ * # and have 1 and 2 different commits each, respectively.
+ * nothing to commit (working directory clean)
+ */
+ "comment": /^#.*/m,
+ /*
+ * Regexp to match the changed lines in a git diff output. Check the example below.
+ */
+ "deleted": /^[-–].*/m,
+ "inserted": /^\+.*/m,
+ /*
+ * a string (double and simple quote)
+ */
+ "string": /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ /*
+ * a git command. It starts with a random prompt finishing by a $, then "git" then some other parameters
+ * For instance:
+ * $ git add file.txt
+ */
+ "command": {
+ pattern: /^.*\$ git .*$/m,
+ inside: {
+ /*
+ * A git command can contain a parameter starting by a single or a double dash followed by a string
+ * For instance:
+ * $ git diff --cached
+ * $ git log -p
+ */
+ "parameter": /\s--?\w+/
+ }
+ },
+ /*
+ * Coordinates displayed in a git diff command
+ * For instance:
+ * $ git diff
+ * diff --git file.txt file.txt
+ * index 6214953..1d54a52 100644
+ * --- file.txt
+ * +++ file.txt
+ * @@ -1 +1,2 @@
+ * -Here's my tetx file
+ * +Here's my text file
+ * +And this is the second line
+ */
+ "coord": /^@@.*@@$/m,
+ /*
+ * Match a "commit [SHA1]" line in a git log output.
+ * For instance:
+ * $ git log
+ * commit a11a14ef7e26f2ca62d4b35eac455ce636d0dc09
+ * Author: lgiraudel
+ * Date: Mon Feb 17 11:18:34 2014 +0100
+ *
+ * Add of a new line
+ */
+ "commit-sha1": /^commit \w{40}$/m
+ };
+ Prism.languages.glsl = Prism.languages.extend("c", {
+ "keyword": /\b(?:active|asm|atomic_uint|attribute|[ibdu]?vec[234]|bool|break|buffer|case|cast|centroid|class|coherent|common|const|continue|d?mat[234](?:x[234])?|default|discard|do|double|else|enum|extern|external|false|filter|fixed|flat|float|for|fvec[234]|goto|half|highp|hvec[234]|[iu]?sampler2DMS(?:Array)?|[iu]?sampler2DRect|[iu]?samplerBuffer|[iu]?samplerCube|[iu]?samplerCubeArray|[iu]?sampler[123]D|[iu]?sampler[12]DArray|[iu]?image2DMS(?:Array)?|[iu]?image2DRect|[iu]?imageBuffer|[iu]?imageCube|[iu]?imageCubeArray|[iu]?image[123]D|[iu]?image[12]DArray|if|in|inline|inout|input|int|interface|invariant|layout|long|lowp|mediump|namespace|noinline|noperspective|out|output|partition|patch|precise|precision|public|readonly|resource|restrict|return|sample|sampler[12]DArrayShadow|sampler[12]DShadow|sampler2DRectShadow|sampler3DRect|samplerCubeArrayShadow|samplerCubeShadow|shared|short|sizeof|smooth|static|struct|subroutine|superp|switch|template|this|true|typedef|uint|uniform|union|unsigned|using|varying|void|volatile|while|writeonly)\b/
+ });
+ Prism.languages.gn = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string-literal": {
+ pattern: /(^|[^\\"])"(?:[^\r\n"\\]|\\.)*"/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\{[\s\S]*?\}|[a-zA-Z_]\w*|0x[a-fA-F0-9]{2})/,
+ lookbehind: true,
+ inside: {
+ "number": /^\$0x[\s\S]{2}$/,
+ "variable": /^\$\w+$/,
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "punctuation"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ // see below
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "keyword": /\b(?:else|if)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "builtin-function": {
+ // a few functions get special highlighting to improve readability
+ pattern: /\b(?:assert|defined|foreach|import|pool|print|template|tool|toolchain)(?=\s*\()/i,
+ alias: "keyword"
+ },
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "constant": /\b(?:current_cpu|current_os|current_toolchain|default_toolchain|host_cpu|host_os|root_build_dir|root_gen_dir|root_out_dir|target_cpu|target_gen_dir|target_os|target_out_dir)\b/,
+ "number": /-?\b\d+\b/,
+ "operator": /[-+!=<>]=?|&&|\|\|/,
+ "punctuation": /[(){}[\],.]/
+ };
+ Prism.languages.gn["string-literal"].inside["interpolation"].inside["expression"].inside = Prism.languages.gn;
+ Prism.languages.gni = Prism.languages.gn;
+ Prism.languages["linker-script"] = {
+ "comment": {
+ pattern: /(^|\s)\/\*[\s\S]*?(?:$|\*\/)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "identifier": {
+ pattern: /"[^"\r\n]*"/,
+ greedy: true
+ },
+ "location-counter": {
+ pattern: /\B\.\B/,
+ alias: "important"
+ },
+ "section": {
+ pattern: /(^|[^\w*])\.\w+\b/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "function": /\b[A-Z][A-Z_]*(?=\s*\()/,
+ "number": /\b(?:0[xX][a-fA-F0-9]+|\d+)[KM]?\b/,
+ "operator": />>=?|<<=?|->|\+\+|--|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?/,
+ "punctuation": /[(){},;]/
+ };
+ Prism.languages["ld"] = Prism.languages["linker-script"];
+ Prism.languages.go = Prism.languages.extend("clike", {
+ "string": {
+ pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,
+ "boolean": /\b(?:_|false|iota|nil|true)\b/,
+ "number": [
+ // binary and octal integers
+ /\b0(?:b[01_]+|o[0-7_]+)i?\b/i,
+ // hexadecimal integers and floats
+ /\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,
+ // decimal integers and floats
+ /(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i
+ ],
+ "operator": /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,
+ "builtin": /\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/
+ });
+ Prism.languages.insertBefore("go", "string", {
+ "char": {
+ pattern: /'(?:\\.|[^'\\\r\n]){0,10}'/,
+ greedy: true
+ }
+ });
+ delete Prism.languages.go["class-name"];
+ Prism.languages["go-mod"] = Prism.languages["go-module"] = {
+ "comment": {
+ pattern: /\/\/.*/,
+ greedy: true
+ },
+ "version": {
+ pattern: /(^|[\s()[\],])v\d+\.\d+\.\d+(?:[+-][-+.\w]*)?(?![^\s()[\],])/,
+ lookbehind: true,
+ alias: "number"
+ },
+ "go-version": {
+ pattern: /((?:^|\s)go\s+)\d+(?:\.\d+){1,2}/,
+ lookbehind: true,
+ alias: "number"
+ },
+ "keyword": {
+ pattern: /^([ \t]*)(?:exclude|go|module|replace|require|retract)\b/m,
+ lookbehind: true
+ },
+ "operator": /=>/,
+ "punctuation": /[()[\],]/
+ };
+ (function(Prism2) {
+ var interpolation = {
+ pattern: /((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{?|\}$/,
+ alias: "punctuation"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ }
+ }
+ };
+ Prism2.languages.gradle = Prism2.languages.extend("clike", {
+ "string": {
+ pattern: /'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,
+ greedy: true
+ },
+ "keyword": /\b(?:apply|def|dependencies|else|if|implementation|import|plugin|plugins|project|repositories|repository|sourceSets|tasks|val)\b/,
+ "number": /\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,
+ "operator": {
+ pattern: /(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,
+ lookbehind: true
+ },
+ "punctuation": /\.+|[{}[\];(),:$]/
+ });
+ Prism2.languages.insertBefore("gradle", "string", {
+ "shebang": {
+ pattern: /#!.+/,
+ alias: "comment",
+ greedy: true
+ },
+ "interpolation-string": {
+ pattern: /"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism2.languages.insertBefore("gradle", "punctuation", {
+ "spock-block": /\b(?:and|cleanup|expect|given|setup|then|when|where):/
+ });
+ Prism2.languages.insertBefore("gradle", "function", {
+ "annotation": {
+ pattern: /(^|[^.])@\w+/,
+ lookbehind: true,
+ alias: "punctuation"
+ }
+ });
+ interpolation.inside.expression.inside = Prism2.languages.gradle;
+ })(Prism);
+ Prism.languages.graphql = {
+ "comment": /#.*/,
+ "description": {
+ pattern: /(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,
+ greedy: true,
+ alias: "string",
+ inside: {
+ "language-markdown": {
+ pattern: /(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,
+ lookbehind: true,
+ inside: Prism.languages.markdown
+ }
+ }
+ },
+ "string": {
+ pattern: /"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,
+ greedy: true
+ },
+ "number": /(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,
+ "boolean": /\b(?:false|true)\b/,
+ "variable": /\$[a-z_]\w*/i,
+ "directive": {
+ pattern: /@[a-z_]\w*/i,
+ alias: "function"
+ },
+ "attr-name": {
+ pattern: /\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,
+ greedy: true
+ },
+ "atom-input": {
+ pattern: /\b[A-Z]\w*Input\b/,
+ alias: "class-name"
+ },
+ "scalar": /\b(?:Boolean|Float|ID|Int|String)\b/,
+ "constant": /\b[A-Z][A-Z_\d]*\b/,
+ "class-name": {
+ pattern: /(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,
+ lookbehind: true
+ },
+ "fragment": {
+ pattern: /(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "definition-mutation": {
+ pattern: /(\bmutation\s+)[a-zA-Z_]\w*/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "definition-query": {
+ pattern: /(\bquery\s+)[a-zA-Z_]\w*/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "keyword": /\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,
+ "operator": /[!=|&]|\.{3}/,
+ "property-query": /\w+(?=\s*\()/,
+ "object": /\w+(?=\s*\{)/,
+ "punctuation": /[!(){}\[\]:=,]/,
+ "property": /\w+/
+ };
+ Prism.hooks.add("after-tokenize", function afterTokenizeGraphql(env) {
+ if (env.language !== "graphql") {
+ return;
+ }
+ var validTokens = env.tokens.filter(function(token) {
+ return typeof token !== "string" && token.type !== "comment" && token.type !== "scalar";
+ });
+ var currentIndex = 0;
+ function getToken(offset2) {
+ return validTokens[currentIndex + offset2];
+ }
+ function isTokenType(types, offset2) {
+ offset2 = offset2 || 0;
+ for (var i2 = 0; i2 < types.length; i2++) {
+ var token = getToken(i2 + offset2);
+ if (!token || token.type !== types[i2]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function findClosingBracket(open, close) {
+ var stackHeight = 1;
+ for (var i2 = currentIndex; i2 < validTokens.length; i2++) {
+ var token = validTokens[i2];
+ var content = token.content;
+ if (token.type === "punctuation" && typeof content === "string") {
+ if (open.test(content)) {
+ stackHeight++;
+ } else if (close.test(content)) {
+ stackHeight--;
+ if (stackHeight === 0) {
+ return i2;
+ }
+ }
+ }
+ }
+ return -1;
+ }
+ function addAlias(token, alias) {
+ var aliases = token.alias;
+ if (!aliases) {
+ token.alias = aliases = [];
+ } else if (!Array.isArray(aliases)) {
+ token.alias = aliases = [aliases];
+ }
+ aliases.push(alias);
+ }
+ for (; currentIndex < validTokens.length; ) {
+ var startToken = validTokens[currentIndex++];
+ if (startToken.type === "keyword" && startToken.content === "mutation") {
+ var inputVariables = [];
+ if (isTokenType(["definition-mutation", "punctuation"]) && getToken(1).content === "(") {
+ currentIndex += 2;
+ var definitionEnd = findClosingBracket(/^\($/, /^\)$/);
+ if (definitionEnd === -1) {
+ continue;
+ }
+ for (; currentIndex < definitionEnd; currentIndex++) {
+ var t = getToken(0);
+ if (t.type === "variable") {
+ addAlias(t, "variable-input");
+ inputVariables.push(t.content);
+ }
+ }
+ currentIndex = definitionEnd + 1;
+ }
+ if (isTokenType(["punctuation", "property-query"]) && getToken(0).content === "{") {
+ currentIndex++;
+ addAlias(getToken(0), "property-mutation");
+ if (inputVariables.length > 0) {
+ var mutationEnd = findClosingBracket(/^\{$/, /^\}$/);
+ if (mutationEnd === -1) {
+ continue;
+ }
+ for (var i = currentIndex; i < mutationEnd; i++) {
+ var varToken = validTokens[i];
+ if (varToken.type === "variable" && inputVariables.indexOf(varToken.content) >= 0) {
+ addAlias(varToken, "variable-input");
+ }
+ }
+ }
+ }
+ }
+ }
+ });
+ (function(Prism2) {
+ var interpolation = {
+ pattern: /((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{?|\}$/,
+ alias: "punctuation"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ // see below
+ }
+ }
+ };
+ Prism2.languages.groovy = Prism2.languages.extend("clike", {
+ "string": {
+ // https://groovy-lang.org/syntax.html#_dollar_slashy_string
+ pattern: /'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,
+ greedy: true
+ },
+ "keyword": /\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,
+ "number": /\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,
+ "operator": {
+ pattern: /(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,
+ lookbehind: true
+ },
+ "punctuation": /\.+|[{}[\];(),:$]/
+ });
+ Prism2.languages.insertBefore("groovy", "string", {
+ "shebang": {
+ pattern: /#!.+/,
+ alias: "comment",
+ greedy: true
+ },
+ "interpolation-string": {
+ // TODO: Slash strings (e.g. /foo/) can contain line breaks but this will cause a lot of trouble with
+ // simple division (see JS regex), so find a fix maybe?
+ pattern: /"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,
+ greedy: true,
+ inside: {
+ "interpolation": interpolation,
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism2.languages.insertBefore("groovy", "punctuation", {
+ "spock-block": /\b(?:and|cleanup|expect|given|setup|then|when|where):/
+ });
+ Prism2.languages.insertBefore("groovy", "function", {
+ "annotation": {
+ pattern: /(^|[^.])@\w+/,
+ lookbehind: true,
+ alias: "punctuation"
+ }
+ });
+ interpolation.inside.expression.inside = Prism2.languages.groovy;
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.haml = {
+ // Multiline stuff should appear before the rest
+ "multiline-comment": {
+ pattern: /((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ].+)*/,
+ lookbehind: true,
+ alias: "comment"
+ },
+ "multiline-code": [
+ {
+ pattern: /((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ].*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ].+)/,
+ lookbehind: true,
+ inside: Prism2.languages.ruby
+ },
+ {
+ pattern: /((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ].*\|[\t ]*)*/,
+ lookbehind: true,
+ inside: Prism2.languages.ruby
+ }
+ ],
+ // See at the end of the file for known filters
+ "filter": {
+ pattern: /((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/,
+ lookbehind: true,
+ inside: {
+ "filter-name": {
+ pattern: /^:[\w-]+/,
+ alias: "symbol"
+ }
+ }
+ },
+ "markup": {
+ pattern: /((?:^|\r?\n|\r)[\t ]*)<.+/,
+ lookbehind: true,
+ inside: Prism2.languages.markup
+ },
+ "doctype": {
+ pattern: /((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,
+ lookbehind: true
+ },
+ "tag": {
+ // Allows for one nested group of braces
+ pattern: /((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w\-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^{}])+\}|\[[^\]]+\])*[\/<>]*/,
+ lookbehind: true,
+ inside: {
+ "attributes": [
+ {
+ // Lookbehind tries to prevent interpolations from breaking it all
+ // Allows for one nested group of braces
+ pattern: /(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,
+ lookbehind: true,
+ inside: Prism2.languages.ruby
+ },
+ {
+ pattern: /\([^)]+\)/,
+ inside: {
+ "attr-value": {
+ pattern: /(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,
+ lookbehind: true
+ },
+ "attr-name": /[\w:-]+(?=\s*!?=|\s*[,)])/,
+ "punctuation": /[=(),]/
+ }
+ },
+ {
+ pattern: /\[[^\]]+\]/,
+ inside: Prism2.languages.ruby
+ }
+ ],
+ "punctuation": /[<>]/
+ }
+ },
+ "code": {
+ pattern: /((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,
+ lookbehind: true,
+ inside: Prism2.languages.ruby
+ },
+ // Interpolations in plain text
+ "interpolation": {
+ pattern: /#\{[^}]+\}/,
+ inside: {
+ "delimiter": {
+ pattern: /^#\{|\}$/,
+ alias: "punctuation"
+ },
+ "ruby": {
+ pattern: /[\s\S]+/,
+ inside: Prism2.languages.ruby
+ }
+ }
+ },
+ "punctuation": {
+ pattern: /((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,
+ lookbehind: true
+ }
+ };
+ var filter_pattern = "((?:^|\\r?\\n|\\r)([\\t ]*)):{{filter_name}}(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+";
+ var filters = [
+ "css",
+ { filter: "coffee", language: "coffeescript" },
+ "erb",
+ "javascript",
+ "less",
+ "markdown",
+ "ruby",
+ "scss",
+ "textile"
+ ];
+ var all_filters = {};
+ for (var i = 0, l = filters.length; i < l; i++) {
+ var filter = filters[i];
+ filter = typeof filter === "string" ? { filter, language: filter } : filter;
+ if (Prism2.languages[filter.language]) {
+ all_filters["filter-" + filter.filter] = {
+ pattern: RegExp(filter_pattern.replace("{{filter_name}}", function() {
+ return filter.filter;
+ })),
+ lookbehind: true,
+ inside: {
+ "filter-name": {
+ pattern: /^:[\w-]+/,
+ alias: "symbol"
+ },
+ "text": {
+ pattern: /[\s\S]+/,
+ alias: [filter.language, "language-" + filter.language],
+ inside: Prism2.languages[filter.language]
+ }
+ }
+ };
+ }
+ }
+ Prism2.languages.insertBefore("haml", "filter", all_filters);
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.handlebars = {
+ "comment": /\{\{![\s\S]*?\}\}/,
+ "delimiter": {
+ pattern: /^\{\{\{?|\}\}\}?$/,
+ alias: "punctuation"
+ },
+ "string": /(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ "number": /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,
+ "boolean": /\b(?:false|true)\b/,
+ "block": {
+ pattern: /^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "brackets": {
+ pattern: /\[[^\]]+\]/,
+ inside: {
+ punctuation: /\[|\]/,
+ variable: /[\s\S]+/
+ }
+ },
+ "punctuation": /[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,
+ "variable": /[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/
+ };
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var handlebarsPattern = /\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "handlebars", handlebarsPattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "handlebars");
+ });
+ Prism2.languages.hbs = Prism2.languages.handlebars;
+ Prism2.languages.mustache = Prism2.languages.handlebars;
+ })(Prism);
+ Prism.languages.haskell = {
+ "comment": {
+ pattern: /(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,
+ lookbehind: true
+ },
+ "char": {
+ pattern: /'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,
+ alias: "string"
+ },
+ "string": {
+ pattern: /"(?:[^\\"]|\\(?:\S|\s+\\))*"/,
+ greedy: true
+ },
+ "keyword": /\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,
+ "import-statement": {
+ // The imported or hidden names are not included in this import
+ // statement. This is because we want to highlight those exactly like
+ // we do for the names in the program.
+ pattern: /(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /\b(?:as|hiding|import|qualified)\b/,
+ "punctuation": /\./
+ }
+ },
+ // These are builtin variables only. Constructors are highlighted later as a constant.
+ "builtin": /\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,
+ // decimal integers and floating point numbers | octal integers | hexadecimal integers
+ "number": /\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,
+ "operator": [
+ {
+ // infix operator
+ pattern: /`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,
+ greedy: true
+ },
+ {
+ // function composition
+ pattern: /(\s)\.(?=\s)/,
+ lookbehind: true
+ },
+ // Most of this is needed because of the meaning of a single '.'.
+ // If it stands alone freely, it is the function composition.
+ // It may also be a separator between a module name and an identifier => no
+ // operator. If it comes together with other special characters it is an
+ // operator too.
+ //
+ // This regex means: /[-!#$%*+=?&@|~.:<>^\\\/]+/ without /\./.
+ /[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/
+ ],
+ // In Haskell, nearly everything is a variable, do not highlight these.
+ "hvariable": {
+ pattern: /\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "constant": {
+ pattern: /\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.hs = Prism.languages.haskell;
+ Prism.languages.haxe = Prism.languages.extend("clike", {
+ "string": {
+ // Strings can be multi-line
+ pattern: /"(?:[^"\\]|\\[\s\S])*"/,
+ greedy: true
+ },
+ "class-name": [
+ {
+ pattern: /(\b(?:abstract|class|enum|extends|implements|interface|new|typedef)\s+)[A-Z_]\w*/,
+ lookbehind: true
+ },
+ // based on naming convention
+ /\b[A-Z]\w*/
+ ],
+ // The final look-ahead prevents highlighting of keywords if expressions such as "haxe.macro.Expr"
+ "keyword": /\bthis\b|\b(?:abstract|as|break|case|cast|catch|class|continue|default|do|dynamic|else|enum|extends|extern|final|for|from|function|if|implements|import|in|inline|interface|macro|new|null|operator|overload|override|package|private|public|return|static|super|switch|throw|to|try|typedef|untyped|using|var|while)(?!\.)\b/,
+ "function": {
+ pattern: /\b[a-z_]\w*(?=\s*(?:<[^<>]*>\s*)?\()/i,
+ greedy: true
+ },
+ "operator": /\.{3}|\+\+|--|&&|\|\||->|=>|(?:<<?|>{1,3}|[-+*/%!=&|^])=?|[?:~]/
+ });
+ Prism.languages.insertBefore("haxe", "string", {
+ "string-interpolation": {
+ pattern: /'(?:[^'\\]|\\[\s\S])*'/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /(^|[^\\])\$(?:\w+|\{[^{}]+\})/,
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{?|\}$/,
+ alias: "punctuation"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: Prism.languages.haxe
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism.languages.insertBefore("haxe", "class-name", {
+ "regex": {
+ pattern: /~\/(?:[^\/\\\r\n]|\\.)+\/[a-z]*/,
+ greedy: true,
+ inside: {
+ "regex-flags": /\b[a-z]+$/,
+ "regex-source": {
+ pattern: /^(~\/)[\s\S]+(?=\/$)/,
+ lookbehind: true,
+ alias: "language-regex",
+ inside: Prism.languages.regex
+ },
+ "regex-delimiter": /^~\/|\/$/
+ }
+ }
+ });
+ Prism.languages.insertBefore("haxe", "keyword", {
+ "preprocessor": {
+ pattern: /#(?:else|elseif|end|if)\b.*/,
+ alias: "property"
+ },
+ "metadata": {
+ pattern: /@:?[\w.]+/,
+ alias: "symbol"
+ },
+ "reification": {
+ pattern: /\$(?:\w+|(?=\{))/,
+ alias: "important"
+ }
+ });
+ Prism.languages.hcl = {
+ "comment": /(?:\/\/|#).*|\/\*[\s\S]*?(?:\*\/|$)/,
+ "heredoc": {
+ pattern: /<<-?(\w+\b)[\s\S]*?^[ \t]*\1/m,
+ greedy: true,
+ alias: "string"
+ },
+ "keyword": [
+ {
+ pattern: /(?:data|resource)\s+(?:"(?:\\[\s\S]|[^\\"])*")(?=\s+"[\w-]+"\s+\{)/i,
+ inside: {
+ "type": {
+ pattern: /(resource|data|\s+)(?:"(?:\\[\s\S]|[^\\"])*")/i,
+ lookbehind: true,
+ alias: "variable"
+ }
+ }
+ },
+ {
+ pattern: /(?:backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+(?=\{)/i,
+ inside: {
+ "type": {
+ pattern: /(backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+/i,
+ lookbehind: true,
+ alias: "variable"
+ }
+ }
+ },
+ /[\w-]+(?=\s+\{)/
+ ],
+ "property": [
+ /[-\w\.]+(?=\s*=(?!=))/,
+ /"(?:\\[\s\S]|[^\\"])+"(?=\s*[:=])/
+ ],
+ "string": {
+ pattern: /"(?:[^\\$"]|\\[\s\S]|\$(?:(?=")|\$+(?!\$)|[^"${])|\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\})*"/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /(^|[^$])\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\}/,
+ lookbehind: true,
+ inside: {
+ "type": {
+ pattern: /(\b(?:count|data|local|module|path|self|terraform|var)\b\.)[\w\*]+/i,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "keyword": /\b(?:count|data|local|module|path|self|terraform|var)\b/i,
+ "function": /\w+(?=\()/,
+ "string": {
+ pattern: /"(?:\\[\s\S]|[^\\"])*"/,
+ greedy: true
+ },
+ "number": /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,
+ "punctuation": /[!\$#%&'()*+,.\/;<=>@\[\\\]^`{|}~?:]/
+ }
+ }
+ }
+ },
+ "number": /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "punctuation": /[=\[\]{}]/
+ };
+ Prism.languages.hlsl = Prism.languages.extend("c", {
+ // Regarding keywords and class names:
+ // The list of all keywords was split into 'keyword' and 'class-name' tokens based on whether they are capitalized.
+ // https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-keywords
+ // https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-reserved-words
+ "class-name": [
+ Prism.languages.c["class-name"],
+ /\b(?:AppendStructuredBuffer|BlendState|Buffer|ByteAddressBuffer|CompileShader|ComputeShader|ConsumeStructuredBuffer|DepthStencilState|DepthStencilView|DomainShader|GeometryShader|Hullshader|InputPatch|LineStream|OutputPatch|PixelShader|PointStream|RWBuffer|RWByteAddressBuffer|RWStructuredBuffer|RWTexture(?:1D|1DArray|2D|2DArray|3D)|RasterizerState|RenderTargetView|SamplerComparisonState|SamplerState|StructuredBuffer|Texture(?:1D|1DArray|2D|2DArray|2DMS|2DMSArray|3D|Cube|CubeArray)|TriangleStream|VertexShader)\b/
+ ],
+ "keyword": [
+ // HLSL keyword
+ /\b(?:asm|asm_fragment|auto|break|case|catch|cbuffer|centroid|char|class|column_major|compile|compile_fragment|const|const_cast|continue|default|delete|discard|do|dynamic_cast|else|enum|explicit|export|extern|for|friend|fxgroup|goto|groupshared|if|in|inline|inout|interface|line|lineadj|linear|long|matrix|mutable|namespace|new|nointerpolation|noperspective|operator|out|packoffset|pass|pixelfragment|point|precise|private|protected|public|register|reinterpret_cast|return|row_major|sample|sampler|shared|short|signed|sizeof|snorm|stateblock|stateblock_state|static|static_cast|string|struct|switch|tbuffer|technique|technique10|technique11|template|texture|this|throw|triangle|triangleadj|try|typedef|typename|uniform|union|unorm|unsigned|using|vector|vertexfragment|virtual|void|volatile|while)\b/,
+ // scalar, vector, and matrix types
+ /\b(?:bool|double|dword|float|half|int|min(?:10float|12int|16(?:float|int|uint))|uint)(?:[1-4](?:x[1-4])?)?\b/
+ ],
+ // https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-grammar#floating-point-numbers
+ "number": /(?:(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+)?|\b0x[\da-fA-F]+)[fFhHlLuU]?\b/,
+ "boolean": /\b(?:false|true)\b/
+ });
+ Prism.languages.hoon = {
+ "comment": {
+ pattern: /::.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^"]*"|'[^']*'/,
+ greedy: true
+ },
+ "constant": /%(?:\.[ny]|[\w-]+)/,
+ "class-name": /@(?:[a-z0-9-]*[a-z0-9])?|\*/i,
+ "function": /(?:\+[-+] {2})?(?:[a-z](?:[a-z0-9-]*[a-z0-9])?)/,
+ "keyword": /\.[\^\+\*=\?]|![><:\.=\?!]|=[>|:,\.\-\^<+;/~\*\?]|\?[>|:\.\-\^<\+&~=@!]|\|[\$_%:\.\-\^~\*=@\?]|\+[|\$\+\*]|:[_\-\^\+~\*]|%[_:\.\-\^\+~\*=]|\^[|:\.\-\+&~\*=\?]|\$[|_%:<>\-\^&~@=\?]|;[:<\+;\/~\*=]|~[>|\$_%<\+\/&=\?!]|--|==/
+ };
+ (function(Prism2) {
+ function headerValueOf(name) {
+ return RegExp("(^(?:" + name + "):[ ]*(?![ ]))[^]+", "i");
+ }
+ Prism2.languages.http = {
+ "request-line": {
+ pattern: /^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,
+ inside: {
+ // HTTP Method
+ "method": {
+ pattern: /^[A-Z]+\b/,
+ alias: "property"
+ },
+ // Request Target e.g. http://example.com, /path/to/file
+ "request-target": {
+ pattern: /^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,
+ lookbehind: true,
+ alias: "url",
+ inside: Prism2.languages.uri
+ },
+ // HTTP Version
+ "http-version": {
+ pattern: /^(\s)HTTP\/[\d.]+/,
+ lookbehind: true,
+ alias: "property"
+ }
+ }
+ },
+ "response-status": {
+ pattern: /^HTTP\/[\d.]+ \d+ .+/m,
+ inside: {
+ // HTTP Version
+ "http-version": {
+ pattern: /^HTTP\/[\d.]+/,
+ alias: "property"
+ },
+ // Status Code
+ "status-code": {
+ pattern: /^(\s)\d+(?=\s)/,
+ lookbehind: true,
+ alias: "number"
+ },
+ // Reason Phrase
+ "reason-phrase": {
+ pattern: /^(\s).+/,
+ lookbehind: true,
+ alias: "string"
+ }
+ }
+ },
+ "header": {
+ pattern: /^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,
+ inside: {
+ "header-value": [
+ {
+ pattern: headerValueOf(/Content-Security-Policy/.source),
+ lookbehind: true,
+ alias: ["csp", "languages-csp"],
+ inside: Prism2.languages.csp
+ },
+ {
+ pattern: headerValueOf(/Public-Key-Pins(?:-Report-Only)?/.source),
+ lookbehind: true,
+ alias: ["hpkp", "languages-hpkp"],
+ inside: Prism2.languages.hpkp
+ },
+ {
+ pattern: headerValueOf(/Strict-Transport-Security/.source),
+ lookbehind: true,
+ alias: ["hsts", "languages-hsts"],
+ inside: Prism2.languages.hsts
+ },
+ {
+ pattern: headerValueOf(/[^:]+/.source),
+ lookbehind: true
+ }
+ ],
+ "header-name": {
+ pattern: /^[^:]+/,
+ alias: "keyword"
+ },
+ "punctuation": /^:/
+ }
+ }
+ };
+ var langs = Prism2.languages;
+ var httpLanguages = {
+ "application/javascript": langs.javascript,
+ "application/json": langs.json || langs.javascript,
+ "application/xml": langs.xml,
+ "text/xml": langs.xml,
+ "text/html": langs.html,
+ "text/css": langs.css,
+ "text/plain": langs.plain
+ };
+ var suffixTypes = {
+ "application/json": true,
+ "application/xml": true
+ };
+ function getSuffixPattern(contentType2) {
+ var suffix = contentType2.replace(/^[a-z]+\//, "");
+ var suffixPattern = "\\w+/(?:[\\w.-]+\\+)+" + suffix + "(?![+\\w.-])";
+ return "(?:" + contentType2 + "|" + suffixPattern + ")";
+ }
+ var options;
+ for (var contentType in httpLanguages) {
+ if (httpLanguages[contentType]) {
+ options = options || {};
+ var pattern = suffixTypes[contentType] ? getSuffixPattern(contentType) : contentType;
+ options[contentType.replace(/\//g, "-")] = {
+ pattern: RegExp(
+ "(" + /content-type:\s*/.source + pattern + /(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source + ")" + // This is a little interesting:
+ // The HTTP format spec required 1 empty line before the body to make everything unambiguous.
+ // However, when writing code by hand (e.g. to display on a website) people can forget about this,
+ // so we want to be liberal here. We will allow the empty line to be omitted if the first line of
+ // the body does not start with a [\w-] character (as headers do).
+ /[^ \t\w-][\s\S]*/.source,
+ "i"
+ ),
+ lookbehind: true,
+ inside: httpLanguages[contentType]
+ };
+ }
+ }
+ if (options) {
+ Prism2.languages.insertBefore("http", "header", options);
+ }
+ })(Prism);
+ Prism.languages.hpkp = {
+ "directive": {
+ pattern: /\b(?:includeSubDomains|max-age|pin-sha256|preload|report-to|report-uri|strict)(?=[\s;=]|$)/i,
+ alias: "property"
+ },
+ "operator": /=/,
+ "punctuation": /;/
+ };
+ Prism.languages.hsts = {
+ "directive": {
+ pattern: /\b(?:includeSubDomains|max-age|preload)(?=[\s;=]|$)/i,
+ alias: "property"
+ },
+ "operator": /=/,
+ "punctuation": /;/
+ };
+ Prism.languages.ichigojam = {
+ "comment": /(?:\B'|REM)(?:[^\n\r]*)/i,
+ "string": {
+ pattern: /"(?:""|[!#$%&'()*,\/:;<=>?^\w +\-.])*"/,
+ greedy: true
+ },
+ "number": /\B#[0-9A-F]+|\B`[01]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,
+ "keyword": /\b(?:BEEP|BPS|CASE|CLEAR|CLK|CLO|CLP|CLS|CLT|CLV|CONT|COPY|ELSE|END|FILE|FILES|FOR|GOSUB|GOTO|GSB|IF|INPUT|KBD|LED|LET|LIST|LOAD|LOCATE|LRUN|NEW|NEXT|OUT|PLAY|POKE|PRINT|PWM|REM|RENUM|RESET|RETURN|RIGHT|RTN|RUN|SAVE|SCROLL|SLEEP|SRND|STEP|STOP|SUB|TEMPO|THEN|TO|UART|VIDEO|WAIT)(?:\$|\b)/i,
+ "function": /\b(?:ABS|ANA|ASC|BIN|BTN|DEC|END|FREE|HELP|HEX|I2CR|I2CW|IN|INKEY|LEN|LINE|PEEK|RND|SCR|SOUND|STR|TICK|USR|VER|VPEEK|ZER)(?:\$|\b)/i,
+ "label": /(?:\B@\S+)/,
+ "operator": /<[=>]?|>=?|\|\||&&|[+\-*\/=|&^~!]|\b(?:AND|NOT|OR)\b/i,
+ "punctuation": /[\[,;:()\]]/
+ };
+ Prism.languages.icon = {
+ "comment": /#.*/,
+ "string": {
+ pattern: /(["'])(?:(?!\1)[^\\\r\n_]|\\.|_(?!\1)(?:\r\n|[\s\S]))*\1/,
+ greedy: true
+ },
+ "number": /\b(?:\d+r[a-z\d]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b|\.\d+\b/i,
+ "builtin-keyword": {
+ pattern: /&(?:allocated|ascii|clock|collections|cset|current|date|dateline|digits|dump|e|error(?:number|text|value)?|errout|fail|features|file|host|input|lcase|letters|level|line|main|null|output|phi|pi|pos|progname|random|regions|source|storage|subject|time|trace|ucase|version)\b/,
+ alias: "variable"
+ },
+ "directive": {
+ pattern: /\$\w+/,
+ alias: "builtin"
+ },
+ "keyword": /\b(?:break|by|case|create|default|do|else|end|every|fail|global|if|initial|invocable|link|local|next|not|of|procedure|record|repeat|return|static|suspend|then|to|until|while)\b/,
+ "function": /\b(?!\d)\w+(?=\s*[({]|\s*!\s*\[)/,
+ "operator": /[+-]:(?!=)|(?:[\/?@^%&]|\+\+?|--?|==?=?|~==?=?|\*\*?|\|\|\|?|<(?:->?|<?=?)|>>?=?)(?::=)?|:(?:=:?)?|[!.\\|~]/,
+ "punctuation": /[\[\](){},;]/
+ };
+ (function(Prism2) {
+ function nested(source, level) {
+ if (level <= 0) {
+ return /[]/.source;
+ } else {
+ return source.replace(/<SELF>/g, function() {
+ return nested(source, level - 1);
+ });
+ }
+ }
+ var stringPattern = /'[{}:=,](?:[^']|'')*'(?!')/;
+ var escape = {
+ pattern: /''/,
+ greedy: true,
+ alias: "operator"
+ };
+ var string = {
+ pattern: stringPattern,
+ greedy: true,
+ inside: {
+ "escape": escape
+ }
+ };
+ var argumentSource = nested(
+ /\{(?:[^{}']|'(?![{},'])|''|<STR>|<SELF>)*\}/.source.replace(/<STR>/g, function() {
+ return stringPattern.source;
+ }),
+ 8
+ );
+ var nestedMessage = {
+ pattern: RegExp(argumentSource),
+ inside: {
+ "message": {
+ pattern: /^(\{)[\s\S]+(?=\}$)/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "message-delimiter": {
+ pattern: /./,
+ alias: "punctuation"
+ }
+ }
+ };
+ Prism2.languages["icu-message-format"] = {
+ "argument": {
+ pattern: RegExp(argumentSource),
+ greedy: true,
+ inside: {
+ "content": {
+ pattern: /^(\{)[\s\S]+(?=\}$)/,
+ lookbehind: true,
+ inside: {
+ "argument-name": {
+ pattern: /^(\s*)[^{}:=,\s]+/,
+ lookbehind: true
+ },
+ "choice-style": {
+ // https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1ChoiceFormat.html#details
+ pattern: /^(\s*,\s*choice\s*,\s*)\S(?:[\s\S]*\S)?/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\|/,
+ "range": {
+ pattern: /^(\s*)[+-]?(?:\d+(?:\.\d*)?|\u221e)\s*[<#\u2264]/,
+ lookbehind: true,
+ inside: {
+ "operator": /[<#\u2264]/,
+ "number": /\S+/
+ }
+ },
+ rest: null
+ // see below
+ }
+ },
+ "plural-style": {
+ // https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/PluralFormat.html#:~:text=Patterns%20and%20Their%20Interpretation
+ pattern: /^(\s*,\s*(?:plural|selectordinal)\s*,\s*)\S(?:[\s\S]*\S)?/,
+ lookbehind: true,
+ inside: {
+ "offset": /^offset:\s*\d+/,
+ "nested-message": nestedMessage,
+ "selector": {
+ pattern: /=\d+|[^{}:=,\s]+/,
+ inside: {
+ "keyword": /^(?:few|many|one|other|two|zero)$/
+ }
+ }
+ }
+ },
+ "select-style": {
+ // https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/SelectFormat.html#:~:text=Patterns%20and%20Their%20Interpretation
+ pattern: /^(\s*,\s*select\s*,\s*)\S(?:[\s\S]*\S)?/,
+ lookbehind: true,
+ inside: {
+ "nested-message": nestedMessage,
+ "selector": {
+ pattern: /[^{}:=,\s]+/,
+ inside: {
+ "keyword": /^other$/
+ }
+ }
+ }
+ },
+ "keyword": /\b(?:choice|plural|select|selectordinal)\b/,
+ "arg-type": {
+ pattern: /\b(?:date|duration|number|ordinal|spellout|time)\b/,
+ alias: "keyword"
+ },
+ "arg-skeleton": {
+ pattern: /(,\s*)::[^{}:=,\s]+/,
+ lookbehind: true
+ },
+ "arg-style": {
+ pattern: /(,\s*)(?:currency|full|integer|long|medium|percent|short)(?=\s*$)/,
+ lookbehind: true
+ },
+ "arg-style-text": {
+ pattern: RegExp(/(^\s*,\s*(?=\S))/.source + nested(/(?:[^{}']|'[^']*'|\{(?:<SELF>)?\})+/.source, 8) + "$"),
+ lookbehind: true,
+ alias: "string"
+ },
+ "punctuation": /,/
+ }
+ },
+ "argument-delimiter": {
+ pattern: /./,
+ alias: "operator"
+ }
+ }
+ },
+ "escape": escape,
+ "string": string
+ };
+ nestedMessage.inside.message.inside = Prism2.languages["icu-message-format"];
+ Prism2.languages["icu-message-format"].argument.inside.content.inside["choice-style"].inside.rest = Prism2.languages["icu-message-format"];
+ })(Prism);
+ Prism.languages.idris = Prism.languages.extend("haskell", {
+ "comment": {
+ pattern: /(?:(?:--|\|\|\|).*$|\{-[\s\S]*?-\})/m
+ },
+ "keyword": /\b(?:Type|case|class|codata|constructor|corecord|data|do|dsl|else|export|if|implementation|implicit|import|impossible|in|infix|infixl|infixr|instance|interface|let|module|mutual|namespace|of|parameters|partial|postulate|private|proof|public|quoteGoal|record|rewrite|syntax|then|total|using|where|with)\b/,
+ "builtin": void 0
+ });
+ Prism.languages.insertBefore("idris", "keyword", {
+ "import-statement": {
+ pattern: /(^\s*import\s+)(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*/m,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ }
+ });
+ Prism.languages.idr = Prism.languages.idris;
+ (function(Prism2) {
+ Prism2.languages.ignore = {
+ // https://git-scm.com/docs/gitignore
+ "comment": /^#.*/m,
+ "entry": {
+ pattern: /\S(?:.*(?:(?:\\ )|\S))?/,
+ alias: "string",
+ inside: {
+ "operator": /^!|\*\*?|\?/,
+ "regex": {
+ pattern: /(^|[^\\])\[[^\[\]]*\]/,
+ lookbehind: true
+ },
+ "punctuation": /\//
+ }
+ }
+ };
+ Prism2.languages.gitignore = Prism2.languages.ignore;
+ Prism2.languages.hgignore = Prism2.languages.ignore;
+ Prism2.languages.npmignore = Prism2.languages.ignore;
+ })(Prism);
+ Prism.languages.inform7 = {
+ "string": {
+ pattern: /"[^"]*"/,
+ inside: {
+ "substitution": {
+ pattern: /\[[^\[\]]+\]/,
+ inside: {
+ "delimiter": {
+ pattern: /\[|\]/,
+ alias: "punctuation"
+ }
+ // See rest below
+ }
+ }
+ }
+ },
+ "comment": {
+ pattern: /\[[^\[\]]+\]/,
+ greedy: true
+ },
+ "title": {
+ pattern: /^[ \t]*(?:book|chapter|part(?! of)|section|table|volume)\b.+/im,
+ alias: "important"
+ },
+ "number": {
+ pattern: /(^|[^-])(?:\b\d+(?:\.\d+)?(?:\^\d+)?(?:(?!\d)\w+)?|\b(?:eight|eleven|five|four|nine|one|seven|six|ten|three|twelve|two))\b(?!-)/i,
+ lookbehind: true
+ },
+ "verb": {
+ pattern: /(^|[^-])\b(?:answering|applying to|are|asking|attacking|be(?:ing)?|burning|buying|called|carries|carry(?! out)|carrying|climbing|closing|conceal(?:ing|s)?|consulting|contain(?:ing|s)?|cutting|drinking|dropping|eating|enclos(?:es?|ing)|entering|examining|exiting|getting|giving|going|ha(?:s|ve|ving)|hold(?:ing|s)?|impl(?:ies|y)|incorporat(?:es?|ing)|inserting|is|jumping|kissing|listening|locking|looking|mean(?:ing|s)?|opening|provid(?:es?|ing)|pulling|pushing|putting|relat(?:es?|ing)|removing|searching|see(?:ing|s)?|setting|showing|singing|sleeping|smelling|squeezing|support(?:ing|s)?|swearing|switching|taking|tasting|telling|thinking|throwing|touching|turning|tying|unlock(?:ing|s)?|var(?:ies|y|ying)|waiting|waking|waving|wear(?:ing|s)?)\b(?!-)/i,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "keyword": {
+ pattern: /(^|[^-])\b(?:after|before|carry out|check|continue the action|definition(?= *:)|do nothing|else|end (?:if|the story|unless)|every turn|if|include|instead(?: of)?|let|move|no|now|otherwise|repeat|report|resume the story|rule for|running through|say(?:ing)?|stop the action|test|try(?:ing)?|understand|unless|use|when|while|yes)\b(?!-)/i,
+ lookbehind: true
+ },
+ "property": {
+ pattern: /(^|[^-])\b(?:adjacent(?! to)|carried|closed|concealed|contained|dark|described|edible|empty|enclosed|enterable|even|female|fixed in place|full|handled|held|improper-named|incorporated|inedible|invisible|lighted|lit|lock(?:able|ed)|male|marked for listing|mentioned|negative|neuter|non-(?:empty|full|recurring)|odd|opaque|open(?:able)?|plural-named|portable|positive|privately-named|proper-named|provided|publically-named|pushable between rooms|recurring|related|rubbing|scenery|seen|singular-named|supported|swinging|switch(?:able|ed(?: off| on)?)|touch(?:able|ed)|transparent|unconcealed|undescribed|unlit|unlocked|unmarked for listing|unmentioned|unopenable|untouchable|unvisited|variable|visible|visited|wearable|worn)\b(?!-)/i,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "position": {
+ pattern: /(^|[^-])\b(?:above|adjacent to|back side of|below|between|down|east|everywhere|front side|here|in|inside(?: from)?|north(?:east|west)?|nowhere|on(?: top of)?|other side|outside(?: from)?|parts? of|regionally in|south(?:east|west)?|through|up|west|within)\b(?!-)/i,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "type": {
+ pattern: /(^|[^-])\b(?:actions?|activit(?:ies|y)|actors?|animals?|backdrops?|containers?|devices?|directions?|doors?|holders?|kinds?|lists?|m[ae]n|nobody|nothing|nouns?|numbers?|objects?|people|persons?|player(?:'s holdall)?|regions?|relations?|rooms?|rule(?:book)?s?|scenes?|someone|something|supporters?|tables?|texts?|things?|time|vehicles?|wom[ae]n)\b(?!-)/i,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "punctuation": /[.,:;(){}]/
+ };
+ Prism.languages.inform7["string"].inside["substitution"].inside.rest = Prism.languages.inform7;
+ Prism.languages.inform7["string"].inside["substitution"].inside.rest.text = {
+ pattern: /\S(?:\s*\S)*/,
+ alias: "comment"
+ };
+ Prism.languages.ini = {
+ /**
+ * The component mimics the behavior of the Win32 API parser.
+ *
+ * @see {@link https://github.com/PrismJS/prism/issues/2775#issuecomment-787477723}
+ */
+ "comment": {
+ pattern: /(^[ \f\t\v]*)[#;][^\n\r]*/m,
+ lookbehind: true
+ },
+ "section": {
+ pattern: /(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,
+ lookbehind: true,
+ inside: {
+ "section-name": {
+ pattern: /(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,
+ lookbehind: true,
+ alias: "selector"
+ },
+ "punctuation": /\[|\]/
+ }
+ },
+ "key": {
+ pattern: /(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,
+ lookbehind: true,
+ alias: "attr-name"
+ },
+ "value": {
+ pattern: /(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,
+ lookbehind: true,
+ alias: "attr-value",
+ inside: {
+ "inner-value": {
+ pattern: /^("|').+(?=\1$)/,
+ lookbehind: true
+ }
+ }
+ },
+ "punctuation": /=/
+ };
+ Prism.languages.io = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\/\/.*|#.*)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "triple-quoted-string": {
+ pattern: /"""(?:\\[\s\S]|(?!""")[^\\])*"""/,
+ greedy: true,
+ alias: "string"
+ },
+ "string": {
+ pattern: /"(?:\\.|[^\\\r\n"])*"/,
+ greedy: true
+ },
+ "keyword": /\b(?:activate|activeCoroCount|asString|block|break|call|catch|clone|collectGarbage|compileString|continue|do|doFile|doMessage|doString|else|elseif|exit|for|foreach|forward|getEnvironmentVariable|getSlot|hasSlot|if|ifFalse|ifNil|ifNilEval|ifTrue|isActive|isNil|isResumable|list|message|method|parent|pass|pause|perform|performWithArgList|print|println|proto|raise|raiseResumable|removeSlot|resend|resume|schedulerSleepSeconds|self|sender|setSchedulerSleepSeconds|setSlot|shallowCopy|slotNames|super|system|then|thisBlock|thisContext|try|type|uniqueId|updateSlot|wait|while|write|yield)\b/,
+ "builtin": /\b(?:Array|AudioDevice|AudioMixer|BigNum|Block|Box|Buffer|CFunction|CGI|Color|Curses|DBM|DNSResolver|DOConnection|DOProxy|DOServer|Date|Directory|Duration|DynLib|Error|Exception|FFT|File|Fnmatch|Font|Future|GL|GLE|GLScissor|GLU|GLUCylinder|GLUQuadric|GLUSphere|GLUT|Host|Image|Importer|LinkList|List|Lobby|Locals|MD5|MP3Decoder|MP3Encoder|Map|Message|Movie|Notification|Number|Object|OpenGL|Point|Protos|Random|Regex|SGML|SGMLElement|SGMLParser|SQLite|Sequence|Server|ShowMessage|SleepyCat|SleepyCatCursor|Socket|SocketManager|Sound|Soup|Store|String|Tree|UDPSender|UPDReceiver|URL|User|Warning|WeakLink)\b/,
+ "boolean": /\b(?:false|nil|true)\b/,
+ "number": /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?/i,
+ "operator": /[=!*/%+\-^&|]=|>>?=?|<<?=?|:?:?=|\+\+?|--?|\*\*?|\/\/?|%|\|\|?|&&?|\b(?:and|not|or|return)\b|@@?|\?\??|\.\./,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.j = {
+ "comment": {
+ pattern: /\bNB\..*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /'(?:''|[^'\r\n])*'/,
+ greedy: true
+ },
+ "keyword": /\b(?:(?:CR|LF|adverb|conjunction|def|define|dyad|monad|noun|verb)\b|(?:assert|break|case|catch[dt]?|continue|do|else|elseif|end|fcase|for|for_\w+|goto_\w+|if|label_\w+|return|select|throw|try|while|whilst)\.)/,
+ "verb": {
+ // Negative look-ahead prevents bad highlighting
+ // of ^: ;. =. =: !. !:
+ pattern: /(?!\^:|;\.|[=!][.:])(?:\{(?:\.|::?)?|p(?:\.\.?|:)|[=!\]]|[<>+*\-%$|,#][.:]?|[?^]\.?|[;\[]:?|[~}"i][.:]|[ACeEIjLor]\.|(?:[_\/\\qsux]|_?\d):)/,
+ alias: "keyword"
+ },
+ "number": /\b_?(?:(?!\d:)\d+(?:\.\d+)?(?:(?:ad|ar|[ejpx])_?\d+(?:\.\d+)?)*(?:b_?[\da-z]+(?:\.[\da-z]+)?)?|_\b(?!\.))/,
+ "adverb": {
+ pattern: /[~}]|[\/\\]\.?|[bfM]\.|t[.:]/,
+ alias: "builtin"
+ },
+ "operator": /[=a][.:]|_\./,
+ "conjunction": {
+ pattern: /&(?:\.:?|:)?|[.:@][.:]?|[!D][.:]|[;dHT]\.|`:?|[\^LS]:|"/,
+ alias: "variable"
+ },
+ "punctuation": /[()]/
+ };
+ (function(Prism2) {
+ var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/;
+ var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
+ var className = {
+ pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
+ lookbehind: true,
+ inside: {
+ "namespace": {
+ pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "punctuation": /\./
+ }
+ };
+ Prism2.languages.java = Prism2.languages.extend("clike", {
+ "string": {
+ pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ "class-name": [
+ className,
+ {
+ // variables, parameters, and constructor references
+ // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)
+ pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),
+ lookbehind: true,
+ inside: className.inside
+ },
+ {
+ // class names based on keyword
+ // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)
+ pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + classNamePrefix + /[A-Z]\w*\b/.source),
+ lookbehind: true,
+ inside: className.inside
+ }
+ ],
+ "keyword": keywords,
+ "function": [
+ Prism2.languages.clike.function,
+ {
+ pattern: /(::\s*)[a-z_]\w*/,
+ lookbehind: true
+ }
+ ],
+ "number": /\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,
+ "operator": {
+ pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,
+ lookbehind: true
+ }
+ });
+ Prism2.languages.insertBefore("java", "string", {
+ "triple-quoted-string": {
+ // http://openjdk.java.net/jeps/355#Description
+ pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,
+ greedy: true,
+ alias: "string"
+ },
+ "char": {
+ pattern: /'(?:\\.|[^'\\\r\n]){1,6}'/,
+ greedy: true
+ }
+ });
+ Prism2.languages.insertBefore("java", "class-name", {
+ "annotation": {
+ pattern: /(^|[^.])@\w+(?:\s*\.\s*\w+)*/,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "generics": {
+ pattern: /<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,
+ inside: {
+ "class-name": className,
+ "keyword": keywords,
+ "punctuation": /[<>(),.:]/,
+ "operator": /[?&|]/
+ }
+ },
+ "import": [
+ {
+ pattern: RegExp(/(\bimport\s+)/.source + classNamePrefix + /(?:[A-Z]\w*|\*)(?=\s*;)/.source),
+ lookbehind: true,
+ inside: {
+ "namespace": className.inside.namespace,
+ "punctuation": /\./,
+ "operator": /\*/,
+ "class-name": /\w+/
+ }
+ },
+ {
+ pattern: RegExp(/(\bimport\s+static\s+)/.source + classNamePrefix + /(?:\w+|\*)(?=\s*;)/.source),
+ lookbehind: true,
+ alias: "static",
+ inside: {
+ "namespace": className.inside.namespace,
+ "static": /\b\w+$/,
+ "punctuation": /\./,
+ "operator": /\*/,
+ "class-name": /\w+/
+ }
+ }
+ ],
+ "namespace": {
+ pattern: RegExp(
+ /(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g, function() {
+ return keywords.source;
+ })
+ ),
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ }
+ });
+ })(Prism);
+ (function(Prism2) {
+ var comment = /\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/;
+ var constant = [
+ {
+ pattern: /\b(?:false|true)\b/i,
+ alias: "boolean"
+ },
+ {
+ pattern: /(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,
+ greedy: true,
+ lookbehind: true
+ },
+ /\b(?:null)\b/i,
+ /\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/
+ ];
+ var number = /\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i;
+ var operator = /<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/;
+ var punctuation = /[{}\[\](),:;]/;
+ Prism2.languages.php = {
+ "delimiter": {
+ pattern: /\?>$|^<\?(?:php(?=\s)|=)?/i,
+ alias: "important"
+ },
+ "comment": comment,
+ "variable": /\$+(?:\w+\b|(?=\{))/,
+ "package": {
+ pattern: /(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ "class-name-definition": {
+ pattern: /(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ "function-definition": {
+ pattern: /(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,
+ lookbehind: true,
+ alias: "function"
+ },
+ "keyword": [
+ {
+ pattern: /(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,
+ alias: "type-casting",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,
+ alias: "type-hint",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,
+ alias: "return-type",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,
+ alias: "type-declaration",
+ greedy: true
+ },
+ {
+ pattern: /(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,
+ alias: "type-declaration",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /\b(?:parent|self|static)(?=\s*::)/i,
+ alias: "static-context",
+ greedy: true
+ },
+ {
+ // yield from
+ pattern: /(\byield\s+)from\b/i,
+ lookbehind: true
+ },
+ // `class` is always a keyword unlike other keywords
+ /\bclass\b/i,
+ {
+ // https://www.php.net/manual/en/reserved.keywords.php
+ //
+ // keywords cannot be preceded by "->"
+ // the complex lookbehind means `(?<!(?:->|::)\s*)`
+ pattern: /((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,
+ lookbehind: true
+ }
+ ],
+ "argument-name": {
+ pattern: /([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,
+ lookbehind: true
+ },
+ "class-name": [
+ {
+ pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /(\|\s*)\b[a-z_]\w*(?!\\)\b/i,
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,
+ greedy: true
+ },
+ {
+ pattern: /(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,
+ alias: "class-name-fully-qualified",
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ {
+ pattern: /(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,
+ alias: "class-name-fully-qualified",
+ greedy: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ {
+ pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
+ alias: "class-name-fully-qualified",
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ {
+ pattern: /\b[a-z_]\w*(?=\s*\$)/i,
+ alias: "type-declaration",
+ greedy: true
+ },
+ {
+ pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
+ alias: ["class-name-fully-qualified", "type-declaration"],
+ greedy: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ {
+ pattern: /\b[a-z_]\w*(?=\s*::)/i,
+ alias: "static-context",
+ greedy: true
+ },
+ {
+ pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,
+ alias: ["class-name-fully-qualified", "static-context"],
+ greedy: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ {
+ pattern: /([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,
+ alias: "type-hint",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
+ alias: ["class-name-fully-qualified", "type-hint"],
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ {
+ pattern: /(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,
+ alias: "return-type",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
+ alias: ["class-name-fully-qualified", "return-type"],
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ }
+ ],
+ "constant": constant,
+ "function": {
+ pattern: /(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ },
+ "property": {
+ pattern: /(->\s*)\w+/,
+ lookbehind: true
+ },
+ "number": number,
+ "operator": operator,
+ "punctuation": punctuation
+ };
+ var string_interpolation = {
+ pattern: /\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,
+ lookbehind: true,
+ inside: Prism2.languages.php
+ };
+ var string = [
+ {
+ pattern: /<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,
+ alias: "nowdoc-string",
+ greedy: true,
+ inside: {
+ "delimiter": {
+ pattern: /^<<<'[^']+'|[a-z_]\w*;$/i,
+ alias: "symbol",
+ inside: {
+ "punctuation": /^<<<'?|[';]$/
+ }
+ }
+ }
+ },
+ {
+ pattern: /<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,
+ alias: "heredoc-string",
+ greedy: true,
+ inside: {
+ "delimiter": {
+ pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,
+ alias: "symbol",
+ inside: {
+ "punctuation": /^<<<"?|[";]$/
+ }
+ },
+ "interpolation": string_interpolation
+ }
+ },
+ {
+ pattern: /`(?:\\[\s\S]|[^\\`])*`/,
+ alias: "backtick-quoted-string",
+ greedy: true
+ },
+ {
+ pattern: /'(?:\\[\s\S]|[^\\'])*'/,
+ alias: "single-quoted-string",
+ greedy: true
+ },
+ {
+ pattern: /"(?:\\[\s\S]|[^\\"])*"/,
+ alias: "double-quoted-string",
+ greedy: true,
+ inside: {
+ "interpolation": string_interpolation
+ }
+ }
+ ];
+ Prism2.languages.insertBefore("php", "variable", {
+ "string": string,
+ "attribute": {
+ pattern: /#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,
+ greedy: true,
+ inside: {
+ "attribute-content": {
+ pattern: /^(#\[)[\s\S]+(?=\]$)/,
+ lookbehind: true,
+ // inside can appear subset of php
+ inside: {
+ "comment": comment,
+ "string": string,
+ "attribute-class-name": [
+ {
+ pattern: /([^:]|^)\b[a-z_]\w*(?!\\)\b/i,
+ alias: "class-name",
+ greedy: true,
+ lookbehind: true
+ },
+ {
+ pattern: /([^:]|^)(?:\\?\b[a-z_]\w*)+/i,
+ alias: [
+ "class-name",
+ "class-name-fully-qualified"
+ ],
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\\/
+ }
+ }
+ ],
+ "constant": constant,
+ "number": number,
+ "operator": operator,
+ "punctuation": punctuation
+ }
+ },
+ "delimiter": {
+ pattern: /^#\[|\]$/,
+ alias: "punctuation"
+ }
+ }
+ }
+ });
+ Prism2.hooks.add("before-tokenize", function(env) {
+ if (!/<\?/.test(env.code)) {
+ return;
+ }
+ var phpPattern = /<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "php", phpPattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "php");
+ });
+ })(Prism);
+ (function(Prism2) {
+ var javaDocLike = Prism2.languages.javadoclike = {
+ "parameter": {
+ pattern: /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,
+ lookbehind: true
+ },
+ "keyword": {
+ // keywords are the first word in a line preceded be an `@` or surrounded by curly braces.
+ // @word, {@word}
+ pattern: /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,
+ lookbehind: true
+ },
+ "punctuation": /[{}]/
+ };
+ function docCommentSupport(lang, callback) {
+ var tokenName = "doc-comment";
+ var grammar = Prism2.languages[lang];
+ if (!grammar) {
+ return;
+ }
+ var token = grammar[tokenName];
+ if (!token) {
+ var definition = {};
+ definition[tokenName] = {
+ pattern: /(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,
+ lookbehind: true,
+ alias: "comment"
+ };
+ grammar = Prism2.languages.insertBefore(lang, "comment", definition);
+ token = grammar[tokenName];
+ }
+ if (token instanceof RegExp) {
+ token = grammar[tokenName] = { pattern: token };
+ }
+ if (Array.isArray(token)) {
+ for (var i = 0, l = token.length; i < l; i++) {
+ if (token[i] instanceof RegExp) {
+ token[i] = { pattern: token[i] };
+ }
+ callback(token[i]);
+ }
+ } else {
+ callback(token);
+ }
+ }
+ function addSupport(languages, docLanguage) {
+ if (typeof languages === "string") {
+ languages = [languages];
+ }
+ languages.forEach(function(lang) {
+ docCommentSupport(lang, function(pattern) {
+ if (!pattern.inside) {
+ pattern.inside = {};
+ }
+ pattern.inside.rest = docLanguage;
+ });
+ });
+ }
+ Object.defineProperty(javaDocLike, "addSupport", { value: addSupport });
+ javaDocLike.addSupport(["java", "javascript", "php"], javaDocLike);
+ })(Prism);
+ (function(Prism2) {
+ var codeLinePattern = /(^(?:[\t ]*(?:\*\s*)*))[^*\s].*$/m;
+ var memberReference = /#\s*\w+(?:\s*\([^()]*\))?/.source;
+ var reference2 = /(?:\b[a-zA-Z]\w+\s*\.\s*)*\b[A-Z]\w*(?:\s*<mem>)?|<mem>/.source.replace(/<mem>/g, function() {
+ return memberReference;
+ });
+ Prism2.languages.javadoc = Prism2.languages.extend("javadoclike", {});
+ Prism2.languages.insertBefore("javadoc", "keyword", {
+ "reference": {
+ pattern: RegExp(/(@(?:exception|link|linkplain|see|throws|value)\s+(?:\*\s*)?)/.source + "(?:" + reference2 + ")"),
+ lookbehind: true,
+ inside: {
+ "function": {
+ pattern: /(#\s*)\w+(?=\s*\()/,
+ lookbehind: true
+ },
+ "field": {
+ pattern: /(#\s*)\w+/,
+ lookbehind: true
+ },
+ "namespace": {
+ pattern: /\b(?:[a-z]\w*\s*\.\s*)+/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "class-name": /\b[A-Z]\w*/,
+ "keyword": Prism2.languages.java.keyword,
+ "punctuation": /[#()[\],.]/
+ }
+ },
+ "class-name": {
+ // @param <T> the first generic type parameter
+ pattern: /(@param\s+)<[A-Z]\w*>/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /[.<>]/
+ }
+ },
+ "code-section": [
+ {
+ pattern: /(\{@code\s+(?!\s))(?:[^\s{}]|\s+(?![\s}])|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+(?=\s*\})/,
+ lookbehind: true,
+ inside: {
+ "code": {
+ // there can't be any HTML inside of {@code} tags
+ pattern: codeLinePattern,
+ lookbehind: true,
+ inside: Prism2.languages.java,
+ alias: "language-java"
+ }
+ }
+ },
+ {
+ pattern: /(<(code|pre|tt)>(?!<code>)\s*)\S(?:\S|\s+\S)*?(?=\s*<\/\2>)/,
+ lookbehind: true,
+ inside: {
+ "line": {
+ pattern: codeLinePattern,
+ lookbehind: true,
+ inside: {
+ // highlight HTML tags and entities
+ "tag": Prism2.languages.markup.tag,
+ "entity": Prism2.languages.markup.entity,
+ "code": {
+ // everything else is Java code
+ pattern: /.+/,
+ inside: Prism2.languages.java,
+ alias: "language-java"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "tag": Prism2.languages.markup.tag,
+ "entity": Prism2.languages.markup.entity
+ });
+ Prism2.languages.javadoclike.addSupport("java", Prism2.languages.javadoc);
+ })(Prism);
+ Prism.languages.javastacktrace = {
+ // java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
+ // Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
+ // Caused by: com.example.myproject.MyProjectServletException
+ // Caused by: MidLevelException: LowLevelException
+ // Suppressed: Resource$CloseFailException: Resource ID = 0
+ "summary": {
+ pattern: /^([\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?::.*)?$/m,
+ lookbehind: true,
+ inside: {
+ "keyword": {
+ pattern: /^([\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,
+ lookbehind: true
+ },
+ // the current thread if the summary starts with 'Exception in thread'
+ "string": {
+ pattern: /^(\s*)"[^"]*"/,
+ lookbehind: true
+ },
+ "exceptions": {
+ pattern: /^(:?\s*)[\w$.]+(?=:|$)/,
+ lookbehind: true,
+ inside: {
+ "class-name": /[\w$]+$/,
+ "namespace": /\b[a-z]\w*\b/,
+ "punctuation": /\./
+ }
+ },
+ "message": {
+ pattern: /(:\s*)\S.*/,
+ lookbehind: true,
+ alias: "string"
+ },
+ "punctuation": /:/
+ }
+ },
+ // at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
+ // at org.hsqldb.jdbc.Util.throwError(Unknown Source) here could be some notes
+ // at java.base/java.lang.Class.forName0(Native Method)
+ // at Util.<init>(Unknown Source)
+ // at com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101)
+ // at com.foo.loader//com.foo.bar.App.run(App.java:12)
+ // at acme@2.1/org.acme.Lib.test(Lib.java:80)
+ // at MyClass.mash(MyClass.java:9)
+ //
+ // More information:
+ // https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/StackTraceElement.html#toString()
+ //
+ // A valid Java module name is defined as:
+ // "A module name consists of one or more Java identifiers (§3.8) separated by "." tokens."
+ // https://docs.oracle.com/javase/specs/jls/se9/html/jls-6.html#jls-ModuleName
+ //
+ // A Java module version is defined by this class:
+ // https://docs.oracle.com/javase/9/docs/api/java/lang/module/ModuleDescriptor.Version.html
+ // This is the implementation of the `parse` method in JDK13:
+ // https://github.com/matcdac/jdk/blob/2305df71d1b7710266ae0956d73927a225132c0f/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java#L1108
+ // However, to keep this simple, a version will be matched by the pattern /@[\w$.+-]*/.
+ "stack-frame": {
+ pattern: /^([\t ]*)at (?:[\w$./]|@[\w$.+-]*\/)+(?:<init>)?\([^()]*\)/m,
+ lookbehind: true,
+ inside: {
+ "keyword": {
+ pattern: /^(\s*)at(?= )/,
+ lookbehind: true
+ },
+ "source": [
+ // (Main.java:15)
+ // (Main.scala:15)
+ {
+ pattern: /(\()\w+\.\w+:\d+(?=\))/,
+ lookbehind: true,
+ inside: {
+ "file": /^\w+\.\w+/,
+ "punctuation": /:/,
+ "line-number": {
+ pattern: /\b\d+\b/,
+ alias: "number"
+ }
+ }
+ },
+ // (Unknown Source)
+ // (Native Method)
+ // (...something...)
+ {
+ pattern: /(\()[^()]*(?=\))/,
+ lookbehind: true,
+ inside: {
+ "keyword": /^(?:Native Method|Unknown Source)$/
+ }
+ }
+ ],
+ "class-name": /[\w$]+(?=\.(?:<init>|[\w$]+)\()/,
+ "function": /(?:<init>|[\w$]+)(?=\()/,
+ "class-loader": {
+ pattern: /(\s)[a-z]\w*(?:\.[a-z]\w*)*(?=\/[\w@$.]*\/)/,
+ lookbehind: true,
+ alias: "namespace",
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "module": {
+ pattern: /([\s/])[a-z]\w*(?:\.[a-z]\w*)*(?:@[\w$.+-]*)?(?=\/)/,
+ lookbehind: true,
+ inside: {
+ "version": {
+ pattern: /(@)[\s\S]+/,
+ lookbehind: true,
+ alias: "number"
+ },
+ "punctuation": /[@.]/
+ }
+ },
+ "namespace": {
+ pattern: /(?:\b[a-z]\w*\.)+/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "punctuation": /[()/.]/
+ }
+ },
+ // ... 32 more
+ // ... 32 common frames omitted
+ "more": {
+ pattern: /^([\t ]*)\.{3} \d+ [a-z]+(?: [a-z]+)*/m,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\.{3}/,
+ "number": /\d+/,
+ "keyword": /\b[a-z]+(?: [a-z]+)*\b/
+ }
+ }
+ };
+ Prism.languages.jexl = {
+ "string": /(["'])(?:\\[\s\S]|(?!\1)[^\\])*\1/,
+ "transform": {
+ pattern: /(\|\s*)[a-zA-Zа-яА-Я_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$][\wа-яА-Я\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$]*/,
+ alias: "function",
+ lookbehind: true
+ },
+ "function": /[a-zA-Zа-яА-Я_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$][\wа-яА-Я\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$]*\s*(?=\()/,
+ "number": /\b\d+(?:\.\d+)?\b|\B\.\d+\b/,
+ "operator": /[<>!]=?|-|\+|&&|==|\|\|?|\/\/?|[?:*^%]/,
+ "boolean": /\b(?:false|true)\b/,
+ "keyword": /\bin\b/,
+ "punctuation": /[{}[\](),.]/
+ };
+ Prism.languages.jolie = Prism.languages.extend("clike", {
+ "string": {
+ pattern: /(^|[^\\])"(?:\\[\s\S]|[^"\\])*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /((?:\b(?:as|courier|embed|in|inputPort|outputPort|service)\b|@)[ \t]*)\w+/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:as|cH|comp|concurrent|constants|courier|cset|csets|default|define|else|embed|embedded|execution|exit|extender|for|foreach|forward|from|global|if|import|in|include|init|inputPort|install|instanceof|interface|is_defined|linkIn|linkOut|main|new|nullProcess|outputPort|over|private|provide|public|scope|sequential|service|single|spawn|synchronized|this|throw|throws|type|undef|until|while|with)\b/,
+ "function": /\b[a-z_]\w*(?=[ \t]*[@(])/i,
+ "number": /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?l?/i,
+ "operator": /-[-=>]?|\+[+=]?|<[<=]?|[>=*!]=?|&&|\|\||[?\/%^@|]/,
+ "punctuation": /[()[\]{},;.:]/,
+ "builtin": /\b(?:Byte|any|bool|char|double|enum|float|int|length|long|ranges|regex|string|undefined|void)\b/
+ });
+ Prism.languages.insertBefore("jolie", "keyword", {
+ "aggregates": {
+ pattern: /(\bAggregates\s*:\s*)(?:\w+(?:\s+with\s+\w+)?\s*,\s*)*\w+(?:\s+with\s+\w+)?/,
+ lookbehind: true,
+ inside: {
+ "keyword": /\bwith\b/,
+ "class-name": /\w+/,
+ "punctuation": /,/
+ }
+ },
+ "redirects": {
+ pattern: /(\bRedirects\s*:\s*)(?:\w+\s*=>\s*\w+\s*,\s*)*(?:\w+\s*=>\s*\w+)/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /,/,
+ "class-name": /\w+/,
+ "operator": /=>/
+ }
+ },
+ "property": {
+ pattern: /\b(?:Aggregates|[Ii]nterfaces|Java|Javascript|Jolie|[Ll]ocation|OneWay|[Pp]rotocol|Redirects|RequestResponse)\b(?=[ \t]*:)/
+ }
+ });
+ (function(Prism2) {
+ var interpolation = /\\\((?:[^()]|\([^()]*\))*\)/.source;
+ var string = RegExp(/(^|[^\\])"(?:[^"\r\n\\]|\\[^\r\n(]|__)*"/.source.replace(/__/g, function() {
+ return interpolation;
+ }));
+ var stringInterpolation = {
+ "interpolation": {
+ pattern: RegExp(/((?:^|[^\\])(?:\\{2})*)/.source + interpolation),
+ lookbehind: true,
+ inside: {
+ "content": {
+ pattern: /^(\\\()[\s\S]+(?=\)$)/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "punctuation": /^\\\(|\)$/
+ }
+ }
+ };
+ var jq = Prism2.languages.jq = {
+ "comment": /#.*/,
+ "property": {
+ pattern: RegExp(string.source + /(?=\s*:(?!:))/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: stringInterpolation
+ },
+ "string": {
+ pattern: string,
+ lookbehind: true,
+ greedy: true,
+ inside: stringInterpolation
+ },
+ "function": {
+ pattern: /(\bdef\s+)[a-z_]\w+/i,
+ lookbehind: true
+ },
+ "variable": /\B\$\w+/,
+ "property-literal": {
+ pattern: /\b[a-z_]\w*(?=\s*:(?!:))/i,
+ alias: "property"
+ },
+ "keyword": /\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,
+ "operator": [
+ {
+ pattern: /\|=?/,
+ alias: "pipe"
+ },
+ /\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|not|or)\b/
+ ],
+ "c-style-function": {
+ pattern: /\b[a-z_]\w*(?=\s*\()/i,
+ alias: "function"
+ },
+ "punctuation": /::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,
+ "dot": {
+ pattern: /\./,
+ alias: "important"
+ }
+ };
+ stringInterpolation.interpolation.inside.content.inside = jq;
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.typescript = Prism2.languages.extend("javascript", {
+ "class-name": {
+ pattern: /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,
+ lookbehind: true,
+ greedy: true,
+ inside: null
+ // see below
+ },
+ "builtin": /\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/
+ });
+ Prism2.languages.typescript.keyword.push(
+ /\b(?:abstract|declare|is|keyof|readonly|require)\b/,
+ // keywords that have to be followed by an identifier
+ /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,
+ // This is for `import type *, {}`
+ /\btype\b(?=\s*(?:[\{*]|$))/
+ );
+ delete Prism2.languages.typescript["parameter"];
+ delete Prism2.languages.typescript["literal-property"];
+ var typeInside = Prism2.languages.extend("typescript", {});
+ delete typeInside["class-name"];
+ Prism2.languages.typescript["class-name"].inside = typeInside;
+ Prism2.languages.insertBefore("typescript", "function", {
+ "decorator": {
+ pattern: /@[$\w\xA0-\uFFFF]+/,
+ inside: {
+ "at": {
+ pattern: /^@/,
+ alias: "operator"
+ },
+ "function": /^[\s\S]+/
+ }
+ },
+ "generic-function": {
+ // e.g. foo<T extends "bar" | "baz">( ...
+ pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
+ greedy: true,
+ inside: {
+ "function": /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
+ "generic": {
+ pattern: /<[\s\S]+/,
+ // everything after the first <
+ alias: "class-name",
+ inside: typeInside
+ }
+ }
+ }
+ });
+ Prism2.languages.ts = Prism2.languages.typescript;
+ })(Prism);
+ (function(Prism2) {
+ var javascript = Prism2.languages.javascript;
+ var type = /\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source;
+ var parameterPrefix = "(@(?:arg|argument|param|property)\\s+(?:" + type + "\\s+)?)";
+ Prism2.languages.jsdoc = Prism2.languages.extend("javadoclike", {
+ "parameter": {
+ // @param {string} foo - foo bar
+ pattern: RegExp(parameterPrefix + /(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ }
+ });
+ Prism2.languages.insertBefore("jsdoc", "keyword", {
+ "optional-parameter": {
+ // @param {string} [baz.foo="bar"] foo bar
+ pattern: RegExp(parameterPrefix + /\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),
+ lookbehind: true,
+ inside: {
+ "parameter": {
+ pattern: /(^\[)[$\w\xA0-\uFFFF\.]+/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "code": {
+ pattern: /(=)[\s\S]*(?=\]$)/,
+ lookbehind: true,
+ inside: javascript,
+ alias: "language-javascript"
+ },
+ "punctuation": /[=[\]]/
+ }
+ },
+ "class-name": [
+ {
+ pattern: RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g, function() {
+ return type;
+ })),
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ {
+ pattern: RegExp("(@[a-z]+\\s+)" + type),
+ lookbehind: true,
+ inside: {
+ "string": javascript.string,
+ "number": javascript.number,
+ "boolean": javascript.boolean,
+ "keyword": Prism2.languages.typescript.keyword,
+ "operator": /=>|\.\.\.|[&|?:*]/,
+ "punctuation": /[.,;=<>{}()[\]]/
+ }
+ }
+ ],
+ "example": {
+ pattern: /(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,
+ lookbehind: true,
+ inside: {
+ "code": {
+ pattern: /^([\t ]*(?:\*\s*)?)\S.*$/m,
+ lookbehind: true,
+ inside: javascript,
+ alias: "language-javascript"
+ }
+ }
+ }
+ });
+ Prism2.languages.javadoclike.addSupport("javascript", Prism2.languages.jsdoc);
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.insertBefore("javascript", "function-variable", {
+ "method-variable": {
+ pattern: RegExp("(\\.\\s*)" + Prism2.languages.javascript["function-variable"].pattern.source),
+ lookbehind: true,
+ alias: ["function-variable", "method", "function", "property-access"]
+ }
+ });
+ Prism2.languages.insertBefore("javascript", "function", {
+ "method": {
+ pattern: RegExp("(\\.\\s*)" + Prism2.languages.javascript["function"].source),
+ lookbehind: true,
+ alias: ["function", "property-access"]
+ }
+ });
+ Prism2.languages.insertBefore("javascript", "constant", {
+ "known-class-name": [
+ {
+ // standard built-ins
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
+ pattern: /\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,
+ alias: "class-name"
+ },
+ {
+ // errors
+ pattern: /\b(?:[A-Z]\w*)Error\b/,
+ alias: "class-name"
+ }
+ ]
+ });
+ function withId(source, flags) {
+ return RegExp(
+ source.replace(/<ID>/g, function() {
+ return /(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source;
+ }),
+ flags
+ );
+ }
+ Prism2.languages.insertBefore("javascript", "keyword", {
+ "imports": {
+ // https://tc39.es/ecma262/#sec-imports
+ pattern: withId(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),
+ lookbehind: true,
+ inside: Prism2.languages.javascript
+ },
+ "exports": {
+ // https://tc39.es/ecma262/#sec-exports
+ pattern: withId(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),
+ lookbehind: true,
+ inside: Prism2.languages.javascript
+ }
+ });
+ Prism2.languages.javascript["keyword"].unshift(
+ {
+ pattern: /\b(?:as|default|export|from|import)\b/,
+ alias: "module"
+ },
+ {
+ pattern: /\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,
+ alias: "control-flow"
+ },
+ {
+ pattern: /\bnull\b/,
+ alias: ["null", "nil"]
+ },
+ {
+ pattern: /\bundefined\b/,
+ alias: "nil"
+ }
+ );
+ Prism2.languages.insertBefore("javascript", "operator", {
+ "spread": {
+ pattern: /\.{3}/,
+ alias: "operator"
+ },
+ "arrow": {
+ pattern: /=>/,
+ alias: "operator"
+ }
+ });
+ Prism2.languages.insertBefore("javascript", "punctuation", {
+ "property-access": {
+ pattern: withId(/(\.\s*)#?<ID>/.source),
+ lookbehind: true
+ },
+ "maybe-class-name": {
+ pattern: /(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,
+ lookbehind: true
+ },
+ "dom": {
+ // this contains only a few commonly used DOM variables
+ pattern: /\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,
+ alias: "variable"
+ },
+ "console": {
+ pattern: /\bconsole(?=\s*\.)/,
+ alias: "class-name"
+ }
+ });
+ var maybeClassNameTokens = ["function", "function-variable", "method", "method-variable", "property-access"];
+ for (var i = 0; i < maybeClassNameTokens.length; i++) {
+ var token = maybeClassNameTokens[i];
+ var value = Prism2.languages.javascript[token];
+ if (Prism2.util.type(value) === "RegExp") {
+ value = Prism2.languages.javascript[token] = {
+ pattern: value
+ };
+ }
+ var inside = value.inside || {};
+ value.inside = inside;
+ inside["maybe-class-name"] = /^[A-Z][\s\S]*/;
+ }
+ })(Prism);
+ Prism.languages.json = {
+ "property": {
+ pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ greedy: true
+ },
+ "number": /-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,
+ "punctuation": /[{}[\],]/,
+ "operator": /:/,
+ "boolean": /\b(?:false|true)\b/,
+ "null": {
+ pattern: /\bnull\b/,
+ alias: "keyword"
+ }
+ };
+ Prism.languages.webmanifest = Prism.languages.json;
+ (function(Prism2) {
+ var string = /("|')(?:\\(?:\r\n?|\n|.)|(?!\1)[^\\\r\n])*\1/;
+ Prism2.languages.json5 = Prism2.languages.extend("json", {
+ "property": [
+ {
+ pattern: RegExp(string.source + "(?=\\s*:)"),
+ greedy: true
+ },
+ {
+ pattern: /(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/,
+ alias: "unquoted"
+ }
+ ],
+ "string": {
+ pattern: string,
+ greedy: true
+ },
+ "number": /[+-]?\b(?:NaN|Infinity|0x[a-fA-F\d]+)\b|[+-]?(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+\b)?/
+ });
+ })(Prism);
+ Prism.languages.jsonp = Prism.languages.extend("json", {
+ "punctuation": /[{}[\]();,.]/
+ });
+ Prism.languages.insertBefore("jsonp", "punctuation", {
+ "function": /(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*\()/
+ });
+ Prism.languages.jsstacktrace = {
+ "error-message": {
+ pattern: /^\S.*/m,
+ alias: "string"
+ },
+ "stack-frame": {
+ pattern: /(^[ \t]+)at[ \t].*/m,
+ lookbehind: true,
+ inside: {
+ "not-my-code": {
+ pattern: /^at[ \t]+(?!\s)(?:node\.js|<unknown>|.*(?:node_modules|\(<anonymous>\)|\(<unknown>|<anonymous>$|\(internal\/|\(node\.js)).*/m,
+ alias: "comment"
+ },
+ "filename": {
+ pattern: /(\bat\s+(?!\s)|\()(?:[a-zA-Z]:)?[^():]+(?=:)/,
+ lookbehind: true,
+ alias: "url"
+ },
+ "function": {
+ pattern: /(\bat\s+(?:new\s+)?)(?!\s)[_$a-zA-Z\xA0-\uFFFF<][.$\w\xA0-\uFFFF<>]*/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "punctuation": /[()]/,
+ "keyword": /\b(?:at|new)\b/,
+ "alias": {
+ pattern: /\[(?:as\s+)?(?!\s)[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\]/,
+ alias: "variable"
+ },
+ "line-number": {
+ pattern: /:\d+(?::\d+)?\b/,
+ alias: "number",
+ inside: {
+ "punctuation": /:/
+ }
+ }
+ }
+ }
+ };
+ (function(Prism2) {
+ var templateString = Prism2.languages.javascript["template-string"];
+ var templateLiteralPattern = templateString.pattern.source;
+ var interpolationObject = templateString.inside["interpolation"];
+ var interpolationPunctuationObject = interpolationObject.inside["interpolation-punctuation"];
+ var interpolationPattern = interpolationObject.pattern.source;
+ function createTemplate(language, tag) {
+ if (!Prism2.languages[language]) {
+ return void 0;
+ }
+ return {
+ pattern: RegExp("((?:" + tag + ")\\s*)" + templateLiteralPattern),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "template-punctuation": {
+ pattern: /^`|`$/,
+ alias: "string"
+ },
+ "embedded-code": {
+ pattern: /[\s\S]+/,
+ alias: language
+ }
+ }
+ };
+ }
+ Prism2.languages.javascript["template-string"] = [
+ // styled-jsx:
+ // css`a { color: #25F; }`
+ // styled-components:
+ // styled.h1`color: red;`
+ createTemplate("css", /\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),
+ // html`<p></p>`
+ // div.innerHTML = `<p></p>`
+ createTemplate("html", /\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),
+ // svg`<path fill="#fff" d="M55.37 ..."/>`
+ createTemplate("svg", /\bsvg/.source),
+ // md`# h1`, markdown`## h2`
+ createTemplate("markdown", /\b(?:markdown|md)/.source),
+ // gql`...`, graphql`...`, graphql.experimental`...`
+ createTemplate("graphql", /\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),
+ // sql`...`
+ createTemplate("sql", /\bsql/.source),
+ // vanilla template string
+ templateString
+ ].filter(Boolean);
+ function getPlaceholder(counter, language) {
+ return "___" + language.toUpperCase() + "_" + counter + "___";
+ }
+ function tokenizeWithHooks(code, grammar, language) {
+ var env = {
+ code,
+ grammar,
+ language
+ };
+ Prism2.hooks.run("before-tokenize", env);
+ env.tokens = Prism2.tokenize(env.code, env.grammar);
+ Prism2.hooks.run("after-tokenize", env);
+ return env.tokens;
+ }
+ function tokenizeInterpolationExpression(expression) {
+ var tempGrammar = {};
+ tempGrammar["interpolation-punctuation"] = interpolationPunctuationObject;
+ var tokens = Prism2.tokenize(expression, tempGrammar);
+ if (tokens.length === 3) {
+ var args = [1, 1];
+ args.push.apply(args, tokenizeWithHooks(tokens[1], Prism2.languages.javascript, "javascript"));
+ tokens.splice.apply(tokens, args);
+ }
+ return new Prism2.Token("interpolation", tokens, interpolationObject.alias, expression);
+ }
+ function tokenizeEmbedded(code, grammar, language) {
+ var _tokens = Prism2.tokenize(code, {
+ "interpolation": {
+ pattern: RegExp(interpolationPattern),
+ lookbehind: true
+ }
+ });
+ var placeholderCounter = 0;
+ var placeholderMap = {};
+ var embeddedCode = _tokens.map(function(token) {
+ if (typeof token === "string") {
+ return token;
+ } else {
+ var interpolationExpression = token.content;
+ var placeholder;
+ while (code.indexOf(placeholder = getPlaceholder(placeholderCounter++, language)) !== -1) {
+ }
+ placeholderMap[placeholder] = interpolationExpression;
+ return placeholder;
+ }
+ }).join("");
+ var embeddedTokens = tokenizeWithHooks(embeddedCode, grammar, language);
+ var placeholders = Object.keys(placeholderMap);
+ placeholderCounter = 0;
+ function walkTokens(tokens) {
+ for (var i = 0; i < tokens.length; i++) {
+ if (placeholderCounter >= placeholders.length) {
+ return;
+ }
+ var token = tokens[i];
+ if (typeof token === "string" || typeof token.content === "string") {
+ var placeholder = placeholders[placeholderCounter];
+ var s = typeof token === "string" ? token : (
+ /** @type {string} */
+ token.content
+ );
+ var index = s.indexOf(placeholder);
+ if (index !== -1) {
+ ++placeholderCounter;
+ var before = s.substring(0, index);
+ var middle = tokenizeInterpolationExpression(placeholderMap[placeholder]);
+ var after = s.substring(index + placeholder.length);
+ var replacement = [];
+ if (before) {
+ replacement.push(before);
+ }
+ replacement.push(middle);
+ if (after) {
+ var afterTokens = [after];
+ walkTokens(afterTokens);
+ replacement.push.apply(replacement, afterTokens);
+ }
+ if (typeof token === "string") {
+ tokens.splice.apply(tokens, [i, 1].concat(replacement));
+ i += replacement.length - 1;
+ } else {
+ token.content = replacement;
+ }
+ }
+ } else {
+ var content = token.content;
+ if (Array.isArray(content)) {
+ walkTokens(content);
+ } else {
+ walkTokens([content]);
+ }
+ }
+ }
+ }
+ walkTokens(embeddedTokens);
+ return new Prism2.Token(language, embeddedTokens, "language-" + language, code);
+ }
+ var supportedLanguages = {
+ "javascript": true,
+ "js": true,
+ "typescript": true,
+ "ts": true,
+ "jsx": true,
+ "tsx": true
+ };
+ Prism2.hooks.add("after-tokenize", function(env) {
+ if (!(env.language in supportedLanguages)) {
+ return;
+ }
+ function findTemplateStrings(tokens) {
+ for (var i = 0, l = tokens.length; i < l; i++) {
+ var token = tokens[i];
+ if (typeof token === "string") {
+ continue;
+ }
+ var content = token.content;
+ if (!Array.isArray(content)) {
+ if (typeof content !== "string") {
+ findTemplateStrings([content]);
+ }
+ continue;
+ }
+ if (token.type === "template-string") {
+ var embedded = content[1];
+ if (content.length === 3 && typeof embedded !== "string" && embedded.type === "embedded-code") {
+ var code = stringContent(embedded);
+ var alias = embedded.alias;
+ var language = Array.isArray(alias) ? alias[0] : alias;
+ var grammar = Prism2.languages[language];
+ if (!grammar) {
+ continue;
+ }
+ content[1] = tokenizeEmbedded(code, grammar, language);
+ }
+ } else {
+ findTemplateStrings(content);
+ }
+ }
+ }
+ findTemplateStrings(env.tokens);
+ });
+ function stringContent(value) {
+ if (typeof value === "string") {
+ return value;
+ } else if (Array.isArray(value)) {
+ return value.map(stringContent).join("");
+ } else {
+ return stringContent(value.content);
+ }
+ }
+ })(Prism);
+ Prism.languages.julia = {
+ "comment": {
+ // support one level of nested comments
+ // https://github.com/JuliaLang/julia/pull/6128
+ pattern: /(^|[^\\])(?:#=(?:[^#=]|=(?!#)|#(?!=)|#=(?:[^#=]|=(?!#)|#(?!=))*=#)*=#|#.*)/,
+ lookbehind: true
+ },
+ "regex": {
+ // https://docs.julialang.org/en/v1/manual/strings/#Regular-Expressions-1
+ pattern: /r"(?:\\.|[^"\\\r\n])*"[imsx]{0,4}/,
+ greedy: true
+ },
+ "string": {
+ // https://docs.julialang.org/en/v1/manual/strings/#String-Basics-1
+ // https://docs.julialang.org/en/v1/manual/strings/#non-standard-string-literals-1
+ // https://docs.julialang.org/en/v1/manual/running-external-programs/#Running-External-Programs-1
+ pattern: /"""[\s\S]+?"""|(?:\b\w+)?"(?:\\.|[^"\\\r\n])*"|`(?:[^\\`\r\n]|\\.)*`/,
+ greedy: true
+ },
+ "char": {
+ // https://docs.julialang.org/en/v1/manual/strings/#man-characters-1
+ pattern: /(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /(?:\b(?=\d)|\B(?=\.))(?:0[box])?(?:[\da-f]+(?:_[\da-f]+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[efp][+-]?\d+(?:_\d+)*)?j?/i,
+ // https://docs.julialang.org/en/v1/manual/mathematical-operations/
+ // https://docs.julialang.org/en/v1/manual/mathematical-operations/#Operator-Precedence-and-Associativity-1
+ "operator": /&&|\|\||[-+*^%÷⊻&$\\]=?|\/[\/=]?|!=?=?|\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,
+ "punctuation": /::?|[{}[\]();,.?]/,
+ // https://docs.julialang.org/en/v1/base/numbers/#Base.im
+ "constant": /\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\b|[πℯ]/
+ };
+ Prism.languages.keepalived = {
+ "comment": {
+ pattern: /[#!].*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\])(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,
+ lookbehind: true,
+ greedy: true
+ },
+ // support IPv4, IPv6, subnet mask
+ "ip": {
+ pattern: RegExp(
+ /\b(?:(?:(?:[\da-f]{1,4}:){7}[\da-f]{1,4}|(?:[\da-f]{1,4}:){6}:[\da-f]{1,4}|(?:[\da-f]{1,4}:){5}:(?:[\da-f]{1,4}:)?[\da-f]{1,4}|(?:[\da-f]{1,4}:){4}:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4}|(?:[\da-f]{1,4}:){3}:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4}|(?:[\da-f]{1,4}:){2}:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4}|(?:[\da-f]{1,4}:){6}<ipv4>|(?:[\da-f]{1,4}:){0,5}:<ipv4>|::(?:[\da-f]{1,4}:){0,5}<ipv4>|[\da-f]{1,4}::(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4}|::(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,7}:)(?:\/\d{1,3})?|<ipv4>(?:\/\d{1,2})?)\b/.source.replace(/<ipv4>/g, function() {
+ return /(?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d))/.source;
+ }),
+ "i"
+ ),
+ alias: "number"
+ },
+ // support *nix / Windows, directory / file
+ "path": {
+ pattern: /(\s)\/(?:[^\/\s]+\/)*[^\/\s]*|\b[a-zA-Z]:\\(?:[^\\\s]+\\)*[^\\\s]*/,
+ lookbehind: true,
+ alias: "string"
+ },
+ "variable": /\$\{?\w+\}?/,
+ "email": {
+ pattern: /[\w-]+@[\w-]+(?:\.[\w-]{2,3}){1,2}/,
+ alias: "string"
+ },
+ "conditional-configuration": {
+ pattern: /@\^?[\w-]+/,
+ alias: "variable"
+ },
+ "operator": /=/,
+ "property": /\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_security|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_policy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\b/,
+ "constant": /\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\b/,
+ "number": {
+ pattern: /(^|[^\w.-])-?\d+(?:\.\d+)?/,
+ lookbehind: true
+ },
+ "boolean": /\b(?:false|no|off|on|true|yes)\b/,
+ "punctuation": /[\{\}]/
+ };
+ Prism.languages.keyman = {
+ "comment": {
+ pattern: /\bc .*/i,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^"\r\n]*"|'[^'\r\n]*'/,
+ greedy: true
+ },
+ "virtual-key": {
+ pattern: /\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|[A-E]\d\d?|"[^"\r\n]*"|'[^'\r\n]*')\s*\]/i,
+ greedy: true,
+ alias: "function"
+ // alias for styles
+ },
+ // https://help.keyman.com/developer/language/guide/headers
+ "header-keyword": {
+ pattern: /&\w+/,
+ alias: "bold"
+ // alias for styles
+ },
+ "header-statement": {
+ pattern: /\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i,
+ alias: "bold"
+ // alias for styles
+ },
+ "rule-keyword": {
+ pattern: /\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i,
+ alias: "keyword"
+ },
+ "structural-keyword": {
+ pattern: /\b(?:ansi|begin|group|match|newcontext|nomatch|postkeystroke|readonly|unicode|using keys)\b/i,
+ alias: "keyword"
+ },
+ "compile-target": {
+ pattern: /\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,
+ alias: "property"
+ },
+ // U+####, x###, d### characters and numbers
+ "number": /\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,
+ "operator": /[+>\\$]|\.\./,
+ "punctuation": /[()=,]/
+ };
+ (function(Prism2) {
+ Prism2.languages.kotlin = Prism2.languages.extend("clike", {
+ "keyword": {
+ // The lookbehind prevents wrong highlighting of e.g. kotlin.properties.get
+ pattern: /(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,
+ lookbehind: true
+ },
+ "function": [
+ {
+ pattern: /(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,
+ greedy: true
+ },
+ {
+ pattern: /(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "number": /\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,
+ "operator": /\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/
+ });
+ delete Prism2.languages.kotlin["class-name"];
+ var interpolationInside = {
+ "interpolation-punctuation": {
+ pattern: /^\$\{?|\}$/,
+ alias: "punctuation"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: Prism2.languages.kotlin
+ }
+ };
+ Prism2.languages.insertBefore("kotlin", "string", {
+ // https://kotlinlang.org/spec/expressions.html#string-interpolation-expressions
+ "string-literal": [
+ {
+ pattern: /"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,
+ alias: "multiline",
+ inside: {
+ "interpolation": {
+ pattern: /\$(?:[a-z_]\w*|\{[^{}]*\})/i,
+ inside: interpolationInside
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ {
+ pattern: /"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,
+ alias: "singleline",
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,
+ lookbehind: true,
+ inside: interpolationInside
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ ],
+ "char": {
+ // https://kotlinlang.org/spec/expressions.html#character-literals
+ pattern: /'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,
+ greedy: true
+ }
+ });
+ delete Prism2.languages.kotlin["string"];
+ Prism2.languages.insertBefore("kotlin", "keyword", {
+ "annotation": {
+ pattern: /\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,
+ alias: "builtin"
+ }
+ });
+ Prism2.languages.insertBefore("kotlin", "function", {
+ "label": {
+ pattern: /\b\w+@|@\w+\b/,
+ alias: "symbol"
+ }
+ });
+ Prism2.languages.kt = Prism2.languages.kotlin;
+ Prism2.languages.kts = Prism2.languages.kotlin;
+ })(Prism);
+ (function(Prism2) {
+ var nonId = /\s\x00-\x1f\x22-\x2f\x3a-\x3f\x5b-\x5e\x60\x7b-\x7e/.source;
+ function wrapId(pattern, flags) {
+ return RegExp(pattern.replace(/<nonId>/g, nonId), flags);
+ }
+ Prism2.languages.kumir = {
+ "comment": {
+ pattern: /\|.*/
+ },
+ "prolog": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^\n\r"]*"|'[^\n\r']*'/,
+ greedy: true
+ },
+ "boolean": {
+ pattern: wrapId(/(^|[<nonId>])(?:да|нет)(?=[<nonId>]|$)/.source),
+ lookbehind: true
+ },
+ "operator-word": {
+ pattern: wrapId(/(^|[<nonId>])(?:и|или|не)(?=[<nonId>]|$)/.source),
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "system-variable": {
+ pattern: wrapId(/(^|[<nonId>])знач(?=[<nonId>]|$)/.source),
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "type": [
+ {
+ pattern: wrapId(/(^|[<nonId>])(?:вещ|лит|лог|сим|цел)(?:\x20*таб)?(?=[<nonId>]|$)/.source),
+ lookbehind: true,
+ alias: "builtin"
+ },
+ {
+ pattern: wrapId(/(^|[<nonId>])(?:компл|сканкод|файл|цвет)(?=[<nonId>]|$)/.source),
+ lookbehind: true,
+ alias: "important"
+ }
+ ],
+ /**
+ * Should be performed after searching for type names because of "таб".
+ * "таб" is a reserved word, but never used without a preceding type name.
+ * "НАЗНАЧИТЬ", "Фввод", and "Фвывод" are not reserved words.
+ */
+ "keyword": {
+ pattern: wrapId(/(^|[<nonId>])(?:алг|арг(?:\x20*рез)?|ввод|ВКЛЮЧИТЬ|вс[её]|выбор|вывод|выход|дано|для|до|дс|если|иначе|исп|использовать|кон(?:(?:\x20+|_)исп)?|кц(?:(?:\x20+|_)при)?|надо|нач|нс|нц|от|пауза|пока|при|раза?|рез|стоп|таб|то|утв|шаг)(?=[<nonId>]|$)/.source),
+ lookbehind: true
+ },
+ /** Should be performed after searching for reserved words. */
+ "name": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: wrapId(/(^|[<nonId>])[^\d<nonId>][^<nonId>]*(?:\x20+[^<nonId>]+)*(?=[<nonId>]|$)/.source),
+ lookbehind: true
+ },
+ /** Should be performed after searching for names. */
+ "number": {
+ pattern: wrapId(/(^|[<nonId>])(?:\B\$[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?=[<nonId>]|$)/.source, "i"),
+ lookbehind: true
+ },
+ /** Should be performed after searching for words. */
+ "punctuation": /:=|[(),:;\[\]]/,
+ /**
+ * Should be performed after searching for
+ * - numeric constants (because of "+" and "-");
+ * - punctuation marks (because of ":=" and "=").
+ */
+ "operator-char": {
+ pattern: /\*\*?|<[=>]?|>=?|[-+/=]/,
+ alias: "operator"
+ }
+ };
+ Prism2.languages.kum = Prism2.languages.kumir;
+ })(Prism);
+ Prism.languages.kusto = {
+ "comment": {
+ pattern: /\/\/.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /```[\s\S]*?```|[hH]?(?:"(?:[^\r\n\\"]|\\.)*"|'(?:[^\r\n\\']|\\.)*'|@(?:"[^\r\n"]*"|'[^\r\n']*'))/,
+ greedy: true
+ },
+ "verb": {
+ pattern: /(\|\s*)[a-z][\w-]*/i,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "command": {
+ pattern: /\.[a-z][a-z\d-]*\b/,
+ alias: "keyword"
+ },
+ "class-name": /\b(?:bool|datetime|decimal|dynamic|guid|int|long|real|string|timespan)\b/,
+ "keyword": /\b(?:access|alias|and|anti|as|asc|auto|between|by|(?:contains|(?:ends|starts)with|has(?:perfix|suffix)?)(?:_cs)?|database|declare|desc|external|from|fullouter|has_all|in|ingestion|inline|inner|innerunique|into|(?:left|right)(?:anti(?:semi)?|inner|outer|semi)?|let|like|local|not|of|on|or|pattern|print|query_parameters|range|restrict|schema|set|step|table|tables|to|view|where|with|matches\s+regex|nulls\s+(?:first|last))(?![\w-])/,
+ "boolean": /\b(?:false|null|true)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/,
+ "datetime": [
+ {
+ // RFC 822 + RFC 850
+ pattern: /\b(?:(?:Fri|Friday|Mon|Monday|Sat|Saturday|Sun|Sunday|Thu|Thursday|Tue|Tuesday|Wed|Wednesday)\s*,\s*)?\d{1,2}(?:\s+|-)(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)(?:\s+|-)\d{2}\s+\d{2}:\d{2}(?::\d{2})?(?:\s*(?:\b(?:[A-Z]|(?:[ECMT][DS]|GM|U)T)|[+-]\d{4}))?\b/,
+ alias: "number"
+ },
+ {
+ // ISO 8601
+ pattern: /[+-]?\b(?:\d{4}-\d{2}-\d{2}(?:[ T]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?)?|\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?)Z?/,
+ alias: "number"
+ }
+ ],
+ "number": /\b(?:0x[0-9A-Fa-f]+|\d+(?:\.\d+)?(?:[Ee][+-]?\d+)?)(?:(?:min|sec|[mnµ]s|[dhms]|microsecond|tick)\b)?|[+-]?\binf\b/,
+ "operator": /=>|[!=]~|[!=<>]=?|[-+*/%|]|\.\./,
+ "punctuation": /[()\[\]{},;.:]/
+ };
+ (function(Prism2) {
+ var funcPattern = /\\(?:[^a-z()[\]]|[a-z*]+)/i;
+ var insideEqu = {
+ "equation-command": {
+ pattern: funcPattern,
+ alias: "regex"
+ }
+ };
+ Prism2.languages.latex = {
+ "comment": /%.*/,
+ // the verbatim environment prints whitespace to the document
+ "cdata": {
+ pattern: /(\\begin\{((?:lstlisting|verbatim)\*?)\})[\s\S]*?(?=\\end\{\2\})/,
+ lookbehind: true
+ },
+ /*
+ * equations can be between $$ $$ or $ $ or \( \) or \[ \]
+ * (all are multiline)
+ */
+ "equation": [
+ {
+ pattern: /\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,
+ inside: insideEqu,
+ alias: "string"
+ },
+ {
+ pattern: /(\\begin\{((?:align|eqnarray|equation|gather|math|multline)\*?)\})[\s\S]*?(?=\\end\{\2\})/,
+ lookbehind: true,
+ inside: insideEqu,
+ alias: "string"
+ }
+ ],
+ /*
+ * arguments which are keywords or references are highlighted
+ * as keywords
+ */
+ "keyword": {
+ pattern: /(\\(?:begin|cite|documentclass|end|label|ref|usepackage)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,
+ lookbehind: true
+ },
+ "url": {
+ pattern: /(\\url\{)[^}]+(?=\})/,
+ lookbehind: true
+ },
+ /*
+ * section or chapter headlines are highlighted as bold so that
+ * they stand out more
+ */
+ "headline": {
+ pattern: /(\\(?:chapter|frametitle|paragraph|part|section|subparagraph|subsection|subsubparagraph|subsubsection|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\})/,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ "function": {
+ pattern: funcPattern,
+ alias: "selector"
+ },
+ "punctuation": /[[\]{}&]/
+ };
+ Prism2.languages.tex = Prism2.languages.latex;
+ Prism2.languages.context = Prism2.languages.latex;
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.latte = {
+ "comment": /^\{\*[\s\S]*/,
+ "latte-tag": {
+ // https://latte.nette.org/en/tags
+ pattern: /(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i,
+ lookbehind: true,
+ alias: "important"
+ },
+ "delimiter": {
+ pattern: /^\{\/?|\}$/,
+ alias: "punctuation"
+ },
+ "php": {
+ pattern: /\S(?:[\s\S]*\S)?/,
+ alias: "language-php",
+ inside: Prism2.languages.php
+ }
+ };
+ var markupLatte = Prism2.languages.extend("markup", {});
+ Prism2.languages.insertBefore("inside", "attr-value", {
+ "n-attr": {
+ pattern: /n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,
+ inside: {
+ "attr-name": {
+ pattern: /^[^\s=]+/,
+ alias: "important"
+ },
+ "attr-value": {
+ pattern: /=[\s\S]+/,
+ inside: {
+ "punctuation": [
+ /^=/,
+ {
+ pattern: /^(\s*)["']|["']$/,
+ lookbehind: true
+ }
+ ],
+ "php": {
+ pattern: /\S(?:[\s\S]*\S)?/,
+ inside: Prism2.languages.php
+ }
+ }
+ }
+ }
+ }
+ }, markupLatte.tag);
+ Prism2.hooks.add("before-tokenize", function(env) {
+ if (env.language !== "latte") {
+ return;
+ }
+ var lattePattern = /\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "latte", lattePattern);
+ env.grammar = markupLatte;
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "latte");
+ });
+ })(Prism);
+ Prism.languages.less = Prism.languages.extend("css", {
+ "comment": [
+ /\/\*[\s\S]*?\*\//,
+ {
+ pattern: /(^|[^\\])\/\/.*/,
+ lookbehind: true
+ }
+ ],
+ "atrule": {
+ pattern: /@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,
+ inside: {
+ "punctuation": /[:()]/
+ }
+ },
+ // selectors and mixins are considered the same
+ "selector": {
+ pattern: /(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,
+ inside: {
+ // mixin parameters
+ "variable": /@+[\w-]+/
+ }
+ },
+ "property": /(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,
+ "operator": /[+\-*\/]/
+ });
+ Prism.languages.insertBefore("less", "property", {
+ "variable": [
+ // Variable declaration (the colon must be consumed!)
+ {
+ pattern: /@[\w-]+\s*:/,
+ inside: {
+ "punctuation": /:/
+ }
+ },
+ // Variable usage
+ /@@?[\w-]+/
+ ],
+ "mixin-usage": {
+ pattern: /([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,
+ lookbehind: true,
+ alias: "function"
+ }
+ });
+ (function(Prism2) {
+ Prism2.languages.scheme = {
+ // this supports "normal" single-line comments:
+ // ; comment
+ // and (potentially nested) multiline comments:
+ // #| comment #| nested |# still comment |#
+ // (only 1 level of nesting is supported)
+ "comment": /;.*|#;\s*(?:\((?:[^()]|\([^()]*\))*\)|\[(?:[^\[\]]|\[[^\[\]]*\])*\])|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,
+ "string": {
+ pattern: /"(?:[^"\\]|\\.)*"/,
+ greedy: true
+ },
+ "symbol": {
+ pattern: /'[^()\[\]#'\s]+/,
+ greedy: true
+ },
+ "char": {
+ pattern: /#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|[\uD800-\uDBFF][\uDC00-\uDFFF]|\S)/,
+ greedy: true
+ },
+ "lambda-parameter": [
+ // https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_6.html#SEC30
+ {
+ pattern: /((?:^|[^'`#])[(\[]lambda\s+)(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)/,
+ lookbehind: true
+ },
+ {
+ pattern: /((?:^|[^'`#])[(\[]lambda\s+[(\[])[^()\[\]']+/,
+ lookbehind: true
+ }
+ ],
+ "keyword": {
+ pattern: /((?:^|[^'`#])[(\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\[\]\s]|$)/,
+ lookbehind: true
+ },
+ "builtin": {
+ // all functions of the base library of R7RS plus some of built-ins of R5Rs
+ pattern: /((?:^|[^'`#])[(\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\[\]\s]|$)/,
+ lookbehind: true
+ },
+ "operator": {
+ pattern: /((?:^|[^'`#])[(\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\[\]\s]|$)/,
+ lookbehind: true
+ },
+ "number": {
+ // The number pattern from [the R7RS spec](https://small.r7rs.org/attachment/r7rs.pdf).
+ //
+ // <number> := <num 2>|<num 8>|<num 10>|<num 16>
+ // <num R> := <prefix R><complex R>
+ // <complex R> := <real R>(?:@<real R>|<imaginary R>)?|<imaginary R>
+ // <imaginary R> := [+-](?:<ureal R>|(?:inf|nan)\.0)?i
+ // <real R> := [+-]?<ureal R>|[+-](?:inf|nan)\.0
+ // <ureal R> := <uint R>(?:\/<uint R>)?
+ // | <decimal R>
+ //
+ // <decimal 10> := (?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?
+ // <uint R> := <digit R>+
+ // <prefix R> := <radix R>(?:#[ei])?|(?:#[ei])?<radix R>
+ // <radix 2> := #b
+ // <radix 8> := #o
+ // <radix 10> := (?:#d)?
+ // <radix 16> := #x
+ // <digit 2> := [01]
+ // <digit 8> := [0-7]
+ // <digit 10> := \d
+ // <digit 16> := [0-9a-f]
+ //
+ // The problem with this grammar is that the resulting regex is way to complex, so we simplify by grouping all
+ // non-decimal bases together. This results in a decimal (dec) and combined binary, octal, and hexadecimal (box)
+ // pattern:
+ pattern: RegExp(SortedBNF({
+ "<ureal dec>": /\d+(?:\/\d+)|(?:\d+(?:\.\d*)?|\.\d+)(?:[esfdl][+-]?\d+)?/.source,
+ "<real dec>": /[+-]?<ureal dec>|[+-](?:inf|nan)\.0/.source,
+ "<imaginary dec>": /[+-](?:<ureal dec>|(?:inf|nan)\.0)?i/.source,
+ "<complex dec>": /<real dec>(?:@<real dec>|<imaginary dec>)?|<imaginary dec>/.source,
+ "<num dec>": /(?:#d(?:#[ei])?|#[ei](?:#d)?)?<complex dec>/.source,
+ "<ureal box>": /[0-9a-f]+(?:\/[0-9a-f]+)?/.source,
+ "<real box>": /[+-]?<ureal box>|[+-](?:inf|nan)\.0/.source,
+ "<imaginary box>": /[+-](?:<ureal box>|(?:inf|nan)\.0)?i/.source,
+ "<complex box>": /<real box>(?:@<real box>|<imaginary box>)?|<imaginary box>/.source,
+ "<num box>": /#[box](?:#[ei])?|(?:#[ei])?#[box]<complex box>/.source,
+ "<number>": /(^|[()\[\]\s])(?:<num dec>|<num box>)(?=[()\[\]\s]|$)/.source
+ }), "i"),
+ lookbehind: true
+ },
+ "boolean": {
+ pattern: /(^|[()\[\]\s])#(?:[ft]|false|true)(?=[()\[\]\s]|$)/,
+ lookbehind: true
+ },
+ "function": {
+ pattern: /((?:^|[^'`#])[(\[])(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\[\]\s]|$)/,
+ lookbehind: true
+ },
+ "identifier": {
+ pattern: /(^|[()\[\]\s])\|(?:[^\\|]|\\.)*\|(?=[()\[\]\s]|$)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "punctuation": /[()\[\]']/
+ };
+ function SortedBNF(grammar) {
+ for (var key in grammar) {
+ grammar[key] = grammar[key].replace(/<[\w\s]+>/g, function(key2) {
+ return "(?:" + grammar[key2].trim() + ")";
+ });
+ }
+ return grammar[key];
+ }
+ })(Prism);
+ (function(Prism2) {
+ var schemeExpression = /\((?:[^();"#\\]|\\[\s\S]|;.*(?!.)|"(?:[^"\\]|\\.)*"|#(?:\{(?:(?!#\})[\s\S])*#\}|[^{])|<expr>)*\)/.source;
+ var recursivenessLog2 = 5;
+ for (var i = 0; i < recursivenessLog2; i++) {
+ schemeExpression = schemeExpression.replace(/<expr>/g, function() {
+ return schemeExpression;
+ });
+ }
+ schemeExpression = schemeExpression.replace(/<expr>/g, /[^\s\S]/.source);
+ var lilypond = Prism2.languages.lilypond = {
+ "comment": /%(?:(?!\{).*|\{[\s\S]*?%\})/,
+ "embedded-scheme": {
+ pattern: RegExp(/(^|[=\s])#(?:"(?:[^"\\]|\\.)*"|[^\s()"]*(?:[^\s()]|<expr>))/.source.replace(/<expr>/g, function() {
+ return schemeExpression;
+ }), "m"),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "scheme": {
+ pattern: /^(#)[\s\S]+$/,
+ lookbehind: true,
+ alias: "language-scheme",
+ inside: {
+ "embedded-lilypond": {
+ pattern: /#\{[\s\S]*?#\}/,
+ greedy: true,
+ inside: {
+ "punctuation": /^#\{|#\}$/,
+ "lilypond": {
+ pattern: /[\s\S]+/,
+ alias: "language-lilypond",
+ inside: null
+ // see below
+ }
+ }
+ },
+ rest: Prism2.languages.scheme
+ }
+ },
+ "punctuation": /#/
+ }
+ },
+ "string": {
+ pattern: /"(?:[^"\\]|\\.)*"/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\\new\s+)[\w-]+/,
+ lookbehind: true
+ },
+ "keyword": {
+ pattern: /\\[a-z][-\w]*/i,
+ inside: {
+ "punctuation": /^\\/
+ }
+ },
+ "operator": /[=|]|<<|>>/,
+ "punctuation": {
+ pattern: /(^|[a-z\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\d))|[_^]\.?|[.!])|[{}()[\]<>^~]|\\[()[\]<>\\!]|--|__/,
+ lookbehind: true
+ },
+ "number": /\b\d+(?:\/\d+)?\b/
+ };
+ lilypond["embedded-scheme"].inside["scheme"].inside["embedded-lilypond"].inside["lilypond"].inside = lilypond;
+ Prism2.languages.ly = lilypond;
+ })(Prism);
+ Prism.languages.liquid = {
+ "comment": {
+ pattern: /(^\{%\s*comment\s*%\})[\s\S]+(?=\{%\s*endcomment\s*%\}$)/,
+ lookbehind: true
+ },
+ "delimiter": {
+ pattern: /^\{(?:\{\{|[%\{])-?|-?(?:\}\}|[%\}])\}$/,
+ alias: "punctuation"
+ },
+ "string": {
+ pattern: /"[^"]*"|'[^']*'/,
+ greedy: true
+ },
+ "keyword": /\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\b/,
+ "object": /\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\b/,
+ "function": [
+ {
+ pattern: /(\|\s*)\w+/,
+ lookbehind: true,
+ alias: "filter"
+ },
+ {
+ // array functions
+ pattern: /(\.\s*)(?:first|last|size)/,
+ lookbehind: true
+ }
+ ],
+ "boolean": /\b(?:false|nil|true)\b/,
+ "range": {
+ pattern: /\.\./,
+ alias: "operator"
+ },
+ // https://github.com/Shopify/liquid/blob/698f5e0d967423e013f6169d9111bd969bd78337/lib/liquid/lexer.rb#L21
+ "number": /\b\d+(?:\.\d+)?\b/,
+ "operator": /[!=]=|<>|[<>]=?|[|?:=-]|\b(?:and|contains(?=\s)|or)\b/,
+ "punctuation": /[.,\[\]()]/,
+ "empty": {
+ pattern: /\bempty\b/,
+ alias: "keyword"
+ }
+ };
+ Prism.hooks.add("before-tokenize", function(env) {
+ var liquidPattern = /\{%\s*comment\s*%\}[\s\S]*?\{%\s*endcomment\s*%\}|\{(?:%[\s\S]*?%|\{\{[\s\S]*?\}\}|\{[\s\S]*?\})\}/g;
+ var insideRaw = false;
+ Prism.languages["markup-templating"].buildPlaceholders(env, "liquid", liquidPattern, function(match) {
+ var tagMatch = /^\{%-?\s*(\w+)/.exec(match);
+ if (tagMatch) {
+ var tag = tagMatch[1];
+ if (tag === "raw" && !insideRaw) {
+ insideRaw = true;
+ return true;
+ } else if (tag === "endraw") {
+ insideRaw = false;
+ return true;
+ }
+ }
+ return !insideRaw;
+ });
+ });
+ Prism.hooks.add("after-tokenize", function(env) {
+ Prism.languages["markup-templating"].tokenizePlaceholders(env, "liquid");
+ });
+ (function(Prism2) {
+ function simple_form(name) {
+ return RegExp(/(\()/.source + "(?:" + name + ")" + /(?=[\s\)])/.source);
+ }
+ function primitive(pattern) {
+ return RegExp(/([\s([])/.source + "(?:" + pattern + ")" + /(?=[\s)])/.source);
+ }
+ var symbol = /(?!\d)[-+*/~!@$%^=<>{}\w]+/.source;
+ var marker = "&" + symbol;
+ var par = "(\\()";
+ var endpar = "(?=\\))";
+ var space = "(?=\\s)";
+ var nestedPar = /(?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\))*\))*\))*/.source;
+ var language = {
+ // Three or four semicolons are considered a heading.
+ // See https://www.gnu.org/software/emacs/manual/html_node/elisp/Comment-Tips.html
+ heading: {
+ pattern: /;;;.*/,
+ alias: ["comment", "title"]
+ },
+ comment: /;.*/,
+ string: {
+ pattern: /"(?:[^"\\]|\\.)*"/,
+ greedy: true,
+ inside: {
+ argument: /[-A-Z]+(?=[.,\s])/,
+ symbol: RegExp("`" + symbol + "'")
+ }
+ },
+ "quoted-symbol": {
+ pattern: RegExp("#?'" + symbol),
+ alias: ["variable", "symbol"]
+ },
+ "lisp-property": {
+ pattern: RegExp(":" + symbol),
+ alias: "property"
+ },
+ splice: {
+ pattern: RegExp(",@?" + symbol),
+ alias: ["symbol", "variable"]
+ },
+ keyword: [
+ {
+ pattern: RegExp(
+ par + "(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)" + space
+ ),
+ lookbehind: true
+ },
+ {
+ pattern: RegExp(
+ par + "(?:append|by|collect|concat|do|finally|for|in|return)" + space
+ ),
+ lookbehind: true
+ }
+ ],
+ declare: {
+ pattern: simple_form(/declare/.source),
+ lookbehind: true,
+ alias: "keyword"
+ },
+ interactive: {
+ pattern: simple_form(/interactive/.source),
+ lookbehind: true,
+ alias: "keyword"
+ },
+ boolean: {
+ pattern: primitive(/nil|t/.source),
+ lookbehind: true
+ },
+ number: {
+ pattern: primitive(/[-+]?\d+(?:\.\d*)?/.source),
+ lookbehind: true
+ },
+ defvar: {
+ pattern: RegExp(par + "def(?:const|custom|group|var)\\s+" + symbol),
+ lookbehind: true,
+ inside: {
+ keyword: /^def[a-z]+/,
+ variable: RegExp(symbol)
+ }
+ },
+ defun: {
+ pattern: RegExp(par + /(?:cl-)?(?:defmacro|defun\*?)\s+/.source + symbol + /\s+\(/.source + nestedPar + /\)/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ keyword: /^(?:cl-)?def\S+/,
+ // See below, this property needs to be defined later so that it can
+ // reference the language object.
+ arguments: null,
+ function: {
+ pattern: RegExp("(^\\s)" + symbol),
+ lookbehind: true
+ },
+ punctuation: /[()]/
+ }
+ },
+ lambda: {
+ pattern: RegExp(par + "lambda\\s+\\(\\s*(?:&?" + symbol + "(?:\\s+&?" + symbol + ")*\\s*)?\\)"),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ keyword: /^lambda/,
+ // See below, this property needs to be defined later so that it can
+ // reference the language object.
+ arguments: null,
+ punctuation: /[()]/
+ }
+ },
+ car: {
+ pattern: RegExp(par + symbol),
+ lookbehind: true
+ },
+ punctuation: [
+ // open paren, brackets, and close paren
+ /(?:['`,]?\(|[)\[\]])/,
+ // cons
+ {
+ pattern: /(\s)\.(?=\s)/,
+ lookbehind: true
+ }
+ ]
+ };
+ var arg = {
+ "lisp-marker": RegExp(marker),
+ "varform": {
+ pattern: RegExp(/\(/.source + symbol + /\s+(?=\S)/.source + nestedPar + /\)/.source),
+ inside: language
+ },
+ "argument": {
+ pattern: RegExp(/(^|[\s(])/.source + symbol),
+ lookbehind: true,
+ alias: "variable"
+ },
+ rest: language
+ };
+ var forms = "\\S+(?:\\s+\\S+)*";
+ var arglist = {
+ pattern: RegExp(par + nestedPar + endpar),
+ lookbehind: true,
+ inside: {
+ "rest-vars": {
+ pattern: RegExp("&(?:body|rest)\\s+" + forms),
+ inside: arg
+ },
+ "other-marker-vars": {
+ pattern: RegExp("&(?:aux|optional)\\s+" + forms),
+ inside: arg
+ },
+ keys: {
+ pattern: RegExp("&key\\s+" + forms + "(?:\\s+&allow-other-keys)?"),
+ inside: arg
+ },
+ argument: {
+ pattern: RegExp(symbol),
+ alias: "variable"
+ },
+ punctuation: /[()]/
+ }
+ };
+ language["lambda"].inside.arguments = arglist;
+ language["defun"].inside.arguments = Prism2.util.clone(arglist);
+ language["defun"].inside.arguments.inside.sublist = arglist;
+ Prism2.languages.lisp = language;
+ Prism2.languages.elisp = language;
+ Prism2.languages.emacs = language;
+ Prism2.languages["emacs-lisp"] = language;
+ })(Prism);
+ Prism.languages.livescript = {
+ "comment": [
+ {
+ pattern: /(^|[^\\])\/\*[\s\S]*?\*\//,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^\\])#.*/,
+ lookbehind: true
+ }
+ ],
+ "interpolated-string": {
+ /* Look-behind and look-ahead prevents wrong behavior of the greedy pattern
+ * forcing it to match """-quoted string when it would otherwise match "-quoted first. */
+ pattern: /(^|[^"])("""|")(?:\\[\s\S]|(?!\2)[^\\])*\2(?!")/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "variable": {
+ pattern: /(^|[^\\])#[a-z_](?:-?[a-z]|[\d_])*/m,
+ lookbehind: true
+ },
+ "interpolation": {
+ pattern: /(^|[^\\])#\{[^}]+\}/m,
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^#\{|\}$/,
+ alias: "variable"
+ }
+ // See rest below
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "string": [
+ {
+ pattern: /('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,
+ greedy: true
+ },
+ {
+ pattern: /<\[[\s\S]*?\]>/,
+ greedy: true
+ },
+ /\\[^\s,;\])}]+/
+ ],
+ "regex": [
+ {
+ pattern: /\/\/(?:\[[^\r\n\]]*\]|\\.|(?!\/\/)[^\\\[])+\/\/[gimyu]{0,5}/,
+ greedy: true,
+ inside: {
+ "comment": {
+ pattern: /(^|[^\\])#.*/,
+ lookbehind: true
+ }
+ }
+ },
+ {
+ pattern: /\/(?:\[[^\r\n\]]*\]|\\.|[^/\\\r\n\[])+\/[gimyu]{0,5}/,
+ greedy: true
+ }
+ ],
+ "keyword": {
+ pattern: /(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m,
+ lookbehind: true
+ },
+ "keyword-operator": {
+ pattern: /(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?: not|nt)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "boolean": {
+ pattern: /(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m,
+ lookbehind: true
+ },
+ "argument": {
+ // Don't match .&. nor &&
+ pattern: /(^|(?!\.&\.)[^&])&(?!&)\d*/m,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "number": /\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i,
+ "identifier": /[a-z_](?:-?[a-z]|[\d_])*/i,
+ "operator": [
+ // Spaced .
+ {
+ pattern: /( )\.(?= )/,
+ lookbehind: true
+ },
+ // Full list, in order:
+ // .= .~ .. ...
+ // .&. .^. .<<. .>>. .>>>.
+ // := :: ::=
+ // &&
+ // || |>
+ // < << <<< <<<<
+ // <- <-- <-! <--!
+ // <~ <~~ <~! <~~!
+ // <| <= <?
+ // > >> >= >?
+ // - -- -> -->
+ // + ++
+ // @ @@
+ // % %%
+ // * **
+ // ! != !~=
+ // !~> !~~>
+ // !-> !-->
+ // ~ ~> ~~> ~=
+ // = ==
+ // ^ ^^
+ // / ?
+ /\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/
+ ],
+ "punctuation": /[(){}\[\]|.,:;`]/
+ };
+ Prism.languages.livescript["interpolated-string"].inside["interpolation"].inside.rest = Prism.languages.livescript;
+ (function(Prism2) {
+ Prism2.languages.llvm = {
+ "comment": /;.*/,
+ "string": {
+ pattern: /"[^"]*"/,
+ greedy: true
+ },
+ "boolean": /\b(?:false|true)\b/,
+ "variable": /[%@!#](?:(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+|\d+)/i,
+ "label": /(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+:/i,
+ "type": {
+ pattern: /\b(?:double|float|fp128|half|i[1-9]\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\b/,
+ alias: "class-name"
+ },
+ "keyword": /\b[a-z_][a-z_0-9]*\b/,
+ "number": /[+-]?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-Fa-f]+\b|\b0xK[\dA-Fa-f]{20}\b|\b0x[ML][\dA-Fa-f]{32}\b|\b0xH[\dA-Fa-f]{4}\b/,
+ "punctuation": /[{}[\];(),.!*=<>]/
+ };
+ })(Prism);
+ Prism.languages.log = {
+ "string": {
+ // Single-quoted strings must not be confused with plain text. E.g. Can't isn't Susan's Chris' toy
+ pattern: /"(?:[^"\\\r\n]|\\.)*"|'(?![st] | \w)(?:[^'\\\r\n]|\\.)*'/,
+ greedy: true
+ },
+ "exception": {
+ pattern: /(^|[^\w.])[a-z][\w.]*(?:Error|Exception):.*(?:(?:\r\n?|\n)[ \t]*(?:at[ \t].+|\.{3}.*|Caused by:.*))+(?:(?:\r\n?|\n)[ \t]*\.\.\. .*)?/,
+ lookbehind: true,
+ greedy: true,
+ alias: ["javastacktrace", "language-javastacktrace"],
+ inside: Prism.languages["javastacktrace"] || {
+ "keyword": /\bat\b/,
+ "function": /[a-z_][\w$]*(?=\()/,
+ "punctuation": /[.:()]/
+ }
+ },
+ "level": [
+ {
+ pattern: /\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\b/,
+ alias: ["error", "important"]
+ },
+ {
+ pattern: /\b(?:WARN|WARNING|WRN)\b/,
+ alias: ["warning", "important"]
+ },
+ {
+ pattern: /\b(?:DISPLAY|INF|INFO|NOTICE|STATUS)\b/,
+ alias: ["info", "keyword"]
+ },
+ {
+ pattern: /\b(?:DBG|DEBUG|FINE)\b/,
+ alias: ["debug", "keyword"]
+ },
+ {
+ pattern: /\b(?:FINER|FINEST|TRACE|TRC|VERBOSE|VRB)\b/,
+ alias: ["trace", "comment"]
+ }
+ ],
+ "property": {
+ pattern: /((?:^|[\]|])[ \t]*)[a-z_](?:[\w-]|\b\/\b)*(?:[. ]\(?\w(?:[\w-]|\b\/\b)*\)?)*:(?=\s)/im,
+ lookbehind: true
+ },
+ "separator": {
+ pattern: /(^|[^-+])-{3,}|={3,}|\*{3,}|- - /m,
+ lookbehind: true,
+ alias: "comment"
+ },
+ "url": /\b(?:file|ftp|https?):\/\/[^\s|,;'"]*[^\s|,;'">.]/,
+ "email": {
+ pattern: /(^|\s)[-\w+.]+@[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+(?=\s)/,
+ lookbehind: true,
+ alias: "url"
+ },
+ "ip-address": {
+ pattern: /\b(?:\d{1,3}(?:\.\d{1,3}){3})\b/,
+ alias: "constant"
+ },
+ "mac-address": {
+ pattern: /\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\b/i,
+ alias: "constant"
+ },
+ "domain": {
+ pattern: /(^|\s)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[a-z][a-z0-9-]+(?=\s)/,
+ lookbehind: true,
+ alias: "constant"
+ },
+ "uuid": {
+ pattern: /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i,
+ alias: "constant"
+ },
+ "hash": {
+ pattern: /\b(?:[a-f0-9]{32}){1,2}\b/i,
+ alias: "constant"
+ },
+ "file-path": {
+ pattern: /\b[a-z]:[\\/][^\s|,;:(){}\[\]"']+|(^|[\s:\[\](>|])\.{0,2}\/\w[^\s|,;:(){}\[\]"']*/i,
+ lookbehind: true,
+ greedy: true,
+ alias: "string"
+ },
+ "date": {
+ pattern: RegExp(
+ /\b\d{4}[-/]\d{2}[-/]\d{2}(?:T(?=\d{1,2}:)|(?=\s\d{1,2}:))/.source + "|" + /\b\d{1,4}[-/ ](?:\d{1,2}|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)[-/ ]\d{2,4}T?\b/.source + "|" + /\b(?:(?:Fri|Mon|Sat|Sun|Thu|Tue|Wed)(?:\s{1,2}(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep))?|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)\s{1,2}\d{1,2}\b/.source,
+ "i"
+ ),
+ alias: "number"
+ },
+ "time": {
+ pattern: /\b\d{1,2}:\d{1,2}:\d{1,2}(?:[.,:]\d+)?(?:\s?[+-]\d{2}:?\d{2}|Z)?\b/,
+ alias: "number"
+ },
+ "boolean": /\b(?:false|null|true)\b/i,
+ "number": {
+ pattern: /(^|[^.\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\d[\da-f]*(?:\.\d+)*(?:e[+-]?\d+)?[a-z]{0,3}\b)\b(?!\.\w)/i,
+ lookbehind: true
+ },
+ "operator": /[;:?<=>~/@!$%&+\-|^(){}*#]/,
+ "punctuation": /[\[\].,]/
+ };
+ Prism.languages.lolcode = {
+ "comment": [
+ /\bOBTW\s[\s\S]*?\sTLDR\b/,
+ /\bBTW.+/
+ ],
+ "string": {
+ pattern: /"(?::.|[^":])*"/,
+ inside: {
+ "variable": /:\{[^}]+\}/,
+ "symbol": [
+ /:\([a-f\d]+\)/i,
+ /:\[[^\]]+\]/,
+ /:[)>o":]/
+ ]
+ },
+ greedy: true
+ },
+ "number": /(?:\B-)?(?:\b\d+(?:\.\d*)?|\B\.\d+)/,
+ "symbol": {
+ pattern: /(^|\s)(?:A )?(?:BUKKIT|NOOB|NUMBAR|NUMBR|TROOF|YARN)(?=\s|,|$)/,
+ lookbehind: true,
+ inside: {
+ "keyword": /A(?=\s)/
+ }
+ },
+ "label": {
+ pattern: /((?:^|\s)(?:IM IN YR|IM OUTTA YR) )[a-zA-Z]\w*/,
+ lookbehind: true,
+ alias: "string"
+ },
+ "function": {
+ pattern: /((?:^|\s)(?:HOW IZ I|I IZ|IZ) )[a-zA-Z]\w*/,
+ lookbehind: true
+ },
+ "keyword": [
+ {
+ pattern: /(^|\s)(?:AN|FOUND YR|GIMMEH|GTFO|HAI|HAS A|HOW IZ I|I HAS A|I IZ|IF U SAY SO|IM IN YR|IM OUTTA YR|IS NOW(?: A)?|ITZ(?: A)?|IZ|KTHX|KTHXBYE|LIEK(?: A)?|MAEK|MEBBE|MKAY|NERFIN|NO WAI|O HAI IM|O RLY\?|OIC|OMG|OMGWTF|R|SMOOSH|SRS|TIL|UPPIN|VISIBLE|WILE|WTF\?|YA RLY|YR)(?=\s|,|$)/,
+ lookbehind: true
+ },
+ /'Z(?=\s|,|$)/
+ ],
+ "boolean": {
+ pattern: /(^|\s)(?:FAIL|WIN)(?=\s|,|$)/,
+ lookbehind: true
+ },
+ "variable": {
+ pattern: /(^|\s)IT(?=\s|,|$)/,
+ lookbehind: true
+ },
+ "operator": {
+ pattern: /(^|\s)(?:NOT|BOTH SAEM|DIFFRINT|(?:ALL|ANY|BIGGR|BOTH|DIFF|EITHER|MOD|PRODUKT|QUOSHUNT|SMALLR|SUM|WON) OF)(?=\s|,|$)/,
+ lookbehind: true
+ },
+ "punctuation": /\.{3}|…|,|!/
+ };
+ Prism.languages.magma = {
+ "output": {
+ pattern: /^(>.*(?:\r(?:\n|(?!\n))|\n))(?!>)(?:.+|(?:\r(?:\n|(?!\n))|\n)(?!>).*)(?:(?:\r(?:\n|(?!\n))|\n)(?!>).*)*/m,
+ lookbehind: true,
+ greedy: true
+ },
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\"])"(?:[^\r\n\\"]|\\.)*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ // http://magma.maths.usyd.edu.au/magma/handbook/text/82
+ "keyword": /\b(?:_|adj|and|assert|assert2|assert3|assigned|break|by|case|cat|catch|clear|cmpeq|cmpne|continue|declare|default|delete|diff|div|do|elif|else|end|eq|error|eval|exists|exit|for|forall|forward|fprintf|freeze|function|ge|gt|if|iload|import|in|intrinsic|is|join|le|load|local|lt|meet|mod|ne|not|notadj|notin|notsubset|or|print|printf|procedure|quit|random|read|readi|repeat|require|requirege|requirerange|restore|return|save|sdiff|select|subset|then|time|to|try|until|vprint|vprintf|vtime|when|where|while|xor)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "generator": {
+ pattern: /\b[a-z_]\w*(?=\s*<)/i,
+ alias: "class-name"
+ },
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "number": {
+ pattern: /(^|[^\w.]|\.\.)(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?:_[a-z]?)?(?=$|[^\w.]|\.\.)/,
+ lookbehind: true
+ },
+ "operator": /->|[-+*/^~!|#=]|:=|\.\./,
+ "punctuation": /[()[\]{}<>,;.:]/
+ };
+ Prism.languages.makefile = {
+ "comment": {
+ pattern: /(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,
+ lookbehind: true
+ },
+ "string": {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "builtin-target": {
+ pattern: /\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,
+ alias: "builtin"
+ },
+ "target": {
+ pattern: /^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,
+ alias: "symbol",
+ inside: {
+ "variable": /\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/
+ }
+ },
+ "variable": /\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,
+ // Directives
+ "keyword": /-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,
+ "function": {
+ pattern: /(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,
+ lookbehind: true
+ },
+ "operator": /(?:::|[?:+!])?=|[|@]/,
+ "punctuation": /[:;(){}]/
+ };
+ (function(Prism2) {
+ var inner = /(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;
+ function createInline(pattern) {
+ pattern = pattern.replace(/<inner>/g, function() {
+ return inner;
+ });
+ return RegExp(/((?:^|[^\\])(?:\\{2})*)/.source + "(?:" + pattern + ")");
+ }
+ var tableCell = /(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source;
+ var tableRow = /\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g, function() {
+ return tableCell;
+ });
+ var tableLine = /\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;
+ Prism2.languages.markdown = Prism2.languages.extend("markup", {});
+ Prism2.languages.insertBefore("markdown", "prolog", {
+ "front-matter-block": {
+ pattern: /(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "punctuation": /^---|---$/,
+ "front-matter": {
+ pattern: /\S+(?:\s+\S+)*/,
+ alias: ["yaml", "language-yaml"],
+ inside: Prism2.languages.yaml
+ }
+ }
+ },
+ "blockquote": {
+ // > ...
+ pattern: /^>(?:[\t ]*>)*/m,
+ alias: "punctuation"
+ },
+ "table": {
+ pattern: RegExp("^" + tableRow + tableLine + "(?:" + tableRow + ")*", "m"),
+ inside: {
+ "table-data-rows": {
+ pattern: RegExp("^(" + tableRow + tableLine + ")(?:" + tableRow + ")*$"),
+ lookbehind: true,
+ inside: {
+ "table-data": {
+ pattern: RegExp(tableCell),
+ inside: Prism2.languages.markdown
+ },
+ "punctuation": /\|/
+ }
+ },
+ "table-line": {
+ pattern: RegExp("^(" + tableRow + ")" + tableLine + "$"),
+ lookbehind: true,
+ inside: {
+ "punctuation": /\||:?-{3,}:?/
+ }
+ },
+ "table-header-row": {
+ pattern: RegExp("^" + tableRow + "$"),
+ inside: {
+ "table-header": {
+ pattern: RegExp(tableCell),
+ alias: "important",
+ inside: Prism2.languages.markdown
+ },
+ "punctuation": /\|/
+ }
+ }
+ }
+ },
+ "code": [
+ {
+ // Prefixed by 4 spaces or 1 tab and preceded by an empty line
+ pattern: /((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ {
+ // ```optional language
+ // code block
+ // ```
+ pattern: /^```[\s\S]*?^```$/m,
+ greedy: true,
+ inside: {
+ "code-block": {
+ pattern: /^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,
+ lookbehind: true
+ },
+ "code-language": {
+ pattern: /^(```).+/,
+ lookbehind: true
+ },
+ "punctuation": /```/
+ }
+ }
+ ],
+ "title": [
+ {
+ // title 1
+ // =======
+ // title 2
+ // -------
+ pattern: /\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,
+ alias: "important",
+ inside: {
+ punctuation: /==+$|--+$/
+ }
+ },
+ {
+ // # title 1
+ // ###### title 6
+ pattern: /(^\s*)#.+/m,
+ lookbehind: true,
+ alias: "important",
+ inside: {
+ punctuation: /^#+|#+$/
+ }
+ }
+ ],
+ "hr": {
+ // ***
+ // ---
+ // * * *
+ // -----------
+ pattern: /(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "list": {
+ // * item
+ // + item
+ // - item
+ // 1. item
+ pattern: /(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "url-reference": {
+ // [id]: http://example.com "Optional title"
+ // [id]: http://example.com 'Optional title'
+ // [id]: http://example.com (Optional title)
+ // [id]: <http://example.com> "Optional title"
+ pattern: /!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,
+ inside: {
+ "variable": {
+ pattern: /^(!?\[)[^\]]+/,
+ lookbehind: true
+ },
+ "string": /(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,
+ "punctuation": /^[\[\]!:]|[<>]/
+ },
+ alias: "url"
+ },
+ "bold": {
+ // **strong**
+ // __strong__
+ // allow one nested instance of italic text using the same delimiter
+ pattern: createInline(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "content": {
+ pattern: /(^..)[\s\S]+(?=..$)/,
+ lookbehind: true,
+ inside: {}
+ // see below
+ },
+ "punctuation": /\*\*|__/
+ }
+ },
+ "italic": {
+ // *em*
+ // _em_
+ // allow one nested instance of bold text using the same delimiter
+ pattern: createInline(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "content": {
+ pattern: /(^.)[\s\S]+(?=.$)/,
+ lookbehind: true,
+ inside: {}
+ // see below
+ },
+ "punctuation": /[*_]/
+ }
+ },
+ "strike": {
+ // ~~strike through~~
+ // ~strike~
+ // eslint-disable-next-line regexp/strict
+ pattern: createInline(/(~~?)(?:(?!~)<inner>)+\2/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "content": {
+ pattern: /(^~~?)[\s\S]+(?=\1$)/,
+ lookbehind: true,
+ inside: {}
+ // see below
+ },
+ "punctuation": /~~?/
+ }
+ },
+ "code-snippet": {
+ // `code`
+ // ``code``
+ pattern: /(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,
+ lookbehind: true,
+ greedy: true,
+ alias: ["code", "keyword"]
+ },
+ "url": {
+ // [example](http://example.com "Optional title")
+ // [example][id]
+ // [example] [id]
+ pattern: createInline(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "operator": /^!/,
+ "content": {
+ pattern: /(^\[)[^\]]+(?=\])/,
+ lookbehind: true,
+ inside: {}
+ // see below
+ },
+ "variable": {
+ pattern: /(^\][ \t]?\[)[^\]]+(?=\]$)/,
+ lookbehind: true
+ },
+ "url": {
+ pattern: /(^\]\()[^\s)]+/,
+ lookbehind: true
+ },
+ "string": {
+ pattern: /(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,
+ lookbehind: true
+ }
+ }
+ }
+ });
+ ["url", "bold", "italic", "strike"].forEach(function(token) {
+ ["url", "bold", "italic", "strike", "code-snippet"].forEach(function(inside) {
+ if (token !== inside) {
+ Prism2.languages.markdown[token].inside.content.inside[inside] = Prism2.languages.markdown[inside];
+ }
+ });
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ if (env.language !== "markdown" && env.language !== "md") {
+ return;
+ }
+ function walkTokens(tokens) {
+ if (!tokens || typeof tokens === "string") {
+ return;
+ }
+ for (var i = 0, l = tokens.length; i < l; i++) {
+ var token = tokens[i];
+ if (token.type !== "code") {
+ walkTokens(token.content);
+ continue;
+ }
+ var codeLang = token.content[1];
+ var codeBlock = token.content[3];
+ if (codeLang && codeBlock && codeLang.type === "code-language" && codeBlock.type === "code-block" && typeof codeLang.content === "string") {
+ var lang = codeLang.content.replace(/\b#/g, "sharp").replace(/\b\+\+/g, "pp");
+ lang = (/[a-z][\w-]*/i.exec(lang) || [""])[0].toLowerCase();
+ var alias = "language-" + lang;
+ if (!codeBlock.alias) {
+ codeBlock.alias = [alias];
+ } else if (typeof codeBlock.alias === "string") {
+ codeBlock.alias = [codeBlock.alias, alias];
+ } else {
+ codeBlock.alias.push(alias);
+ }
+ }
+ }
+ }
+ walkTokens(env.tokens);
+ });
+ Prism2.hooks.add("wrap", function(env) {
+ if (env.type !== "code-block") {
+ return;
+ }
+ var codeLang = "";
+ for (var i = 0, l = env.classes.length; i < l; i++) {
+ var cls = env.classes[i];
+ var match = /language-(.+)/.exec(cls);
+ if (match) {
+ codeLang = match[1];
+ break;
+ }
+ }
+ var grammar = Prism2.languages[codeLang];
+ if (!grammar) {
+ if (codeLang && codeLang !== "none" && Prism2.plugins.autoloader) {
+ var id = "md-" + (/* @__PURE__ */ new Date()).valueOf() + "-" + Math.floor(Math.random() * 1e16);
+ env.attributes["id"] = id;
+ Prism2.plugins.autoloader.loadLanguages(codeLang, function() {
+ var ele = document.getElementById(id);
+ if (ele) {
+ ele.innerHTML = Prism2.highlight(ele.textContent, Prism2.languages[codeLang], codeLang);
+ }
+ });
+ }
+ } else {
+ env.content = Prism2.highlight(textContent(env.content), grammar, codeLang);
+ }
+ });
+ var tagPattern = RegExp(Prism2.languages.markup.tag.pattern.source, "gi");
+ var KNOWN_ENTITY_NAMES = {
+ "amp": "&",
+ "lt": "<",
+ "gt": ">",
+ "quot": '"'
+ };
+ var fromCodePoint = String.fromCodePoint || String.fromCharCode;
+ function textContent(html) {
+ var text = html.replace(tagPattern, "");
+ text = text.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi, function(m, code) {
+ code = code.toLowerCase();
+ if (code[0] === "#") {
+ var value;
+ if (code[1] === "x") {
+ value = parseInt(code.slice(2), 16);
+ } else {
+ value = Number(code.slice(1));
+ }
+ return fromCodePoint(value);
+ } else {
+ var known = KNOWN_ENTITY_NAMES[code];
+ if (known) {
+ return known;
+ }
+ return m;
+ }
+ });
+ return text;
+ }
+ Prism2.languages.md = Prism2.languages.markdown;
+ })(Prism);
+ (function(Prism2) {
+ var orgType = /\b(?:(?:col|row)?vector|matrix|scalar)\b/.source;
+ var type = /\bvoid\b|<org>|\b(?:complex|numeric|pointer(?:\s*\([^()]*\))?|real|string|(?:class|struct)\s+\w+|transmorphic)(?:\s*<org>)?/.source.replace(/<org>/g, orgType);
+ Prism2.languages.mata = {
+ "comment": {
+ pattern: /\/\/.*|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\//,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^"\r\n]*"|[‘`']".*?"[’`']/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:class|extends|struct)\s+)\w+(?=\s*(?:\{|\bextends\b))/,
+ lookbehind: true
+ },
+ "type": {
+ pattern: RegExp(type),
+ alias: "class-name",
+ inside: {
+ "punctuation": /[()]/,
+ "keyword": /\b(?:class|function|struct|void)\b/
+ }
+ },
+ "keyword": /\b(?:break|class|continue|do|else|end|extends|external|final|for|function|goto|if|pragma|private|protected|public|return|static|struct|unset|unused|version|virtual|while)\b/,
+ "constant": /\bNULL\b/,
+ "number": {
+ pattern: /(^|[^\w.])(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|\d[a-f0-9]*(?:\.[a-f0-9]+)?x[+-]?\d+)i?(?![\w.])/i,
+ lookbehind: true
+ },
+ "missing": {
+ pattern: /(^|[^\w.])(?:\.[a-z]?)(?![\w.])/,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "operator": /\.\.|\+\+|--|&&|\|\||:?(?:[!=<>]=|[+\-*/^<>&|:])|[!?=\\#’`']/,
+ "punctuation": /[()[\]{},;.]/
+ };
+ })(Prism);
+ Prism.languages.matlab = {
+ "comment": [
+ /%\{[\s\S]*?\}%/,
+ /%.+/
+ ],
+ "string": {
+ pattern: /\B'(?:''|[^'\r\n])*'/,
+ greedy: true
+ },
+ // FIXME We could handle imaginary numbers as a whole
+ "number": /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+)?(?:[ij])?|\b[ij]\b/,
+ "keyword": /\b(?:NaN|break|case|catch|continue|else|elseif|end|for|function|if|inf|otherwise|parfor|pause|pi|return|switch|try|while)\b/,
+ "function": /\b(?!\d)\w+(?=\s*\()/,
+ "operator": /\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,
+ "punctuation": /\.{3}|[.,;\[\](){}!]/
+ };
+ (function(Prism2) {
+ var keywords = /\b(?:about|and|animate|as|at|attributes|by|case|catch|collect|continue|coordsys|do|else|exit|fn|for|from|function|global|if|in|local|macroscript|mapped|max|not|of|off|on|or|parameters|persistent|plugin|rcmenu|return|rollout|set|struct|then|throw|to|tool|try|undo|utility|when|where|while|with)\b/i;
+ Prism2.languages.maxscript = {
+ "comment": {
+ pattern: /\/\*[\s\S]*?(?:\*\/|$)|--.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^"\\@])(?:"(?:[^"\\]|\\[\s\S])*"|@"[^"]*")/,
+ lookbehind: true,
+ greedy: true
+ },
+ "path": {
+ pattern: /\$(?:[\w/\\.*?]|'[^']*')*/,
+ greedy: true,
+ alias: "string"
+ },
+ "function-call": {
+ pattern: RegExp(
+ "((?:" + // start of line
+ (/^/.source + "|" + // operators and other language constructs
+ /[;=<>+\-*/^({\[]/.source + "|" + // keywords as part of statements
+ /\b(?:and|by|case|catch|collect|do|else|if|in|not|or|return|then|to|try|where|while|with)\b/.source) + ")[ ]*)(?!" + keywords.source + ")" + /[a-z_]\w*\b/.source + "(?=[ ]*(?:" + // variable
+ ("(?!" + keywords.source + ")" + /[a-z_]/.source + "|" + // number
+ /\d|-\.?\d/.source + "|" + // other expressions or literals
+ /[({'"$@#?]/.source) + "))",
+ "im"
+ ),
+ lookbehind: true,
+ greedy: true,
+ alias: "function"
+ },
+ "function-definition": {
+ pattern: /(\b(?:fn|function)\s+)\w+\b/i,
+ lookbehind: true,
+ alias: "function"
+ },
+ "argument": {
+ pattern: /\b[a-z_]\w*(?=:)/i,
+ alias: "attr-name"
+ },
+ "keyword": keywords,
+ "boolean": /\b(?:false|true)\b/,
+ "time": {
+ pattern: /(^|[^\w.])(?:(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?[msft])+|\d+:\d+(?:\.\d*)?)(?![\w.:])/,
+ lookbehind: true,
+ alias: "number"
+ },
+ "number": [
+ {
+ pattern: /(^|[^\w.])(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?|0x[a-fA-F0-9]+)(?![\w.:])/,
+ lookbehind: true
+ },
+ /\b(?:e|pi)\b/
+ ],
+ "constant": /\b(?:dontcollect|ok|silentValue|undefined|unsupplied)\b/,
+ "color": {
+ pattern: /\b(?:black|blue|brown|gray|green|orange|red|white|yellow)\b/i,
+ alias: "constant"
+ },
+ "operator": /[-+*/<>=!]=?|[&^?]|#(?!\()/,
+ "punctuation": /[()\[\]{}.:,;]|#(?=\()|\\$/m
+ };
+ })(Prism);
+ Prism.languages.mel = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
+ greedy: true
+ },
+ "code": {
+ pattern: /`(?:\\.|[^\\`])*`/,
+ greedy: true,
+ alias: "italic",
+ inside: {
+ "delimiter": {
+ pattern: /^`|`$/,
+ alias: "punctuation"
+ },
+ "statement": {
+ pattern: /[\s\S]+/,
+ inside: null
+ // see below
+ }
+ }
+ },
+ "string": {
+ pattern: /"(?:\\.|[^\\"\r\n])*"/,
+ greedy: true
+ },
+ "variable": /\$\w+/,
+ "number": /\b0x[\da-fA-F]+\b|\b\d+(?:\.\d*)?|\B\.\d+/,
+ "flag": {
+ pattern: /-[^\d\W]\w*/,
+ alias: "operator"
+ },
+ "keyword": /\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\b/,
+ "function": {
+ pattern: /((?:^|[{;])[ \t]*)[a-z_]\w*\b(?!\s*(?:\.(?!\.)|[[{=]))|\b[a-z_]\w*(?=[ \t]*\()/im,
+ lookbehind: true,
+ greedy: true
+ },
+ "tensor-punctuation": {
+ pattern: /<<|>>/,
+ alias: "punctuation"
+ },
+ "operator": /\+[+=]?|-[-=]?|&&|\|\||[<>]=?|[*\/!=]=?|[%^]/,
+ "punctuation": /[.,:;?\[\](){}]/
+ };
+ Prism.languages.mel["code"].inside["statement"].inside = Prism.languages.mel;
+ Prism.languages.mermaid = {
+ "comment": {
+ pattern: /%%.*/,
+ greedy: true
+ },
+ "style": {
+ pattern: /^([ \t]*(?:classDef|linkStyle|style)[ \t]+[\w$-]+[ \t]+)\w.*[^\s;]/m,
+ lookbehind: true,
+ inside: {
+ "property": /\b\w[\w-]*(?=[ \t]*:)/,
+ "operator": /:/,
+ "punctuation": /,/
+ }
+ },
+ "inter-arrow-label": {
+ pattern: /([^<>ox.=-])(?:-[-.]|==)(?![<>ox.=-])[ \t]*(?:"[^"\r\n]*"|[^\s".=-](?:[^\r\n.=-]*[^\s.=-])?)[ \t]*(?:\.+->?|--+[->]|==+[=>])(?![<>ox.=-])/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "arrow": {
+ pattern: /(?:\.+->?|--+[->]|==+[=>])$/,
+ alias: "operator"
+ },
+ "label": {
+ pattern: /^([\s\S]{2}[ \t]*)\S(?:[\s\S]*\S)?/,
+ lookbehind: true,
+ alias: "property"
+ },
+ "arrow-head": {
+ pattern: /^\S+/,
+ alias: ["arrow", "operator"]
+ }
+ }
+ },
+ "arrow": [
+ // This might look complex but it really isn't.
+ // There are many possible arrows (see tests) and it's impossible to fit all of them into one pattern. The
+ // problem is that we only have one lookbehind per pattern. However, we cannot disallow too many arrow
+ // characters in the one lookbehind because that would create too many false negatives. So we have to split the
+ // arrows into different patterns.
+ {
+ // ER diagram
+ pattern: /(^|[^{}|o.-])[|}][|o](?:--|\.\.)[|o][|{](?![{}|o.-])/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // flow chart
+ // (?:==+|--+|-\.*-)
+ pattern: /(^|[^<>ox.=-])(?:[<ox](?:==+|--+|-\.*-)[>ox]?|(?:==+|--+|-\.*-)[>ox]|===+|---+|-\.+-)(?![<>ox.=-])/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // sequence diagram
+ pattern: /(^|[^<>()x-])(?:--?(?:>>|[x>)])(?![<>()x])|(?:<<|[x<(])--?(?!-))/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ {
+ // class diagram
+ pattern: /(^|[^<>|*o.-])(?:[*o]--|--[*o]|<\|?(?:--|\.\.)|(?:--|\.\.)\|?>|--|\.\.)(?![<>|*o.-])/,
+ lookbehind: true,
+ alias: "operator"
+ }
+ ],
+ "label": {
+ pattern: /(^|[^|<])\|(?:[^\r\n"|]|"[^"\r\n]*")+\|/,
+ lookbehind: true,
+ greedy: true,
+ alias: "property"
+ },
+ "text": {
+ pattern: /(?:[(\[{]+|\b>)(?:[^\r\n"()\[\]{}]|"[^"\r\n]*")+(?:[)\]}]+|>)/,
+ alias: "string"
+ },
+ "string": {
+ pattern: /"[^"\r\n]*"/,
+ greedy: true
+ },
+ "annotation": {
+ pattern: /<<(?:abstract|choice|enumeration|fork|interface|join|service)>>|\[\[(?:choice|fork|join)\]\]/i,
+ alias: "important"
+ },
+ "keyword": [
+ // This language has both case-sensitive and case-insensitive keywords
+ {
+ pattern: /(^[ \t]*)(?:action|callback|class|classDef|classDiagram|click|direction|erDiagram|flowchart|gantt|gitGraph|graph|journey|link|linkStyle|pie|requirementDiagram|sequenceDiagram|stateDiagram|stateDiagram-v2|style|subgraph)(?![\w$-])/m,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^[ \t]*)(?:activate|alt|and|as|autonumber|deactivate|else|end(?:[ \t]+note)?|loop|opt|par|participant|rect|state|note[ \t]+(?:over|(?:left|right)[ \t]+of))(?![\w$-])/im,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "entity": /#[a-z0-9]+;/,
+ "operator": {
+ pattern: /(\w[ \t]*)&(?=[ \t]*\w)|:::|:/,
+ lookbehind: true
+ },
+ "punctuation": /[(){};]/
+ };
+ Prism.languages.mizar = {
+ "comment": /::.+/,
+ "keyword": /@proof\b|\b(?:according|aggregate|all|and|antonym|are|as|associativity|assume|asymmetry|attr|be|begin|being|by|canceled|case|cases|clusters?|coherence|commutativity|compatibility|connectedness|consider|consistency|constructors|contradiction|correctness|def|deffunc|define|definitions?|defpred|do|does|end|environ|equals|ex|exactly|existence|for|from|func|given|hence|hereby|holds|idempotence|identity|iff?|implies|involutiveness|irreflexivity|is|it|let|means|mode|non|not|notations?|now|of|or|otherwise|over|per|pred|prefix|projectivity|proof|provided|qua|reconsider|redefine|reduce|reducibility|reflexivity|registrations?|requirements|reserve|sch|schemes?|section|selector|set|sethood|st|struct|such|suppose|symmetry|synonym|take|that|the|then|theorems?|thesis|thus|to|transitivity|uniqueness|vocabular(?:ies|y)|when|where|with|wrt)\b/,
+ "parameter": {
+ pattern: /\$(?:10|\d)/,
+ alias: "variable"
+ },
+ "variable": /\b\w+(?=:)/,
+ "number": /(?:\b|-)\d+\b/,
+ "operator": /\.\.\.|->|&|\.?=/,
+ "punctuation": /\(#|#\)|[,:;\[\](){}]/
+ };
+ (function(Prism2) {
+ var operators = [
+ // query and projection
+ "$eq",
+ "$gt",
+ "$gte",
+ "$in",
+ "$lt",
+ "$lte",
+ "$ne",
+ "$nin",
+ "$and",
+ "$not",
+ "$nor",
+ "$or",
+ "$exists",
+ "$type",
+ "$expr",
+ "$jsonSchema",
+ "$mod",
+ "$regex",
+ "$text",
+ "$where",
+ "$geoIntersects",
+ "$geoWithin",
+ "$near",
+ "$nearSphere",
+ "$all",
+ "$elemMatch",
+ "$size",
+ "$bitsAllClear",
+ "$bitsAllSet",
+ "$bitsAnyClear",
+ "$bitsAnySet",
+ "$comment",
+ "$elemMatch",
+ "$meta",
+ "$slice",
+ // update
+ "$currentDate",
+ "$inc",
+ "$min",
+ "$max",
+ "$mul",
+ "$rename",
+ "$set",
+ "$setOnInsert",
+ "$unset",
+ "$addToSet",
+ "$pop",
+ "$pull",
+ "$push",
+ "$pullAll",
+ "$each",
+ "$position",
+ "$slice",
+ "$sort",
+ "$bit",
+ // aggregation pipeline stages
+ "$addFields",
+ "$bucket",
+ "$bucketAuto",
+ "$collStats",
+ "$count",
+ "$currentOp",
+ "$facet",
+ "$geoNear",
+ "$graphLookup",
+ "$group",
+ "$indexStats",
+ "$limit",
+ "$listLocalSessions",
+ "$listSessions",
+ "$lookup",
+ "$match",
+ "$merge",
+ "$out",
+ "$planCacheStats",
+ "$project",
+ "$redact",
+ "$replaceRoot",
+ "$replaceWith",
+ "$sample",
+ "$set",
+ "$skip",
+ "$sort",
+ "$sortByCount",
+ "$unionWith",
+ "$unset",
+ "$unwind",
+ "$setWindowFields",
+ // aggregation pipeline operators
+ "$abs",
+ "$accumulator",
+ "$acos",
+ "$acosh",
+ "$add",
+ "$addToSet",
+ "$allElementsTrue",
+ "$and",
+ "$anyElementTrue",
+ "$arrayElemAt",
+ "$arrayToObject",
+ "$asin",
+ "$asinh",
+ "$atan",
+ "$atan2",
+ "$atanh",
+ "$avg",
+ "$binarySize",
+ "$bsonSize",
+ "$ceil",
+ "$cmp",
+ "$concat",
+ "$concatArrays",
+ "$cond",
+ "$convert",
+ "$cos",
+ "$dateFromParts",
+ "$dateToParts",
+ "$dateFromString",
+ "$dateToString",
+ "$dayOfMonth",
+ "$dayOfWeek",
+ "$dayOfYear",
+ "$degreesToRadians",
+ "$divide",
+ "$eq",
+ "$exp",
+ "$filter",
+ "$first",
+ "$floor",
+ "$function",
+ "$gt",
+ "$gte",
+ "$hour",
+ "$ifNull",
+ "$in",
+ "$indexOfArray",
+ "$indexOfBytes",
+ "$indexOfCP",
+ "$isArray",
+ "$isNumber",
+ "$isoDayOfWeek",
+ "$isoWeek",
+ "$isoWeekYear",
+ "$last",
+ "$last",
+ "$let",
+ "$literal",
+ "$ln",
+ "$log",
+ "$log10",
+ "$lt",
+ "$lte",
+ "$ltrim",
+ "$map",
+ "$max",
+ "$mergeObjects",
+ "$meta",
+ "$min",
+ "$millisecond",
+ "$minute",
+ "$mod",
+ "$month",
+ "$multiply",
+ "$ne",
+ "$not",
+ "$objectToArray",
+ "$or",
+ "$pow",
+ "$push",
+ "$radiansToDegrees",
+ "$range",
+ "$reduce",
+ "$regexFind",
+ "$regexFindAll",
+ "$regexMatch",
+ "$replaceOne",
+ "$replaceAll",
+ "$reverseArray",
+ "$round",
+ "$rtrim",
+ "$second",
+ "$setDifference",
+ "$setEquals",
+ "$setIntersection",
+ "$setIsSubset",
+ "$setUnion",
+ "$size",
+ "$sin",
+ "$slice",
+ "$split",
+ "$sqrt",
+ "$stdDevPop",
+ "$stdDevSamp",
+ "$strcasecmp",
+ "$strLenBytes",
+ "$strLenCP",
+ "$substr",
+ "$substrBytes",
+ "$substrCP",
+ "$subtract",
+ "$sum",
+ "$switch",
+ "$tan",
+ "$toBool",
+ "$toDate",
+ "$toDecimal",
+ "$toDouble",
+ "$toInt",
+ "$toLong",
+ "$toObjectId",
+ "$toString",
+ "$toLower",
+ "$toUpper",
+ "$trim",
+ "$trunc",
+ "$type",
+ "$week",
+ "$year",
+ "$zip",
+ "$count",
+ "$dateAdd",
+ "$dateDiff",
+ "$dateSubtract",
+ "$dateTrunc",
+ "$getField",
+ "$rand",
+ "$sampleRate",
+ "$setField",
+ "$unsetField",
+ // aggregation pipeline query modifiers
+ "$comment",
+ "$explain",
+ "$hint",
+ "$max",
+ "$maxTimeMS",
+ "$min",
+ "$orderby",
+ "$query",
+ "$returnKey",
+ "$showDiskLoc",
+ "$natural"
+ ];
+ var builtinFunctions = [
+ "ObjectId",
+ "Code",
+ "BinData",
+ "DBRef",
+ "Timestamp",
+ "NumberLong",
+ "NumberDecimal",
+ "MaxKey",
+ "MinKey",
+ "RegExp",
+ "ISODate",
+ "UUID"
+ ];
+ operators = operators.map(function(operator) {
+ return operator.replace("$", "\\$");
+ });
+ var operatorsSource = "(?:" + operators.join("|") + ")\\b";
+ Prism2.languages.mongodb = Prism2.languages.extend("javascript", {});
+ Prism2.languages.insertBefore("mongodb", "string", {
+ "property": {
+ pattern: /(?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)(?=\s*:)/,
+ greedy: true,
+ inside: {
+ "keyword": RegExp(`^(['"])?` + operatorsSource + "(?:\\1)?$")
+ }
+ }
+ });
+ Prism2.languages.mongodb.string.inside = {
+ url: {
+ // url pattern
+ pattern: /https?:\/\/[-\w@:%.+~#=]{1,256}\.[a-z0-9()]{1,6}\b[-\w()@:%+.~#?&/=]*/i,
+ greedy: true
+ },
+ entity: {
+ // ipv4
+ pattern: /\b(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d\d?|2[0-4]\d|25[0-5])\b/,
+ greedy: true
+ }
+ };
+ Prism2.languages.insertBefore("mongodb", "constant", {
+ "builtin": {
+ pattern: RegExp("\\b(?:" + builtinFunctions.join("|") + ")\\b"),
+ alias: "keyword"
+ }
+ });
+ })(Prism);
+ Prism.languages.monkey = {
+ "comment": {
+ pattern: /^#Rem\s[\s\S]*?^#End|'.+/im,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^"\r\n]*"/,
+ greedy: true
+ },
+ "preprocessor": {
+ pattern: /(^[ \t]*)#.+/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "property"
+ },
+ "function": /\b\w+(?=\()/,
+ "type-char": {
+ pattern: /\b[?%#$]/,
+ alias: "class-name"
+ },
+ "number": {
+ pattern: /((?:\.\.)?)(?:(?:\b|\B-\.?|\B\.)\d+(?:(?!\.\.)\.\d*)?|\$[\da-f]+)/i,
+ lookbehind: true
+ },
+ "keyword": /\b(?:Abstract|Array|Bool|Case|Catch|Class|Const|Continue|Default|Eachin|Else|ElseIf|End|EndIf|Exit|Extends|Extern|False|Field|Final|Float|For|Forever|Function|Global|If|Implements|Import|Inline|Int|Interface|Local|Method|Module|New|Next|Null|Object|Private|Property|Public|Repeat|Return|Select|Self|Step|Strict|String|Super|Then|Throw|To|True|Try|Until|Void|Wend|While)\b/i,
+ "operator": /\.\.|<[=>]?|>=?|:?=|(?:[+\-*\/&~|]|\b(?:Mod|Shl|Shr)\b)=?|\b(?:And|Not|Or)\b/i,
+ "punctuation": /[.,:;()\[\]]/
+ };
+ Prism.languages.moonscript = {
+ "comment": /--.*/,
+ "string": [
+ {
+ pattern: /'[^']*'|\[(=*)\[[\s\S]*?\]\1\]/,
+ greedy: true
+ },
+ {
+ pattern: /"[^"]*"/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /#\{[^{}]*\}/,
+ inside: {
+ "moonscript": {
+ pattern: /(^#\{)[\s\S]+(?=\})/,
+ lookbehind: true,
+ inside: null
+ // see beow
+ },
+ "interpolation-punctuation": {
+ pattern: /#\{|\}/,
+ alias: "punctuation"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "class-name": [
+ {
+ pattern: /(\b(?:class|extends)[ \t]+)\w+/,
+ lookbehind: true
+ },
+ // class-like names start with a capital letter
+ /\b[A-Z]\w*/
+ ],
+ "keyword": /\b(?:class|continue|do|else|elseif|export|extends|for|from|if|import|in|local|nil|return|self|super|switch|then|unless|using|when|while|with)\b/,
+ "variable": /@@?\w*/,
+ "property": {
+ pattern: /\b(?!\d)\w+(?=:)|(:)(?!\d)\w+/,
+ lookbehind: true
+ },
+ "function": {
+ pattern: /\b(?:_G|_VERSION|assert|collectgarbage|coroutine\.(?:create|resume|running|status|wrap|yield)|debug\.(?:debug|getfenv|gethook|getinfo|getlocal|getmetatable|getregistry|getupvalue|setfenv|sethook|setlocal|setmetatable|setupvalue|traceback)|dofile|error|getfenv|getmetatable|io\.(?:close|flush|input|lines|open|output|popen|read|stderr|stdin|stdout|tmpfile|type|write)|ipairs|load|loadfile|loadstring|math\.(?:abs|acos|asin|atan|atan2|ceil|cos|cosh|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pi|pow|rad|random|randomseed|sin|sinh|sqrt|tan|tanh)|module|next|os\.(?:clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\.(?:cpath|loaded|loadlib|path|preload|seeall)|pairs|pcall|print|rawequal|rawget|rawset|require|select|setfenv|setmetatable|string\.(?:byte|char|dump|find|format|gmatch|gsub|len|lower|match|rep|reverse|sub|upper)|table\.(?:concat|insert|maxn|remove|sort)|tonumber|tostring|type|unpack|xpcall)\b/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "boolean": /\b(?:false|true)\b/,
+ "number": /(?:\B\.\d+|\b\d+\.\d+|\b\d+(?=[eE]))(?:[eE][-+]?\d+)?\b|\b(?:0x[a-fA-F\d]+|\d+)(?:U?LL)?\b/,
+ "operator": /\.{3}|[-=]>|~=|(?:[-+*/%<>!=]|\.\.)=?|[:#^]|\b(?:and|or)\b=?|\b(?:not)\b/,
+ "punctuation": /[.,()[\]{}\\]/
+ };
+ Prism.languages.moonscript.string[1].inside.interpolation.inside.moonscript.inside = Prism.languages.moonscript;
+ Prism.languages.moon = Prism.languages.moonscript;
+ Prism.languages.n1ql = {
+ "comment": {
+ pattern: /\/\*[\s\S]*?(?:$|\*\/)|--.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(["'])(?:\\[\s\S]|(?!\1)[^\\]|\1\1)*\1/,
+ greedy: true
+ },
+ "identifier": {
+ pattern: /`(?:\\[\s\S]|[^\\`]|``)*`/,
+ greedy: true
+ },
+ "parameter": /\$[\w.]+/,
+ // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html#n1ql-reserved-words
+ "keyword": /\b(?:ADVISE|ALL|ALTER|ANALYZE|AS|ASC|AT|BEGIN|BINARY|BOOLEAN|BREAK|BUCKET|BUILD|BY|CALL|CAST|CLUSTER|COLLATE|COLLECTION|COMMIT|COMMITTED|CONNECT|CONTINUE|CORRELATE|CORRELATED|COVER|CREATE|CURRENT|DATABASE|DATASET|DATASTORE|DECLARE|DECREMENT|DELETE|DERIVED|DESC|DESCRIBE|DISTINCT|DO|DROP|EACH|ELEMENT|EXCEPT|EXCLUDE|EXECUTE|EXPLAIN|FETCH|FILTER|FLATTEN|FLUSH|FOLLOWING|FOR|FORCE|FROM|FTS|FUNCTION|GOLANG|GRANT|GROUP|GROUPS|GSI|HASH|HAVING|IF|IGNORE|ILIKE|INCLUDE|INCREMENT|INDEX|INFER|INLINE|INNER|INSERT|INTERSECT|INTO|IS|ISOLATION|JAVASCRIPT|JOIN|KEY|KEYS|KEYSPACE|KNOWN|LANGUAGE|LAST|LEFT|LET|LETTING|LEVEL|LIMIT|LSM|MAP|MAPPING|MATCHED|MATERIALIZED|MERGE|MINUS|MISSING|NAMESPACE|NEST|NL|NO|NTH_VALUE|NULL|NULLS|NUMBER|OBJECT|OFFSET|ON|OPTION|OPTIONS|ORDER|OTHERS|OUTER|OVER|PARSE|PARTITION|PASSWORD|PATH|POOL|PRECEDING|PREPARE|PRIMARY|PRIVATE|PRIVILEGE|PROBE|PROCEDURE|PUBLIC|RANGE|RAW|REALM|REDUCE|RENAME|RESPECT|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLLBACK|ROW|ROWS|SATISFIES|SAVEPOINT|SCHEMA|SCOPE|SELECT|SELF|SEMI|SET|SHOW|SOME|START|STATISTICS|STRING|SYSTEM|TIES|TO|TRAN|TRANSACTION|TRIGGER|TRUNCATE|UNBOUNDED|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNSET|UPDATE|UPSERT|USE|USER|USING|VALIDATE|VALUE|VALUES|VIA|VIEW|WHERE|WHILE|WINDOW|WITH|WORK|XOR)\b/i,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "boolean": /\b(?:FALSE|TRUE)\b/i,
+ "number": /(?:\b\d+\.|\B\.)\d+e[+\-]?\d+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
+ "operator": /[-+*\/%]|!=|==?|\|\||<[>=]?|>=?|\b(?:AND|ANY|ARRAY|BETWEEN|CASE|ELSE|END|EVERY|EXISTS|FIRST|IN|LIKE|NOT|OR|THEN|VALUED|WHEN|WITHIN)\b/i,
+ "punctuation": /[;[\](),.{}:]/
+ };
+ Prism.languages.n4js = Prism.languages.extend("javascript", {
+ // Keywords from N4JS language spec: https://numberfour.github.io/n4js/spec/N4JSSpec.html
+ "keyword": /\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/
+ });
+ Prism.languages.insertBefore("n4js", "constant", {
+ // Annotations in N4JS spec: https://numberfour.github.io/n4js/spec/N4JSSpec.html#_annotations
+ "annotation": {
+ pattern: /@+\w+/,
+ alias: "operator"
+ }
+ });
+ Prism.languages.n4jsd = Prism.languages.n4js;
+ Prism.languages["nand2tetris-hdl"] = {
+ "comment": /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ "keyword": /\b(?:BUILTIN|CHIP|CLOCKED|IN|OUT|PARTS)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "function": /\b[A-Za-z][A-Za-z0-9]*(?=\()/,
+ "number": /\b\d+\b/,
+ "operator": /=|\.\./,
+ "punctuation": /[{}[\];(),:]/
+ };
+ (function(Prism2) {
+ var expressionDef = /\{[^\r\n\[\]{}]*\}/;
+ var params = {
+ "quoted-string": {
+ pattern: /"(?:[^"\\]|\\.)*"/,
+ alias: "operator"
+ },
+ "command-param-id": {
+ pattern: /(\s)\w+:/,
+ lookbehind: true,
+ alias: "property"
+ },
+ "command-param-value": [
+ {
+ pattern: expressionDef,
+ alias: "selector"
+ },
+ {
+ pattern: /([\t ])\S+/,
+ lookbehind: true,
+ greedy: true,
+ alias: "operator"
+ },
+ {
+ pattern: /\S(?:.*\S)?/,
+ alias: "operator"
+ }
+ ]
+ };
+ Prism2.languages.naniscript = {
+ // ; ...
+ "comment": {
+ pattern: /^([\t ]*);.*/m,
+ lookbehind: true
+ },
+ // > ...
+ // Define is a control line starting with '>' followed by a word, a space and a text.
+ "define": {
+ pattern: /^>.+/m,
+ alias: "tag",
+ inside: {
+ "value": {
+ pattern: /(^>\w+[\t ]+)(?!\s)[^{}\r\n]+/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "key": {
+ pattern: /(^>)\w+/,
+ lookbehind: true
+ }
+ }
+ },
+ // # ...
+ "label": {
+ pattern: /^([\t ]*)#[\t ]*\w+[\t ]*$/m,
+ lookbehind: true,
+ alias: "regex"
+ },
+ "command": {
+ pattern: /^([\t ]*)@\w+(?=[\t ]|$).*/m,
+ lookbehind: true,
+ alias: "function",
+ inside: {
+ "command-name": /^@\w+/,
+ "expression": {
+ pattern: expressionDef,
+ greedy: true,
+ alias: "selector"
+ },
+ "command-params": {
+ pattern: /\s*\S[\s\S]*/,
+ inside: params
+ }
+ }
+ },
+ // Generic is any line that doesn't start with operators: ;>#@
+ "generic-text": {
+ pattern: /(^[ \t]*)[^#@>;\s].*/m,
+ lookbehind: true,
+ alias: "punctuation",
+ inside: {
+ // \{ ... \} ... \[ ... \] ... \"
+ "escaped-char": /\\[{}\[\]"]/,
+ "expression": {
+ pattern: expressionDef,
+ greedy: true,
+ alias: "selector"
+ },
+ "inline-command": {
+ pattern: /\[[\t ]*\w[^\r\n\[\]]*\]/,
+ greedy: true,
+ alias: "function",
+ inside: {
+ "command-params": {
+ pattern: /(^\[[\t ]*\w+\b)[\s\S]+(?=\]$)/,
+ lookbehind: true,
+ inside: params
+ },
+ "command-param-name": {
+ pattern: /^(\[[\t ]*)\w+/,
+ lookbehind: true,
+ alias: "name"
+ },
+ "start-stop-char": /[\[\]]/
+ }
+ }
+ }
+ }
+ };
+ Prism2.languages.nani = Prism2.languages["naniscript"];
+ Prism2.hooks.add("after-tokenize", function(env) {
+ var tokens = env.tokens;
+ tokens.forEach(function(token) {
+ if (typeof token !== "string" && token.type === "generic-text") {
+ var content = getTextContent(token);
+ if (!isBracketsBalanced(content)) {
+ token.type = "bad-line";
+ token.content = content;
+ }
+ }
+ });
+ });
+ function isBracketsBalanced(input) {
+ var brackets = "[]{}";
+ var stack = [];
+ for (var i = 0; i < input.length; i++) {
+ var bracket = input[i];
+ var bracketsIndex = brackets.indexOf(bracket);
+ if (bracketsIndex !== -1) {
+ if (bracketsIndex % 2 === 0) {
+ stack.push(bracketsIndex + 1);
+ } else if (stack.pop() !== bracketsIndex) {
+ return false;
+ }
+ }
+ }
+ return stack.length === 0;
+ }
+ function getTextContent(token) {
+ if (typeof token === "string") {
+ return token;
+ } else if (Array.isArray(token)) {
+ return token.map(getTextContent).join("");
+ } else {
+ return getTextContent(token.content);
+ }
+ }
+ })(Prism);
+ Prism.languages.nasm = {
+ "comment": /;.*$/m,
+ "string": /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ "label": {
+ pattern: /(^\s*)[A-Za-z._?$][\w.?$@~#]*:/m,
+ lookbehind: true,
+ alias: "function"
+ },
+ "keyword": [
+ /\[?BITS (?:16|32|64)\]?/,
+ {
+ pattern: /(^\s*)section\s*[a-z.]+:?/im,
+ lookbehind: true
+ },
+ /(?:extern|global)[^;\r\n]*/i,
+ /(?:CPU|DEFAULT|FLOAT).*$/m
+ ],
+ "register": {
+ pattern: /\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s)\b/i,
+ alias: "variable"
+ },
+ "number": /(?:\b|(?=\$))(?:0[hx](?:\.[\da-f]+|[\da-f]+(?:\.[\da-f]+)?)(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,
+ "operator": /[\[\]*+\-\/%<>=&|$!]/
+ };
+ Prism.languages.neon = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "datetime": {
+ pattern: /(^|[[{(=:,\s])\d\d\d\d-\d\d?-\d\d?(?:(?:[Tt]| +)\d\d?:\d\d:\d\d(?:\.\d*)? *(?:Z|[-+]\d\d?(?::?\d\d)?)?)?(?=$|[\]}),\s])/,
+ lookbehind: true,
+ alias: "number"
+ },
+ "key": {
+ pattern: /(^|[[{(,\s])[^,:=[\]{}()'"\s]+(?=\s*:(?:$|[\]}),\s])|\s*=)/,
+ lookbehind: true,
+ alias: "property"
+ },
+ "number": {
+ pattern: /(^|[[{(=:,\s])[+-]?(?:0x[\da-fA-F]+|0o[0-7]+|0b[01]+|(?:\d+(?:\.\d*)?|\.?\d+)(?:[eE][+-]?\d+)?)(?=$|[\]}),:=\s])/,
+ lookbehind: true
+ },
+ "boolean": {
+ pattern: /(^|[[{(=:,\s])(?:false|no|true|yes)(?=$|[\]}),:=\s])/i,
+ lookbehind: true
+ },
+ "null": {
+ pattern: /(^|[[{(=:,\s])(?:null)(?=$|[\]}),:=\s])/i,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "string": {
+ pattern: /(^|[[{(=:,\s])(?:('''|""")\r?\n(?:(?:[^\r\n]|\r?\n(?![\t ]*\2))*\r?\n)?[\t ]*\2|'[^'\r\n]*'|"(?:\\.|[^\\"\r\n])*")/,
+ lookbehind: true,
+ greedy: true
+ },
+ "literal": {
+ pattern: /(^|[[{(=:,\s])(?:[^#"',:=[\]{}()\s`-]|[:-][^"',=[\]{}()\s])(?:[^,:=\]})(\s]|:(?![\s,\]})]|$)|[ \t]+[^#,:=\]})(\s])*/,
+ lookbehind: true,
+ alias: "string"
+ },
+ "punctuation": /[,:=[\]{}()-]/
+ };
+ Prism.languages.nevod = {
+ "comment": /\/\/.*|(?:\/\*[\s\S]*?(?:\*\/|$))/,
+ "string": {
+ pattern: /(?:"(?:""|[^"])*"(?!")|'(?:''|[^'])*'(?!'))!?\*?/,
+ greedy: true,
+ inside: {
+ "string-attrs": /!$|!\*$|\*$/
+ }
+ },
+ "namespace": {
+ pattern: /(@namespace\s+)[a-zA-Z0-9\-.]+(?=\s*\{)/,
+ lookbehind: true
+ },
+ "pattern": {
+ pattern: /(@pattern\s+)?#?[a-zA-Z0-9\-.]+(?:\s*\(\s*(?:~\s*)?[a-zA-Z0-9\-.]+\s*(?:,\s*(?:~\s*)?[a-zA-Z0-9\-.]*)*\))?(?=\s*=)/,
+ lookbehind: true,
+ inside: {
+ "pattern-name": {
+ pattern: /^#?[a-zA-Z0-9\-.]+/,
+ alias: "class-name"
+ },
+ "fields": {
+ pattern: /\(.*\)/,
+ inside: {
+ "field-name": {
+ pattern: /[a-zA-Z0-9\-.]+/,
+ alias: "variable"
+ },
+ "punctuation": /[,()]/,
+ "operator": {
+ pattern: /~/,
+ alias: "field-hidden-mark"
+ }
+ }
+ }
+ }
+ },
+ "search": {
+ pattern: /(@search\s+|#)[a-zA-Z0-9\-.]+(?:\.\*)?(?=\s*;)/,
+ alias: "function",
+ lookbehind: true
+ },
+ "keyword": /@(?:having|inside|namespace|outside|pattern|require|search|where)\b/,
+ "standard-pattern": {
+ pattern: /\b(?:Alpha|AlphaNum|Any|Blank|End|LineBreak|Num|NumAlpha|Punct|Space|Start|Symbol|Word|WordBreak)\b(?:\([a-zA-Z0-9\-.,\s+]*\))?/,
+ inside: {
+ "standard-pattern-name": {
+ pattern: /^[a-zA-Z0-9\-.]+/,
+ alias: "builtin"
+ },
+ "quantifier": {
+ pattern: /\b\d+(?:\s*\+|\s*-\s*\d+)?(?!\w)/,
+ alias: "number"
+ },
+ "standard-pattern-attr": {
+ pattern: /[a-zA-Z0-9\-.]+/,
+ alias: "builtin"
+ },
+ "punctuation": /[,()]/
+ }
+ },
+ "quantifier": {
+ pattern: /\b\d+(?:\s*\+|\s*-\s*\d+)?(?!\w)/,
+ alias: "number"
+ },
+ "operator": [
+ {
+ pattern: /=/,
+ alias: "pattern-def"
+ },
+ {
+ pattern: /&/,
+ alias: "conjunction"
+ },
+ {
+ pattern: /~/,
+ alias: "exception"
+ },
+ {
+ pattern: /\?/,
+ alias: "optionality"
+ },
+ {
+ pattern: /[[\]]/,
+ alias: "repetition"
+ },
+ {
+ pattern: /[{}]/,
+ alias: "variation"
+ },
+ {
+ pattern: /[+_]/,
+ alias: "sequence"
+ },
+ {
+ pattern: /\.{2,3}/,
+ alias: "span"
+ }
+ ],
+ "field-capture": [
+ {
+ pattern: /([a-zA-Z0-9\-.]+\s*\()\s*[a-zA-Z0-9\-.]+\s*:\s*[a-zA-Z0-9\-.]+(?:\s*,\s*[a-zA-Z0-9\-.]+\s*:\s*[a-zA-Z0-9\-.]+)*(?=\s*\))/,
+ lookbehind: true,
+ inside: {
+ "field-name": {
+ pattern: /[a-zA-Z0-9\-.]+/,
+ alias: "variable"
+ },
+ "colon": /:/
+ }
+ },
+ {
+ pattern: /[a-zA-Z0-9\-.]+\s*:/,
+ inside: {
+ "field-name": {
+ pattern: /[a-zA-Z0-9\-.]+/,
+ alias: "variable"
+ },
+ "colon": /:/
+ }
+ }
+ ],
+ "punctuation": /[:;,()]/,
+ "name": /[a-zA-Z0-9\-.]+/
+ };
+ (function(Prism2) {
+ var variable = /\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;
+ Prism2.languages.nginx = {
+ "comment": {
+ pattern: /(^|[\s{};])#.*/,
+ lookbehind: true,
+ greedy: true
+ },
+ "directive": {
+ pattern: /(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "string": {
+ pattern: /((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "escape": {
+ pattern: /\\["'\\nrt]/,
+ alias: "entity"
+ },
+ "variable": variable
+ }
+ },
+ "comment": {
+ pattern: /(\s)#.*/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": {
+ pattern: /^\S+/,
+ greedy: true
+ },
+ // other patterns
+ "boolean": {
+ pattern: /(\s)(?:off|on)(?!\S)/,
+ lookbehind: true
+ },
+ "number": {
+ pattern: /(\s)\d+[a-z]*(?!\S)/i,
+ lookbehind: true
+ },
+ "variable": variable
+ }
+ },
+ "punctuation": /[{};]/
+ };
+ })(Prism);
+ Prism.languages.nim = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string": {
+ // Double-quoted strings can be prefixed by an identifier (Generalized raw string literals)
+ pattern: /(?:\b(?!\d)(?:\w|\\x[89a-fA-F][0-9a-fA-F])+)?(?:"""[\s\S]*?"""(?!")|"(?:\\[\s\S]|""|[^"\\])*")/,
+ greedy: true
+ },
+ "char": {
+ // Character literals are handled specifically to prevent issues with numeric type suffixes
+ pattern: /'(?:\\(?:\d+|x[\da-fA-F]{0,2}|.)|[^'])'/,
+ greedy: true
+ },
+ "function": {
+ pattern: /(?:(?!\d)(?:\w|\\x[89a-fA-F][0-9a-fA-F])+|`[^`\r\n]+`)\*?(?:\[[^\]]+\])?(?=\s*\()/,
+ greedy: true,
+ inside: {
+ "operator": /\*$/
+ }
+ },
+ // We don't want to highlight operators (and anything really) inside backticks
+ "identifier": {
+ pattern: /`[^`\r\n]+`/,
+ greedy: true,
+ inside: {
+ "punctuation": /`/
+ }
+ },
+ // The negative look ahead prevents wrong highlighting of the .. operator
+ "number": /\b(?:0[xXoObB][\da-fA-F_]+|\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:[eE][+-]?\d[\d_]*)?)(?:'?[iuf]\d*)?/,
+ "keyword": /\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\b/,
+ "operator": {
+ // Look behind and look ahead prevent wrong highlighting of punctuations [. .] {. .} (. .)
+ // but allow the slice operator .. to take precedence over them
+ // One can define his own operators in Nim so all combination of operators might be an operator.
+ pattern: /(^|[({\[](?=\.\.)|(?![({\[]\.).)(?:(?:[=+\-*\/<>@$~&%|!?^:\\]|\.\.|\.(?![)}\]]))+|\b(?:and|div|in|is|isnot|mod|not|notin|of|or|shl|shr|xor)\b)/m,
+ lookbehind: true
+ },
+ "punctuation": /[({\[]\.|\.[)}\]]|[`(){}\[\],:]/
+ };
+ Prism.languages.nix = {
+ "comment": {
+ pattern: /\/\*[\s\S]*?\*\/|#.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ // The lookbehind ensures the ${} is not preceded by \ or ''
+ pattern: /(^|(?:^|(?!'').)[^\\])\$\{(?:[^{}]|\{[^}]*\})*\}/,
+ lookbehind: true,
+ inside: null
+ // see below
+ }
+ }
+ },
+ "url": [
+ /\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,
+ {
+ pattern: /([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,
+ lookbehind: true
+ }
+ ],
+ "antiquotation": {
+ pattern: /\$(?=\{)/,
+ alias: "important"
+ },
+ "number": /\b\d+\b/,
+ "keyword": /\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,
+ "function": /\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,
+ "boolean": /\b(?:false|true)\b/,
+ "operator": /[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,
+ "punctuation": /[{}()[\].,:;]/
+ };
+ Prism.languages.nix.string.inside.interpolation.inside = Prism.languages.nix;
+ Prism.languages.nsis = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|[#;].*)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "keyword": {
+ pattern: /(^[\t ]*)(?:Abort|Add(?:BrandingImage|Size)|AdvSplash|Allow(?:RootDirInstall|SkipFiles)|AutoCloseWindow|BG(?:Font|Gradient|Image)|Banner|BrandingText|BringToFront|CRCCheck|Call(?:InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|Create(?:Directory|Font|ShortCut)|Delete(?:INISec|INIStr|RegKey|RegValue)?|Detail(?:Print|sButtonText)|Dialer|Dir(?:Text|Var|Verify)|EnableWindow|Enum(?:RegKey|RegValue)|Exch|Exec(?:Shell(?:Wait)?|Wait)?|ExpandEnvStrings|File(?:BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|Seek|Write|WriteByte|WriteUTF16LE|WriteWord)?|Find(?:Close|First|Next|Window)|FlushINI|Get(?:CurInstType|CurrentAddress|DLLVersion(?:Local)?|DlgItem|ErrorLevel|FileTime(?:Local)?|FullPathName|Function(?:Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(?:Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|InstProgressFlags|Inst(?:Type(?:GetText|SetText)?)|Install(?:ButtonText|Colors|Dir(?:RegKey)?)|Int(?:64|Ptr)?CmpU?|Int(?:64)?Fmt|Int(?:Ptr)?Op|IsWindow|Lang(?:DLL|String)|License(?:BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(?:Set|Text)|Manifest(?:DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|NSISdl|Name|Nop|OutFile|PE(?:DllCharacteristics|SubsysVer)|Page(?:Callbacks)?|Pop|Push|Quit|RMDir|Read(?:EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|SearchPath|Section(?:End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(?:AutoClose|BrandingImage|Compress|Compressor(?:DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(?:Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(?:InstDetails|UninstDetails|Window)|Silent(?:Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(?:CmpS?|Cpy|Len)|SubCaption|System|UnRegDLL|Unicode|UninstPage|Uninstall(?:ButtonText|Caption|Icon|SubCaption|Text)|UserInfo|VI(?:AddVersionKey|FileVersion|ProductVersion)|VPatch|Var|WindowIcon|Write(?:INIStr|Reg(?:Bin|DWORD|ExpandStr|MultiStr|None|Str)|Uninstaller)|XPStyle|ns(?:Dialogs|Exec))\b/m,
+ lookbehind: true
+ },
+ "property": /\b(?:ARCHIVE|FILE_(?:ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(?:(?:CR|CU|LM)(?:32|64)?|DD|PD|U)|HKEY_(?:CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(?:ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(?:ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY|admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user)\b/,
+ "constant": /\$\{[!\w\.:\^-]+\}|\$\([!\w\.:\^-]+\)/,
+ "variable": /\$\w[\w\.]*/,
+ "number": /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,
+ "operator": /--?|\+\+?|<=?|>=?|==?=?|&&?|\|\|?|[?*\/~^%]/,
+ "punctuation": /[{}[\];(),.:]/,
+ "important": {
+ pattern: /(^[\t ]*)!(?:addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|verbose|warning)\b/im,
+ lookbehind: true
+ }
+ };
+ Prism.languages.objectivec = Prism.languages.extend("c", {
+ "string": {
+ pattern: /@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
+ greedy: true
+ },
+ "keyword": /\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,
+ "operator": /-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/
+ });
+ delete Prism.languages.objectivec["class-name"];
+ Prism.languages.objc = Prism.languages.objectivec;
+ Prism.languages.ocaml = {
+ "comment": {
+ pattern: /\(\*[\s\S]*?\*\)/,
+ greedy: true
+ },
+ "char": {
+ pattern: /'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,
+ greedy: true
+ },
+ "string": [
+ {
+ pattern: /"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,
+ greedy: true
+ },
+ {
+ pattern: /\{([a-z_]*)\|[\s\S]*?\|\1\}/,
+ greedy: true
+ }
+ ],
+ "number": [
+ // binary and octal
+ /\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,
+ // hexadecimal
+ /\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,
+ // decimal
+ /\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i
+ ],
+ "directive": {
+ pattern: /\B#\w+/,
+ alias: "property"
+ },
+ "label": {
+ pattern: /\B~\w+/,
+ alias: "property"
+ },
+ "type-variable": {
+ pattern: /\B'\w+/,
+ alias: "function"
+ },
+ "variant": {
+ pattern: /`\w+/,
+ alias: "symbol"
+ },
+ // For the list of keywords and operators,
+ // see: http://caml.inria.fr/pub/docs/manual-ocaml/lex.html#sec84
+ "keyword": /\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "operator-like-punctuation": {
+ pattern: /\[[<>|]|[>|]\]|\{<|>\}/,
+ alias: "punctuation"
+ },
+ // Custom operators are allowed
+ "operator": /\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,
+ "punctuation": /;;|::|[(){}\[\].,:;#]|\b_\b/
+ };
+ (function(Prism2) {
+ var escapes = /\\(?:["'\\abefnrtv]|0[0-7]{2}|U[\dA-Fa-f]{6}|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2})/;
+ Prism2.languages.odin = {
+ /**
+ * The current implementation supports only 1 level of nesting.
+ *
+ * @author Michael Schmidt
+ * @author edukisto
+ */
+ "comment": [
+ {
+ pattern: /\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,
+ greedy: true
+ },
+ {
+ pattern: /#![^\n\r]*/,
+ greedy: true
+ },
+ {
+ pattern: /\/\/[^\n\r]*/,
+ greedy: true
+ }
+ ],
+ /**
+ * Should be found before strings because of '"'"- and '`'`-like sequences.
+ */
+ "char": {
+ pattern: /'(?:\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\n\r'\\])'/,
+ greedy: true,
+ inside: {
+ "symbol": escapes
+ }
+ },
+ "string": [
+ {
+ pattern: /`[^`]*`/,
+ greedy: true
+ },
+ {
+ pattern: /"(?:\\.|[^\n\r"\\])*"/,
+ greedy: true,
+ inside: {
+ "symbol": escapes
+ }
+ }
+ ],
+ "directive": {
+ pattern: /#\w+/,
+ alias: "property"
+ },
+ "number": /\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.(?!\.)\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?(?!\w)/,
+ "discard": {
+ pattern: /\b_\b/,
+ alias: "keyword"
+ },
+ "procedure-definition": {
+ pattern: /\b\w+(?=[ \t]*(?::\s*){2}proc\b)/,
+ alias: "function"
+ },
+ "keyword": /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
+ /**
+ * false, nil, true can be used as procedure names. "_" and keywords can't.
+ */
+ "procedure-name": {
+ pattern: /\b\w+(?=[ \t]*\()/,
+ alias: "function"
+ },
+ "boolean": /\b(?:false|nil|true)\b/,
+ "constant-parameter-sign": {
+ pattern: /\$/,
+ alias: "important"
+ },
+ "undefined": {
+ pattern: /---/,
+ alias: "operator"
+ },
+ "arrow": {
+ pattern: /->/,
+ alias: "punctuation"
+ },
+ "operator": /\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,
+ "punctuation": /[(),.:;@\[\]{}]/
+ };
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.opencl = Prism2.languages.extend("c", {
+ // Extracted from the official specs (2.0) and http://streamcomputing.eu/downloads/?opencl.lang (opencl-keywords, opencl-types) and http://sourceforge.net/tracker/?func=detail&aid=2957794&group_id=95717&atid=612384 (Words2, partly Words3)
+ "keyword": /\b(?:(?:__)?(?:constant|global|kernel|local|private|read_only|read_write|write_only)|__attribute__|auto|(?:bool|u?(?:char|int|long|short)|half|quad)(?:2|3|4|8|16)?|break|case|complex|const|continue|(?:double|float)(?:16(?:x(?:1|2|4|8|16))?|1x(?:1|2|4|8|16)|2(?:x(?:1|2|4|8|16))?|3|4(?:x(?:1|2|4|8|16))?|8(?:x(?:1|2|4|8|16))?)?|default|do|else|enum|extern|for|goto|if|imaginary|inline|packed|pipe|register|restrict|return|signed|sizeof|static|struct|switch|typedef|uniform|union|unsigned|void|volatile|while)\b/,
+ // Extracted from http://streamcomputing.eu/downloads/?opencl.lang (opencl-const)
+ // Math Constants: https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/mathConstants.html
+ // Macros and Limits: https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/macroLimits.html
+ "number": /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[fuhl]{0,4}/i,
+ "boolean": /\b(?:false|true)\b/,
+ "constant-opencl-kernel": {
+ pattern: /\b(?:CHAR_(?:BIT|MAX|MIN)|CLK_(?:ADDRESS_(?:CLAMP(?:_TO_EDGE)?|NONE|REPEAT)|FILTER_(?:LINEAR|NEAREST)|(?:GLOBAL|LOCAL)_MEM_FENCE|NORMALIZED_COORDS_(?:FALSE|TRUE))|CL_(?:BGRA|(?:HALF_)?FLOAT|INTENSITY|LUMINANCE|A?R?G?B?[Ax]?|(?:(?:UN)?SIGNED|[US]NORM)_(?:INT(?:8|16|32))|UNORM_(?:INT_101010|SHORT_(?:555|565)))|(?:DBL|FLT|HALF)_(?:DIG|EPSILON|(?:MAX|MIN)(?:(?:_10)?_EXP)?|MANT_DIG)|FLT_RADIX|HUGE_VALF?|(?:INT|LONG|SCHAR|SHRT)_(?:MAX|MIN)|INFINITY|MAXFLOAT|M_(?:[12]_PI|2_SQRTPI|E|LN(?:2|10)|LOG(?:2|10)E?|PI(?:_[24])?|SQRT(?:1_2|2))(?:_F|_H)?|NAN|(?:UCHAR|UINT|ULONG|USHRT)_MAX)\b/,
+ alias: "constant"
+ }
+ });
+ Prism2.languages.insertBefore("opencl", "class-name", {
+ // https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/scalarDataTypes.html
+ // https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/otherDataTypes.html
+ "builtin-type": {
+ pattern: /\b(?:_cl_(?:command_queue|context|device_id|event|kernel|mem|platform_id|program|sampler)|cl_(?:image_format|mem_fence_flags)|clk_event_t|event_t|image(?:1d_(?:array_|buffer_)?t|2d_(?:array_(?:depth_|msaa_depth_|msaa_)?|depth_|msaa_depth_|msaa_)?t|3d_t)|intptr_t|ndrange_t|ptrdiff_t|queue_t|reserve_id_t|sampler_t|size_t|uintptr_t)\b/,
+ alias: "keyword"
+ }
+ });
+ var attributes = {
+ // Extracted from http://streamcomputing.eu/downloads/?opencl_host.lang (opencl-types and opencl-host)
+ "type-opencl-host": {
+ pattern: /\b(?:cl_(?:GLenum|GLint|GLuin|addressing_mode|bitfield|bool|buffer_create_type|build_status|channel_(?:order|type)|(?:u?(?:char|int|long|short)|double|float)(?:2|3|4|8|16)?|command_(?:queue(?:_info|_properties)?|type)|context(?:_info|_properties)?|device_(?:exec_capabilities|fp_config|id|info|local_mem_type|mem_cache_type|type)|(?:event|sampler)(?:_info)?|filter_mode|half|image_info|kernel(?:_info|_work_group_info)?|map_flags|mem(?:_flags|_info|_object_type)?|platform_(?:id|info)|profiling_info|program(?:_build_info|_info)?))\b/,
+ alias: "keyword"
+ },
+ "boolean-opencl-host": {
+ pattern: /\bCL_(?:FALSE|TRUE)\b/,
+ alias: "boolean"
+ },
+ // Extracted from cl.h (2.0) and http://streamcomputing.eu/downloads/?opencl_host.lang (opencl-const)
+ "constant-opencl-host": {
+ pattern: /\bCL_(?:A|ABGR|ADDRESS_(?:CLAMP(?:_TO_EDGE)?|MIRRORED_REPEAT|NONE|REPEAT)|ARGB|BGRA|BLOCKING|BUFFER_CREATE_TYPE_REGION|BUILD_(?:ERROR|IN_PROGRESS|NONE|PROGRAM_FAILURE|SUCCESS)|COMMAND_(?:ACQUIRE_GL_OBJECTS|BARRIER|COPY_(?:BUFFER(?:_RECT|_TO_IMAGE)?|IMAGE(?:_TO_BUFFER)?)|FILL_(?:BUFFER|IMAGE)|MAP(?:_BUFFER|_IMAGE)|MARKER|MIGRATE(?:_SVM)?_MEM_OBJECTS|NATIVE_KERNEL|NDRANGE_KERNEL|READ_(?:BUFFER(?:_RECT)?|IMAGE)|RELEASE_GL_OBJECTS|SVM_(?:FREE|MAP|MEMCPY|MEMFILL|UNMAP)|TASK|UNMAP_MEM_OBJECT|USER|WRITE_(?:BUFFER(?:_RECT)?|IMAGE))|COMPILER_NOT_AVAILABLE|COMPILE_PROGRAM_FAILURE|COMPLETE|CONTEXT_(?:DEVICES|INTEROP_USER_SYNC|NUM_DEVICES|PLATFORM|PROPERTIES|REFERENCE_COUNT)|DEPTH(?:_STENCIL)?|DEVICE_(?:ADDRESS_BITS|AFFINITY_DOMAIN_(?:L[1-4]_CACHE|NEXT_PARTITIONABLE|NUMA)|AVAILABLE|BUILT_IN_KERNELS|COMPILER_AVAILABLE|DOUBLE_FP_CONFIG|ENDIAN_LITTLE|ERROR_CORRECTION_SUPPORT|EXECUTION_CAPABILITIES|EXTENSIONS|GLOBAL_(?:MEM_(?:CACHELINE_SIZE|CACHE_SIZE|CACHE_TYPE|SIZE)|VARIABLE_PREFERRED_TOTAL_SIZE)|HOST_UNIFIED_MEMORY|IL_VERSION|IMAGE(?:2D_MAX_(?:HEIGHT|WIDTH)|3D_MAX_(?:DEPTH|HEIGHT|WIDTH)|_BASE_ADDRESS_ALIGNMENT|_MAX_ARRAY_SIZE|_MAX_BUFFER_SIZE|_PITCH_ALIGNMENT|_SUPPORT)|LINKER_AVAILABLE|LOCAL_MEM_SIZE|LOCAL_MEM_TYPE|MAX_(?:CLOCK_FREQUENCY|COMPUTE_UNITS|CONSTANT_ARGS|CONSTANT_BUFFER_SIZE|GLOBAL_VARIABLE_SIZE|MEM_ALLOC_SIZE|NUM_SUB_GROUPS|ON_DEVICE_(?:EVENTS|QUEUES)|PARAMETER_SIZE|PIPE_ARGS|READ_IMAGE_ARGS|READ_WRITE_IMAGE_ARGS|SAMPLERS|WORK_GROUP_SIZE|WORK_ITEM_DIMENSIONS|WORK_ITEM_SIZES|WRITE_IMAGE_ARGS)|MEM_BASE_ADDR_ALIGN|MIN_DATA_TYPE_ALIGN_SIZE|NAME|NATIVE_VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT)|NOT_(?:AVAILABLE|FOUND)|OPENCL_C_VERSION|PARENT_DEVICE|PARTITION_(?:AFFINITY_DOMAIN|BY_AFFINITY_DOMAIN|BY_COUNTS|BY_COUNTS_LIST_END|EQUALLY|FAILED|MAX_SUB_DEVICES|PROPERTIES|TYPE)|PIPE_MAX_(?:ACTIVE_RESERVATIONS|PACKET_SIZE)|PLATFORM|PREFERRED_(?:GLOBAL_ATOMIC_ALIGNMENT|INTEROP_USER_SYNC|LOCAL_ATOMIC_ALIGNMENT|PLATFORM_ATOMIC_ALIGNMENT|VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT))|PRINTF_BUFFER_SIZE|PROFILE|PROFILING_TIMER_RESOLUTION|QUEUE_(?:ON_(?:DEVICE_(?:MAX_SIZE|PREFERRED_SIZE|PROPERTIES)|HOST_PROPERTIES)|PROPERTIES)|REFERENCE_COUNT|SINGLE_FP_CONFIG|SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS|SVM_(?:ATOMICS|CAPABILITIES|COARSE_GRAIN_BUFFER|FINE_GRAIN_BUFFER|FINE_GRAIN_SYSTEM)|TYPE(?:_ACCELERATOR|_ALL|_CPU|_CUSTOM|_DEFAULT|_GPU)?|VENDOR(?:_ID)?|VERSION)|DRIVER_VERSION|EVENT_(?:COMMAND_(?:EXECUTION_STATUS|QUEUE|TYPE)|CONTEXT|REFERENCE_COUNT)|EXEC_(?:KERNEL|NATIVE_KERNEL|STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)|FILTER_(?:LINEAR|NEAREST)|FLOAT|FP_(?:CORRECTLY_ROUNDED_DIVIDE_SQRT|DENORM|FMA|INF_NAN|ROUND_TO_INF|ROUND_TO_NEAREST|ROUND_TO_ZERO|SOFT_FLOAT)|GLOBAL|HALF_FLOAT|IMAGE_(?:ARRAY_SIZE|BUFFER|DEPTH|ELEMENT_SIZE|FORMAT|FORMAT_MISMATCH|FORMAT_NOT_SUPPORTED|HEIGHT|NUM_MIP_LEVELS|NUM_SAMPLES|ROW_PITCH|SLICE_PITCH|WIDTH)|INTENSITY|INVALID_(?:ARG_INDEX|ARG_SIZE|ARG_VALUE|BINARY|BUFFER_SIZE|BUILD_OPTIONS|COMMAND_QUEUE|COMPILER_OPTIONS|CONTEXT|DEVICE|DEVICE_PARTITION_COUNT|DEVICE_QUEUE|DEVICE_TYPE|EVENT|EVENT_WAIT_LIST|GLOBAL_OFFSET|GLOBAL_WORK_SIZE|GL_OBJECT|HOST_PTR|IMAGE_DESCRIPTOR|IMAGE_FORMAT_DESCRIPTOR|IMAGE_SIZE|KERNEL|KERNEL_ARGS|KERNEL_DEFINITION|KERNEL_NAME|LINKER_OPTIONS|MEM_OBJECT|MIP_LEVEL|OPERATION|PIPE_SIZE|PLATFORM|PROGRAM|PROGRAM_EXECUTABLE|PROPERTY|QUEUE_PROPERTIES|SAMPLER|VALUE|WORK_DIMENSION|WORK_GROUP_SIZE|WORK_ITEM_SIZE)|KERNEL_(?:ARG_(?:ACCESS_(?:NONE|QUALIFIER|READ_ONLY|READ_WRITE|WRITE_ONLY)|ADDRESS_(?:CONSTANT|GLOBAL|LOCAL|PRIVATE|QUALIFIER)|INFO_NOT_AVAILABLE|NAME|TYPE_(?:CONST|NAME|NONE|PIPE|QUALIFIER|RESTRICT|VOLATILE))|ATTRIBUTES|COMPILE_NUM_SUB_GROUPS|COMPILE_WORK_GROUP_SIZE|CONTEXT|EXEC_INFO_SVM_FINE_GRAIN_SYSTEM|EXEC_INFO_SVM_PTRS|FUNCTION_NAME|GLOBAL_WORK_SIZE|LOCAL_MEM_SIZE|LOCAL_SIZE_FOR_SUB_GROUP_COUNT|MAX_NUM_SUB_GROUPS|MAX_SUB_GROUP_SIZE_FOR_NDRANGE|NUM_ARGS|PREFERRED_WORK_GROUP_SIZE_MULTIPLE|PRIVATE_MEM_SIZE|PROGRAM|REFERENCE_COUNT|SUB_GROUP_COUNT_FOR_NDRANGE|WORK_GROUP_SIZE)|LINKER_NOT_AVAILABLE|LINK_PROGRAM_FAILURE|LOCAL|LUMINANCE|MAP_(?:FAILURE|READ|WRITE|WRITE_INVALIDATE_REGION)|MEM_(?:ALLOC_HOST_PTR|ASSOCIATED_MEMOBJECT|CONTEXT|COPY_HOST_PTR|COPY_OVERLAP|FLAGS|HOST_NO_ACCESS|HOST_PTR|HOST_READ_ONLY|HOST_WRITE_ONLY|KERNEL_READ_AND_WRITE|MAP_COUNT|OBJECT_(?:ALLOCATION_FAILURE|BUFFER|IMAGE1D|IMAGE1D_ARRAY|IMAGE1D_BUFFER|IMAGE2D|IMAGE2D_ARRAY|IMAGE3D|PIPE)|OFFSET|READ_ONLY|READ_WRITE|REFERENCE_COUNT|SIZE|SVM_ATOMICS|SVM_FINE_GRAIN_BUFFER|TYPE|USES_SVM_POINTER|USE_HOST_PTR|WRITE_ONLY)|MIGRATE_MEM_OBJECT_(?:CONTENT_UNDEFINED|HOST)|MISALIGNED_SUB_BUFFER_OFFSET|NONE|NON_BLOCKING|OUT_OF_(?:HOST_MEMORY|RESOURCES)|PIPE_(?:MAX_PACKETS|PACKET_SIZE)|PLATFORM_(?:EXTENSIONS|HOST_TIMER_RESOLUTION|NAME|PROFILE|VENDOR|VERSION)|PROFILING_(?:COMMAND_(?:COMPLETE|END|QUEUED|START|SUBMIT)|INFO_NOT_AVAILABLE)|PROGRAM_(?:BINARIES|BINARY_SIZES|BINARY_TYPE(?:_COMPILED_OBJECT|_EXECUTABLE|_LIBRARY|_NONE)?|BUILD_(?:GLOBAL_VARIABLE_TOTAL_SIZE|LOG|OPTIONS|STATUS)|CONTEXT|DEVICES|IL|KERNEL_NAMES|NUM_DEVICES|NUM_KERNELS|REFERENCE_COUNT|SOURCE)|QUEUED|QUEUE_(?:CONTEXT|DEVICE|DEVICE_DEFAULT|ON_DEVICE|ON_DEVICE_DEFAULT|OUT_OF_ORDER_EXEC_MODE_ENABLE|PROFILING_ENABLE|PROPERTIES|REFERENCE_COUNT|SIZE)|R|RA|READ_(?:ONLY|WRITE)_CACHE|RG|RGB|RGBA|RGBx|RGx|RUNNING|Rx|SAMPLER_(?:ADDRESSING_MODE|CONTEXT|FILTER_MODE|LOD_MAX|LOD_MIN|MIP_FILTER_MODE|NORMALIZED_COORDS|REFERENCE_COUNT)|(?:UN)?SIGNED_INT(?:8|16|32)|SNORM_INT(?:8|16)|SUBMITTED|SUCCESS|UNORM_INT(?:8|16|24|_101010|_101010_2)|UNORM_SHORT_(?:555|565)|VERSION_(?:1_0|1_1|1_2|2_0|2_1)|sBGRA|sRGB|sRGBA|sRGBx)\b/,
+ alias: "constant"
+ },
+ // Extracted from cl.h (2.0) and http://streamcomputing.eu/downloads/?opencl_host.lang (opencl-host)
+ "function-opencl-host": {
+ pattern: /\bcl(?:BuildProgram|CloneKernel|CompileProgram|Create(?:Buffer|CommandQueue(?:WithProperties)?|Context|ContextFromType|Image|Image2D|Image3D|Kernel|KernelsInProgram|Pipe|ProgramWith(?:Binary|BuiltInKernels|IL|Source)|Sampler|SamplerWithProperties|SubBuffer|SubDevices|UserEvent)|Enqueue(?:(?:Barrier|Marker)(?:WithWaitList)?|Copy(?:Buffer(?:Rect|ToImage)?|Image(?:ToBuffer)?)|(?:Fill|Map)(?:Buffer|Image)|MigrateMemObjects|NDRangeKernel|NativeKernel|(?:Read|Write)(?:Buffer(?:Rect)?|Image)|SVM(?:Free|Map|MemFill|Memcpy|MigrateMem|Unmap)|Task|UnmapMemObject|WaitForEvents)|Finish|Flush|Get(?:CommandQueueInfo|ContextInfo|Device(?:AndHostTimer|IDs|Info)|Event(?:Profiling)?Info|ExtensionFunctionAddress(?:ForPlatform)?|HostTimer|ImageInfo|Kernel(?:ArgInfo|Info|SubGroupInfo|WorkGroupInfo)|MemObjectInfo|PipeInfo|Platform(?:IDs|Info)|Program(?:Build)?Info|SamplerInfo|SupportedImageFormats)|LinkProgram|(?:Release|Retain)(?:CommandQueue|Context|Device|Event|Kernel|MemObject|Program|Sampler)|SVM(?:Alloc|Free)|Set(?:CommandQueueProperty|DefaultDeviceCommandQueue|EventCallback|Kernel|Kernel(?:Arg(?:SVMPointer)?|ExecInfo)|MemObjectDestructorCallback|UserEventStatus)|Unload(?:Platform)?Compiler|WaitForEvents)\b/,
+ alias: "function"
+ }
+ };
+ Prism2.languages.insertBefore("c", "keyword", attributes);
+ if (Prism2.languages.cpp) {
+ attributes["type-opencl-host-cpp"] = {
+ pattern: /\b(?:Buffer|BufferGL|BufferRenderGL|CommandQueue|Context|Device|DeviceCommandQueue|EnqueueArgs|Event|Image|Image1D|Image1DArray|Image1DBuffer|Image2D|Image2DArray|Image2DGL|Image3D|Image3DGL|ImageFormat|ImageGL|Kernel|KernelFunctor|LocalSpaceArg|Memory|NDRange|Pipe|Platform|Program|SVMAllocator|SVMTraitAtomic|SVMTraitCoarse|SVMTraitFine|SVMTraitReadOnly|SVMTraitReadWrite|SVMTraitWriteOnly|Sampler|UserEvent)\b/,
+ alias: "keyword"
+ };
+ Prism2.languages.insertBefore("cpp", "keyword", attributes);
+ }
+ })(Prism);
+ Prism.languages.openqasm = {
+ "comment": /\/\*[\s\S]*?\*\/|\/\/.*/,
+ "string": {
+ pattern: /"[^"\r\n\t]*"|'[^'\r\n\t]*'/,
+ greedy: true
+ },
+ "keyword": /\b(?:CX|OPENQASM|U|barrier|boxas|boxto|break|const|continue|ctrl|def|defcal|defcalgrammar|delay|else|end|for|gate|gphase|if|in|include|inv|kernel|lengthof|let|measure|pow|reset|return|rotary|stretchinf|while)\b|#pragma\b/,
+ "class-name": /\b(?:angle|bit|bool|creg|fixed|float|int|length|qreg|qubit|stretch|uint)\b/,
+ "function": /\b(?:cos|exp|ln|popcount|rotl|rotr|sin|sqrt|tan)\b(?=\s*\()/,
+ "constant": /\b(?:euler|pi|tau)\b|π|𝜏|ℇ/,
+ "number": {
+ pattern: /(^|[^.\w$])(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?(?:dt|ns|us|µs|ms|s)?/i,
+ lookbehind: true
+ },
+ "operator": /->|>>=?|<<=?|&&|\|\||\+\+|--|[!=<>&|~^+\-*/%]=?|@/,
+ "punctuation": /[(){}\[\];,:.]/
+ };
+ Prism.languages.qasm = Prism.languages.openqasm;
+ Prism.languages.oz = {
+ "comment": {
+ pattern: /\/\*[\s\S]*?\*\/|%.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:[^"\\]|\\[\s\S])*"/,
+ greedy: true
+ },
+ "atom": {
+ pattern: /'(?:[^'\\]|\\[\s\S])*'/,
+ greedy: true,
+ alias: "builtin"
+ },
+ "keyword": /\$|\[\]|\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\b/,
+ "function": [
+ /\b[a-z][A-Za-z\d]*(?=\()/,
+ {
+ pattern: /(\{)[A-Z][A-Za-z\d]*\b/,
+ lookbehind: true
+ }
+ ],
+ "number": /\b(?:0[bx][\da-f]+|\d+(?:\.\d*)?(?:e~?\d+)?)\b|&(?:[^\\]|\\(?:\d{3}|.))/i,
+ "variable": /`(?:[^`\\]|\\.)+`/,
+ "attr-name": /\b\w+(?=[ \t]*:(?![:=]))/,
+ "operator": /:(?:=|::?)|<[-:=]?|=(?:=|<?:?)|>=?:?|\\=:?|!!?|[|#+\-*\/,~^@]|\b(?:andthen|div|mod|orelse)\b/,
+ "punctuation": /[\[\](){}.:;?]/
+ };
+ Prism.languages.parigp = {
+ "comment": /\/\*[\s\S]*?\*\/|\\\\.*/,
+ "string": {
+ pattern: /"(?:[^"\\\r\n]|\\.)*"/,
+ greedy: true
+ },
+ // PARI/GP does not care about white spaces at all
+ // so let's process the keywords to build an appropriate regexp
+ // (e.g. "b *r *e *a *k", etc.)
+ "keyword": function() {
+ var keywords = [
+ "breakpoint",
+ "break",
+ "dbg_down",
+ "dbg_err",
+ "dbg_up",
+ "dbg_x",
+ "forcomposite",
+ "fordiv",
+ "forell",
+ "forpart",
+ "forprime",
+ "forstep",
+ "forsubgroup",
+ "forvec",
+ "for",
+ "iferr",
+ "if",
+ "local",
+ "my",
+ "next",
+ "return",
+ "until",
+ "while"
+ ];
+ keywords = keywords.map(function(keyword) {
+ return keyword.split("").join(" *");
+ }).join("|");
+ return RegExp("\\b(?:" + keywords + ")\\b");
+ }(),
+ "function": /\b\w(?:[\w ]*\w)?(?= *\()/,
+ "number": {
+ // The lookbehind and the negative lookahead prevent from breaking the .. operator
+ pattern: /((?:\. *\. *)?)(?:\b\d(?: *\d)*(?: *(?!\. *\.)\.(?: *\d)*)?|\. *\d(?: *\d)*)(?: *e *(?:[+-] *)?\d(?: *\d)*)?/i,
+ lookbehind: true
+ },
+ "operator": /\. *\.|[*\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\+(?: *[+=])?|-(?: *[-=>])?|<(?: *>|(?: *<)?(?: *=)?)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\(?: *\/)?(?: *=)?|&(?: *&)?|\| *\||['#~^]/,
+ "punctuation": /[\[\]{}().,:;|]/
+ };
+ (function(Prism2) {
+ var parser = Prism2.languages.parser = Prism2.languages.extend("markup", {
+ "keyword": {
+ pattern: /(^|[^^])(?:\^(?:case|eval|for|if|switch|throw)\b|@(?:BASE|CLASS|GET(?:_DEFAULT)?|OPTIONS|SET_DEFAULT|USE)\b)/,
+ lookbehind: true
+ },
+ "variable": {
+ pattern: /(^|[^^])\B\$(?:\w+|(?=[.{]))(?:(?:\.|::?)\w+)*(?:\.|::?)?/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\.|:+/
+ }
+ },
+ "function": {
+ pattern: /(^|[^^])\B[@^]\w+(?:(?:\.|::?)\w+)*(?:\.|::?)?/,
+ lookbehind: true,
+ inside: {
+ "keyword": {
+ pattern: /(^@)(?:GET_|SET_)/,
+ lookbehind: true
+ },
+ "punctuation": /\.|:+/
+ }
+ },
+ "escape": {
+ pattern: /\^(?:[$^;@()\[\]{}"':]|#[a-f\d]*)/i,
+ alias: "builtin"
+ },
+ "punctuation": /[\[\](){};]/
+ });
+ parser = Prism2.languages.insertBefore("parser", "keyword", {
+ "parser-comment": {
+ pattern: /(\s)#.*/,
+ lookbehind: true,
+ alias: "comment"
+ },
+ "expression": {
+ // Allow for 3 levels of depth
+ pattern: /(^|[^^])\((?:[^()]|\((?:[^()]|\((?:[^()])*\))*\))*\)/,
+ greedy: true,
+ lookbehind: true,
+ inside: {
+ "string": {
+ pattern: /(^|[^^])(["'])(?:(?!\2)[^^]|\^[\s\S])*\2/,
+ lookbehind: true
+ },
+ "keyword": parser.keyword,
+ "variable": parser.variable,
+ "function": parser.function,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /\b(?:0x[a-f\d]+|\d+(?:\.\d*)?(?:e[+-]?\d+)?)\b/i,
+ "escape": parser.escape,
+ "operator": /[~+*\/\\%]|!(?:\|\|?|=)?|&&?|\|\|?|==|<[<=]?|>[>=]?|-[fd]?|\b(?:def|eq|ge|gt|in|is|le|lt|ne)\b/,
+ "punctuation": parser.punctuation
+ }
+ }
+ });
+ Prism2.languages.insertBefore("inside", "punctuation", {
+ "expression": parser.expression,
+ "keyword": parser.keyword,
+ "variable": parser.variable,
+ "function": parser.function,
+ "escape": parser.escape,
+ "parser-punctuation": {
+ pattern: parser.punctuation,
+ alias: "punctuation"
+ }
+ }, parser["tag"].inside["attr-value"]);
+ })(Prism);
+ Prism.languages.pascal = {
+ "directive": {
+ pattern: /\{\$[\s\S]*?\}/,
+ greedy: true,
+ alias: ["marco", "property"]
+ },
+ "comment": {
+ pattern: /\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,
+ greedy: true
+ },
+ "asm": {
+ pattern: /(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,
+ lookbehind: true,
+ greedy: true,
+ inside: null
+ // see below
+ },
+ "keyword": [
+ {
+ // Turbo Pascal
+ pattern: /(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,
+ lookbehind: true
+ },
+ {
+ // Free Pascal
+ pattern: /(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,
+ lookbehind: true
+ },
+ {
+ // Object Pascal
+ pattern: /(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,
+ lookbehind: true
+ },
+ {
+ // Modifiers
+ pattern: /(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,
+ lookbehind: true
+ }
+ ],
+ "number": [
+ // Hexadecimal, octal and binary
+ /(?:[&%]\d+|\$[a-f\d]+)/i,
+ // Decimal
+ /\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i
+ ],
+ "operator": [
+ /\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,
+ {
+ pattern: /(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /\(\.|\.\)|[()\[\]:;,.]/
+ };
+ Prism.languages.pascal.asm.inside = Prism.languages.extend("pascal", {
+ "asm": void 0,
+ "keyword": void 0,
+ "operator": void 0
+ });
+ Prism.languages.objectpascal = Prism.languages.pascal;
+ (function(Prism2) {
+ var braces = /\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\)/.source;
+ var type = /(?:\b\w+(?:<braces>)?|<braces>)/.source.replace(/<braces>/g, function() {
+ return braces;
+ });
+ var pascaligo = Prism2.languages.pascaligo = {
+ "comment": /\(\*[\s\S]+?\*\)|\/\/.*/,
+ "string": {
+ pattern: /(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1|\^[a-z]/i,
+ greedy: true
+ },
+ "class-name": [
+ {
+ pattern: RegExp(/(\btype\s+\w+\s+is\s+)<type>/.source.replace(/<type>/g, function() {
+ return type;
+ }), "i"),
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ {
+ pattern: RegExp(/<type>(?=\s+is\b)/.source.replace(/<type>/g, function() {
+ return type;
+ }), "i"),
+ inside: null
+ // see below
+ },
+ {
+ pattern: RegExp(/(:\s*)<type>/.source.replace(/<type>/g, function() {
+ return type;
+ })),
+ lookbehind: true,
+ inside: null
+ // see below
+ }
+ ],
+ "keyword": {
+ pattern: /(^|[^&])\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\b/i,
+ lookbehind: true
+ },
+ "boolean": {
+ pattern: /(^|[^&])\b(?:False|True)\b/i,
+ lookbehind: true
+ },
+ "builtin": {
+ pattern: /(^|[^&])\b(?:bool|int|list|map|nat|record|string|unit)\b/i,
+ lookbehind: true
+ },
+ "function": /\b\w+(?=\s*\()/,
+ "number": [
+ // Hexadecimal, octal and binary
+ /%[01]+|&[0-7]+|\$[a-f\d]+/i,
+ // Decimal
+ /\b\d+(?:\.\d+)?(?:e[+-]?\d+)?(?:mtz|n)?/i
+ ],
+ "operator": /->|=\/=|\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=|]|\b(?:and|mod|or)\b/,
+ "punctuation": /\(\.|\.\)|[()\[\]:;,.{}]/
+ };
+ var classNameInside = ["comment", "keyword", "builtin", "operator", "punctuation"].reduce(function(accum, key) {
+ accum[key] = pascaligo[key];
+ return accum;
+ }, {});
+ pascaligo["class-name"].forEach(function(p) {
+ p.inside = classNameInside;
+ });
+ })(Prism);
+ Prism.languages.psl = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:\\.|[^\\"])*"/,
+ greedy: true,
+ inside: {
+ "symbol": /\\[ntrbA-Z"\\]/
+ }
+ },
+ "heredoc-string": {
+ pattern: /<<<([a-zA-Z_]\w*)[\r\n](?:.*[\r\n])*?\1\b/,
+ alias: "string",
+ greedy: true
+ },
+ "keyword": /\b(?:__multi|__single|case|default|do|else|elsif|exit|export|for|foreach|function|if|last|line|local|next|requires|return|switch|until|while|word)\b/,
+ "constant": /\b(?:ALARM|CHART_ADD_GRAPH|CHART_DELETE_GRAPH|CHART_DESTROY|CHART_LOAD|CHART_PRINT|EOF|OFFLINE|OK|PSL_PROF_LOG|R_CHECK_HORIZ|R_CHECK_VERT|R_CLICKER|R_COLUMN|R_FRAME|R_ICON|R_LABEL|R_LABEL_CENTER|R_LIST_MULTIPLE|R_LIST_MULTIPLE_ND|R_LIST_SINGLE|R_LIST_SINGLE_ND|R_MENU|R_POPUP|R_POPUP_SCROLLED|R_RADIO_HORIZ|R_RADIO_VERT|R_ROW|R_SCALE_HORIZ|R_SCALE_VERT|R_SEP_HORIZ|R_SEP_VERT|R_SPINNER|R_TEXT_FIELD|R_TEXT_FIELD_LABEL|R_TOGGLE|TRIM_LEADING|TRIM_LEADING_AND_TRAILING|TRIM_REDUNDANT|TRIM_TRAILING|VOID|WARN)\b/,
+ "boolean": /\b(?:FALSE|False|NO|No|TRUE|True|YES|Yes|false|no|true|yes)\b/,
+ "variable": /\b(?:PslDebug|errno|exit_status)\b/,
+ "builtin": {
+ pattern: /\b(?:PslExecute|PslFunctionCall|PslFunctionExists|PslSetOptions|_snmp_debug|acos|add_diary|annotate|annotate_get|ascii_to_ebcdic|asctime|asin|atan|atexit|batch_set|blackout|cat|ceil|chan_exists|change_state|close|code_cvt|cond_signal|cond_wait|console_type|convert_base|convert_date|convert_locale_date|cos|cosh|create|date|dcget_text|destroy|destroy_lock|dget_text|difference|dump_hist|ebcdic_to_ascii|encrypt|event_archive|event_catalog_get|event_check|event_query|event_range_manage|event_range_query|event_report|event_schedule|event_trigger|event_trigger2|execute|exists|exp|fabs|file|floor|fmod|fopen|fseek|ftell|full_discovery|get|get_chan_info|get_ranges|get_text|get_vars|getenv|gethostinfo|getpid|getpname|grep|history|history_get_retention|in_transition|index|int|internal|intersection|is_var|isnumber|join|kill|length|lines|lock|lock_info|log|log10|loge|matchline|msg_check|msg_get_format|msg_get_severity|msg_printf|msg_sprintf|ntharg|nthargf|nthline|nthlinef|num_bytes|num_consoles|pconfig|popen|poplines|pow|print|printf|proc_exists|process|random|read|readln|refresh_parameters|remote_check|remote_close|remote_event_query|remote_event_trigger|remote_file_send|remote_open|remove|replace|rindex|sec_check_priv|sec_store_get|sec_store_set|set|set_alarm_ranges|set_locale|share|sin|sinh|sleep|snmp_agent_config|snmp_agent_start|snmp_agent_stop|snmp_close|snmp_config|snmp_get|snmp_get_next|snmp_h_get|snmp_h_get_next|snmp_h_set|snmp_open|snmp_set|snmp_trap_ignore|snmp_trap_listen|snmp_trap_raise_std_trap|snmp_trap_receive|snmp_trap_register_im|snmp_trap_send|snmp_walk|sopen|sort|splitline|sprintf|sqrt|srandom|str_repeat|strcasecmp|subset|substr|system|tail|tan|tanh|text_domain|time|tmpnam|tolower|toupper|trace_psl_process|trim|union|unique|unlock|unset|va_arg|va_start|write)\b/,
+ alias: "builtin-function"
+ },
+ "foreach-variable": {
+ pattern: /(\bforeach\s+(?:(?:\w+\b|"(?:\\.|[^\\"])*")\s+){0,2})[_a-zA-Z]\w*(?=\s*\()/,
+ lookbehind: true,
+ greedy: true
+ },
+ "function": /\b[_a-z]\w*\b(?=\s*\()/i,
+ "number": /\b(?:0x[0-9a-f]+|\d+(?:\.\d+)?)\b/i,
+ "operator": /--|\+\+|&&=?|\|\|=?|<<=?|>>=?|[=!]~|[-+*/%&|^!=<>]=?|\.|[:?]/,
+ "punctuation": /[(){}\[\];,]/
+ };
+ Prism.languages.pcaxis = {
+ "string": /"[^"]*"/,
+ "keyword": {
+ pattern: /((?:^|;)\s*)[-A-Z\d]+(?:\s*\[[-\w]+\])?(?:\s*\("[^"]*"(?:,\s*"[^"]*")*\))?(?=\s*=)/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "keyword": /^[-A-Z\d]+/,
+ "language": {
+ pattern: /^(\s*)\[[-\w]+\]/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /^\[|\]$/,
+ "property": /[-\w]+/
+ }
+ },
+ "sub-key": {
+ pattern: /^(\s*)\S[\s\S]*/,
+ lookbehind: true,
+ inside: {
+ "parameter": {
+ pattern: /"[^"]*"/,
+ alias: "property"
+ },
+ "punctuation": /^\(|\)$|,/
+ }
+ }
+ }
+ },
+ "operator": /=/,
+ "tlist": {
+ pattern: /TLIST\s*\(\s*\w+(?:(?:\s*,\s*"[^"]*")+|\s*,\s*"[^"]*"-"[^"]*")?\s*\)/,
+ greedy: true,
+ inside: {
+ "function": /^TLIST/,
+ "property": {
+ pattern: /^(\s*\(\s*)\w+/,
+ lookbehind: true
+ },
+ "string": /"[^"]*"/,
+ "punctuation": /[(),]/,
+ "operator": /-/
+ }
+ },
+ "punctuation": /[;,]/,
+ "number": {
+ pattern: /(^|\s)\d+(?:\.\d+)?(?!\S)/,
+ lookbehind: true
+ },
+ "boolean": /NO|YES/
+ };
+ Prism.languages.px = Prism.languages.pcaxis;
+ Prism.languages.peoplecode = {
+ "comment": RegExp([
+ // C-style multiline comments
+ /\/\*[\s\S]*?\*\//.source,
+ // REM comments
+ /\bREM[^;]*;/.source,
+ // Nested <* *> comments
+ /<\*(?:[^<*]|\*(?!>)|<(?!\*)|<\*(?:(?!\*>)[\s\S])*\*>)*\*>/.source,
+ // /+ +/ comments
+ /\/\+[\s\S]*?\+\//.source
+ ].join("|")),
+ "string": {
+ pattern: /'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,
+ greedy: true
+ },
+ "variable": /%\w+/,
+ "function-definition": {
+ pattern: /((?:^|[^\w-])(?:function|method)\s+)\w+/i,
+ lookbehind: true,
+ alias: "function"
+ },
+ "class-name": {
+ pattern: /((?:^|[^-\w])(?:as|catch|class|component|create|extends|global|implements|instance|local|of|property|returns)\s+)\w+(?::\w+)*/i,
+ lookbehind: true,
+ inside: {
+ "punctuation": /:/
+ }
+ },
+ "keyword": /\b(?:abstract|alias|as|catch|class|component|constant|create|declare|else|end-(?:class|evaluate|for|function|get|if|method|set|try|while)|evaluate|extends|for|function|get|global|if|implements|import|instance|library|local|method|null|of|out|peopleCode|private|program|property|protected|readonly|ref|repeat|returns?|set|step|then|throw|to|try|until|value|when(?:-other)?|while)\b/i,
+ "operator-keyword": {
+ pattern: /\b(?:and|not|or)\b/i,
+ alias: "operator"
+ },
+ "function": /[_a-z]\w*(?=\s*\()/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "number": /\b\d+(?:\.\d+)?\b/,
+ "operator": /<>|[<>]=?|!=|\*\*|[-+*/|=@]/,
+ "punctuation": /[:.;,()[\]]/
+ };
+ Prism.languages.pcode = Prism.languages.peoplecode;
+ (function(Prism2) {
+ var brackets = /(?:\((?:[^()\\]|\\[\s\S])*\)|\{(?:[^{}\\]|\\[\s\S])*\}|\[(?:[^[\]\\]|\\[\s\S])*\]|<(?:[^<>\\]|\\[\s\S])*>)/.source;
+ Prism2.languages.perl = {
+ "comment": [
+ {
+ // POD
+ pattern: /(^\s*)=\w[\s\S]*?=cut.*/m,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\$])#.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ // TODO Could be nice to handle Heredoc too.
+ "string": [
+ {
+ pattern: RegExp(
+ /\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\s*/.source + "(?:" + [
+ // q/.../
+ /([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
+ // q a...a
+ // eslint-disable-next-line regexp/strict
+ /([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,
+ // q(...)
+ // q{...}
+ // q[...]
+ // q<...>
+ brackets
+ ].join("|") + ")"
+ ),
+ greedy: true
+ },
+ // "...", `...`
+ {
+ pattern: /("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,
+ greedy: true
+ },
+ // '...'
+ // FIXME Multi-line single-quoted strings are not supported as they would break variables containing '
+ {
+ pattern: /'(?:[^'\\\r\n]|\\.)*'/,
+ greedy: true
+ }
+ ],
+ "regex": [
+ {
+ pattern: RegExp(
+ /\b(?:m|qr)(?![a-zA-Z0-9])\s*/.source + "(?:" + [
+ // m/.../
+ /([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
+ // m a...a
+ // eslint-disable-next-line regexp/strict
+ /([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,
+ // m(...)
+ // m{...}
+ // m[...]
+ // m<...>
+ brackets
+ ].join("|") + ")" + /[msixpodualngc]*/.source
+ ),
+ greedy: true
+ },
+ // The lookbehinds prevent -s from breaking
+ {
+ pattern: RegExp(
+ /(^|[^-])\b(?:s|tr|y)(?![a-zA-Z0-9])\s*/.source + "(?:" + [
+ // s/.../.../
+ // eslint-disable-next-line regexp/strict
+ /([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,
+ // s a...a...a
+ // eslint-disable-next-line regexp/strict
+ /([a-zA-Z0-9])(?:(?!\3)[^\\]|\\[\s\S])*\3(?:(?!\3)[^\\]|\\[\s\S])*\3/.source,
+ // s(...)(...)
+ // s{...}{...}
+ // s[...][...]
+ // s<...><...>
+ // s(...)[...]
+ brackets + /\s*/.source + brackets
+ ].join("|") + ")" + /[msixpodualngcer]*/.source
+ ),
+ lookbehind: true,
+ greedy: true
+ },
+ // /.../
+ // The look-ahead tries to prevent two divisions on
+ // the same line from being highlighted as regex.
+ // This does not support multi-line regex.
+ {
+ pattern: /\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\b))/,
+ greedy: true
+ }
+ ],
+ // FIXME Not sure about the handling of ::, ', and #
+ "variable": [
+ // ${^POSTMATCH}
+ /[&*$@%]\{\^[A-Z]+\}/,
+ // $^V
+ /[&*$@%]\^[A-Z_]/,
+ // ${...}
+ /[&*$@%]#?(?=\{)/,
+ // $foo
+ /[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/,
+ // $1
+ /[&*$@%]\d+/,
+ // $_, @_, %!
+ // The negative lookahead prevents from breaking the %= operator
+ /(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/
+ ],
+ "filehandle": {
+ // <>, <FOO>, _
+ pattern: /<(?![<=])\S*?>|\b_\b/,
+ alias: "symbol"
+ },
+ "v-string": {
+ // v1.2, 1.2.3
+ pattern: /v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,
+ alias: "string"
+ },
+ "function": {
+ pattern: /(\bsub[ \t]+)\w+/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,
+ "number": /\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,
+ "operator": /-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\b/,
+ "punctuation": /[{}[\];(),:]/
+ };
+ })(Prism);
+ (function(Prism2) {
+ var typeExpression = /(?:\b[a-zA-Z]\w*|[|\\[\]])+/.source;
+ Prism2.languages.phpdoc = Prism2.languages.extend("javadoclike", {
+ "parameter": {
+ pattern: RegExp("(@(?:global|param|property(?:-read|-write)?|var)\\s+(?:" + typeExpression + "\\s+)?)\\$\\w+"),
+ lookbehind: true
+ }
+ });
+ Prism2.languages.insertBefore("phpdoc", "keyword", {
+ "class-name": [
+ {
+ pattern: RegExp("(@(?:global|package|param|property(?:-read|-write)?|return|subpackage|throws|var)\\s+)" + typeExpression),
+ lookbehind: true,
+ inside: {
+ "keyword": /\b(?:array|bool|boolean|callback|double|false|float|int|integer|mixed|null|object|resource|self|string|true|void)\b/,
+ "punctuation": /[|\\[\]()]/
+ }
+ }
+ ]
+ });
+ Prism2.languages.javadoclike.addSupport("php", Prism2.languages.phpdoc);
+ })(Prism);
+ Prism.languages.insertBefore("php", "variable", {
+ "this": {
+ pattern: /\$this\b/,
+ alias: "keyword"
+ },
+ "global": /\$(?:GLOBALS|HTTP_RAW_POST_DATA|_(?:COOKIE|ENV|FILES|GET|POST|REQUEST|SERVER|SESSION)|argc|argv|http_response_header|php_errormsg)\b/,
+ "scope": {
+ pattern: /\b[\w\\]+::/,
+ inside: {
+ "keyword": /\b(?:parent|self|static)\b/,
+ "punctuation": /::|\\/
+ }
+ }
+ });
+ (function(Prism2) {
+ var variable = /\$\w+|%[a-z]+%/;
+ var arrowAttr = /\[[^[\]]*\]/.source;
+ var arrowDirection = /(?:[drlu]|do|down|le|left|ri|right|up)/.source;
+ var arrowBody = "(?:-+" + arrowDirection + "-+|\\.+" + arrowDirection + "\\.+|-+(?:" + arrowAttr + "-*)?|" + arrowAttr + "-+|\\.+(?:" + arrowAttr + "\\.*)?|" + arrowAttr + "\\.+)";
+ var arrowLeft = /(?:<{1,2}|\/{1,2}|\\{1,2}|<\||[#*^+}xo])/.source;
+ var arrowRight = /(?:>{1,2}|\/{1,2}|\\{1,2}|\|>|[#*^+{xo])/.source;
+ var arrowPrefix = /[[?]?[ox]?/.source;
+ var arrowSuffix = /[ox]?[\]?]?/.source;
+ var arrow2 = arrowPrefix + "(?:" + arrowBody + arrowRight + "|" + arrowLeft + arrowBody + "(?:" + arrowRight + ")?)" + arrowSuffix;
+ Prism2.languages["plant-uml"] = {
+ "comment": {
+ pattern: /(^[ \t]*)(?:'.*|\/'[\s\S]*?'\/)/m,
+ lookbehind: true,
+ greedy: true
+ },
+ "preprocessor": {
+ pattern: /(^[ \t]*)!.*/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "property",
+ inside: {
+ "variable": variable
+ }
+ },
+ "delimiter": {
+ pattern: /(^[ \t]*)@(?:end|start)uml\b/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "punctuation"
+ },
+ "arrow": {
+ pattern: RegExp(/(^|[^-.<>?|\\[\]ox])/.source + arrow2 + /(?![-.<>?|\\\]ox])/.source),
+ lookbehind: true,
+ greedy: true,
+ alias: "operator",
+ inside: {
+ "expression": {
+ pattern: /(\[)[^[\]]+(?=\])/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "punctuation": /\[(?=$|\])|^\]/
+ }
+ },
+ "string": {
+ pattern: /"[^"]*"/,
+ greedy: true
+ },
+ "text": {
+ pattern: /(\[[ \t]*[\r\n]+(?![\r\n]))[^\]]*(?=\])/,
+ lookbehind: true,
+ greedy: true,
+ alias: "string"
+ },
+ "keyword": [
+ {
+ pattern: /^([ \t]*)(?:abstract\s+class|end\s+(?:box|fork|group|merge|note|ref|split|title)|(?:fork|split)(?:\s+again)?|activate|actor|agent|alt|annotation|artifact|autoactivate|autonumber|backward|binary|boundary|box|break|caption|card|case|circle|class|clock|cloud|collections|component|concise|control|create|critical|database|deactivate|destroy|detach|diamond|else|elseif|end|end[hr]note|endif|endswitch|endwhile|entity|enum|file|folder|footer|frame|group|[hr]?note|header|hexagon|hide|if|interface|label|legend|loop|map|namespace|network|newpage|node|nwdiag|object|opt|package|page|par|participant|person|queue|rectangle|ref|remove|repeat|restore|return|robust|scale|set|show|skinparam|stack|start|state|stop|storage|switch|title|together|usecase|usecase\/|while)(?=\s|$)/m,
+ lookbehind: true,
+ greedy: true
+ },
+ /\b(?:elseif|equals|not|while)(?=\s*\()/,
+ /\b(?:as|is|then)\b/
+ ],
+ "divider": {
+ pattern: /^==.+==$/m,
+ greedy: true,
+ alias: "important"
+ },
+ "time": {
+ pattern: /@(?:\d+(?:[:/]\d+){2}|[+-]?\d+|:[a-z]\w*(?:[+-]\d+)?)\b/i,
+ greedy: true,
+ alias: "number"
+ },
+ "color": {
+ pattern: /#(?:[a-z_]+|[a-fA-F0-9]+)\b/,
+ alias: "symbol"
+ },
+ "variable": variable,
+ "punctuation": /[:,;()[\]{}]|\.{3}/
+ };
+ Prism2.languages["plant-uml"].arrow.inside.expression.inside = Prism2.languages["plant-uml"];
+ Prism2.languages["plantuml"] = Prism2.languages["plant-uml"];
+ })(Prism);
+ Prism.languages.plsql = Prism.languages.extend("sql", {
+ "comment": {
+ pattern: /\/\*[\s\S]*?\*\/|--.*/,
+ greedy: true
+ },
+ // https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-reserved-words-keywords.html
+ "keyword": /\b(?:A|ACCESSIBLE|ADD|AGENT|AGGREGATE|ALL|ALTER|AND|ANY|ARRAY|AS|ASC|AT|ATTRIBUTE|AUTHID|AVG|BEGIN|BETWEEN|BFILE_BASE|BINARY|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BULK|BY|BYTE|C|CALL|CALLING|CASCADE|CASE|CHAR|CHARACTER|CHARSET|CHARSETFORM|CHARSETID|CHAR_BASE|CHECK|CLOB_BASE|CLONE|CLOSE|CLUSTER|CLUSTERS|COLAUTH|COLLECT|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPILED|COMPRESS|CONNECT|CONSTANT|CONSTRUCTOR|CONTEXT|CONTINUE|CONVERT|COUNT|CRASH|CREATE|CREDENTIAL|CURRENT|CURSOR|CUSTOMDATUM|DANGLING|DATA|DATE|DATE_BASE|DAY|DECLARE|DEFAULT|DEFINE|DELETE|DESC|DETERMINISTIC|DIRECTORY|DISTINCT|DOUBLE|DROP|DURATION|ELEMENT|ELSE|ELSIF|EMPTY|END|ESCAPE|EXCEPT|EXCEPTION|EXCEPTIONS|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXTERNAL|FETCH|FINAL|FIRST|FIXED|FLOAT|FOR|FORALL|FORCE|FROM|FUNCTION|GENERAL|GOTO|GRANT|GROUP|HASH|HAVING|HEAP|HIDDEN|HOUR|IDENTIFIED|IF|IMMEDIATE|IMMUTABLE|IN|INCLUDING|INDEX|INDEXES|INDICATOR|INDICES|INFINITE|INSERT|INSTANTIABLE|INT|INTERFACE|INTERSECT|INTERVAL|INTO|INVALIDATE|IS|ISOLATION|JAVA|LANGUAGE|LARGE|LEADING|LENGTH|LEVEL|LIBRARY|LIKE|LIKE2|LIKE4|LIKEC|LIMIT|LIMITED|LOCAL|LOCK|LONG|LOOP|MAP|MAX|MAXLEN|MEMBER|MERGE|MIN|MINUS|MINUTE|MOD|MODE|MODIFY|MONTH|MULTISET|MUTABLE|NAME|NAN|NATIONAL|NATIVE|NCHAR|NEW|NOCOMPRESS|NOCOPY|NOT|NOWAIT|NULL|NUMBER_BASE|OBJECT|OCICOLL|OCIDATE|OCIDATETIME|OCIDURATION|OCIINTERVAL|OCILOBLOCATOR|OCINUMBER|OCIRAW|OCIREF|OCIREFCURSOR|OCIROWID|OCISTRING|OCITYPE|OF|OLD|ON|ONLY|OPAQUE|OPEN|OPERATOR|OPTION|OR|ORACLE|ORADATA|ORDER|ORGANIZATION|ORLANY|ORLVARY|OTHERS|OUT|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETER|PARAMETERS|PARENT|PARTITION|PASCAL|PERSISTABLE|PIPE|PIPELINED|PLUGGABLE|POLYMORPHIC|PRAGMA|PRECISION|PRIOR|PRIVATE|PROCEDURE|PUBLIC|RAISE|RANGE|RAW|READ|RECORD|REF|REFERENCE|RELIES_ON|REM|REMAINDER|RENAME|RESOURCE|RESULT|RESULT_CACHE|RETURN|RETURNING|REVERSE|REVOKE|ROLLBACK|ROW|SAMPLE|SAVE|SAVEPOINT|SB1|SB2|SB4|SECOND|SEGMENT|SELECT|SELF|SEPARATE|SEQUENCE|SERIALIZABLE|SET|SHARE|SHORT|SIZE|SIZE_T|SOME|SPARSE|SQL|SQLCODE|SQLDATA|SQLNAME|SQLSTATE|STANDARD|START|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUM|SYNONYM|TABAUTH|TABLE|TDO|THE|THEN|TIME|TIMESTAMP|TIMEZONE_ABBR|TIMEZONE_HOUR|TIMEZONE_MINUTE|TIMEZONE_REGION|TO|TRAILING|TRANSACTION|TRANSACTIONAL|TRUSTED|TYPE|UB1|UB2|UB4|UNDER|UNION|UNIQUE|UNPLUG|UNSIGNED|UNTRUSTED|UPDATE|USE|USING|VALIST|VALUE|VALUES|VARIABLE|VARIANCE|VARRAY|VARYING|VIEW|VIEWS|VOID|WHEN|WHERE|WHILE|WITH|WORK|WRAPPED|WRITE|YEAR|ZONE)\b/i,
+ // https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-language-fundamentals.html#GUID-96A42F7C-7A71-4B90-8255-CA9C8BD9722E
+ "operator": /:=?|=>|[<>^~!]=|\.\.|\|\||\*\*|[-+*/%<>=@]/
+ });
+ Prism.languages.insertBefore("plsql", "operator", {
+ "label": {
+ pattern: /<<\s*\w+\s*>>/,
+ alias: "symbol"
+ }
+ });
+ Prism.languages.powerquery = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "quoted-identifier": {
+ pattern: /#"(?:[^"\r\n]|"")*"(?!")/,
+ greedy: true
+ },
+ "string": {
+ pattern: /(?:#!)?"(?:[^"\r\n]|"")*"(?!")/,
+ greedy: true
+ },
+ "constant": [
+ /\bDay\.(?:Friday|Monday|Saturday|Sunday|Thursday|Tuesday|Wednesday)\b/,
+ /\bTraceLevel\.(?:Critical|Error|Information|Verbose|Warning)\b/,
+ /\bOccurrence\.(?:All|First|Last)\b/,
+ /\bOrder\.(?:Ascending|Descending)\b/,
+ /\bRoundingMode\.(?:AwayFromZero|Down|ToEven|TowardZero|Up)\b/,
+ /\bMissingField\.(?:Error|Ignore|UseNull)\b/,
+ /\bQuoteStyle\.(?:Csv|None)\b/,
+ /\bJoinKind\.(?:FullOuter|Inner|LeftAnti|LeftOuter|RightAnti|RightOuter)\b/,
+ /\bGroupKind\.(?:Global|Local)\b/,
+ /\bExtraValues\.(?:Error|Ignore|List)\b/,
+ /\bJoinAlgorithm\.(?:Dynamic|LeftHash|LeftIndex|PairwiseHash|RightHash|RightIndex|SortMerge)\b/,
+ /\bJoinSide\.(?:Left|Right)\b/,
+ /\bPrecision\.(?:Decimal|Double)\b/,
+ /\bRelativePosition\.From(?:End|Start)\b/,
+ /\bTextEncoding\.(?:Ascii|BigEndianUnicode|Unicode|Utf16|Utf8|Windows)\b/,
+ /\b(?:Any|Binary|Date|DateTime|DateTimeZone|Duration|Function|Int16|Int32|Int64|Int8|List|Logical|None|Number|Record|Table|Text|Time)\.Type\b/,
+ /\bnull\b/
+ ],
+ "boolean": /\b(?:false|true)\b/,
+ "keyword": /\b(?:and|as|each|else|error|if|in|is|let|meta|not|nullable|optional|or|otherwise|section|shared|then|try|type)\b|#(?:binary|date|datetime|datetimezone|duration|infinity|nan|sections|shared|table|time)\b/,
+ "function": {
+ pattern: /(^|[^#\w.])[a-z_][\w.]*(?=\s*\()/i,
+ lookbehind: true
+ },
+ "data-type": {
+ pattern: /\b(?:any|anynonnull|binary|date|datetime|datetimezone|duration|function|list|logical|none|number|record|table|text|time)\b/,
+ alias: "class-name"
+ },
+ "number": {
+ pattern: /\b0x[\da-f]+\b|(?:[+-]?(?:\b\d+\.)?\b\d+|[+-]\.\d+|(^|[^.])\B\.\d+)(?:e[+-]?\d+)?\b/i,
+ lookbehind: true
+ },
+ "operator": /[-+*\/&?@^]|<(?:=>?|>)?|>=?|=>?|\.\.\.?/,
+ "punctuation": /[,;\[\](){}]/
+ };
+ Prism.languages.pq = Prism.languages["powerquery"];
+ Prism.languages.mscript = Prism.languages["powerquery"];
+ (function(Prism2) {
+ var powershell = Prism2.languages.powershell = {
+ "comment": [
+ {
+ pattern: /(^|[^`])<#[\s\S]*?#>/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^`])#.*/,
+ lookbehind: true
+ }
+ ],
+ "string": [
+ {
+ pattern: /"(?:`[\s\S]|[^`"])*"/,
+ greedy: true,
+ inside: null
+ // see below
+ },
+ {
+ pattern: /'(?:[^']|'')*'/,
+ greedy: true
+ }
+ ],
+ // Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices
+ // Supports two levels of nested brackets (e.g. `[OutputType([System.Collections.Generic.List[int]])]`)
+ "namespace": /\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,
+ "boolean": /\$(?:false|true)\b/i,
+ "variable": /\$\w+\b/,
+ // Cmdlets and aliases. Aliases should come last, otherwise "write" gets preferred over "write-host" for example
+ // Get-Command | ?{ $_.ModuleName -match "Microsoft.PowerShell.(Util|Core|Management)" }
+ // Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match "Microsoft.PowerShell.(Util|Core|Management)" }
+ "function": [
+ /\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,
+ /\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i
+ ],
+ // per http://technet.microsoft.com/en-us/library/hh847744.aspx
+ "keyword": /\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,
+ "operator": {
+ pattern: /(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,
+ lookbehind: true
+ },
+ "punctuation": /[|{}[\];(),.]/
+ };
+ powershell.string[0].inside = {
+ "function": {
+ // Allow for one level of nesting
+ pattern: /(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,
+ lookbehind: true,
+ inside: powershell
+ },
+ "boolean": powershell.boolean,
+ "variable": powershell.variable
+ };
+ })(Prism);
+ Prism.languages.processing = Prism.languages.extend("clike", {
+ "keyword": /\b(?:break|case|catch|class|continue|default|else|extends|final|for|if|implements|import|new|null|private|public|return|static|super|switch|this|try|void|while)\b/,
+ // Spaces are allowed between function name and parenthesis
+ "function": /\b\w+(?=\s*\()/,
+ "operator": /<[<=]?|>[>=]?|&&?|\|\|?|[%?]|[!=+\-*\/]=?/
+ });
+ Prism.languages.insertBefore("processing", "number", {
+ // Special case: XML is a type
+ "constant": /\b(?!XML\b)[A-Z][A-Z\d_]+\b/,
+ "type": {
+ pattern: /\b(?:boolean|byte|char|color|double|float|int|[A-Z]\w*)\b/,
+ alias: "class-name"
+ }
+ });
+ Prism.languages.prolog = {
+ // Syntax depends on the implementation
+ "comment": {
+ pattern: /\/\*[\s\S]*?\*\/|%.*/,
+ greedy: true
+ },
+ // Depending on the implementation, strings may allow escaped newlines and quote-escape
+ "string": {
+ pattern: /(["'])(?:\1\1|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1(?!\1)/,
+ greedy: true
+ },
+ "builtin": /\b(?:fx|fy|xf[xy]?|yfx?)\b/,
+ // FIXME: Should we list all null-ary predicates (not followed by a parenthesis) like halt, trace, etc.?
+ "function": /\b[a-z]\w*(?:(?=\()|\/\d+)/,
+ "number": /\b\d+(?:\.\d*)?/,
+ // Custom operators are allowed
+ "operator": /[:\\=><\-?*@\/;+^|!$.]+|\b(?:is|mod|not|xor)\b/,
+ "punctuation": /[(){}\[\],]/
+ };
+ (function(Prism2) {
+ var aggregations = [
+ "sum",
+ "min",
+ "max",
+ "avg",
+ "group",
+ "stddev",
+ "stdvar",
+ "count",
+ "count_values",
+ "bottomk",
+ "topk",
+ "quantile"
+ ];
+ var vectorMatching = [
+ "on",
+ "ignoring",
+ "group_right",
+ "group_left",
+ "by",
+ "without"
+ ];
+ var offsetModifier = ["offset"];
+ var keywords = aggregations.concat(vectorMatching, offsetModifier);
+ Prism2.languages.promql = {
+ "comment": {
+ pattern: /(^[ \t]*)#.*/m,
+ lookbehind: true
+ },
+ "vector-match": {
+ // Match the comma-separated label lists inside vector matching:
+ pattern: new RegExp("((?:" + vectorMatching.join("|") + ")\\s*)\\([^)]*\\)"),
+ lookbehind: true,
+ inside: {
+ "label-key": {
+ pattern: /\b[^,]+\b/,
+ alias: "attr-name"
+ },
+ "punctuation": /[(),]/
+ }
+ },
+ "context-labels": {
+ pattern: /\{[^{}]*\}/,
+ inside: {
+ "label-key": {
+ pattern: /\b[a-z_]\w*(?=\s*(?:=|![=~]))/,
+ alias: "attr-name"
+ },
+ "label-value": {
+ pattern: /(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,
+ greedy: true,
+ alias: "attr-value"
+ },
+ "punctuation": /\{|\}|=~?|![=~]|,/
+ }
+ },
+ "context-range": [
+ {
+ pattern: /\[[\w\s:]+\]/,
+ // [1m]
+ inside: {
+ "punctuation": /\[|\]|:/,
+ "range-duration": {
+ pattern: /\b(?:\d+(?:[smhdwy]|ms))+\b/i,
+ alias: "number"
+ }
+ }
+ },
+ {
+ pattern: /(\boffset\s+)\w+/,
+ // offset 1m
+ lookbehind: true,
+ inside: {
+ "range-duration": {
+ pattern: /\b(?:\d+(?:[smhdwy]|ms))+\b/i,
+ alias: "number"
+ }
+ }
+ }
+ ],
+ "keyword": new RegExp("\\b(?:" + keywords.join("|") + ")\\b", "i"),
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "number": /[-+]?(?:(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[-+]?\d+)?\b|\b(?:0x[0-9a-f]+|nan|inf)\b)/i,
+ "operator": /[\^*/%+-]|==|!=|<=|<|>=|>|\b(?:and|or|unless)\b/i,
+ "punctuation": /[{};()`,.[\]]/
+ };
+ })(Prism);
+ Prism.languages.properties = {
+ "comment": /^[ \t]*[#!].*$/m,
+ "value": {
+ pattern: /(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,
+ lookbehind: true,
+ alias: "attr-value"
+ },
+ "key": {
+ pattern: /^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m,
+ alias: "attr-name"
+ },
+ "punctuation": /[=:]/
+ };
+ (function(Prism2) {
+ var builtinTypes = /\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;
+ Prism2.languages.protobuf = Prism2.languages.extend("clike", {
+ "class-name": [
+ {
+ pattern: /(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,
+ lookbehind: true
+ },
+ {
+ pattern: /(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,
+ lookbehind: true
+ }
+ ],
+ "keyword": /\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i
+ });
+ Prism2.languages.insertBefore("protobuf", "operator", {
+ "map": {
+ pattern: /\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,
+ alias: "class-name",
+ inside: {
+ "punctuation": /[<>.,]/,
+ "builtin": builtinTypes
+ }
+ },
+ "builtin": builtinTypes,
+ "positional-class-name": {
+ pattern: /(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,
+ alias: "class-name",
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "annotation": {
+ pattern: /(\[\s*)[a-z_]\w*(?=\s*=)/i,
+ lookbehind: true
+ }
+ });
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.pug = {
+ // Multiline stuff should appear before the rest
+ // This handles both single-line and multi-line comments
+ "comment": {
+ pattern: /(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ].+)*/m,
+ lookbehind: true
+ },
+ // All the tag-related part is in lookbehind
+ // so that it can be highlighted by the "tag" pattern
+ "multiline-script": {
+ pattern: /(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,
+ lookbehind: true,
+ inside: Prism2.languages.javascript
+ },
+ // See at the end of the file for known filters
+ "filter": {
+ pattern: /(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,
+ lookbehind: true,
+ inside: {
+ "filter-name": {
+ pattern: /^:[\w-]+/,
+ alias: "variable"
+ },
+ "text": /\S[\s\S]*/
+ }
+ },
+ "multiline-plain-text": {
+ pattern: /(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,
+ lookbehind: true
+ },
+ "markup": {
+ pattern: /(^[\t ]*)<.+/m,
+ lookbehind: true,
+ inside: Prism2.languages.markup
+ },
+ "doctype": {
+ pattern: /((?:^|\n)[\t ]*)doctype(?: .+)?/,
+ lookbehind: true
+ },
+ // This handle all conditional and loop keywords
+ "flow-control": {
+ pattern: /(^[\t ]*)(?:case|default|each|else|if|unless|when|while)\b(?: .+)?/m,
+ lookbehind: true,
+ inside: {
+ "each": {
+ pattern: /^each .+? in\b/,
+ inside: {
+ "keyword": /\b(?:each|in)\b/,
+ "punctuation": /,/
+ }
+ },
+ "branch": {
+ pattern: /^(?:case|default|else|if|unless|when|while)\b/,
+ alias: "keyword"
+ },
+ rest: Prism2.languages.javascript
+ }
+ },
+ "keyword": {
+ pattern: /(^[\t ]*)(?:append|block|extends|include|prepend)\b.+/m,
+ lookbehind: true
+ },
+ "mixin": [
+ // Declaration
+ {
+ pattern: /(^[\t ]*)mixin .+/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /^mixin/,
+ "function": /\w+(?=\s*\(|\s*$)/,
+ "punctuation": /[(),.]/
+ }
+ },
+ // Usage
+ {
+ pattern: /(^[\t ]*)\+.+/m,
+ lookbehind: true,
+ inside: {
+ "name": {
+ pattern: /^\+\w+/,
+ alias: "function"
+ },
+ rest: Prism2.languages.javascript
+ }
+ }
+ ],
+ "script": {
+ pattern: /(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]).+/m,
+ lookbehind: true,
+ inside: Prism2.languages.javascript
+ },
+ "plain-text": {
+ pattern: /(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]).+/m,
+ lookbehind: true
+ },
+ "tag": {
+ pattern: /(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,
+ lookbehind: true,
+ inside: {
+ "attributes": [
+ {
+ pattern: /&[^(]+\([^)]+\)/,
+ inside: Prism2.languages.javascript
+ },
+ {
+ pattern: /\([^)]+\)/,
+ inside: {
+ "attr-value": {
+ pattern: /(=\s*(?!\s))(?:\{[^}]*\}|[^,)\r\n]+)/,
+ lookbehind: true,
+ inside: Prism2.languages.javascript
+ },
+ "attr-name": /[\w-]+(?=\s*!?=|\s*[,)])/,
+ "punctuation": /[!=(),]+/
+ }
+ }
+ ],
+ "punctuation": /:/,
+ "attr-id": /#[\w\-]+/,
+ "attr-class": /\.[\w\-]+/
+ }
+ },
+ "code": [
+ {
+ pattern: /(^[\t ]*(?:-|!?=)).+/m,
+ lookbehind: true,
+ inside: Prism2.languages.javascript
+ }
+ ],
+ "punctuation": /[.\-!=|]+/
+ };
+ var filter_pattern = /(^([\t ]*)):<filter_name>(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/.source;
+ var filters = [
+ { filter: "atpl", language: "twig" },
+ { filter: "coffee", language: "coffeescript" },
+ "ejs",
+ "handlebars",
+ "less",
+ "livescript",
+ "markdown",
+ { filter: "sass", language: "scss" },
+ "stylus"
+ ];
+ var all_filters = {};
+ for (var i = 0, l = filters.length; i < l; i++) {
+ var filter = filters[i];
+ filter = typeof filter === "string" ? { filter, language: filter } : filter;
+ if (Prism2.languages[filter.language]) {
+ all_filters["filter-" + filter.filter] = {
+ pattern: RegExp(filter_pattern.replace("<filter_name>", function() {
+ return filter.filter;
+ }), "m"),
+ lookbehind: true,
+ inside: {
+ "filter-name": {
+ pattern: /^:[\w-]+/,
+ alias: "variable"
+ },
+ "text": {
+ pattern: /\S[\s\S]*/,
+ alias: [filter.language, "language-" + filter.language],
+ inside: Prism2.languages[filter.language]
+ }
+ }
+ };
+ }
+ }
+ Prism2.languages.insertBefore("pug", "filter", all_filters);
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.puppet = {
+ "heredoc": [
+ // Matches the content of a quoted heredoc string (subject to interpolation)
+ {
+ pattern: /(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r(?!\n)))*?[ \t]*(?:\|[ \t]*)?(?:-[ \t]*)?\2/,
+ lookbehind: true,
+ alias: "string",
+ inside: {
+ // Matches the end tag
+ "punctuation": /(?=\S).*\S(?= *$)/
+ // See interpolation below
+ }
+ },
+ // Matches the content of an unquoted heredoc string (no interpolation)
+ {
+ pattern: /(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r(?!\n)))*?[ \t]*(?:\|[ \t]*)?(?:-[ \t]*)?\2/,
+ lookbehind: true,
+ greedy: true,
+ alias: "string",
+ inside: {
+ // Matches the end tag
+ "punctuation": /(?=\S).*\S(?= *$)/
+ }
+ },
+ // Matches the start tag of heredoc strings
+ {
+ pattern: /@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,
+ alias: "string",
+ inside: {
+ "punctuation": {
+ pattern: /(\().+?(?=\))/,
+ lookbehind: true
+ }
+ }
+ }
+ ],
+ "multiline-comment": {
+ pattern: /(^|[^\\])\/\*[\s\S]*?\*\//,
+ lookbehind: true,
+ greedy: true,
+ alias: "comment"
+ },
+ "regex": {
+ // Must be prefixed with the keyword "node" or a non-word char
+ pattern: /((?:\bnode\s+|[~=\(\[\{,]\s*|[=+]>\s*|^\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ // Extended regexes must have the x flag. They can contain single-line comments.
+ "extended-regex": {
+ pattern: /^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,
+ inside: {
+ "comment": /#.*/
+ }
+ }
+ }
+ },
+ "comment": {
+ pattern: /(^|[^\\])#.*/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ // Allow for one nested level of double quotes inside interpolation
+ pattern: /(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|\$(?!\{)|(?!\1)[^\\$]|\\[\s\S])*\1/,
+ greedy: true,
+ inside: {
+ "double-quoted": {
+ pattern: /^"[\s\S]*"$/,
+ inside: {
+ // See interpolation below
+ }
+ }
+ }
+ },
+ "variable": {
+ pattern: /\$(?:::)?\w+(?:::\w+)*/,
+ inside: {
+ "punctuation": /::/
+ }
+ },
+ "attr-name": /(?:\b\w+|\*)(?=\s*=>)/,
+ "function": [
+ {
+ pattern: /(\.)(?!\d)\w+/,
+ lookbehind: true
+ },
+ /\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/
+ ],
+ "number": /\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,
+ "boolean": /\b(?:false|true)\b/,
+ // Includes words reserved for future use
+ "keyword": /\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,
+ "datatype": {
+ pattern: /\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,
+ alias: "symbol"
+ },
+ "operator": /=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,
+ "punctuation": /[\[\]{}().,;]|:+/
+ };
+ var interpolation = [
+ {
+ // Allow for one nested level of braces inside interpolation
+ pattern: /(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,
+ lookbehind: true,
+ inside: {
+ "short-variable": {
+ // Negative look-ahead prevent wrong highlighting of functions
+ pattern: /(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,
+ lookbehind: true,
+ alias: "variable",
+ inside: {
+ "punctuation": /::/
+ }
+ },
+ "delimiter": {
+ pattern: /^\$/,
+ alias: "variable"
+ },
+ rest: Prism2.languages.puppet
+ }
+ },
+ {
+ pattern: /(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,
+ lookbehind: true,
+ alias: "variable",
+ inside: {
+ "punctuation": /::/
+ }
+ }
+ ];
+ Prism2.languages.puppet["heredoc"][0].inside.interpolation = interpolation;
+ Prism2.languages.puppet["string"].inside["double-quoted"].inside.interpolation = interpolation;
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.pure = {
+ "comment": [
+ {
+ pattern: /(^|[^\\])\/\*[\s\S]*?\*\//,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true
+ },
+ /#!.+/
+ ],
+ "inline-lang": {
+ pattern: /%<[\s\S]+?%>/,
+ greedy: true,
+ inside: {
+ "lang": {
+ pattern: /(^%< *)-\*-.+?-\*-/,
+ lookbehind: true,
+ alias: "comment"
+ },
+ "delimiter": {
+ pattern: /^%<.*|%>$/,
+ alias: "punctuation"
+ }
+ }
+ },
+ "string": {
+ pattern: /"(?:\\.|[^"\\\r\n])*"/,
+ greedy: true
+ },
+ "number": {
+ // The look-behind prevents wrong highlighting of the .. operator
+ pattern: /((?:\.\.)?)(?:\b(?:inf|nan)\b|\b0x[\da-f]+|(?:\b(?:0b)?\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?L?)/i,
+ lookbehind: true
+ },
+ "keyword": /\b(?:NULL|ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\b/,
+ "function": /\b(?:abs|add_(?:addr|constdef|(?:fundef|interface|macdef|typedef)(?:_at)?|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_c?string(?:_pointer)?|byte_(?:matrix|pointer)|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|sentry|short|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\b/,
+ "special": {
+ pattern: /\b__[a-z]+__\b/i,
+ alias: "builtin"
+ },
+ // Any combination of operator chars can be an operator
+ // eslint-disable-next-line no-misleading-character-class
+ "operator": /(?:[!"#$%&'*+,\-.\/:<=>?@\\^`|~\u00a1-\u00bf\u00d7-\u00f7\u20d0-\u2bff]|\b_+\b)+|\b(?:and|div|mod|not|or)\b/,
+ // FIXME: How can we prevent | and , to be highlighted as operator when they are used alone?
+ "punctuation": /[(){}\[\];,|]/
+ };
+ var inlineLanguages = [
+ "c",
+ { lang: "c++", alias: "cpp" },
+ "fortran"
+ ];
+ var inlineLanguageRe = /%< *-\*- *<lang>\d* *-\*-[\s\S]+?%>/.source;
+ inlineLanguages.forEach(function(lang) {
+ var alias = lang;
+ if (typeof lang !== "string") {
+ alias = lang.alias;
+ lang = lang.lang;
+ }
+ if (Prism2.languages[alias]) {
+ var o = {};
+ o["inline-lang-" + alias] = {
+ pattern: RegExp(inlineLanguageRe.replace("<lang>", lang.replace(/([.+*?\/\\(){}\[\]])/g, "\\$1")), "i"),
+ inside: Prism2.util.clone(Prism2.languages.pure["inline-lang"].inside)
+ };
+ o["inline-lang-" + alias].inside.rest = Prism2.util.clone(Prism2.languages[alias]);
+ Prism2.languages.insertBefore("pure", "inline-lang", o);
+ }
+ });
+ if (Prism2.languages.c) {
+ Prism2.languages.pure["inline-lang"].inside.rest = Prism2.util.clone(Prism2.languages.c);
+ }
+ })(Prism);
+ Prism.languages.purebasic = Prism.languages.extend("clike", {
+ "comment": /;.*/,
+ "keyword": /\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\b/i,
+ "function": /\b\w+(?:\.\w+)?\s*(?=\()/,
+ "number": /(?:\$[\da-f]+|\b-?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)\b/i,
+ "operator": /(?:@\*?|\?|\*)\w+\$?|-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*/@]/
+ });
+ Prism.languages.insertBefore("purebasic", "keyword", {
+ "tag": /#\w+\$?/,
+ "asm": {
+ pattern: /(^[\t ]*)!.*/m,
+ lookbehind: true,
+ alias: "tag",
+ inside: {
+ "comment": /;.*/,
+ "string": {
+ pattern: /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ // Anonymous label references, i.e.: jmp @b
+ "label-reference-anonymous": {
+ pattern: /(!\s*j[a-z]+\s+)@[fb]/i,
+ lookbehind: true,
+ alias: "fasm-label"
+ },
+ // Named label reference, i.e.: jne label1
+ "label-reference-addressed": {
+ pattern: /(!\s*j[a-z]+\s+)[A-Z._?$@][\w.?$@~#]*/i,
+ lookbehind: true,
+ alias: "fasm-label"
+ },
+ "keyword": [
+ /\b(?:extern|global)\b[^;\r\n]*/i,
+ /\b(?:CPU|DEFAULT|FLOAT)\b.*/
+ ],
+ "function": {
+ pattern: /^([\t ]*!\s*)[\da-z]+(?=\s|$)/im,
+ lookbehind: true
+ },
+ "function-inline": {
+ pattern: /(:\s*)[\da-z]+(?=\s)/i,
+ lookbehind: true,
+ alias: "function"
+ },
+ "label": {
+ pattern: /^([\t ]*!\s*)[A-Za-z._?$@][\w.?$@~#]*(?=:)/m,
+ lookbehind: true,
+ alias: "fasm-label"
+ },
+ "register": /\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s|mm\d+)\b/i,
+ "number": /(?:\b|-|(?=\$))(?:0[hx](?:[\da-f]*\.)?[\da-f]+(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,
+ "operator": /[\[\]*+\-/%<>=&|$!,.:]/
+ }
+ }
+ });
+ delete Prism.languages.purebasic["class-name"];
+ delete Prism.languages.purebasic["boolean"];
+ Prism.languages.pbfasm = Prism.languages["purebasic"];
+ Prism.languages.purescript = Prism.languages.extend("haskell", {
+ "keyword": /\b(?:ado|case|class|data|derive|do|else|forall|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b|∀/,
+ "import-statement": {
+ // The imported or hidden names are not included in this import
+ // statement. This is because we want to highlight those exactly like
+ // we do for the names in the program.
+ pattern: /(^[\t ]*)import\s+[A-Z][\w']*(?:\.[A-Z][\w']*)*(?:\s+as\s+[A-Z][\w']*(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /\b(?:as|hiding|import)\b/,
+ "punctuation": /\./
+ }
+ },
+ // These are builtin functions only. Constructors are highlighted later as a constant.
+ "builtin": /\b(?:absurd|add|ap|append|apply|between|bind|bottom|clamp|compare|comparing|compose|conj|const|degree|discard|disj|div|eq|flap|flip|gcd|identity|ifM|join|lcm|liftA1|liftM1|map|max|mempty|min|mod|mul|negate|not|notEq|one|otherwise|recip|show|sub|top|unit|unless|unlessM|void|when|whenM|zero)\b/,
+ "operator": [
+ // Infix operators
+ Prism.languages.haskell.operator[0],
+ // ASCII operators
+ Prism.languages.haskell.operator[2],
+ // All UTF16 Unicode operator symbols
+ // This regex is equivalent to /(?=[\x80-\uFFFF])[\p{gc=Math_Symbol}\p{gc=Currency_Symbol}\p{Modifier_Symbol}\p{Other_Symbol}]/u
+ // See https://github.com/PrismJS/prism/issues/3006 for more details.
+ /[\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u07fe\u07ff\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u166d\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20bf\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b97-\u2bff\u2ce5-\u2cea\u2e50\u2e51\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\uab6a\uab6b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd]/
+ ]
+ });
+ Prism.languages.purs = Prism.languages.purescript;
+ Prism.languages.python = {
+ "comment": {
+ pattern: /(^|[^\\])#.*/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string-interpolation": {
+ pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ // "{" <expression> <optional "!s", "!r", or "!a"> <optional ":" format specifier> "}"
+ pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
+ lookbehind: true,
+ inside: {
+ "format-spec": {
+ pattern: /(:)[^:(){}]+(?=\}$)/,
+ lookbehind: true
+ },
+ "conversion-option": {
+ pattern: /![sra](?=[:}]$)/,
+ alias: "punctuation"
+ },
+ rest: null
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "triple-quoted-string": {
+ pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
+ greedy: true,
+ alias: "string"
+ },
+ "string": {
+ pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
+ greedy: true
+ },
+ "function": {
+ pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
+ lookbehind: true
+ },
+ "class-name": {
+ pattern: /(\bclass\s+)\w+/i,
+ lookbehind: true
+ },
+ "decorator": {
+ pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
+ lookbehind: true,
+ alias: ["annotation", "punctuation"],
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "keyword": /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
+ "builtin": /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
+ "boolean": /\b(?:False|None|True)\b/,
+ "number": /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
+ "operator": /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.python["string-interpolation"].inside["interpolation"].inside.rest = Prism.languages.python;
+ Prism.languages.py = Prism.languages.python;
+ (function(Prism2) {
+ function replace(pattern, replacements) {
+ return pattern.replace(/<<(\d+)>>/g, function(m, index) {
+ return "(?:" + replacements[+index] + ")";
+ });
+ }
+ function re(pattern, replacements, flags) {
+ return RegExp(replace(pattern, replacements), flags || "");
+ }
+ function nested(pattern, depthLog2) {
+ for (var i = 0; i < depthLog2; i++) {
+ pattern = pattern.replace(/<<self>>/g, function() {
+ return "(?:" + pattern + ")";
+ });
+ }
+ return pattern.replace(/<<self>>/g, "[^\\s\\S]");
+ }
+ var keywordKinds = {
+ // keywords which represent a return or variable type
+ type: "Adj BigInt Bool Ctl Double false Int One Pauli PauliI PauliX PauliY PauliZ Qubit Range Result String true Unit Zero",
+ // all other keywords
+ other: "Adjoint adjoint apply as auto body borrow borrowing Controlled controlled distribute elif else fail fixup for function if in internal intrinsic invert is let mutable namespace new newtype open operation repeat return self set until use using while within"
+ };
+ function keywordsToPattern(words) {
+ return "\\b(?:" + words.trim().replace(/ /g, "|") + ")\\b";
+ }
+ var keywords = RegExp(keywordsToPattern(keywordKinds.type + " " + keywordKinds.other));
+ var identifier = /\b[A-Za-z_]\w*\b/.source;
+ var qualifiedName = replace(/<<0>>(?:\s*\.\s*<<0>>)*/.source, [identifier]);
+ var typeInside = {
+ "keyword": keywords,
+ "punctuation": /[<>()?,.:[\]]/
+ };
+ var regularString = /"(?:\\.|[^\\"])*"/.source;
+ Prism2.languages.qsharp = Prism2.languages.extend("clike", {
+ "comment": /\/\/.*/,
+ "string": [
+ {
+ pattern: re(/(^|[^$\\])<<0>>/.source, [regularString]),
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "class-name": [
+ {
+ // open Microsoft.Quantum.Canon;
+ // open Microsoft.Quantum.Canon as CN;
+ pattern: re(/(\b(?:as|open)\s+)<<0>>(?=\s*(?:;|as\b))/.source, [qualifiedName]),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // namespace Quantum.App1;
+ pattern: re(/(\bnamespace\s+)<<0>>(?=\s*\{)/.source, [qualifiedName]),
+ lookbehind: true,
+ inside: typeInside
+ }
+ ],
+ "keyword": keywords,
+ "number": /(?:\b0(?:x[\da-f]+|b[01]+|o[0-7]+)|(?:\B\.\d+|\b\d+(?:\.\d*)?)(?:e[-+]?\d+)?)l?\b/i,
+ "operator": /\band=|\bor=|\band\b|\bnot\b|\bor\b|<[-=]|[-=]>|>>>=?|<<<=?|\^\^\^=?|\|\|\|=?|&&&=?|w\/=?|~~~|[*\/+\-^=!%]=?/,
+ "punctuation": /::|[{}[\];(),.:]/
+ });
+ Prism2.languages.insertBefore("qsharp", "number", {
+ "range": {
+ pattern: /\.\./,
+ alias: "operator"
+ }
+ });
+ var interpolationExpr = nested(replace(/\{(?:[^"{}]|<<0>>|<<self>>)*\}/.source, [regularString]), 2);
+ Prism2.languages.insertBefore("qsharp", "string", {
+ "interpolation-string": {
+ pattern: re(/\$"(?:\\.|<<0>>|[^\\"{])*"/.source, [interpolationExpr]),
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: re(/((?:^|[^\\])(?:\\\\)*)<<0>>/.source, [interpolationExpr]),
+ lookbehind: true,
+ inside: {
+ "punctuation": /^\{|\}$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ alias: "language-qsharp",
+ inside: Prism2.languages.qsharp
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ })(Prism);
+ Prism.languages.qs = Prism.languages.qsharp;
+ Prism.languages.q = {
+ "string": /"(?:\\.|[^"\\\r\n])*"/,
+ "comment": [
+ // From http://code.kx.com/wiki/Reference/Slash:
+ // When / is following a space (or a right parenthesis, bracket, or brace), it is ignored with the rest of the line.
+ {
+ pattern: /([\t )\]}])\/.*/,
+ lookbehind: true,
+ greedy: true
+ },
+ // From http://code.kx.com/wiki/Reference/Slash:
+ // A line which has / as its first character and contains at least one other non-whitespace character is a whole-line comment and is ignored entirely.
+ // A / on a line by itself begins a multiline comment which is terminated by the next \ on a line by itself.
+ // If a / is not matched by a \, the multiline comment is unterminated and continues to end of file.
+ // The / and \ must be the first char on the line, but may be followed by any amount of whitespace.
+ {
+ pattern: /(^|\r?\n|\r)\/[\t ]*(?:(?:\r?\n|\r)(?:.*(?:\r?\n|\r(?!\n)))*?(?:\\(?=[\t ]*(?:\r?\n|\r))|$)|\S.*)/,
+ lookbehind: true,
+ greedy: true
+ },
+ // From http://code.kx.com/wiki/Reference/Slash:
+ // A \ on a line by itself with no preceding matching / will comment to end of file.
+ {
+ pattern: /^\\[\t ]*(?:\r?\n|\r)[\s\S]+/m,
+ greedy: true
+ },
+ {
+ pattern: /^#!.+/m,
+ greedy: true
+ }
+ ],
+ "symbol": /`(?::\S+|[\w.]*)/,
+ "datetime": {
+ pattern: /0N[mdzuvt]|0W[dtz]|\d{4}\.\d\d(?:m|\.\d\d(?:T(?:\d\d(?::\d\d(?::\d\d(?:[.:]\d\d\d)?)?)?)?)?[dz]?)|\d\d:\d\d(?::\d\d(?:[.:]\d\d\d)?)?[uvt]?/,
+ alias: "number"
+ },
+ // The negative look-ahead prevents bad highlighting
+ // of verbs 0: and 1:
+ "number": /\b(?![01]:)(?:0N[hje]?|0W[hj]?|0[wn]|0x[\da-fA-F]+|\d+(?:\.\d*)?(?:e[+-]?\d+)?[hjfeb]?)/,
+ "keyword": /\\\w+\b|\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\b/,
+ "adverb": {
+ pattern: /['\/\\]:?|\beach\b/,
+ alias: "function"
+ },
+ "verb": {
+ pattern: /(?:\B\.\B|\b[01]:|<[=>]?|>=?|[:+\-*%,!?~=|$&#@^]):?|\b_\b:?/,
+ alias: "operator"
+ },
+ "punctuation": /[(){}\[\];.]/
+ };
+ (function(Prism2) {
+ var jsString = /"(?:\\.|[^\\"\r\n])*"|'(?:\\.|[^\\'\r\n])*'/.source;
+ var jsComment = /\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))*\*\//.source;
+ var jsExpr = /(?:[^\\()[\]{}"'/]|<string>|\/(?![*/])|<comment>|\(<expr>*\)|\[<expr>*\]|\{<expr>*\}|\\[\s\S])/.source.replace(/<string>/g, function() {
+ return jsString;
+ }).replace(/<comment>/g, function() {
+ return jsComment;
+ });
+ for (var i = 0; i < 2; i++) {
+ jsExpr = jsExpr.replace(/<expr>/g, function() {
+ return jsExpr;
+ });
+ }
+ jsExpr = jsExpr.replace(/<expr>/g, "[^\\s\\S]");
+ Prism2.languages.qml = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
+ greedy: true
+ },
+ "javascript-function": {
+ pattern: RegExp(/((?:^|;)[ \t]*)function\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*\(<js>*\)\s*\{<js>*\}/.source.replace(/<js>/g, function() {
+ return jsExpr;
+ }), "m"),
+ lookbehind: true,
+ greedy: true,
+ alias: "language-javascript",
+ inside: Prism2.languages.javascript
+ },
+ "class-name": {
+ pattern: /((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,
+ lookbehind: true
+ },
+ "property": [
+ {
+ pattern: /((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,
+ lookbehind: true
+ },
+ {
+ pattern: /((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /^property/,
+ "property": /\w+(?:\.\w+)*/
+ }
+ }
+ ],
+ "javascript-expression": {
+ pattern: RegExp(/(:[ \t]*)(?![\s;}[])(?:(?!$|[;}])<js>)+/.source.replace(/<js>/g, function() {
+ return jsExpr;
+ }), "m"),
+ lookbehind: true,
+ greedy: true,
+ alias: "language-javascript",
+ inside: Prism2.languages.javascript
+ },
+ "string": {
+ pattern: /"(?:\\.|[^\\"\r\n])*"/,
+ greedy: true
+ },
+ "keyword": /\b(?:as|import|on)\b/,
+ "punctuation": /[{}[\]:;,]/
+ };
+ })(Prism);
+ Prism.languages.qore = Prism.languages.extend("clike", {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:\/\/|#).*)/,
+ lookbehind: true
+ },
+ // Overridden to allow unescaped multi-line strings
+ "string": {
+ pattern: /("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,
+ greedy: true
+ },
+ "keyword": /\b(?:abstract|any|assert|binary|bool|boolean|break|byte|case|catch|char|class|code|const|continue|data|default|do|double|else|enum|extends|final|finally|float|for|goto|hash|if|implements|import|inherits|instanceof|int|interface|long|my|native|new|nothing|null|object|our|own|private|reference|rethrow|return|short|soft(?:bool|date|float|int|list|number|string)|static|strictfp|string|sub|super|switch|synchronized|this|throw|throws|transient|try|void|volatile|while)\b/,
+ "boolean": /\b(?:false|true)\b/i,
+ "function": /\$?\b(?!\d)\w+(?=\()/,
+ "number": /\b(?:0b[01]+|0x(?:[\da-f]*\.)?[\da-fp\-]+|(?:\d+(?:\.\d+)?|\.\d+)(?:e\d+)?[df]|(?:\d+(?:\.\d+)?|\.\d+))\b/i,
+ "operator": {
+ pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|[!=](?:==?|~)?|>>?=?|<(?:=>?|<=?)?|&[&=]?|\|[|=]?|[*\/%^]=?|[~?])/,
+ lookbehind: true
+ },
+ "variable": /\$(?!\d)\w+\b/
+ });
+ Prism.languages.r = {
+ "comment": /#.*/,
+ "string": {
+ pattern: /(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "percent-operator": {
+ // Includes user-defined operators
+ // and %%, %*%, %/%, %in%, %o%, %x%
+ pattern: /%[^%\s]*%/,
+ alias: "operator"
+ },
+ "boolean": /\b(?:FALSE|TRUE)\b/,
+ "ellipsis": /\.\.(?:\.|\d+)/,
+ "number": [
+ /\b(?:Inf|NaN)\b/,
+ /(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+(?:\.\d*)?|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/
+ ],
+ "keyword": /\b(?:NA|NA_character_|NA_complex_|NA_integer_|NA_real_|NULL|break|else|for|function|if|in|next|repeat|while)\b/,
+ "operator": /->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,
+ "punctuation": /[(){}\[\],;]/
+ };
+ Prism.languages.racket = Prism.languages.extend("scheme", {
+ "lambda-parameter": {
+ // the racket lambda syntax is a lot more complex, so we won't even attempt to capture it.
+ // this will just prevent false positives of the `function` pattern
+ pattern: /([(\[]lambda\s+[(\[])[^()\[\]'\s]+/,
+ lookbehind: true
+ }
+ });
+ Prism.languages.insertBefore("racket", "string", {
+ "lang": {
+ pattern: /^#lang.+/m,
+ greedy: true,
+ alias: "keyword"
+ }
+ });
+ Prism.languages.rkt = Prism.languages.racket;
+ (function(Prism2) {
+ var commentLike = /\/(?![/*])|\/\/.*[\r\n]|\/\*[^*]*(?:\*(?!\/)[^*]*)*\*\//.source;
+ var stringLike = /@(?!")|"(?:[^\r\n\\"]|\\.)*"|@"(?:[^\\"]|""|\\[\s\S])*"(?!")/.source + "|" + /'(?:(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'|(?=[^\\](?!')))/.source;
+ function nested(pattern, depthLog2) {
+ for (var i = 0; i < depthLog2; i++) {
+ pattern = pattern.replace(/<self>/g, function() {
+ return "(?:" + pattern + ")";
+ });
+ }
+ return pattern.replace(/<self>/g, "[^\\s\\S]").replace(/<str>/g, "(?:" + stringLike + ")").replace(/<comment>/g, "(?:" + commentLike + ")");
+ }
+ var round2 = nested(/\((?:[^()'"@/]|<str>|<comment>|<self>)*\)/.source, 2);
+ var square = nested(/\[(?:[^\[\]'"@/]|<str>|<comment>|<self>)*\]/.source, 1);
+ var curly = nested(/\{(?:[^{}'"@/]|<str>|<comment>|<self>)*\}/.source, 2);
+ var angle = nested(/<(?:[^<>'"@/]|<comment>|<self>)*>/.source, 1);
+ var inlineCs = /@/.source + /(?:await\b\s*)?/.source + "(?:" + /(?!await\b)\w+\b/.source + "|" + round2 + ")(?:" + /[?!]?\.\w+\b/.source + "|(?:" + angle + ")?" + round2 + "|" + square + ")*" + /(?![?!\.(\[]|<(?!\/))/.source;
+ var tagAttrInlineCs = /@(?![\w()])/.source + "|" + inlineCs;
+ var tagAttrValue = "(?:" + /"[^"@]*"|'[^'@]*'|[^\s'"@>=]+(?=[\s>])/.source + `|["'][^"'@]*(?:(?:` + tagAttrInlineCs + `)[^"'@]*)+["'])`;
+ var tagAttrs = /(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*<tagAttrValue>|(?=[\s/>])))+)?/.source.replace(/<tagAttrValue>/, tagAttrValue);
+ var tagContent = /(?!\d)[^\s>\/=$<%]+/.source + tagAttrs + /\s*\/?>/.source;
+ var tagRegion = /\B@?/.source + "(?:" + /<([a-zA-Z][\w:]*)/.source + tagAttrs + /\s*>/.source + "(?:" + (/[^<]/.source + "|" + // all tags that are not the start tag
+ // eslint-disable-next-line regexp/strict
+ /<\/?(?!\1\b)/.source + tagContent + "|" + // nested start tag
+ nested(
+ // eslint-disable-next-line regexp/strict
+ /<\1/.source + tagAttrs + /\s*>/.source + "(?:" + (/[^<]/.source + "|" + // all tags that are not the start tag
+ // eslint-disable-next-line regexp/strict
+ /<\/?(?!\1\b)/.source + tagContent + "|<self>") + ")*" + // eslint-disable-next-line regexp/strict
+ /<\/\1\s*>/.source,
+ 2
+ )) + ")*" + // eslint-disable-next-line regexp/strict
+ /<\/\1\s*>/.source + "|" + /</.source + tagContent + ")";
+ Prism2.languages.cshtml = Prism2.languages.extend("markup", {});
+ var csharpWithHtml = Prism2.languages.insertBefore("csharp", "string", {
+ "html": {
+ pattern: RegExp(tagRegion),
+ greedy: true,
+ inside: Prism2.languages.cshtml
+ }
+ }, { csharp: Prism2.languages.extend("csharp", {}) });
+ var cs = {
+ pattern: /\S[\s\S]*/,
+ alias: "language-csharp",
+ inside: csharpWithHtml
+ };
+ var inlineValue = {
+ pattern: RegExp(/(^|[^@])/.source + inlineCs),
+ lookbehind: true,
+ greedy: true,
+ alias: "variable",
+ inside: {
+ "keyword": /^@/,
+ "csharp": cs
+ }
+ };
+ Prism2.languages.cshtml.tag.pattern = RegExp(/<\/?/.source + tagContent);
+ Prism2.languages.cshtml.tag.inside["attr-value"].pattern = RegExp(/=\s*/.source + tagAttrValue);
+ Prism2.languages.insertBefore("inside", "punctuation", { "value": inlineValue }, Prism2.languages.cshtml.tag.inside["attr-value"]);
+ Prism2.languages.insertBefore("cshtml", "prolog", {
+ "razor-comment": {
+ pattern: /@\*[\s\S]*?\*@/,
+ greedy: true,
+ alias: "comment"
+ },
+ "block": {
+ pattern: RegExp(
+ /(^|[^@])@/.source + "(?:" + [
+ // @{ ... }
+ curly,
+ // @code{ ... }
+ /(?:code|functions)\s*/.source + curly,
+ // @for (...) { ... }
+ /(?:for|foreach|lock|switch|using|while)\s*/.source + round2 + /\s*/.source + curly,
+ // @do { ... } while (...);
+ /do\s*/.source + curly + /\s*while\s*/.source + round2 + /(?:\s*;)?/.source,
+ // @try { ... } catch (...) { ... } finally { ... }
+ /try\s*/.source + curly + /\s*catch\s*/.source + round2 + /\s*/.source + curly + /\s*finally\s*/.source + curly,
+ // @if (...) {...} else if (...) {...} else {...}
+ /if\s*/.source + round2 + /\s*/.source + curly + "(?:" + /\s*else/.source + "(?:" + /\s+if\s*/.source + round2 + ")?" + /\s*/.source + curly + ")*",
+ // @helper Ident(params) { ... }
+ /helper\s+\w+\s*/.source + round2 + /\s*/.source + curly
+ ].join("|") + ")"
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "keyword": /^@\w*/,
+ "csharp": cs
+ }
+ },
+ "directive": {
+ pattern: /^([ \t]*)@(?:addTagHelper|attribute|implements|inherits|inject|layout|model|namespace|page|preservewhitespace|removeTagHelper|section|tagHelperPrefix|using)(?=\s).*/m,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "keyword": /^@\w+/,
+ "csharp": cs
+ }
+ },
+ "value": inlineValue,
+ "delegate-operator": {
+ pattern: /(^|[^@])@(?=<)/,
+ lookbehind: true,
+ alias: "operator"
+ }
+ });
+ Prism2.languages.razor = Prism2.languages.cshtml;
+ })(Prism);
+ (function(Prism2) {
+ var javascript = Prism2.util.clone(Prism2.languages.javascript);
+ var space = /(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source;
+ var braces = /(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source;
+ var spread = /(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;
+ function re(source, flags) {
+ source = source.replace(/<S>/g, function() {
+ return space;
+ }).replace(/<BRACES>/g, function() {
+ return braces;
+ }).replace(/<SPREAD>/g, function() {
+ return spread;
+ });
+ return RegExp(source, flags);
+ }
+ spread = re(spread).source;
+ Prism2.languages.jsx = Prism2.languages.extend("markup", javascript);
+ Prism2.languages.jsx.tag.pattern = re(
+ /<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source
+ );
+ Prism2.languages.jsx.tag.inside["tag"].pattern = /^<\/?[^\s>\/]*/;
+ Prism2.languages.jsx.tag.inside["attr-value"].pattern = /=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/;
+ Prism2.languages.jsx.tag.inside["tag"].inside["class-name"] = /^[A-Z]\w*(?:\.[A-Z]\w*)*$/;
+ Prism2.languages.jsx.tag.inside["comment"] = javascript["comment"];
+ Prism2.languages.insertBefore("inside", "attr-name", {
+ "spread": {
+ pattern: re(/<SPREAD>/.source),
+ inside: Prism2.languages.jsx
+ }
+ }, Prism2.languages.jsx.tag);
+ Prism2.languages.insertBefore("inside", "special-attr", {
+ "script": {
+ // Allow for two levels of nesting
+ pattern: re(/=<BRACES>/.source),
+ alias: "language-javascript",
+ inside: {
+ "script-punctuation": {
+ pattern: /^=(?=\{)/,
+ alias: "punctuation"
+ },
+ rest: Prism2.languages.jsx
+ }
+ }
+ }, Prism2.languages.jsx.tag);
+ var stringifyToken = function(token) {
+ if (!token) {
+ return "";
+ }
+ if (typeof token === "string") {
+ return token;
+ }
+ if (typeof token.content === "string") {
+ return token.content;
+ }
+ return token.content.map(stringifyToken).join("");
+ };
+ var walkTokens = function(tokens) {
+ var openedTags = [];
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ var notTagNorBrace = false;
+ if (typeof token !== "string") {
+ if (token.type === "tag" && token.content[0] && token.content[0].type === "tag") {
+ if (token.content[0].content[0].content === "</") {
+ if (openedTags.length > 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) {
+ openedTags.pop();
+ }
+ } else {
+ if (token.content[token.content.length - 1].content === "/>") {
+ } else {
+ openedTags.push({
+ tagName: stringifyToken(token.content[0].content[1]),
+ openedBraces: 0
+ });
+ }
+ }
+ } else if (openedTags.length > 0 && token.type === "punctuation" && token.content === "{") {
+ openedTags[openedTags.length - 1].openedBraces++;
+ } else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === "punctuation" && token.content === "}") {
+ openedTags[openedTags.length - 1].openedBraces--;
+ } else {
+ notTagNorBrace = true;
+ }
+ }
+ if (notTagNorBrace || typeof token === "string") {
+ if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) {
+ var plainText = stringifyToken(token);
+ if (i < tokens.length - 1 && (typeof tokens[i + 1] === "string" || tokens[i + 1].type === "plain-text")) {
+ plainText += stringifyToken(tokens[i + 1]);
+ tokens.splice(i + 1, 1);
+ }
+ if (i > 0 && (typeof tokens[i - 1] === "string" || tokens[i - 1].type === "plain-text")) {
+ plainText = stringifyToken(tokens[i - 1]) + plainText;
+ tokens.splice(i - 1, 1);
+ i--;
+ }
+ tokens[i] = new Prism2.Token("plain-text", plainText, null, plainText);
+ }
+ }
+ if (token.content && typeof token.content !== "string") {
+ walkTokens(token.content);
+ }
+ }
+ };
+ Prism2.hooks.add("after-tokenize", function(env) {
+ if (env.language !== "jsx" && env.language !== "tsx") {
+ return;
+ }
+ walkTokens(env.tokens);
+ });
+ })(Prism);
+ (function(Prism2) {
+ var typescript = Prism2.util.clone(Prism2.languages.typescript);
+ Prism2.languages.tsx = Prism2.languages.extend("jsx", typescript);
+ delete Prism2.languages.tsx["parameter"];
+ delete Prism2.languages.tsx["literal-property"];
+ var tag = Prism2.languages.tsx.tag;
+ tag.pattern = RegExp(/(^|[^\w$]|(?=<\/))/.source + "(?:" + tag.pattern.source + ")", tag.pattern.flags);
+ tag.lookbehind = true;
+ })(Prism);
+ Prism.languages.reason = Prism.languages.extend("clike", {
+ "string": {
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,
+ greedy: true
+ },
+ // 'class-name' must be matched *after* 'constructor' defined below
+ "class-name": /\b[A-Z]\w*/,
+ "keyword": /\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,
+ "operator": /\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/
+ });
+ Prism.languages.insertBefore("reason", "class-name", {
+ "char": {
+ pattern: /'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,
+ greedy: true
+ },
+ // Negative look-ahead prevents from matching things like String.capitalize
+ "constructor": /\b[A-Z]\w*\b(?!\s*\.)/,
+ "label": {
+ pattern: /\b[a-z]\w*(?=::)/,
+ alias: "symbol"
+ }
+ });
+ delete Prism.languages.reason.function;
+ (function(Prism2) {
+ var specialEscape = {
+ pattern: /\\[\\(){}[\]^$+*?|.]/,
+ alias: "escape"
+ };
+ var escape = /\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/;
+ var charSet = {
+ pattern: /\.|\\[wsd]|\\p\{[^{}]+\}/i,
+ alias: "class-name"
+ };
+ var charSetWithoutDot = {
+ pattern: /\\[wsd]|\\p\{[^{}]+\}/i,
+ alias: "class-name"
+ };
+ var rangeChar = "(?:[^\\\\-]|" + escape.source + ")";
+ var range2 = RegExp(rangeChar + "-" + rangeChar);
+ var groupName = {
+ pattern: /(<|')[^<>']+(?=[>']$)/,
+ lookbehind: true,
+ alias: "variable"
+ };
+ Prism2.languages.regex = {
+ "char-class": {
+ pattern: /((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,
+ lookbehind: true,
+ inside: {
+ "char-class-negation": {
+ pattern: /(^\[)\^/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "char-class-punctuation": {
+ pattern: /^\[|\]$/,
+ alias: "punctuation"
+ },
+ "range": {
+ pattern: range2,
+ inside: {
+ "escape": escape,
+ "range-punctuation": {
+ pattern: /-/,
+ alias: "operator"
+ }
+ }
+ },
+ "special-escape": specialEscape,
+ "char-set": charSetWithoutDot,
+ "escape": escape
+ }
+ },
+ "special-escape": specialEscape,
+ "char-set": charSet,
+ "backreference": [
+ {
+ // a backreference which is not an octal escape
+ pattern: /\\(?![123][0-7]{2})[1-9]/,
+ alias: "keyword"
+ },
+ {
+ pattern: /\\k<[^<>']+>/,
+ alias: "keyword",
+ inside: {
+ "group-name": groupName
+ }
+ }
+ ],
+ "anchor": {
+ pattern: /[$^]|\\[ABbGZz]/,
+ alias: "function"
+ },
+ "escape": escape,
+ "group": [
+ {
+ // https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html
+ // https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference?view=netframework-4.7.2#grouping-constructs
+ // (), (?<name>), (?'name'), (?>), (?:), (?=), (?!), (?<=), (?<!), (?is-m), (?i-m:)
+ pattern: /\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,
+ alias: "punctuation",
+ inside: {
+ "group-name": groupName
+ }
+ },
+ {
+ pattern: /\)/,
+ alias: "punctuation"
+ }
+ ],
+ "quantifier": {
+ pattern: /(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,
+ alias: "number"
+ },
+ "alternation": {
+ pattern: /\|/,
+ alias: "keyword"
+ }
+ };
+ })(Prism);
+ Prism.languages.rego = {
+ "comment": /#.*/,
+ "property": {
+ pattern: /(^|[^\\.])(?:"(?:\\.|[^\\"\r\n])*"|`[^`]*`|\b[a-z_]\w*\b)(?=\s*:(?!=))/i,
+ lookbehind: true,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"|`[^`]*`/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /\b(?:as|default|else|import|not|null|package|set(?=\s*\()|some|with)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "function": {
+ pattern: /\b[a-z_]\w*\b(?:\s*\.\s*\b[a-z_]\w*\b)*(?=\s*\()/i,
+ inside: {
+ "namespace": /\b\w+\b(?=\s*\.)/,
+ "punctuation": /\./
+ }
+ },
+ "number": /-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,
+ "operator": /[-+*/%|&]|[<>:=]=?|!=|\b_\b/,
+ "punctuation": /[,;.\[\]{}()]/
+ };
+ Prism.languages.renpy = {
+ "comment": {
+ pattern: /(^|[^\\])#.+/,
+ lookbehind: true
+ },
+ "string": {
+ pattern: /("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\])*\2|(?:^#?(?:(?:[0-9a-fA-F]){3}|[0-9a-fA-F]{6})$)/m,
+ greedy: true
+ },
+ "function": /\b[a-z_]\w*(?=\()/i,
+ "property": /\b(?:Update|UpdateVersion|action|activate_sound|adv_nvl_transition|after_load_transition|align|alpha|alt|anchor|antialias|area|auto|background|bar_invert|bar_resizing|bar_vertical|black_color|bold|bottom_bar|bottom_gutter|bottom_margin|bottom_padding|box_reverse|box_wrap|can_update|caret|child|color|crop|default_afm_enable|default_afm_time|default_fullscreen|default_text_cps|developer|directory_name|drag_handle|drag_joined|drag_name|drag_raise|draggable|dragged|drop_shadow|drop_shadow_color|droppable|dropped|easein|easeout|edgescroll|end_game_transition|end_splash_transition|enter_replay_transition|enter_sound|enter_transition|enter_yesno_transition|executable_name|exit_replay_transition|exit_sound|exit_transition|exit_yesno_transition|fadein|fadeout|first_indent|first_spacing|fit_first|focus|focus_mask|font|foreground|game_main_transition|get_installed_packages|google_play_key|google_play_salt|ground|has_music|has_sound|has_voice|height|help|hinting|hover|hover_background|hover_color|hover_sound|hovered|hyperlink_functions|idle|idle_color|image_style|include_update|insensitive|insensitive_background|insensitive_color|inside|intra_transition|italic|justify|kerning|keyboard_focus|language|layer_clipping|layers|layout|left_bar|left_gutter|left_margin|left_padding|length|line_leading|line_overlap_split|line_spacing|linear|main_game_transition|main_menu_music|maximum|min_width|minimum|minwidth|modal|mouse|mousewheel|name|narrator_menu|newline_indent|nvl_adv_transition|offset|order_reverse|outlines|overlay_functions|pos|position|prefix|radius|range|rest_indent|right_bar|right_gutter|right_margin|right_padding|rotate|rotate_pad|ruby_style|sample_sound|save_directory|say_attribute_transition|screen_height|screen_width|scrollbars|selected_hover|selected_hover_color|selected_idle|selected_idle_color|selected_insensitive|show_side_image|show_two_window|side_spacing|side_xpos|side_ypos|size|size_group|slow_cps|slow_cps_multiplier|spacing|strikethrough|subpixel|text_align|text_style|text_xpos|text_y_fudge|text_ypos|thumb|thumb_offset|thumb_shadow|thumbnail_height|thumbnail_width|time|top_bar|top_gutter|top_margin|top_padding|translations|underline|unscrollable|update|value|version|version_name|version_tuple|vertical|width|window_hide_transition|window_icon|window_left_padding|window_show_transition|window_title|windows_icon|xadjustment|xalign|xanchor|xanchoraround|xaround|xcenter|xfill|xinitial|xmargin|xmaximum|xminimum|xoffset|xofsset|xpadding|xpos|xsize|xzoom|yadjustment|yalign|yanchor|yanchoraround|yaround|ycenter|yfill|yinitial|ymargin|ymaximum|yminimum|yoffset|ypadding|ypos|ysize|ysizexysize|yzoom|zoom|zorder)\b/,
+ "tag": /\b(?:bar|block|button|buttoscreenn|drag|draggroup|fixed|frame|grid|[hv]box|hotbar|hotspot|image|imagebutton|imagemap|input|key|label|menu|mm_menu_frame|mousearea|nvl|parallel|screen|self|side|tag|text|textbutton|timer|vbar|viewport|window)\b|\$/,
+ "keyword": /\b(?:None|add|adjustment|alignaround|allow|angle|animation|around|as|assert|behind|box_layout|break|build|cache|call|center|changed|child_size|choice|circles|class|clear|clicked|clipping|clockwise|config|contains|continue|corner1|corner2|counterclockwise|def|default|define|del|delay|disabled|disabled_text|dissolve|elif|else|event|except|exclude|exec|expression|fade|finally|for|from|function|global|gm_root|has|hide|id|if|import|in|init|is|jump|knot|lambda|left|less_rounded|mm_root|movie|music|null|on|onlayer|pass|pause|persistent|play|print|python|queue|raise|random|renpy|repeat|return|right|rounded_window|scene|scope|set|show|slow|slow_abortable|slow_done|sound|stop|store|style|style_group|substitute|suffix|theme|transform|transform_anchor|transpose|try|ui|unhovered|updater|use|voice|while|widget|widget_hover|widget_selected|widget_text|yield)\b/,
+ "boolean": /\b(?:[Ff]alse|[Tt]rue)\b/,
+ "number": /(?:\b(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?)|\B\.\d+)(?:e[+-]?\d+)?j?/i,
+ "operator": /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:and|at|not|or|with)\b/,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.rpy = Prism.languages.renpy;
+ Prism.languages.rescript = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ greedy: true
+ },
+ "char": { pattern: /'(?:[^\r\n\\]|\\(?:.|\w+))'/, greedy: true },
+ "string": {
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,
+ greedy: true
+ },
+ "class-name": /\b[A-Z]\w*|@[a-z.]*|#[A-Za-z]\w*|#\d/,
+ "function": {
+ pattern: /[a-zA-Z]\w*(?=\()|(\.)[a-z]\w*/,
+ lookbehind: true
+ },
+ "number": /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
+ "boolean": /\b(?:false|true)\b/,
+ "attr-value": /[A-Za-z]\w*(?==)/,
+ "constant": {
+ pattern: /(\btype\s+)[a-z]\w*/,
+ lookbehind: true
+ },
+ "tag": {
+ pattern: /(<)[a-z]\w*|(?:<\/)[a-z]\w*/,
+ lookbehind: true,
+ inside: {
+ "operator": /<|>|\//
+ }
+ },
+ "keyword": /\b(?:and|as|assert|begin|bool|class|constraint|do|done|downto|else|end|exception|external|float|for|fun|function|if|in|include|inherit|initializer|int|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|string|switch|then|to|try|type|when|while|with)\b/,
+ "operator": /\.{3}|:[:=]?|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/,
+ "punctuation": /[(){}[\],;.]/
+ };
+ Prism.languages.insertBefore("rescript", "string", {
+ "template-string": {
+ pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
+ greedy: true,
+ inside: {
+ "template-punctuation": {
+ pattern: /^`|`$/,
+ alias: "string"
+ },
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+ lookbehind: true,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "tag"
+ },
+ rest: Prism.languages.rescript
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism.languages.res = Prism.languages.rescript;
+ Prism.languages.rest = {
+ "table": [
+ {
+ pattern: /(^[\t ]*)(?:\+[=-]+)+\+(?:\r?\n|\r)(?:\1[+|].+[+|](?:\r?\n|\r))+\1(?:\+[=-]+)+\+/m,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\||(?:\+[=-]+)+\+/
+ }
+ },
+ {
+ pattern: /(^[\t ]*)=+ [ =]*=(?:(?:\r?\n|\r)\1.+)+(?:\r?\n|\r)\1=+ [ =]*=(?=(?:\r?\n|\r){2}|\s*$)/m,
+ lookbehind: true,
+ inside: {
+ "punctuation": /[=-]+/
+ }
+ }
+ ],
+ // Directive-like patterns
+ "substitution-def": {
+ pattern: /(^[\t ]*\.\. )\|(?:[^|\s](?:[^|]*[^|\s])?)\| [^:]+::/m,
+ lookbehind: true,
+ inside: {
+ "substitution": {
+ pattern: /^\|(?:[^|\s]|[^|\s][^|]*[^|\s])\|/,
+ alias: "attr-value",
+ inside: {
+ "punctuation": /^\||\|$/
+ }
+ },
+ "directive": {
+ pattern: /( )(?! )[^:]+::/,
+ lookbehind: true,
+ alias: "function",
+ inside: {
+ "punctuation": /::$/
+ }
+ }
+ }
+ },
+ "link-target": [
+ {
+ pattern: /(^[\t ]*\.\. )\[[^\]]+\]/m,
+ lookbehind: true,
+ alias: "string",
+ inside: {
+ "punctuation": /^\[|\]$/
+ }
+ },
+ {
+ pattern: /(^[\t ]*\.\. )_(?:`[^`]+`|(?:[^:\\]|\\.)+):/m,
+ lookbehind: true,
+ alias: "string",
+ inside: {
+ "punctuation": /^_|:$/
+ }
+ }
+ ],
+ "directive": {
+ pattern: /(^[\t ]*\.\. )[^:]+::/m,
+ lookbehind: true,
+ alias: "function",
+ inside: {
+ "punctuation": /::$/
+ }
+ },
+ "comment": {
+ // The two alternatives try to prevent highlighting of blank comments
+ pattern: /(^[\t ]*\.\.)(?:(?: .+)?(?:(?:\r?\n|\r).+)+| .+)(?=(?:\r?\n|\r){2}|$)/m,
+ lookbehind: true
+ },
+ "title": [
+ // Overlined and underlined
+ {
+ pattern: /^(([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+)(?:\r?\n|\r).+(?:\r?\n|\r)\1$/m,
+ inside: {
+ "punctuation": /^[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+|[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,
+ "important": /.+/
+ }
+ },
+ // Underlined only
+ {
+ pattern: /(^|(?:\r?\n|\r){2}).+(?:\r?\n|\r)([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+(?=\r?\n|\r|$)/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,
+ "important": /.+/
+ }
+ }
+ ],
+ "hr": {
+ pattern: /((?:\r?\n|\r){2})([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2{3,}(?=(?:\r?\n|\r){2})/,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "field": {
+ pattern: /(^[\t ]*):[^:\r\n]+:(?= )/m,
+ lookbehind: true,
+ alias: "attr-name"
+ },
+ "command-line-option": {
+ pattern: /(^[\t ]*)(?:[+-][a-z\d]|(?:--|\/)[a-z\d-]+)(?:[ =](?:[a-z][\w-]*|<[^<>]+>))?(?:, (?:[+-][a-z\d]|(?:--|\/)[a-z\d-]+)(?:[ =](?:[a-z][\w-]*|<[^<>]+>))?)*(?=(?:\r?\n|\r)? {2,}\S)/im,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "literal-block": {
+ pattern: /::(?:\r?\n|\r){2}([ \t]+)(?![ \t]).+(?:(?:\r?\n|\r)\1.+)*/,
+ inside: {
+ "literal-block-punctuation": {
+ pattern: /^::/,
+ alias: "punctuation"
+ }
+ }
+ },
+ "quoted-literal-block": {
+ pattern: /::(?:\r?\n|\r){2}([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]).*(?:(?:\r?\n|\r)\1.*)*/,
+ inside: {
+ "literal-block-punctuation": {
+ pattern: /^(?:::|([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\1*)/m,
+ alias: "punctuation"
+ }
+ }
+ },
+ "list-bullet": {
+ pattern: /(^[\t ]*)(?:[*+\-•‣⁃]|\(?(?:\d+|[a-z]|[ivxdclm]+)\)|(?:\d+|[a-z]|[ivxdclm]+)\.)(?= )/im,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "doctest-block": {
+ pattern: /(^[\t ]*)>>> .+(?:(?:\r?\n|\r).+)*/m,
+ lookbehind: true,
+ inside: {
+ "punctuation": /^>>>/
+ }
+ },
+ "inline": [
+ {
+ pattern: /(^|[\s\-:\/'"<(\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\*\*?|``?|\|)(?!\s)(?:(?!\2).)*\S\2(?=[\s\-.,:;!?\\\/'")\]}]|$))/m,
+ lookbehind: true,
+ inside: {
+ "bold": {
+ pattern: /(^\*\*).+(?=\*\*$)/,
+ lookbehind: true
+ },
+ "italic": {
+ pattern: /(^\*).+(?=\*$)/,
+ lookbehind: true
+ },
+ "inline-literal": {
+ pattern: /(^``).+(?=``$)/,
+ lookbehind: true,
+ alias: "symbol"
+ },
+ "role": {
+ pattern: /^:[^:]+:|:[^:]+:$/,
+ alias: "function",
+ inside: {
+ "punctuation": /^:|:$/
+ }
+ },
+ "interpreted-text": {
+ pattern: /(^`).+(?=`$)/,
+ lookbehind: true,
+ alias: "attr-value"
+ },
+ "substitution": {
+ pattern: /(^\|).+(?=\|$)/,
+ lookbehind: true,
+ alias: "attr-value"
+ },
+ "punctuation": /\*\*?|``?|\|/
+ }
+ }
+ ],
+ "link": [
+ {
+ pattern: /\[[^\[\]]+\]_(?=[\s\-.,:;!?\\\/'")\]}]|$)/,
+ alias: "string",
+ inside: {
+ "punctuation": /^\[|\]_$/
+ }
+ },
+ {
+ pattern: /(?:\b[a-z\d]+(?:[_.:+][a-z\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\s\-.,:;!?\\\/'")\]}]|$)/i,
+ alias: "string",
+ inside: {
+ "punctuation": /^_?`|`$|`?_?_$/
+ }
+ }
+ ],
+ // Line block start,
+ // quote attribution,
+ // explicit markup start,
+ // and anonymous hyperlink target shortcut (__)
+ "punctuation": {
+ pattern: /(^[\t ]*)(?:\|(?= |$)|(?:---?|—|\.\.|__)(?= )|\.\.$)/m,
+ lookbehind: true
+ }
+ };
+ Prism.languages.rip = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "char": {
+ pattern: /\B`[^\s`'",.:;#\/\\()<>\[\]{}]\b/,
+ greedy: true
+ },
+ "string": {
+ pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "regex": {
+ pattern: /(^|[^/])\/(?!\/)(?:\[[^\n\r\]]*\]|\\.|[^/\\\r\n\[])+\/(?=\s*(?:$|[\r\n,.;})]))/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /(?:=>|->)|\b(?:case|catch|class|else|exit|finally|if|raise|return|switch|try)\b/,
+ "builtin": /@|\bSystem\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "date": /\b\d{4}-\d{2}-\d{2}\b/,
+ "time": /\b\d{2}:\d{2}:\d{2}\b/,
+ "datetime": /\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\b/,
+ "symbol": /:[^\d\s`'",.:;#\/\\()<>\[\]{}][^\s`'",.:;#\/\\()<>\[\]{}]*/,
+ "number": /[+-]?\b(?:\d+\.\d+|\d+)\b/,
+ "punctuation": /(?:\.{2,3})|[`,.:;=\/\\()<>\[\]{}]/,
+ "reference": /[^\d\s`'",.:;#\/\\()<>\[\]{}][^\s`'",.:;#\/\\()<>\[\]{}]*/
+ };
+ Prism.languages.roboconf = {
+ "comment": /#.*/,
+ "keyword": {
+ "pattern": /(^|\s)(?:(?:external|import)\b|(?:facet|instance of)(?=[ \t]+[\w-]+[ \t]*\{))/,
+ lookbehind: true
+ },
+ "component": {
+ pattern: /[\w-]+(?=[ \t]*\{)/,
+ alias: "variable"
+ },
+ "property": /[\w.-]+(?=[ \t]*:)/,
+ "value": {
+ pattern: /(=[ \t]*(?![ \t]))[^,;]+/,
+ lookbehind: true,
+ alias: "attr-value"
+ },
+ "optional": {
+ pattern: /\(optional\)/,
+ alias: "builtin"
+ },
+ "wildcard": {
+ pattern: /(\.)\*/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "punctuation": /[{},.;:=]/
+ };
+ (function(Prism2) {
+ var comment = {
+ pattern: /(^[ \t]*| {2}|\t)#.*/m,
+ lookbehind: true,
+ greedy: true
+ };
+ var variable = {
+ pattern: /((?:^|[^\\])(?:\\{2})*)[$@&%]\{(?:[^{}\r\n]|\{[^{}\r\n]*\})*\}/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /^[$@&%]\{|\}$/
+ }
+ };
+ function createSection(name, inside) {
+ var extendecInside = {};
+ extendecInside["section-header"] = {
+ pattern: /^ ?\*{3}.+?\*{3}/,
+ alias: "keyword"
+ };
+ for (var token in inside) {
+ extendecInside[token] = inside[token];
+ }
+ extendecInside["tag"] = {
+ pattern: /([\r\n](?: {2}|\t)[ \t]*)\[[-\w]+\]/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\[|\]/
+ }
+ };
+ extendecInside["variable"] = variable;
+ extendecInside["comment"] = comment;
+ return {
+ pattern: RegExp(/^ ?\*{3}[ \t]*<name>[ \t]*\*{3}(?:.|[\r\n](?!\*{3}))*/.source.replace(/<name>/g, function() {
+ return name;
+ }), "im"),
+ alias: "section",
+ inside: extendecInside
+ };
+ }
+ var docTag = {
+ pattern: /(\[Documentation\](?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,
+ lookbehind: true,
+ alias: "string"
+ };
+ var testNameLike = {
+ pattern: /([\r\n] ?)(?!#)(?:\S(?:[ \t]\S)*)+/,
+ lookbehind: true,
+ alias: "function",
+ inside: {
+ "variable": variable
+ }
+ };
+ var testPropertyLike = {
+ pattern: /([\r\n](?: {2}|\t)[ \t]*)(?!\[|\.{3}|#)(?:\S(?:[ \t]\S)*)+/,
+ lookbehind: true,
+ inside: {
+ "variable": variable
+ }
+ };
+ Prism2.languages["robotframework"] = {
+ "settings": createSection("Settings", {
+ "documentation": {
+ pattern: /([\r\n] ?Documentation(?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,
+ lookbehind: true,
+ alias: "string"
+ },
+ "property": {
+ pattern: /([\r\n] ?)(?!\.{3}|#)(?:\S(?:[ \t]\S)*)+/,
+ lookbehind: true
+ }
+ }),
+ "variables": createSection("Variables"),
+ "test-cases": createSection("Test Cases", {
+ "test-name": testNameLike,
+ "documentation": docTag,
+ "property": testPropertyLike
+ }),
+ "keywords": createSection("Keywords", {
+ "keyword-name": testNameLike,
+ "documentation": docTag,
+ "property": testPropertyLike
+ }),
+ "tasks": createSection("Tasks", {
+ "task-name": testNameLike,
+ "documentation": docTag,
+ "property": testPropertyLike
+ }),
+ "comment": comment
+ };
+ Prism2.languages.robot = Prism2.languages["robotframework"];
+ })(Prism);
+ (function(Prism2) {
+ var multilineComment = /\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source;
+ for (var i = 0; i < 2; i++) {
+ multilineComment = multilineComment.replace(/<self>/g, function() {
+ return multilineComment;
+ });
+ }
+ multilineComment = multilineComment.replace(/<self>/g, function() {
+ return /[^\s\S]/.source;
+ });
+ Prism2.languages.rust = {
+ "comment": [
+ {
+ pattern: RegExp(/(^|[^\\])/.source + multilineComment),
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,
+ greedy: true
+ },
+ "char": {
+ pattern: /b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,
+ greedy: true
+ },
+ "attribute": {
+ pattern: /#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,
+ greedy: true,
+ alias: "attr-name",
+ inside: {
+ "string": null
+ // see below
+ }
+ },
+ // Closure params should not be confused with bitwise OR |
+ "closure-params": {
+ pattern: /([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "closure-punctuation": {
+ pattern: /^\||\|$/,
+ alias: "punctuation"
+ },
+ rest: null
+ // see below
+ }
+ },
+ "lifetime-annotation": {
+ pattern: /'\w+/,
+ alias: "symbol"
+ },
+ "fragment-specifier": {
+ pattern: /(\$\w+:)[a-z]+/,
+ lookbehind: true,
+ alias: "punctuation"
+ },
+ "variable": /\$\w+/,
+ "function-definition": {
+ pattern: /(\bfn\s+)\w+/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "type-definition": {
+ pattern: /(\b(?:enum|struct|trait|type|union)\s+)\w+/,
+ lookbehind: true,
+ alias: "class-name"
+ },
+ "module-declaration": [
+ {
+ pattern: /(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,
+ lookbehind: true,
+ alias: "namespace"
+ },
+ {
+ pattern: /(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,
+ lookbehind: true,
+ alias: "namespace",
+ inside: {
+ "punctuation": /::/
+ }
+ }
+ ],
+ "keyword": [
+ // https://github.com/rust-lang/reference/blob/master/src/keywords.md
+ /\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,
+ // primitives and str
+ // https://doc.rust-lang.org/stable/rust-by-example/primitives.html
+ /\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/
+ ],
+ // functions can technically start with an upper-case letter, but this will introduce a lot of false positives
+ // and Rust's naming conventions recommend snake_case anyway.
+ // https://doc.rust-lang.org/1.0.0/style/style/naming/README.html
+ "function": /\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,
+ "macro": {
+ pattern: /\b\w+!/,
+ alias: "property"
+ },
+ "constant": /\b[A-Z_][A-Z_\d]+\b/,
+ "class-name": /\b[A-Z]\w*\b/,
+ "namespace": {
+ pattern: /(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,
+ inside: {
+ "punctuation": /::/
+ }
+ },
+ // Hex, oct, bin, dec numbers with visual separators and type suffix
+ "number": /\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "punctuation": /->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,
+ "operator": /[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/
+ };
+ Prism2.languages.rust["closure-params"].inside.rest = Prism2.languages.rust;
+ Prism2.languages.rust["attribute"].inside["string"] = Prism2.languages.rust["string"];
+ })(Prism);
+ (function(Prism2) {
+ var stringPattern = /(?:"(?:""|[^"])*"(?!")|'(?:''|[^'])*'(?!'))/.source;
+ var number = /\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i;
+ var numericConstant = {
+ pattern: RegExp(stringPattern + "[bx]"),
+ alias: "number"
+ };
+ var macroVariable = {
+ pattern: /&[a-z_]\w*/i
+ };
+ var macroKeyword = {
+ pattern: /((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMEXIST|SYMGLOBL|SYMLOCAL|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,
+ lookbehind: true,
+ alias: "keyword"
+ };
+ var step = {
+ pattern: /(^|\s)(?:proc\s+\w+|data(?!=)|quit|run)\b/i,
+ alias: "keyword",
+ lookbehind: true
+ };
+ var comment = [
+ /\/\*[\s\S]*?\*\//,
+ {
+ pattern: /(^[ \t]*|;\s*)\*[^;]*;/m,
+ lookbehind: true
+ }
+ ];
+ var string = {
+ pattern: RegExp(stringPattern),
+ greedy: true
+ };
+ var punctuation = /[$%@.(){}\[\];,\\]/;
+ var func = {
+ pattern: /%?\b\w+(?=\()/,
+ alias: "keyword"
+ };
+ var args = {
+ "function": func,
+ "arg-value": {
+ pattern: /(=\s*)[A-Z\.]+/i,
+ lookbehind: true
+ },
+ "operator": /=/,
+ "macro-variable": macroVariable,
+ "arg": {
+ pattern: /[A-Z]+/i,
+ alias: "keyword"
+ },
+ "number": number,
+ "numeric-constant": numericConstant,
+ "punctuation": punctuation,
+ "string": string
+ };
+ var format = {
+ pattern: /\b(?:format|put)\b=?[\w'$.]+/i,
+ inside: {
+ "keyword": /^(?:format|put)(?==)/i,
+ "equals": /=/,
+ "format": {
+ pattern: /(?:\w|\$\d)+\.\d?/,
+ alias: "number"
+ }
+ }
+ };
+ var altformat = {
+ pattern: /\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,
+ inside: {
+ "keyword": /^(?:format|put)/i,
+ "format": {
+ pattern: /[\w$]+\.\d?/,
+ alias: "number"
+ }
+ }
+ };
+ var globalStatements = {
+ pattern: /((?:^|\s)=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,
+ lookbehind: true,
+ alias: "keyword"
+ };
+ var submitStatement = {
+ pattern: /(^|\s)(?:submit(?:\s+(?:load|norun|parseonly))?|endsubmit)\b/i,
+ lookbehind: true,
+ alias: "keyword"
+ };
+ var actionSets = /aStore|accessControl|aggregation|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|cdm|clustering|conditionalRandomFields|configuration|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deduplication|deepLearn|deepNeural|deepRnn|ds2|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gVarCluster|gam|gleam|graphSemiSupLearn|hiddenMarkovModel|hyperGroup|ica|image|iml|kernalPca|langModel|ldaTopic|loadStreams|mbc|mixed|mlTools|modelPublishing|network|neuralNet|nmf|nonParametricBayes|nonlinear|optNetwork|optimization|panel|pca|percentile|phreg|pls|qkb|qlim|quantreg|recommend|regression|reinforcementLearn|robustPca|ruleMining|sampling|sandwich|sccasl|search(?:Analytics)?|sentimentAnalysis|sequence|session(?:Prop)?|severity|simSystem|simple|smartData|sparkEmbeddedProcess|sparseML|spatialreg|spc|stabilityMonitoring|svDataDescription|svm|table|text(?:Filters|Frequency|Mining|Parse|Rule(?:Develop|Score)|Topic|Util)|timeData|transpose|tsInfo|tsReconcile|uniTimeSeries|varReduce/.source;
+ var casActions = {
+ pattern: RegExp(/(^|\s)(?:action\s+)?(?:<act>)\.[a-z]+\b[^;]+/.source.replace(/<act>/g, function() {
+ return actionSets;
+ }), "i"),
+ lookbehind: true,
+ inside: {
+ "keyword": RegExp(/(?:<act>)\.[a-z]+\b/.source.replace(/<act>/g, function() {
+ return actionSets;
+ }), "i"),
+ "action": {
+ pattern: /(?:action)/i,
+ alias: "keyword"
+ },
+ "comment": comment,
+ "function": func,
+ "arg-value": args["arg-value"],
+ "operator": args.operator,
+ "argument": args.arg,
+ "number": number,
+ "numeric-constant": numericConstant,
+ "punctuation": punctuation,
+ "string": string
+ }
+ };
+ var keywords = {
+ pattern: /((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?==)|define|delete|describe|document|do\s+over|do|dol|drop|dul|else|end(?:comp|source)?|entryTitle|eval(?:uate)?|exec(?:ute)?|exit|file(?:name)?|fill(?:attrs)?|flist|fnc|function(?:list)?|global|goto|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|_?null_|name|noobs|nowd|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|print|put|raise|ranexp|rannor|rbreak|retain|return|select|session|sessref|set|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|y2axisopts|yaxisopts)\b/i,
+ lookbehind: true
+ };
+ Prism2.languages.sas = {
+ "datalines": {
+ pattern: /^([ \t]*)(?:cards|(?:data)?lines);[\s\S]+?^[ \t]*;/im,
+ lookbehind: true,
+ alias: "string",
+ inside: {
+ "keyword": {
+ pattern: /^(?:cards|(?:data)?lines)/i
+ },
+ "punctuation": /;/
+ }
+ },
+ "proc-sql": {
+ pattern: /(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,
+ lookbehind: true,
+ inside: {
+ "sql": {
+ pattern: RegExp(/^[ \t]*(?:select|alter\s+table|(?:create|describe|drop)\s+(?:index|table(?:\s+constraints)?|view)|create\s+unique\s+index|insert\s+into|update)(?:<str>|[^;"'])+;/.source.replace(/<str>/g, function() {
+ return stringPattern;
+ }), "im"),
+ alias: "language-sql",
+ inside: Prism2.languages.sql
+ },
+ "global-statements": globalStatements,
+ "sql-statements": {
+ pattern: /(^|\s)(?:disconnect\s+from|begin|commit|exec(?:ute)?|reset|rollback|validate)\b/i,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "number": number,
+ "numeric-constant": numericConstant,
+ "punctuation": punctuation,
+ "string": string
+ }
+ },
+ "proc-groovy": {
+ pattern: /(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,
+ lookbehind: true,
+ inside: {
+ "comment": comment,
+ "groovy": {
+ pattern: RegExp(/(^[ \t]*submit(?:\s+(?:load|norun|parseonly))?)(?:<str>|[^"'])+?(?=endsubmit;)/.source.replace(/<str>/g, function() {
+ return stringPattern;
+ }), "im"),
+ lookbehind: true,
+ alias: "language-groovy",
+ inside: Prism2.languages.groovy
+ },
+ "keyword": keywords,
+ "submit-statement": submitStatement,
+ "global-statements": globalStatements,
+ "number": number,
+ "numeric-constant": numericConstant,
+ "punctuation": punctuation,
+ "string": string
+ }
+ },
+ "proc-lua": {
+ pattern: /(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,
+ lookbehind: true,
+ inside: {
+ "comment": comment,
+ "lua": {
+ pattern: RegExp(/(^[ \t]*submit(?:\s+(?:load|norun|parseonly))?)(?:<str>|[^"'])+?(?=endsubmit;)/.source.replace(/<str>/g, function() {
+ return stringPattern;
+ }), "im"),
+ lookbehind: true,
+ alias: "language-lua",
+ inside: Prism2.languages.lua
+ },
+ "keyword": keywords,
+ "submit-statement": submitStatement,
+ "global-statements": globalStatements,
+ "number": number,
+ "numeric-constant": numericConstant,
+ "punctuation": punctuation,
+ "string": string
+ }
+ },
+ "proc-cas": {
+ pattern: /(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,
+ lookbehind: true,
+ inside: {
+ "comment": comment,
+ "statement-var": {
+ pattern: /((?:^|\s)=?)saveresult\s[^;]+/im,
+ lookbehind: true,
+ inside: {
+ "statement": {
+ pattern: /^saveresult\s+\S+/i,
+ inside: {
+ keyword: /^(?:saveresult)/i
+ }
+ },
+ rest: args
+ }
+ },
+ "cas-actions": casActions,
+ "statement": {
+ pattern: /((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,
+ lookbehind: true,
+ inside: args
+ },
+ "step": step,
+ "keyword": keywords,
+ "function": func,
+ "format": format,
+ "altformat": altformat,
+ "global-statements": globalStatements,
+ "number": number,
+ "numeric-constant": numericConstant,
+ "punctuation": punctuation,
+ "string": string
+ }
+ },
+ "proc-args": {
+ pattern: RegExp(/(^proc\s+\w+\s+)(?!\s)(?:[^;"']|<str>)+;/.source.replace(/<str>/g, function() {
+ return stringPattern;
+ }), "im"),
+ lookbehind: true,
+ inside: args
+ },
+ /*Special keywords within macros*/
+ "macro-keyword": macroKeyword,
+ "macro-variable": macroVariable,
+ "macro-string-functions": {
+ pattern: /((?:^|\s|=))%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)\(.*?(?:[^%]\))/i,
+ lookbehind: true,
+ inside: {
+ "function": {
+ pattern: /%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)/i,
+ alias: "keyword"
+ },
+ "macro-keyword": macroKeyword,
+ "macro-variable": macroVariable,
+ "escaped-char": {
+ pattern: /%['"()<>=¬^~;,#]/
+ },
+ "punctuation": punctuation
+ }
+ },
+ "macro-declaration": {
+ pattern: /^%macro[^;]+(?=;)/im,
+ inside: {
+ "keyword": /%macro/i
+ }
+ },
+ "macro-end": {
+ pattern: /^%mend[^;]+(?=;)/im,
+ inside: {
+ "keyword": /%mend/i
+ }
+ },
+ /*%_zscore(headcir, _lhc, _mhc, _shc, headcz, headcpct, _Fheadcz); */
+ "macro": {
+ pattern: /%_\w+(?=\()/,
+ alias: "keyword"
+ },
+ "input": {
+ pattern: /\binput\s[-\w\s/*.$&]+;/i,
+ inside: {
+ "input": {
+ alias: "keyword",
+ pattern: /^input/i
+ },
+ "comment": comment,
+ "number": number,
+ "numeric-constant": numericConstant
+ }
+ },
+ "options-args": {
+ pattern: /(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,
+ lookbehind: true,
+ inside: args
+ },
+ "cas-actions": casActions,
+ "comment": comment,
+ "function": func,
+ "format": format,
+ "altformat": altformat,
+ "numeric-constant": numericConstant,
+ "datetime": {
+ // '1jan2013'd, '9:25:19pm't, '18jan2003:9:27:05am'dt
+ pattern: RegExp(stringPattern + "(?:dt?|t)"),
+ alias: "number"
+ },
+ "string": string,
+ "step": step,
+ "keyword": keywords,
+ // In SAS Studio syntax highlighting, these operators are styled like keywords
+ "operator-keyword": {
+ pattern: /\b(?:eq|ge|gt|in|le|lt|ne|not)\b/i,
+ alias: "operator"
+ },
+ // Decimal (1.2e23), hexadecimal (0c1x)
+ "number": number,
+ "operator": /\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/,
+ "punctuation": punctuation
+ };
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.sass = Prism2.languages.extend("css", {
+ // Sass comments don't need to be closed, only indented
+ "comment": {
+ pattern: /^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,
+ lookbehind: true,
+ greedy: true
+ }
+ });
+ Prism2.languages.insertBefore("sass", "atrule", {
+ // We want to consume the whole line
+ "atrule-line": {
+ // Includes support for = and + shortcuts
+ pattern: /^(?:[ \t]*)[@+=].+/m,
+ greedy: true,
+ inside: {
+ "atrule": /(?:@[\w-]+|[+=])/
+ }
+ }
+ });
+ delete Prism2.languages.sass.atrule;
+ var variable = /\$[-\w]+|#\{\$[-\w]+\}/;
+ var operator = [
+ /[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,
+ {
+ pattern: /(\s)-(?=\s)/,
+ lookbehind: true
+ }
+ ];
+ Prism2.languages.insertBefore("sass", "property", {
+ // We want to consume the whole line
+ "variable-line": {
+ pattern: /^[ \t]*\$.+/m,
+ greedy: true,
+ inside: {
+ "punctuation": /:/,
+ "variable": variable,
+ "operator": operator
+ }
+ },
+ // We want to consume the whole line
+ "property-line": {
+ pattern: /^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,
+ greedy: true,
+ inside: {
+ "property": [
+ /[^:\s]+(?=\s*:)/,
+ {
+ pattern: /(:)[^:\s]+/,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /:/,
+ "variable": variable,
+ "operator": operator,
+ "important": Prism2.languages.sass.important
+ }
+ }
+ });
+ delete Prism2.languages.sass.property;
+ delete Prism2.languages.sass.important;
+ Prism2.languages.insertBefore("sass", "punctuation", {
+ "selector": {
+ pattern: /^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,
+ lookbehind: true,
+ greedy: true
+ }
+ });
+ })(Prism);
+ Prism.languages.scss = Prism.languages.extend("css", {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
+ lookbehind: true
+ },
+ "atrule": {
+ pattern: /@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,
+ inside: {
+ "rule": /@[\w-]+/
+ // See rest below
+ }
+ },
+ // url, compassified
+ "url": /(?:[-a-z]+-)?url(?=\()/i,
+ // CSS selector regex is not appropriate for Sass
+ // since there can be lot more things (var, @ directive, nesting..)
+ // a selector must start at the end of a property or after a brace (end of other rules or nesting)
+ // it can contain some characters that aren't used for defining rules or end of selector, & (parent selector), or interpolated variable
+ // the end of a selector is found when there is no rules in it ( {} or {\s}) or if there is a property (because an interpolated var
+ // can "pass" as a selector- e.g: proper#{$erty})
+ // this one was hard to do, so please be careful if you edit this one :)
+ "selector": {
+ // Initial look-ahead is used to prevent matching of blank selectors
+ pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,
+ inside: {
+ "parent": {
+ pattern: /&/,
+ alias: "important"
+ },
+ "placeholder": /%[-\w]+/,
+ "variable": /\$[-\w]+|#\{\$[-\w]+\}/
+ }
+ },
+ "property": {
+ pattern: /(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,
+ inside: {
+ "variable": /\$[-\w]+|#\{\$[-\w]+\}/
+ }
+ }
+ });
+ Prism.languages.insertBefore("scss", "atrule", {
+ "keyword": [
+ /@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,
+ {
+ pattern: /( )(?:from|through)(?= )/,
+ lookbehind: true
+ }
+ ]
+ });
+ Prism.languages.insertBefore("scss", "important", {
+ // var and interpolated vars
+ "variable": /\$[-\w]+|#\{\$[-\w]+\}/
+ });
+ Prism.languages.insertBefore("scss", "function", {
+ "module-modifier": {
+ pattern: /\b(?:as|hide|show|with)\b/i,
+ alias: "keyword"
+ },
+ "placeholder": {
+ pattern: /%[-\w]+/,
+ alias: "selector"
+ },
+ "statement": {
+ pattern: /\B!(?:default|optional)\b/i,
+ alias: "keyword"
+ },
+ "boolean": /\b(?:false|true)\b/,
+ "null": {
+ pattern: /\bnull\b/,
+ alias: "keyword"
+ },
+ "operator": {
+ pattern: /(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,
+ lookbehind: true
+ }
+ });
+ Prism.languages.scss["atrule"].inside.rest = Prism.languages.scss;
+ Prism.languages.scala = Prism.languages.extend("java", {
+ "triple-quoted-string": {
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true,
+ alias: "string"
+ },
+ "string": {
+ pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "keyword": /<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,
+ "number": /\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,
+ "builtin": /\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,
+ "symbol": /'[^\d\s\\]\w*/
+ });
+ Prism.languages.insertBefore("scala", "triple-quoted-string", {
+ "string-interpolation": {
+ pattern: /\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,
+ greedy: true,
+ inside: {
+ "id": {
+ pattern: /^\w+/,
+ greedy: true,
+ alias: "function"
+ },
+ "escape": {
+ pattern: /\\\$"|\$[$"]/,
+ greedy: true,
+ alias: "symbol"
+ },
+ "interpolation": {
+ pattern: /\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,
+ greedy: true,
+ inside: {
+ "punctuation": /^\$\{?|\}$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: Prism.languages.scala
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ delete Prism.languages.scala["class-name"];
+ delete Prism.languages.scala["function"];
+ (function(Prism2) {
+ var strings = [
+ // normal string
+ /"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/.source,
+ /'[^']*'/.source,
+ /\$'(?:[^'\\]|\\[\s\S])*'/.source,
+ // here doc
+ // 2 capturing groups
+ /<<-?\s*(["']?)(\w+)\1\s[\s\S]*?[\r\n]\2/.source
+ ].join("|");
+ Prism2.languages["shell-session"] = {
+ "command": {
+ pattern: RegExp(
+ // user info
+ /^/.source + "(?:" + // <user> ":" ( <path> )?
+ (/[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+(?::[^\0-\x1F$#%*?"<>:;|]+)?/.source + "|" + // <path>
+ // Since the path pattern is quite general, we will require it to start with a special character to
+ // prevent false positives.
+ /[/~.][^\0-\x1F$#%*?"<>@:;|]*/.source) + ")?" + // shell symbol
+ /[$#%](?=\s)/.source + // bash command
+ /(?:[^\\\r\n \t'"<$]|[ \t](?:(?!#)|#.*$)|\\(?:[^\r]|\r\n?)|\$(?!')|<(?!<)|<<str>>)+/.source.replace(/<<str>>/g, function() {
+ return strings;
+ }),
+ "m"
+ ),
+ greedy: true,
+ inside: {
+ "info": {
+ // foo@bar:~/files$ exit
+ // foo@bar$ exit
+ // ~/files$ exit
+ pattern: /^[^#$%]+/,
+ alias: "punctuation",
+ inside: {
+ "user": /^[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+/,
+ "punctuation": /:/,
+ "path": /[\s\S]+/
+ }
+ },
+ "bash": {
+ pattern: /(^[$#%]\s*)\S[\s\S]*/,
+ lookbehind: true,
+ alias: "language-bash",
+ inside: Prism2.languages.bash
+ },
+ "shell-symbol": {
+ pattern: /^[$#%]/,
+ alias: "important"
+ }
+ }
+ },
+ "output": /.(?:.*(?:[\r\n]|.$))*/
+ };
+ Prism2.languages["sh-session"] = Prism2.languages["shellsession"] = Prism2.languages["shell-session"];
+ })(Prism);
+ Prism.languages.smali = {
+ "comment": /#.*/,
+ "string": {
+ pattern: /"(?:[^\r\n\\"]|\\.)*"|'(?:[^\r\n\\']|\\(?:.|u[\da-fA-F]{4}))'/,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(^|[^L])L(?:(?:\w+|`[^`\r\n]*`)\/)*(?:[\w$]+|`[^`\r\n]*`)(?=\s*;)/,
+ lookbehind: true,
+ inside: {
+ "class-name": {
+ pattern: /(^L|\/)(?:[\w$]+|`[^`\r\n]*`)$/,
+ lookbehind: true
+ },
+ "namespace": {
+ pattern: /^(L)(?:(?:\w+|`[^`\r\n]*`)\/)+/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\//
+ }
+ },
+ "builtin": /^L/
+ }
+ },
+ "builtin": [
+ {
+ // Reference: https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields#types
+ pattern: /([();\[])[BCDFIJSVZ]+/,
+ lookbehind: true
+ },
+ {
+ // e.g. .field mWifiOnUid:I
+ pattern: /([\w$>]:)[BCDFIJSVZ]/,
+ lookbehind: true
+ }
+ ],
+ "keyword": [
+ {
+ pattern: /(\.end\s+)[\w-]+/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^\w.-])\.(?!\d)[\w-]+/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^\w.-])(?:abstract|annotation|bridge|constructor|enum|final|interface|private|protected|public|runtime|static|synthetic|system|transient)(?![\w.-])/,
+ lookbehind: true
+ }
+ ],
+ "function": {
+ pattern: /(^|[^\w.-])(?:\w+|<[\w$-]+>)(?=\()/,
+ lookbehind: true
+ },
+ "field": {
+ pattern: /[\w$]+(?=:)/,
+ alias: "variable"
+ },
+ "register": {
+ pattern: /(^|[^\w.-])[vp]\d(?![\w.-])/,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "boolean": {
+ pattern: /(^|[^\w.-])(?:false|true)(?![\w.-])/,
+ lookbehind: true
+ },
+ "number": {
+ pattern: /(^|[^/\w.-])-?(?:NAN|INFINITY|0x(?:[\dA-F]+(?:\.[\dA-F]*)?|\.[\dA-F]+)(?:p[+-]?[\dA-F]+)?|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)[dflst]?(?![\w.-])/i,
+ lookbehind: true
+ },
+ "label": {
+ pattern: /(:)\w+/,
+ lookbehind: true,
+ alias: "property"
+ },
+ "operator": /->|\.\.|[\[=]/,
+ "punctuation": /[{}(),;:]/
+ };
+ Prism.languages.smalltalk = {
+ "comment": {
+ pattern: /"(?:""|[^"])*"/,
+ greedy: true
+ },
+ "char": {
+ pattern: /\$./,
+ greedy: true
+ },
+ "string": {
+ pattern: /'(?:''|[^'])*'/,
+ greedy: true
+ },
+ "symbol": /#[\da-z]+|#(?:-|([+\/\\*~<>=@%|&?!])\1?)|#(?=\()/i,
+ "block-arguments": {
+ pattern: /(\[\s*):[^\[|]*\|/,
+ lookbehind: true,
+ inside: {
+ "variable": /:[\da-z]+/i,
+ "punctuation": /\|/
+ }
+ },
+ "temporary-variables": {
+ pattern: /\|[^|]+\|/,
+ inside: {
+ "variable": /[\da-z]+/i,
+ "punctuation": /\|/
+ }
+ },
+ "keyword": /\b(?:new|nil|self|super)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": [
+ /\d+r-?[\dA-Z]+(?:\.[\dA-Z]+)?(?:e-?\d+)?/,
+ /\b\d+(?:\.\d+)?(?:e-?\d+)?/
+ ],
+ "operator": /[<=]=?|:=|~[~=]|\/\/?|\\\\|>[>=]?|[!^+\-*&|,@]/,
+ "punctuation": /[.;:?\[\](){}]/
+ };
+ (function(Prism2) {
+ Prism2.languages.smarty = {
+ "comment": {
+ pattern: /^\{\*[\s\S]*?\*\}/,
+ greedy: true
+ },
+ "embedded-php": {
+ pattern: /^\{php\}[\s\S]*?\{\/php\}/,
+ greedy: true,
+ inside: {
+ "smarty": {
+ pattern: /^\{php\}|\{\/php\}$/,
+ inside: null
+ // see below
+ },
+ "php": {
+ pattern: /[\s\S]+/,
+ alias: "language-php",
+ inside: Prism2.languages.php
+ }
+ }
+ },
+ "string": [
+ {
+ pattern: /"(?:\\.|[^"\\\r\n])*"/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /\{[^{}]*\}|`[^`]*`/,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^[{`]|[`}]$/,
+ alias: "punctuation"
+ },
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ // see below
+ }
+ }
+ },
+ "variable": /\$\w+/
+ }
+ },
+ {
+ pattern: /'(?:\\.|[^'\\\r\n])*'/,
+ greedy: true
+ }
+ ],
+ "keyword": {
+ pattern: /(^\{\/?)[a-z_]\w*\b(?!\()/i,
+ lookbehind: true,
+ greedy: true
+ },
+ "delimiter": {
+ pattern: /^\{\/?|\}$/,
+ greedy: true,
+ alias: "punctuation"
+ },
+ "number": /\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,
+ "variable": [
+ /\$(?!\d)\w+/,
+ /#(?!\d)\w+#/,
+ {
+ pattern: /(\.|->|\w\s*=)(?!\d)\w+\b(?!\()/,
+ lookbehind: true
+ },
+ {
+ pattern: /(\[)(?!\d)\w+(?=\])/,
+ lookbehind: true
+ }
+ ],
+ "function": {
+ pattern: /(\|\s*)@?[a-z_]\w*|\b[a-z_]\w*(?=\()/i,
+ lookbehind: true
+ },
+ "attr-name": /\b[a-z_]\w*(?=\s*=)/i,
+ "boolean": /\b(?:false|no|off|on|true|yes)\b/,
+ "punctuation": /[\[\](){}.,:`]|->/,
+ "operator": [
+ /[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,
+ /\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,
+ /\b(?:and|eq|gt?e|gt|lt?e|lt|mod|neq?|not|or)\b/
+ ]
+ };
+ Prism2.languages.smarty["embedded-php"].inside.smarty.inside = Prism2.languages.smarty;
+ Prism2.languages.smarty.string[0].inside.interpolation.inside.expression.inside = Prism2.languages.smarty;
+ var string = /"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/;
+ var smartyPattern = RegExp(
+ // comments
+ /\{\*[\s\S]*?\*\}/.source + "|" + // php tags
+ /\{php\}[\s\S]*?\{\/php\}/.source + "|" + // smarty blocks
+ /\{(?:[^{}"']|<str>|\{(?:[^{}"']|<str>|\{(?:[^{}"']|<str>)*\})*\})*\}/.source.replace(/<str>/g, function() {
+ return string.source;
+ }),
+ "g"
+ );
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var smartyLiteralStart = "{literal}";
+ var smartyLiteralEnd = "{/literal}";
+ var smartyLiteralMode = false;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "smarty", smartyPattern, function(match) {
+ if (match === smartyLiteralEnd) {
+ smartyLiteralMode = false;
+ }
+ if (!smartyLiteralMode) {
+ if (match === smartyLiteralStart) {
+ smartyLiteralMode = true;
+ }
+ return true;
+ }
+ return false;
+ });
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "smarty");
+ });
+ })(Prism);
+ (function(Prism2) {
+ var keywords = /\b(?:abstype|and|andalso|as|case|datatype|do|else|end|eqtype|exception|fn|fun|functor|handle|if|in|include|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|sharing|sig|signature|struct|structure|then|type|val|where|while|with|withtype)\b/i;
+ Prism2.languages.sml = {
+ // allow one level of nesting
+ "comment": /\(\*(?:[^*(]|\*(?!\))|\((?!\*)|\(\*(?:[^*(]|\*(?!\))|\((?!\*))*\*\))*\*\)/,
+ "string": {
+ pattern: /#?"(?:[^"\\]|\\.)*"/,
+ greedy: true
+ },
+ "class-name": [
+ {
+ // This is only an approximation since the real grammar is context-free
+ //
+ // Why the main loop so complex?
+ // The main loop is approximately the same as /(?:\s*(?:[*,]|->)\s*<TERMINAL>)*/ which is, obviously, a lot
+ // simpler. The difference is that if a comma is the last iteration of the loop, then the terminal must be
+ // followed by a long identifier.
+ pattern: RegExp(
+ /((?:^|[^:]):\s*)<TERMINAL>(?:\s*(?:(?:\*|->)\s*<TERMINAL>|,\s*<TERMINAL>(?:(?=<NOT-LAST>)|(?!<NOT-LAST>)\s+<LONG-ID>)))*/.source.replace(/<NOT-LAST>/g, function() {
+ return /\s*(?:[*,]|->)/.source;
+ }).replace(/<TERMINAL>/g, function() {
+ return /(?:'[\w']*|<LONG-ID>|\((?:[^()]|\([^()]*\))*\)|\{(?:[^{}]|\{[^{}]*\})*\})(?:\s+<LONG-ID>)*/.source;
+ }).replace(/<LONG-ID>/g, function() {
+ return /(?!<KEYWORD>)[a-z\d_][\w'.]*/.source;
+ }).replace(/<KEYWORD>/g, function() {
+ return keywords.source;
+ }),
+ "i"
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: null
+ // see below
+ },
+ {
+ pattern: /((?:^|[^\w'])(?:datatype|exception|functor|signature|structure|type)\s+)[a-z_][\w'.]*/i,
+ lookbehind: true
+ }
+ ],
+ "function": {
+ pattern: /((?:^|[^\w'])fun\s+)[a-z_][\w'.]*/i,
+ lookbehind: true
+ },
+ "keyword": keywords,
+ "variable": {
+ pattern: /(^|[^\w'])'[\w']*/,
+ lookbehind: true
+ },
+ "number": /~?\b(?:\d+(?:\.\d+)?(?:e~?\d+)?|0x[\da-f]+)\b/i,
+ "word": {
+ pattern: /\b0w(?:\d+|x[\da-f]+)\b/i,
+ alias: "constant"
+ },
+ "boolean": /\b(?:false|true)\b/i,
+ "operator": /\.\.\.|:[>=:]|=>?|->|[<>]=?|[!+\-*/^#|@~]/,
+ "punctuation": /[(){}\[\].:,;]/
+ };
+ Prism2.languages.sml["class-name"][0].inside = Prism2.languages.sml;
+ Prism2.languages.smlnj = Prism2.languages.sml;
+ })(Prism);
+ Prism.languages.solidity = Prism.languages.extend("clike", {
+ "class-name": {
+ pattern: /(\b(?:contract|enum|interface|library|new|struct|using)\s+)(?!\d)[\w$]+/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\b/,
+ "operator": /=>|->|:=|=:|\*\*|\+\+|--|\|\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/
+ });
+ Prism.languages.insertBefore("solidity", "keyword", {
+ "builtin": /\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\d|3[0-2])?)\b/
+ });
+ Prism.languages.insertBefore("solidity", "number", {
+ "version": {
+ pattern: /([<>]=?|\^)\d+\.\d+\.\d+\b/,
+ lookbehind: true,
+ alias: "number"
+ }
+ });
+ Prism.languages.sol = Prism.languages.solidity;
+ (function(Prism2) {
+ var guid = {
+ // https://en.wikipedia.org/wiki/Universally_unique_identifier#Format
+ pattern: /\{[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\}/i,
+ alias: "constant",
+ inside: {
+ "punctuation": /[{}]/
+ }
+ };
+ Prism2.languages["solution-file"] = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^"\r\n]*"|'[^'\r\n]*'/,
+ greedy: true,
+ inside: {
+ "guid": guid
+ }
+ },
+ "object": {
+ // Foo
+ // Bar("abs") = 9
+ // EndBar
+ // Prop = TRUE
+ // EndFoo
+ pattern: /^([ \t]*)(?:([A-Z]\w*)\b(?=.*(?:\r\n?|\n)(?:\1[ \t].*(?:\r\n?|\n))*\1End\2(?=[ \t]*$))|End[A-Z]\w*(?=[ \t]*$))/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "keyword"
+ },
+ "property": {
+ pattern: /^([ \t]*)(?!\s)[^\r\n"#=()]*[^\s"#=()](?=\s*=)/m,
+ lookbehind: true,
+ inside: {
+ "guid": guid
+ }
+ },
+ "guid": guid,
+ "number": /\b\d+(?:\.\d+)*\b/,
+ "boolean": /\b(?:FALSE|TRUE)\b/,
+ "operator": /=/,
+ "punctuation": /[(),]/
+ };
+ Prism2.languages["sln"] = Prism2.languages["solution-file"];
+ })(Prism);
+ (function(Prism2) {
+ var stringPattern = /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;
+ var numberPattern = /\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/;
+ Prism2.languages.soy = {
+ "comment": [
+ /\/\*[\s\S]*?\*\//,
+ {
+ pattern: /(\s)\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "command-arg": {
+ pattern: /(\{+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/,
+ lookbehind: true,
+ alias: "string",
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "parameter": {
+ pattern: /(\{+\/?\s*@?param\??\s+)\.?[\w.]+/,
+ lookbehind: true,
+ alias: "variable"
+ },
+ "keyword": [
+ {
+ pattern: /(\{+\/?[^\S\r\n]*)(?:\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\??|rb|sp|switch|template|xid)/,
+ lookbehind: true
+ },
+ /\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\b/
+ ],
+ "delimiter": {
+ pattern: /^\{+\/?|\/?\}+$/,
+ alias: "punctuation"
+ },
+ "property": /\w+(?==)/,
+ "variable": {
+ pattern: /\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+\]))*/,
+ inside: {
+ "string": {
+ pattern: stringPattern,
+ greedy: true
+ },
+ "number": numberPattern,
+ "punctuation": /[\[\].?]/
+ }
+ },
+ "string": {
+ pattern: stringPattern,
+ greedy: true
+ },
+ "function": [
+ /\w+(?=\()/,
+ {
+ pattern: /(\|[^\S\r\n]*)\w+/,
+ lookbehind: true
+ }
+ ],
+ "boolean": /\b(?:false|true)\b/,
+ "number": numberPattern,
+ "operator": /\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/,
+ "punctuation": /[{}()\[\]|.,:]/
+ };
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var soyPattern = /\{\{.+?\}\}|\{.+?\}|\s\/\/.*|\/\*[\s\S]*?\*\//g;
+ var soyLitteralStart = "{literal}";
+ var soyLitteralEnd = "{/literal}";
+ var soyLitteralMode = false;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "soy", soyPattern, function(match) {
+ if (match === soyLitteralEnd) {
+ soyLitteralMode = false;
+ }
+ if (!soyLitteralMode) {
+ if (match === soyLitteralStart) {
+ soyLitteralMode = true;
+ }
+ return true;
+ }
+ return false;
+ });
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "soy");
+ });
+ })(Prism);
+ Prism.languages.turtle = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "multiline-string": {
+ pattern: /"""(?:(?:""?)?(?:[^"\\]|\\.))*"""|'''(?:(?:''?)?(?:[^'\\]|\\.))*'''/,
+ greedy: true,
+ alias: "string",
+ inside: {
+ "comment": /#.*/
+ }
+ },
+ "string": {
+ pattern: /"(?:[^\\"\r\n]|\\.)*"|'(?:[^\\'\r\n]|\\.)*'/,
+ greedy: true
+ },
+ "url": {
+ pattern: /<(?:[^\x00-\x20<>"{}|^`\\]|\\(?:u[\da-fA-F]{4}|U[\da-fA-F]{8}))*>/,
+ greedy: true,
+ inside: {
+ "punctuation": /[<>]/
+ }
+ },
+ "function": {
+ pattern: /(?:(?![-.\d\xB7])[-.\w\xB7\xC0-\uFFFD]+)?:(?:(?![-.])(?:[-.:\w\xC0-\uFFFD]|%[\da-f]{2}|\\.)+)?/i,
+ inside: {
+ "local-name": {
+ pattern: /([^:]*:)[\s\S]+/,
+ lookbehind: true
+ },
+ "prefix": {
+ pattern: /[\s\S]+/,
+ inside: {
+ "punctuation": /:/
+ }
+ }
+ }
+ },
+ "number": /[+-]?\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,
+ "punctuation": /[{}.,;()[\]]|\^\^/,
+ "boolean": /\b(?:false|true)\b/,
+ "keyword": [
+ /(?:\ba|@prefix|@base)\b|=/,
+ /\b(?:base|graph|prefix)\b/i
+ ],
+ "tag": {
+ pattern: /@[a-z]+(?:-[a-z\d]+)*/i,
+ inside: {
+ "punctuation": /@/
+ }
+ }
+ };
+ Prism.languages.trig = Prism.languages["turtle"];
+ Prism.languages.sparql = Prism.languages.extend(
+ "turtle",
+ {
+ "boolean": /\b(?:false|true)\b/i,
+ "variable": {
+ pattern: /[?$]\w+/,
+ greedy: true
+ }
+ }
+ );
+ Prism.languages.insertBefore("sparql", "punctuation", {
+ "keyword": [
+ /\b(?:A|ADD|ALL|AS|ASC|ASK|BNODE|BY|CLEAR|CONSTRUCT|COPY|CREATE|DATA|DEFAULT|DELETE|DESC|DESCRIBE|DISTINCT|DROP|EXISTS|FILTER|FROM|GROUP|HAVING|INSERT|INTO|LIMIT|LOAD|MINUS|MOVE|NAMED|NOT|NOW|OFFSET|OPTIONAL|ORDER|RAND|REDUCED|SELECT|SEPARATOR|SERVICE|SILENT|STRUUID|UNION|USING|UUID|VALUES|WHERE)\b/i,
+ /\b(?:ABS|AVG|BIND|BOUND|CEIL|COALESCE|CONCAT|CONTAINS|COUNT|DATATYPE|DAY|ENCODE_FOR_URI|FLOOR|GROUP_CONCAT|HOURS|IF|IRI|isBLANK|isIRI|isLITERAL|isNUMERIC|isURI|LANG|LANGMATCHES|LCASE|MAX|MD5|MIN|MINUTES|MONTH|REGEX|REPLACE|ROUND|sameTerm|SAMPLE|SECONDS|SHA1|SHA256|SHA384|SHA512|STR|STRAFTER|STRBEFORE|STRDT|STRENDS|STRLANG|STRLEN|STRSTARTS|SUBSTR|SUM|TIMEZONE|TZ|UCASE|URI|YEAR)\b(?=\s*\()/i,
+ /\b(?:BASE|GRAPH|PREFIX)\b/i
+ ]
+ });
+ Prism.languages.rq = Prism.languages.sparql;
+ Prism.languages["splunk-spl"] = {
+ "comment": /`comment\("(?:\\.|[^\\"])*"\)`/,
+ "string": {
+ pattern: /"(?:\\.|[^\\"])*"/,
+ greedy: true
+ },
+ // https://docs.splunk.com/Documentation/Splunk/7.3.0/SearchReference/ListOfSearchCommands
+ "keyword": /\b(?:abstract|accum|addcoltotals|addinfo|addtotals|analyzefields|anomalies|anomalousvalue|anomalydetection|append|appendcols|appendcsv|appendlookup|appendpipe|arules|associate|audit|autoregress|bin|bucket|bucketdir|chart|cluster|cofilter|collect|concurrency|contingency|convert|correlate|datamodel|dbinspect|dedup|delete|delta|diff|erex|eval|eventcount|eventstats|extract|fieldformat|fields|fieldsummary|filldown|fillnull|findtypes|folderize|foreach|format|from|gauge|gentimes|geom|geomfilter|geostats|head|highlight|history|iconify|input|inputcsv|inputlookup|iplocation|join|kmeans|kv|kvform|loadjob|localize|localop|lookup|makecontinuous|makemv|makeresults|map|mcollect|metadata|metasearch|meventcollect|mstats|multikv|multisearch|mvcombine|mvexpand|nomv|outlier|outputcsv|outputlookup|outputtext|overlap|pivot|predict|rangemap|rare|regex|relevancy|reltime|rename|replace|rest|return|reverse|rex|rtorder|run|savedsearch|script|scrub|search|searchtxn|selfjoin|sendemail|set|setfields|sichart|sirare|sistats|sitimechart|sitop|sort|spath|stats|strcat|streamstats|table|tags|tail|timechart|timewrap|top|transaction|transpose|trendline|tscollect|tstats|typeahead|typelearner|typer|union|uniq|untable|where|x11|xmlkv|xmlunescape|xpath|xyseries)\b/i,
+ "operator-word": {
+ pattern: /\b(?:and|as|by|not|or|xor)\b/i,
+ alias: "operator"
+ },
+ "function": /\b\w+(?=\s*\()/,
+ "property": /\b\w+(?=\s*=(?!=))/,
+ "date": {
+ // MM/DD/YYYY(:HH:MM:SS)?
+ pattern: /\b\d{1,2}\/\d{1,2}\/\d{1,4}(?:(?::\d{1,2}){3})?\b/,
+ alias: "number"
+ },
+ "number": /\b\d+(?:\.\d+)?\b/,
+ "boolean": /\b(?:f|false|t|true)\b/i,
+ "operator": /[<>=]=?|[-+*/%|]/,
+ "punctuation": /[()[\],]/
+ };
+ Prism.languages.sqf = Prism.languages.extend("clike", {
+ "string": {
+ pattern: /"(?:(?:"")?[^"])*"(?!")|'(?:[^'])*'/,
+ greedy: true
+ },
+ "keyword": /\b(?:breakOut|breakTo|call|case|catch|default|do|echo|else|execFSM|execVM|exitWith|for|forEach|forEachMember|forEachMemberAgent|forEachMemberTeam|from|goto|if|nil|preprocessFile|preprocessFileLineNumbers|private|scopeName|spawn|step|switch|then|throw|to|try|while|with)\b/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "function": /\b(?:abs|accTime|acos|action|actionIDs|actionKeys|actionKeysImages|actionKeysNames|actionKeysNamesArray|actionName|actionParams|activateAddons|activatedAddons|activateKey|add3DENConnection|add3DENEventHandler|add3DENLayer|addAction|addBackpack|addBackpackCargo|addBackpackCargoGlobal|addBackpackGlobal|addCamShake|addCuratorAddons|addCuratorCameraArea|addCuratorEditableObjects|addCuratorEditingArea|addCuratorPoints|addEditorObject|addEventHandler|addForce|addForceGeneratorRTD|addGoggles|addGroupIcon|addHandgunItem|addHeadgear|addItem|addItemCargo|addItemCargoGlobal|addItemPool|addItemToBackpack|addItemToUniform|addItemToVest|addLiveStats|addMagazine|addMagazineAmmoCargo|addMagazineCargo|addMagazineCargoGlobal|addMagazineGlobal|addMagazinePool|addMagazines|addMagazineTurret|addMenu|addMenuItem|addMissionEventHandler|addMPEventHandler|addMusicEventHandler|addOwnedMine|addPlayerScores|addPrimaryWeaponItem|addPublicVariableEventHandler|addRating|addResources|addScore|addScoreSide|addSecondaryWeaponItem|addSwitchableUnit|addTeamMember|addToRemainsCollector|addTorque|addUniform|addVehicle|addVest|addWaypoint|addWeapon|addWeaponCargo|addWeaponCargoGlobal|addWeaponGlobal|addWeaponItem|addWeaponPool|addWeaponTurret|admin|agent|agents|AGLToASL|aimedAtTarget|aimPos|airDensityCurveRTD|airDensityRTD|airplaneThrottle|airportSide|AISFinishHeal|alive|all3DENEntities|allAirports|allControls|allCurators|allCutLayers|allDead|allDeadMen|allDisplays|allGroups|allMapMarkers|allMines|allMissionObjects|allow3DMode|allowCrewInImmobile|allowCuratorLogicIgnoreAreas|allowDamage|allowDammage|allowFileOperations|allowFleeing|allowGetIn|allowSprint|allPlayers|allSimpleObjects|allSites|allTurrets|allUnits|allUnitsUAV|allVariables|ammo|ammoOnPylon|animate|animateBay|animateDoor|animatePylon|animateSource|animationNames|animationPhase|animationSourcePhase|animationState|append|apply|armoryPoints|arrayIntersect|asin|ASLToAGL|ASLToATL|assert|assignAsCargo|assignAsCargoIndex|assignAsCommander|assignAsDriver|assignAsGunner|assignAsTurret|assignCurator|assignedCargo|assignedCommander|assignedDriver|assignedGunner|assignedItems|assignedTarget|assignedTeam|assignedVehicle|assignedVehicleRole|assignItem|assignTeam|assignToAirport|atan|atan2|atg|ATLToASL|attachedObject|attachedObjects|attachedTo|attachObject|attachTo|attackEnabled|backpack|backpackCargo|backpackContainer|backpackItems|backpackMagazines|backpackSpaceFor|behaviour|benchmark|binocular|blufor|boundingBox|boundingBoxReal|boundingCenter|briefingName|buildingExit|buildingPos|buldozer_EnableRoadDiag|buldozer_IsEnabledRoadDiag|buldozer_LoadNewRoads|buldozer_reloadOperMap|buttonAction|buttonSetAction|cadetMode|callExtension|camCommand|camCommit|camCommitPrepared|camCommitted|camConstuctionSetParams|camCreate|camDestroy|cameraEffect|cameraEffectEnableHUD|cameraInterest|cameraOn|cameraView|campaignConfigFile|camPreload|camPreloaded|camPrepareBank|camPrepareDir|camPrepareDive|camPrepareFocus|camPrepareFov|camPrepareFovRange|camPreparePos|camPrepareRelPos|camPrepareTarget|camSetBank|camSetDir|camSetDive|camSetFocus|camSetFov|camSetFovRange|camSetPos|camSetRelPos|camSetTarget|camTarget|camUseNVG|canAdd|canAddItemToBackpack|canAddItemToUniform|canAddItemToVest|cancelSimpleTaskDestination|canFire|canMove|canSlingLoad|canStand|canSuspend|canTriggerDynamicSimulation|canUnloadInCombat|canVehicleCargo|captive|captiveNum|cbChecked|cbSetChecked|ceil|channelEnabled|cheatsEnabled|checkAIFeature|checkVisibility|civilian|className|clear3DENAttribute|clear3DENInventory|clearAllItemsFromBackpack|clearBackpackCargo|clearBackpackCargoGlobal|clearForcesRTD|clearGroupIcons|clearItemCargo|clearItemCargoGlobal|clearItemPool|clearMagazineCargo|clearMagazineCargoGlobal|clearMagazinePool|clearOverlay|clearRadio|clearVehicleInit|clearWeaponCargo|clearWeaponCargoGlobal|clearWeaponPool|clientOwner|closeDialog|closeDisplay|closeOverlay|collapseObjectTree|collect3DENHistory|collectiveRTD|combatMode|commandArtilleryFire|commandChat|commander|commandFire|commandFollow|commandFSM|commandGetOut|commandingMenu|commandMove|commandRadio|commandStop|commandSuppressiveFire|commandTarget|commandWatch|comment|commitOverlay|compile|compileFinal|completedFSM|composeText|configClasses|configFile|configHierarchy|configName|configNull|configProperties|configSourceAddonList|configSourceMod|configSourceModList|confirmSensorTarget|connectTerminalToUAV|controlNull|controlsGroupCtrl|copyFromClipboard|copyToClipboard|copyWaypoints|cos|count|countEnemy|countFriendly|countSide|countType|countUnknown|create3DENComposition|create3DENEntity|createAgent|createCenter|createDialog|createDiaryLink|createDiaryRecord|createDiarySubject|createDisplay|createGearDialog|createGroup|createGuardedPoint|createLocation|createMarker|createMarkerLocal|createMenu|createMine|createMissionDisplay|createMPCampaignDisplay|createSimpleObject|createSimpleTask|createSite|createSoundSource|createTask|createTeam|createTrigger|createUnit|createVehicle|createVehicleCrew|createVehicleLocal|crew|ctAddHeader|ctAddRow|ctClear|ctCurSel|ctData|ctFindHeaderRows|ctFindRowHeader|ctHeaderControls|ctHeaderCount|ctRemoveHeaders|ctRemoveRows|ctrlActivate|ctrlAddEventHandler|ctrlAngle|ctrlAutoScrollDelay|ctrlAutoScrollRewind|ctrlAutoScrollSpeed|ctrlChecked|ctrlClassName|ctrlCommit|ctrlCommitted|ctrlCreate|ctrlDelete|ctrlEnable|ctrlEnabled|ctrlFade|ctrlHTMLLoaded|ctrlIDC|ctrlIDD|ctrlMapAnimAdd|ctrlMapAnimClear|ctrlMapAnimCommit|ctrlMapAnimDone|ctrlMapCursor|ctrlMapMouseOver|ctrlMapScale|ctrlMapScreenToWorld|ctrlMapWorldToScreen|ctrlModel|ctrlModelDirAndUp|ctrlModelScale|ctrlParent|ctrlParentControlsGroup|ctrlPosition|ctrlRemoveAllEventHandlers|ctrlRemoveEventHandler|ctrlScale|ctrlSetActiveColor|ctrlSetAngle|ctrlSetAutoScrollDelay|ctrlSetAutoScrollRewind|ctrlSetAutoScrollSpeed|ctrlSetBackgroundColor|ctrlSetChecked|ctrlSetDisabledColor|ctrlSetEventHandler|ctrlSetFade|ctrlSetFocus|ctrlSetFont|ctrlSetFontH1|ctrlSetFontH1B|ctrlSetFontH2|ctrlSetFontH2B|ctrlSetFontH3|ctrlSetFontH3B|ctrlSetFontH4|ctrlSetFontH4B|ctrlSetFontH5|ctrlSetFontH5B|ctrlSetFontH6|ctrlSetFontH6B|ctrlSetFontHeight|ctrlSetFontHeightH1|ctrlSetFontHeightH2|ctrlSetFontHeightH3|ctrlSetFontHeightH4|ctrlSetFontHeightH5|ctrlSetFontHeightH6|ctrlSetFontHeightSecondary|ctrlSetFontP|ctrlSetFontPB|ctrlSetFontSecondary|ctrlSetForegroundColor|ctrlSetModel|ctrlSetModelDirAndUp|ctrlSetModelScale|ctrlSetPixelPrecision|ctrlSetPosition|ctrlSetScale|ctrlSetStructuredText|ctrlSetText|ctrlSetTextColor|ctrlSetTextColorSecondary|ctrlSetTextSecondary|ctrlSetTooltip|ctrlSetTooltipColorBox|ctrlSetTooltipColorShade|ctrlSetTooltipColorText|ctrlShow|ctrlShown|ctrlText|ctrlTextHeight|ctrlTextSecondary|ctrlTextWidth|ctrlType|ctrlVisible|ctRowControls|ctRowCount|ctSetCurSel|ctSetData|ctSetHeaderTemplate|ctSetRowTemplate|ctSetValue|ctValue|curatorAddons|curatorCamera|curatorCameraArea|curatorCameraAreaCeiling|curatorCoef|curatorEditableObjects|curatorEditingArea|curatorEditingAreaType|curatorMouseOver|curatorPoints|curatorRegisteredObjects|curatorSelected|curatorWaypointCost|current3DENOperation|currentChannel|currentCommand|currentMagazine|currentMagazineDetail|currentMagazineDetailTurret|currentMagazineTurret|currentMuzzle|currentNamespace|currentTask|currentTasks|currentThrowable|currentVisionMode|currentWaypoint|currentWeapon|currentWeaponMode|currentWeaponTurret|currentZeroing|cursorObject|cursorTarget|customChat|customRadio|cutFadeOut|cutObj|cutRsc|cutText|damage|date|dateToNumber|daytime|deActivateKey|debriefingText|debugFSM|debugLog|deg|delete3DENEntities|deleteAt|deleteCenter|deleteCollection|deleteEditorObject|deleteGroup|deleteGroupWhenEmpty|deleteIdentity|deleteLocation|deleteMarker|deleteMarkerLocal|deleteRange|deleteResources|deleteSite|deleteStatus|deleteTeam|deleteVehicle|deleteVehicleCrew|deleteWaypoint|detach|detectedMines|diag_activeMissionFSMs|diag_activeScripts|diag_activeSQFScripts|diag_activeSQSScripts|diag_captureFrame|diag_captureFrameToFile|diag_captureSlowFrame|diag_codePerformance|diag_drawMode|diag_dynamicSimulationEnd|diag_enable|diag_enabled|diag_fps|diag_fpsMin|diag_frameNo|diag_lightNewLoad|diag_list|diag_log|diag_logSlowFrame|diag_mergeConfigFile|diag_recordTurretLimits|diag_setLightNew|diag_tickTime|diag_toggle|dialog|diarySubjectExists|didJIP|didJIPOwner|difficulty|difficultyEnabled|difficultyEnabledRTD|difficultyOption|direction|directSay|disableAI|disableCollisionWith|disableConversation|disableDebriefingStats|disableMapIndicators|disableNVGEquipment|disableRemoteSensors|disableSerialization|disableTIEquipment|disableUAVConnectability|disableUserInput|displayAddEventHandler|displayCtrl|displayNull|displayParent|displayRemoveAllEventHandlers|displayRemoveEventHandler|displaySetEventHandler|dissolveTeam|distance|distance2D|distanceSqr|distributionRegion|do3DENAction|doArtilleryFire|doFire|doFollow|doFSM|doGetOut|doMove|doorPhase|doStop|doSuppressiveFire|doTarget|doWatch|drawArrow|drawEllipse|drawIcon|drawIcon3D|drawLine|drawLine3D|drawLink|drawLocation|drawPolygon|drawRectangle|drawTriangle|driver|drop|dynamicSimulationDistance|dynamicSimulationDistanceCoef|dynamicSimulationEnabled|dynamicSimulationSystemEnabled|east|edit3DENMissionAttributes|editObject|editorSetEventHandler|effectiveCommander|emptyPositions|enableAI|enableAIFeature|enableAimPrecision|enableAttack|enableAudioFeature|enableAutoStartUpRTD|enableAutoTrimRTD|enableCamShake|enableCaustics|enableChannel|enableCollisionWith|enableCopilot|enableDebriefingStats|enableDiagLegend|enableDynamicSimulation|enableDynamicSimulationSystem|enableEndDialog|enableEngineArtillery|enableEnvironment|enableFatigue|enableGunLights|enableInfoPanelComponent|enableIRLasers|enableMimics|enablePersonTurret|enableRadio|enableReload|enableRopeAttach|enableSatNormalOnDetail|enableSaving|enableSentences|enableSimulation|enableSimulationGlobal|enableStamina|enableStressDamage|enableTeamSwitch|enableTraffic|enableUAVConnectability|enableUAVWaypoints|enableVehicleCargo|enableVehicleSensor|enableWeaponDisassembly|endl|endLoadingScreen|endMission|engineOn|enginesIsOnRTD|enginesPowerRTD|enginesRpmRTD|enginesTorqueRTD|entities|environmentEnabled|estimatedEndServerTime|estimatedTimeLeft|evalObjectArgument|everyBackpack|everyContainer|exec|execEditorScript|exp|expectedDestination|exportJIPMessages|eyeDirection|eyePos|face|faction|fadeMusic|fadeRadio|fadeSound|fadeSpeech|failMission|fillWeaponsFromPool|find|findCover|findDisplay|findEditorObject|findEmptyPosition|findEmptyPositionReady|findIf|findNearestEnemy|finishMissionInit|finite|fire|fireAtTarget|firstBackpack|flag|flagAnimationPhase|flagOwner|flagSide|flagTexture|fleeing|floor|flyInHeight|flyInHeightASL|fog|fogForecast|fogParams|forceAddUniform|forceAtPositionRTD|forcedMap|forceEnd|forceFlagTexture|forceFollowRoad|forceGeneratorRTD|forceMap|forceRespawn|forceSpeed|forceWalk|forceWeaponFire|forceWeatherChange|forgetTarget|format|formation|formationDirection|formationLeader|formationMembers|formationPosition|formationTask|formatText|formLeader|freeLook|fromEditor|fuel|fullCrew|gearIDCAmmoCount|gearSlotAmmoCount|gearSlotData|get3DENActionState|get3DENAttribute|get3DENCamera|get3DENConnections|get3DENEntity|get3DENEntityID|get3DENGrid|get3DENIconsVisible|get3DENLayerEntities|get3DENLinesVisible|get3DENMissionAttribute|get3DENMouseOver|get3DENSelected|getAimingCoef|getAllEnvSoundControllers|getAllHitPointsDamage|getAllOwnedMines|getAllSoundControllers|getAmmoCargo|getAnimAimPrecision|getAnimSpeedCoef|getArray|getArtilleryAmmo|getArtilleryComputerSettings|getArtilleryETA|getAssignedCuratorLogic|getAssignedCuratorUnit|getBackpackCargo|getBleedingRemaining|getBurningValue|getCameraViewDirection|getCargoIndex|getCenterOfMass|getClientState|getClientStateNumber|getCompatiblePylonMagazines|getConnectedUAV|getContainerMaxLoad|getCursorObjectParams|getCustomAimCoef|getDammage|getDescription|getDir|getDirVisual|getDLCAssetsUsage|getDLCAssetsUsageByName|getDLCs|getDLCUsageTime|getEditorCamera|getEditorMode|getEditorObjectScope|getElevationOffset|getEngineTargetRpmRTD|getEnvSoundController|getFatigue|getFieldManualStartPage|getForcedFlagTexture|getFriend|getFSMVariable|getFuelCargo|getGroupIcon|getGroupIconParams|getGroupIcons|getHideFrom|getHit|getHitIndex|getHitPointDamage|getItemCargo|getMagazineCargo|getMarkerColor|getMarkerPos|getMarkerSize|getMarkerType|getMass|getMissionConfig|getMissionConfigValue|getMissionDLCs|getMissionLayerEntities|getMissionLayers|getModelInfo|getMousePosition|getMusicPlayedTime|getNumber|getObjectArgument|getObjectChildren|getObjectDLC|getObjectMaterials|getObjectProxy|getObjectTextures|getObjectType|getObjectViewDistance|getOxygenRemaining|getPersonUsedDLCs|getPilotCameraDirection|getPilotCameraPosition|getPilotCameraRotation|getPilotCameraTarget|getPlateNumber|getPlayerChannel|getPlayerScores|getPlayerUID|getPlayerUIDOld|getPos|getPosASL|getPosASLVisual|getPosASLW|getPosATL|getPosATLVisual|getPosVisual|getPosWorld|getPylonMagazines|getRelDir|getRelPos|getRemoteSensorsDisabled|getRepairCargo|getResolution|getRotorBrakeRTD|getShadowDistance|getShotParents|getSlingLoad|getSoundController|getSoundControllerResult|getSpeed|getStamina|getStatValue|getSuppression|getTerrainGrid|getTerrainHeightASL|getText|getTotalDLCUsageTime|getTrimOffsetRTD|getUnitLoadout|getUnitTrait|getUserMFDText|getUserMFDValue|getVariable|getVehicleCargo|getWeaponCargo|getWeaponSway|getWingsOrientationRTD|getWingsPositionRTD|getWPPos|glanceAt|globalChat|globalRadio|goggles|group|groupChat|groupFromNetId|groupIconSelectable|groupIconsVisible|groupId|groupOwner|groupRadio|groupSelectedUnits|groupSelectUnit|grpNull|gunner|gusts|halt|handgunItems|handgunMagazine|handgunWeapon|handsHit|hasInterface|hasPilotCamera|hasWeapon|hcAllGroups|hcGroupParams|hcLeader|hcRemoveAllGroups|hcRemoveGroup|hcSelected|hcSelectGroup|hcSetGroup|hcShowBar|hcShownBar|headgear|hideBody|hideObject|hideObjectGlobal|hideSelection|hint|hintC|hintCadet|hintSilent|hmd|hostMission|htmlLoad|HUDMovementLevels|humidity|image|importAllGroups|importance|in|inArea|inAreaArray|incapacitatedState|independent|inflame|inflamed|infoPanel|infoPanelComponentEnabled|infoPanelComponents|infoPanels|inGameUISetEventHandler|inheritsFrom|initAmbientLife|inPolygon|inputAction|inRangeOfArtillery|insertEditorObject|intersect|is3DEN|is3DENMultiplayer|isAbleToBreathe|isAgent|isAimPrecisionEnabled|isArray|isAutoHoverOn|isAutonomous|isAutoStartUpEnabledRTD|isAutotest|isAutoTrimOnRTD|isBleeding|isBurning|isClass|isCollisionLightOn|isCopilotEnabled|isDamageAllowed|isDedicated|isDLCAvailable|isEngineOn|isEqualTo|isEqualType|isEqualTypeAll|isEqualTypeAny|isEqualTypeArray|isEqualTypeParams|isFilePatchingEnabled|isFlashlightOn|isFlatEmpty|isForcedWalk|isFormationLeader|isGroupDeletedWhenEmpty|isHidden|isInRemainsCollector|isInstructorFigureEnabled|isIRLaserOn|isKeyActive|isKindOf|isLaserOn|isLightOn|isLocalized|isManualFire|isMarkedForCollection|isMultiplayer|isMultiplayerSolo|isNil|isNull|isNumber|isObjectHidden|isObjectRTD|isOnRoad|isPipEnabled|isPlayer|isRealTime|isRemoteExecuted|isRemoteExecutedJIP|isServer|isShowing3DIcons|isSimpleObject|isSprintAllowed|isStaminaEnabled|isSteamMission|isStreamFriendlyUIEnabled|isStressDamageEnabled|isText|isTouchingGround|isTurnedOut|isTutHintsEnabled|isUAVConnectable|isUAVConnected|isUIContext|isUniformAllowed|isVehicleCargo|isVehicleRadarOn|isVehicleSensorEnabled|isWalking|isWeaponDeployed|isWeaponRested|itemCargo|items|itemsWithMagazines|join|joinAs|joinAsSilent|joinSilent|joinString|kbAddDatabase|kbAddDatabaseTargets|kbAddTopic|kbHasTopic|kbReact|kbRemoveTopic|kbTell|kbWasSaid|keyImage|keyName|knowsAbout|land|landAt|landResult|language|laserTarget|lbAdd|lbClear|lbColor|lbColorRight|lbCurSel|lbData|lbDelete|lbIsSelected|lbPicture|lbPictureRight|lbSelection|lbSetColor|lbSetColorRight|lbSetCurSel|lbSetData|lbSetPicture|lbSetPictureColor|lbSetPictureColorDisabled|lbSetPictureColorSelected|lbSetPictureRight|lbSetPictureRightColor|lbSetPictureRightColorDisabled|lbSetPictureRightColorSelected|lbSetSelectColor|lbSetSelectColorRight|lbSetSelected|lbSetText|lbSetTextRight|lbSetTooltip|lbSetValue|lbSize|lbSort|lbSortByValue|lbText|lbTextRight|lbValue|leader|leaderboardDeInit|leaderboardGetRows|leaderboardInit|leaderboardRequestRowsFriends|leaderboardRequestRowsGlobal|leaderboardRequestRowsGlobalAroundUser|leaderboardsRequestUploadScore|leaderboardsRequestUploadScoreKeepBest|leaderboardState|leaveVehicle|libraryCredits|libraryDisclaimers|lifeState|lightAttachObject|lightDetachObject|lightIsOn|lightnings|limitSpeed|linearConversion|lineBreak|lineIntersects|lineIntersectsObjs|lineIntersectsSurfaces|lineIntersectsWith|linkItem|list|listObjects|listRemoteTargets|listVehicleSensors|ln|lnbAddArray|lnbAddColumn|lnbAddRow|lnbClear|lnbColor|lnbColorRight|lnbCurSelRow|lnbData|lnbDeleteColumn|lnbDeleteRow|lnbGetColumnsPosition|lnbPicture|lnbPictureRight|lnbSetColor|lnbSetColorRight|lnbSetColumnsPos|lnbSetCurSelRow|lnbSetData|lnbSetPicture|lnbSetPictureColor|lnbSetPictureColorRight|lnbSetPictureColorSelected|lnbSetPictureColorSelectedRight|lnbSetPictureRight|lnbSetText|lnbSetTextRight|lnbSetValue|lnbSize|lnbSort|lnbSortByValue|lnbText|lnbTextRight|lnbValue|load|loadAbs|loadBackpack|loadFile|loadGame|loadIdentity|loadMagazine|loadOverlay|loadStatus|loadUniform|loadVest|local|localize|locationNull|locationPosition|lock|lockCameraTo|lockCargo|lockDriver|locked|lockedCargo|lockedDriver|lockedTurret|lockIdentity|lockTurret|lockWP|log|logEntities|logNetwork|logNetworkTerminate|lookAt|lookAtPos|magazineCargo|magazines|magazinesAllTurrets|magazinesAmmo|magazinesAmmoCargo|magazinesAmmoFull|magazinesDetail|magazinesDetailBackpack|magazinesDetailUniform|magazinesDetailVest|magazinesTurret|magazineTurretAmmo|mapAnimAdd|mapAnimClear|mapAnimCommit|mapAnimDone|mapCenterOnCamera|mapGridPosition|markAsFinishedOnSteam|markerAlpha|markerBrush|markerColor|markerDir|markerPos|markerShape|markerSize|markerText|markerType|max|members|menuAction|menuAdd|menuChecked|menuClear|menuCollapse|menuData|menuDelete|menuEnable|menuEnabled|menuExpand|menuHover|menuPicture|menuSetAction|menuSetCheck|menuSetData|menuSetPicture|menuSetValue|menuShortcut|menuShortcutText|menuSize|menuSort|menuText|menuURL|menuValue|min|mineActive|mineDetectedBy|missionConfigFile|missionDifficulty|missionName|missionNamespace|missionStart|missionVersion|modelToWorld|modelToWorldVisual|modelToWorldVisualWorld|modelToWorldWorld|modParams|moonIntensity|moonPhase|morale|move|move3DENCamera|moveInAny|moveInCargo|moveInCommander|moveInDriver|moveInGunner|moveInTurret|moveObjectToEnd|moveOut|moveTime|moveTo|moveToCompleted|moveToFailed|musicVolume|name|nameSound|nearEntities|nearestBuilding|nearestLocation|nearestLocations|nearestLocationWithDubbing|nearestObject|nearestObjects|nearestTerrainObjects|nearObjects|nearObjectsReady|nearRoads|nearSupplies|nearTargets|needReload|netId|netObjNull|newOverlay|nextMenuItemIndex|nextWeatherChange|nMenuItems|numberOfEnginesRTD|numberToDate|objectCurators|objectFromNetId|objectParent|objNull|objStatus|onBriefingGear|onBriefingGroup|onBriefingNotes|onBriefingPlan|onBriefingTeamSwitch|onCommandModeChanged|onDoubleClick|onEachFrame|onGroupIconClick|onGroupIconOverEnter|onGroupIconOverLeave|onHCGroupSelectionChanged|onMapSingleClick|onPlayerConnected|onPlayerDisconnected|onPreloadFinished|onPreloadStarted|onShowNewObject|onTeamSwitch|openCuratorInterface|openDLCPage|openDSInterface|openMap|openSteamApp|openYoutubeVideo|opfor|orderGetIn|overcast|overcastForecast|owner|param|params|parseNumber|parseSimpleArray|parseText|parsingNamespace|particlesQuality|pi|pickWeaponPool|pitch|pixelGrid|pixelGridBase|pixelGridNoUIScale|pixelH|pixelW|playableSlotsNumber|playableUnits|playAction|playActionNow|player|playerRespawnTime|playerSide|playersNumber|playGesture|playMission|playMove|playMoveNow|playMusic|playScriptedMission|playSound|playSound3D|position|positionCameraToWorld|posScreenToWorld|posWorldToScreen|ppEffectAdjust|ppEffectCommit|ppEffectCommitted|ppEffectCreate|ppEffectDestroy|ppEffectEnable|ppEffectEnabled|ppEffectForceInNVG|precision|preloadCamera|preloadObject|preloadSound|preloadTitleObj|preloadTitleRsc|primaryWeapon|primaryWeaponItems|primaryWeaponMagazine|priority|processDiaryLink|processInitCommands|productVersion|profileName|profileNamespace|profileNameSteam|progressLoadingScreen|progressPosition|progressSetPosition|publicVariable|publicVariableClient|publicVariableServer|pushBack|pushBackUnique|putWeaponPool|queryItemsPool|queryMagazinePool|queryWeaponPool|rad|radioChannelAdd|radioChannelCreate|radioChannelRemove|radioChannelSetCallSign|radioChannelSetLabel|radioVolume|rain|rainbow|random|rank|rankId|rating|rectangular|registeredTasks|registerTask|reload|reloadEnabled|remoteControl|remoteExec|remoteExecCall|remoteExecutedOwner|remove3DENConnection|remove3DENEventHandler|remove3DENLayer|removeAction|removeAll3DENEventHandlers|removeAllActions|removeAllAssignedItems|removeAllContainers|removeAllCuratorAddons|removeAllCuratorCameraAreas|removeAllCuratorEditingAreas|removeAllEventHandlers|removeAllHandgunItems|removeAllItems|removeAllItemsWithMagazines|removeAllMissionEventHandlers|removeAllMPEventHandlers|removeAllMusicEventHandlers|removeAllOwnedMines|removeAllPrimaryWeaponItems|removeAllWeapons|removeBackpack|removeBackpackGlobal|removeCuratorAddons|removeCuratorCameraArea|removeCuratorEditableObjects|removeCuratorEditingArea|removeDrawIcon|removeDrawLinks|removeEventHandler|removeFromRemainsCollector|removeGoggles|removeGroupIcon|removeHandgunItem|removeHeadgear|removeItem|removeItemFromBackpack|removeItemFromUniform|removeItemFromVest|removeItems|removeMagazine|removeMagazineGlobal|removeMagazines|removeMagazinesTurret|removeMagazineTurret|removeMenuItem|removeMissionEventHandler|removeMPEventHandler|removeMusicEventHandler|removeOwnedMine|removePrimaryWeaponItem|removeSecondaryWeaponItem|removeSimpleTask|removeSwitchableUnit|removeTeamMember|removeUniform|removeVest|removeWeapon|removeWeaponAttachmentCargo|removeWeaponCargo|removeWeaponGlobal|removeWeaponTurret|reportRemoteTarget|requiredVersion|resetCamShake|resetSubgroupDirection|resistance|resize|resources|respawnVehicle|restartEditorCamera|reveal|revealMine|reverse|reversedMouseY|roadAt|roadsConnectedTo|roleDescription|ropeAttachedObjects|ropeAttachedTo|ropeAttachEnabled|ropeAttachTo|ropeCreate|ropeCut|ropeDestroy|ropeDetach|ropeEndPosition|ropeLength|ropes|ropeUnwind|ropeUnwound|rotorsForcesRTD|rotorsRpmRTD|round|runInitScript|safeZoneH|safeZoneW|safeZoneWAbs|safeZoneX|safeZoneXAbs|safeZoneY|save3DENInventory|saveGame|saveIdentity|saveJoysticks|saveOverlay|saveProfileNamespace|saveStatus|saveVar|savingEnabled|say|say2D|say3D|score|scoreSide|screenshot|screenToWorld|scriptDone|scriptName|scriptNull|scudState|secondaryWeapon|secondaryWeaponItems|secondaryWeaponMagazine|select|selectBestPlaces|selectDiarySubject|selectedEditorObjects|selectEditorObject|selectionNames|selectionPosition|selectLeader|selectMax|selectMin|selectNoPlayer|selectPlayer|selectRandom|selectRandomWeighted|selectWeapon|selectWeaponTurret|sendAUMessage|sendSimpleCommand|sendTask|sendTaskResult|sendUDPMessage|serverCommand|serverCommandAvailable|serverCommandExecutable|serverName|serverTime|set|set3DENAttribute|set3DENAttributes|set3DENGrid|set3DENIconsVisible|set3DENLayer|set3DENLinesVisible|set3DENLogicType|set3DENMissionAttribute|set3DENMissionAttributes|set3DENModelsVisible|set3DENObjectType|set3DENSelected|setAccTime|setActualCollectiveRTD|setAirplaneThrottle|setAirportSide|setAmmo|setAmmoCargo|setAmmoOnPylon|setAnimSpeedCoef|setAperture|setApertureNew|setArmoryPoints|setAttributes|setAutonomous|setBehaviour|setBleedingRemaining|setBrakesRTD|setCameraInterest|setCamShakeDefParams|setCamShakeParams|setCamUseTI|setCaptive|setCenterOfMass|setCollisionLight|setCombatMode|setCompassOscillation|setConvoySeparation|setCuratorCameraAreaCeiling|setCuratorCoef|setCuratorEditingAreaType|setCuratorWaypointCost|setCurrentChannel|setCurrentTask|setCurrentWaypoint|setCustomAimCoef|setCustomWeightRTD|setDamage|setDammage|setDate|setDebriefingText|setDefaultCamera|setDestination|setDetailMapBlendPars|setDir|setDirection|setDrawIcon|setDriveOnPath|setDropInterval|setDynamicSimulationDistance|setDynamicSimulationDistanceCoef|setEditorMode|setEditorObjectScope|setEffectCondition|setEngineRpmRTD|setFace|setFaceAnimation|setFatigue|setFeatureType|setFlagAnimationPhase|setFlagOwner|setFlagSide|setFlagTexture|setFog|setForceGeneratorRTD|setFormation|setFormationTask|setFormDir|setFriend|setFromEditor|setFSMVariable|setFuel|setFuelCargo|setGroupIcon|setGroupIconParams|setGroupIconsSelectable|setGroupIconsVisible|setGroupId|setGroupIdGlobal|setGroupOwner|setGusts|setHideBehind|setHit|setHitIndex|setHitPointDamage|setHorizonParallaxCoef|setHUDMovementLevels|setIdentity|setImportance|setInfoPanel|setLeader|setLightAmbient|setLightAttenuation|setLightBrightness|setLightColor|setLightDayLight|setLightFlareMaxDistance|setLightFlareSize|setLightIntensity|setLightnings|setLightUseFlare|setLocalWindParams|setMagazineTurretAmmo|setMarkerAlpha|setMarkerAlphaLocal|setMarkerBrush|setMarkerBrushLocal|setMarkerColor|setMarkerColorLocal|setMarkerDir|setMarkerDirLocal|setMarkerPos|setMarkerPosLocal|setMarkerShape|setMarkerShapeLocal|setMarkerSize|setMarkerSizeLocal|setMarkerText|setMarkerTextLocal|setMarkerType|setMarkerTypeLocal|setMass|setMimic|setMousePosition|setMusicEffect|setMusicEventHandler|setName|setNameSound|setObjectArguments|setObjectMaterial|setObjectMaterialGlobal|setObjectProxy|setObjectTexture|setObjectTextureGlobal|setObjectViewDistance|setOvercast|setOwner|setOxygenRemaining|setParticleCircle|setParticleClass|setParticleFire|setParticleParams|setParticleRandom|setPilotCameraDirection|setPilotCameraRotation|setPilotCameraTarget|setPilotLight|setPiPEffect|setPitch|setPlateNumber|setPlayable|setPlayerRespawnTime|setPos|setPosASL|setPosASL2|setPosASLW|setPosATL|setPosition|setPosWorld|setPylonLoadOut|setPylonsPriority|setRadioMsg|setRain|setRainbow|setRandomLip|setRank|setRectangular|setRepairCargo|setRotorBrakeRTD|setShadowDistance|setShotParents|setSide|setSimpleTaskAlwaysVisible|setSimpleTaskCustomData|setSimpleTaskDescription|setSimpleTaskDestination|setSimpleTaskTarget|setSimpleTaskType|setSimulWeatherLayers|setSize|setSkill|setSlingLoad|setSoundEffect|setSpeaker|setSpeech|setSpeedMode|setStamina|setStaminaScheme|setStatValue|setSuppression|setSystemOfUnits|setTargetAge|setTaskMarkerOffset|setTaskResult|setTaskState|setTerrainGrid|setText|setTimeMultiplier|setTitleEffect|setToneMapping|setToneMappingParams|setTrafficDensity|setTrafficDistance|setTrafficGap|setTrafficSpeed|setTriggerActivation|setTriggerArea|setTriggerStatements|setTriggerText|setTriggerTimeout|setTriggerType|setType|setUnconscious|setUnitAbility|setUnitLoadout|setUnitPos|setUnitPosWeak|setUnitRank|setUnitRecoilCoefficient|setUnitTrait|setUnloadInCombat|setUserActionText|setUserMFDText|setUserMFDValue|setVariable|setVectorDir|setVectorDirAndUp|setVectorUp|setVehicleAmmo|setVehicleAmmoDef|setVehicleArmor|setVehicleCargo|setVehicleId|setVehicleInit|setVehicleLock|setVehiclePosition|setVehicleRadar|setVehicleReceiveRemoteTargets|setVehicleReportOwnPosition|setVehicleReportRemoteTargets|setVehicleTIPars|setVehicleVarName|setVelocity|setVelocityModelSpace|setVelocityTransformation|setViewDistance|setVisibleIfTreeCollapsed|setWantedRpmRTD|setWaves|setWaypointBehaviour|setWaypointCombatMode|setWaypointCompletionRadius|setWaypointDescription|setWaypointForceBehaviour|setWaypointFormation|setWaypointHousePosition|setWaypointLoiterRadius|setWaypointLoiterType|setWaypointName|setWaypointPosition|setWaypointScript|setWaypointSpeed|setWaypointStatements|setWaypointTimeout|setWaypointType|setWaypointVisible|setWeaponReloadingTime|setWind|setWindDir|setWindForce|setWindStr|setWingForceScaleRTD|setWPPos|show3DIcons|showChat|showCinemaBorder|showCommandingMenu|showCompass|showCuratorCompass|showGPS|showHUD|showLegend|showMap|shownArtilleryComputer|shownChat|shownCompass|shownCuratorCompass|showNewEditorObject|shownGPS|shownHUD|shownMap|shownPad|shownRadio|shownScoretable|shownUAVFeed|shownWarrant|shownWatch|showPad|showRadio|showScoretable|showSubtitles|showUAVFeed|showWarrant|showWatch|showWaypoint|showWaypoints|side|sideAmbientLife|sideChat|sideEmpty|sideEnemy|sideFriendly|sideLogic|sideRadio|sideUnknown|simpleTasks|simulationEnabled|simulCloudDensity|simulCloudOcclusion|simulInClouds|simulWeatherSync|sin|size|sizeOf|skill|skillFinal|skipTime|sleep|sliderPosition|sliderRange|sliderSetPosition|sliderSetRange|sliderSetSpeed|sliderSpeed|slingLoadAssistantShown|soldierMagazines|someAmmo|sort|soundVolume|speaker|speed|speedMode|splitString|sqrt|squadParams|stance|startLoadingScreen|stop|stopEngineRTD|stopped|str|sunOrMoon|supportInfo|suppressFor|surfaceIsWater|surfaceNormal|surfaceType|swimInDepth|switchableUnits|switchAction|switchCamera|switchGesture|switchLight|switchMove|synchronizedObjects|synchronizedTriggers|synchronizedWaypoints|synchronizeObjectsAdd|synchronizeObjectsRemove|synchronizeTrigger|synchronizeWaypoint|systemChat|systemOfUnits|tan|targetKnowledge|targets|targetsAggregate|targetsQuery|taskAlwaysVisible|taskChildren|taskCompleted|taskCustomData|taskDescription|taskDestination|taskHint|taskMarkerOffset|taskNull|taskParent|taskResult|taskState|taskType|teamMember|teamMemberNull|teamName|teams|teamSwitch|teamSwitchEnabled|teamType|terminate|terrainIntersect|terrainIntersectASL|terrainIntersectAtASL|text|textLog|textLogFormat|tg|time|timeMultiplier|titleCut|titleFadeOut|titleObj|titleRsc|titleText|toArray|toFixed|toLower|toString|toUpper|triggerActivated|triggerActivation|triggerArea|triggerAttachedVehicle|triggerAttachObject|triggerAttachVehicle|triggerDynamicSimulation|triggerStatements|triggerText|triggerTimeout|triggerTimeoutCurrent|triggerType|turretLocal|turretOwner|turretUnit|tvAdd|tvClear|tvCollapse|tvCollapseAll|tvCount|tvCurSel|tvData|tvDelete|tvExpand|tvExpandAll|tvPicture|tvPictureRight|tvSetColor|tvSetCurSel|tvSetData|tvSetPicture|tvSetPictureColor|tvSetPictureColorDisabled|tvSetPictureColorSelected|tvSetPictureRight|tvSetPictureRightColor|tvSetPictureRightColorDisabled|tvSetPictureRightColorSelected|tvSetSelectColor|tvSetText|tvSetTooltip|tvSetValue|tvSort|tvSortByValue|tvText|tvTooltip|tvValue|type|typeName|typeOf|UAVControl|uiNamespace|uiSleep|unassignCurator|unassignItem|unassignTeam|unassignVehicle|underwater|uniform|uniformContainer|uniformItems|uniformMagazines|unitAddons|unitAimPosition|unitAimPositionVisual|unitBackpack|unitIsUAV|unitPos|unitReady|unitRecoilCoefficient|units|unitsBelowHeight|unlinkItem|unlockAchievement|unregisterTask|updateDrawIcon|updateMenuItem|updateObjectTree|useAIOperMapObstructionTest|useAISteeringComponent|useAudioTimeForMoves|userInputDisabled|vectorAdd|vectorCos|vectorCrossProduct|vectorDiff|vectorDir|vectorDirVisual|vectorDistance|vectorDistanceSqr|vectorDotProduct|vectorFromTo|vectorMagnitude|vectorMagnitudeSqr|vectorModelToWorld|vectorModelToWorldVisual|vectorMultiply|vectorNormalized|vectorUp|vectorUpVisual|vectorWorldToModel|vectorWorldToModelVisual|vehicle|vehicleCargoEnabled|vehicleChat|vehicleRadio|vehicleReceiveRemoteTargets|vehicleReportOwnPosition|vehicleReportRemoteTargets|vehicles|vehicleVarName|velocity|velocityModelSpace|verifySignature|vest|vestContainer|vestItems|vestMagazines|viewDistance|visibleCompass|visibleGPS|visibleMap|visiblePosition|visiblePositionASL|visibleScoretable|visibleWatch|waitUntil|waves|waypointAttachedObject|waypointAttachedVehicle|waypointAttachObject|waypointAttachVehicle|waypointBehaviour|waypointCombatMode|waypointCompletionRadius|waypointDescription|waypointForceBehaviour|waypointFormation|waypointHousePosition|waypointLoiterRadius|waypointLoiterType|waypointName|waypointPosition|waypoints|waypointScript|waypointsEnabledUAV|waypointShow|waypointSpeed|waypointStatements|waypointTimeout|waypointTimeoutCurrent|waypointType|waypointVisible|weaponAccessories|weaponAccessoriesCargo|weaponCargo|weaponDirection|weaponInertia|weaponLowered|weapons|weaponsItems|weaponsItemsCargo|weaponState|weaponsTurret|weightRTD|west|WFSideText|wind|windDir|windRTD|windStr|wingsForcesRTD|worldName|worldSize|worldToModel|worldToModelVisual|worldToScreen)\b/i,
+ "number": /(?:\$|\b0x)[\da-f]+\b|(?:\B\.\d+|\b\d+(?:\.\d+)?)(?:e[+-]?\d+)?\b/i,
+ "operator": /##|>>|&&|\|\||[!=<>]=?|[-+*/%#^]|\b(?:and|mod|not|or)\b/i,
+ "magic-variable": {
+ pattern: /\b(?:this|thisList|thisTrigger|_exception|_fnc_scriptName|_fnc_scriptNameParent|_forEachIndex|_this|_thisEventHandler|_thisFSM|_thisScript|_x)\b/i,
+ alias: "keyword"
+ },
+ "constant": /\bDIK(?:_[a-z\d]+)+\b/i
+ });
+ Prism.languages.insertBefore("sqf", "string", {
+ "macro": {
+ pattern: /(^[ \t]*)#[a-z](?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,
+ lookbehind: true,
+ greedy: true,
+ alias: "property",
+ inside: {
+ "directive": {
+ pattern: /#[a-z]+\b/i,
+ alias: "keyword"
+ },
+ "comment": Prism.languages.sqf.comment
+ }
+ }
+ });
+ delete Prism.languages.sqf["class-name"];
+ Prism.languages.squirrel = Prism.languages.extend("clike", {
+ "comment": [
+ Prism.languages.clike["comment"][0],
+ {
+ pattern: /(^|[^\\:])(?:\/\/|#).*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /(^|[^\\"'@])(?:@"(?:[^"]|"")*"(?!")|"(?:[^\\\r\n"]|\\.)*")/,
+ lookbehind: true,
+ greedy: true
+ },
+ "class-name": {
+ pattern: /(\b(?:class|enum|extends|instanceof)\s+)\w+(?:\.\w+)*/,
+ lookbehind: true,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "keyword": /\b(?:__FILE__|__LINE__|base|break|case|catch|class|clone|const|constructor|continue|default|delete|else|enum|extends|for|foreach|function|if|in|instanceof|local|null|resume|return|static|switch|this|throw|try|typeof|while|yield)\b/,
+ "number": /\b(?:0x[0-9a-fA-F]+|\d+(?:\.(?:\d+|[eE][+-]?\d+))?)\b/,
+ "operator": /\+\+|--|<=>|<[-<]|>>>?|&&?|\|\|?|[-+*/%!=<>]=?|[~^]|::?/,
+ "punctuation": /[(){}\[\],;.]/
+ });
+ Prism.languages.insertBefore("squirrel", "string", {
+ "char": {
+ pattern: /(^|[^\\"'])'(?:[^\\']|\\(?:[xuU][0-9a-fA-F]{0,8}|[\s\S]))'/,
+ lookbehind: true,
+ greedy: true
+ }
+ });
+ Prism.languages.insertBefore("squirrel", "operator", {
+ "attribute-punctuation": {
+ pattern: /<\/|\/>/,
+ alias: "important"
+ },
+ "lambda": {
+ pattern: /@(?=\()/,
+ alias: "operator"
+ }
+ });
+ (function(Prism2) {
+ var higherOrderFunctions = /\b(?:algebra_solver|algebra_solver_newton|integrate_1d|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|map_rect|ode_(?:adams|bdf|ckrk|rk45)(?:_tol)?|ode_adjoint_tol_ctl|reduce_sum|reduce_sum_static)\b/;
+ Prism2.languages.stan = {
+ "comment": /\/\/.*|\/\*[\s\S]*?\*\/|#(?!include).*/,
+ "string": {
+ // String literals can contain spaces and any printable ASCII characters except for " and \
+ // https://mc-stan.org/docs/2_24/reference-manual/print-statements-section.html#string-literals
+ pattern: /"[\x20\x21\x23-\x5B\x5D-\x7E]*"/,
+ greedy: true
+ },
+ "directive": {
+ pattern: /^([ \t]*)#include\b.*/m,
+ lookbehind: true,
+ alias: "property"
+ },
+ "function-arg": {
+ pattern: RegExp(
+ "(" + higherOrderFunctions.source + /\s*\(\s*/.source + ")" + /[a-zA-Z]\w*/.source
+ ),
+ lookbehind: true,
+ alias: "function"
+ },
+ "constraint": {
+ pattern: /(\b(?:int|matrix|real|row_vector|vector)\s*)<[^<>]*>/,
+ lookbehind: true,
+ inside: {
+ "expression": {
+ pattern: /(=\s*)\S(?:\S|\s+(?!\s))*?(?=\s*(?:>$|,\s*\w+\s*=))/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "property": /\b[a-z]\w*(?=\s*=)/i,
+ "operator": /=/,
+ "punctuation": /^<|>$|,/
+ }
+ },
+ "keyword": [
+ {
+ pattern: /\bdata(?=\s*\{)|\b(?:functions|generated|model|parameters|quantities|transformed)\b/,
+ alias: "program-block"
+ },
+ /\b(?:array|break|cholesky_factor_corr|cholesky_factor_cov|complex|continue|corr_matrix|cov_matrix|data|else|for|if|in|increment_log_prob|int|matrix|ordered|positive_ordered|print|real|reject|return|row_vector|simplex|target|unit_vector|vector|void|while)\b/,
+ // these are functions that are known to take another function as their first argument.
+ higherOrderFunctions
+ ],
+ "function": /\b[a-z]\w*(?=\s*\()/i,
+ "number": /(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:E[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,
+ "boolean": /\b(?:false|true)\b/,
+ "operator": /<-|\.[*/]=?|\|\|?|&&|[!=<>+\-*/]=?|['^%~?:]/,
+ "punctuation": /[()\[\]{},;]/
+ };
+ Prism2.languages.stan.constraint.inside.expression.inside = Prism2.languages.stan;
+ })(Prism);
+ Prism.languages.stata = {
+ "comment": [
+ {
+ pattern: /(^[ \t]*)\*.*/m,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|\s)\/\/.*|\/\*[\s\S]*?\*\//,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string-literal": {
+ pattern: /"[^"\r\n]*"|[‘`']".*?"[’`']/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /\$\{[^{}]*\}|[‘`']\w[^’`'\r\n]*[’`']/,
+ inside: {
+ "punctuation": /^\$\{|\}$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: null
+ // see below
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ },
+ "mata": {
+ pattern: /(^[ \t]*mata[ \t]*:)[\s\S]+?(?=^end\b)/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "language-mata",
+ inside: Prism.languages.mata
+ },
+ "java": {
+ pattern: /(^[ \t]*java[ \t]*:)[\s\S]+?(?=^end\b)/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "language-java",
+ inside: Prism.languages.java
+ },
+ "python": {
+ pattern: /(^[ \t]*python[ \t]*:)[\s\S]+?(?=^end\b)/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "language-python",
+ inside: Prism.languages.python
+ },
+ "command": {
+ pattern: /(^[ \t]*(?:\.[ \t]+)?(?:(?:bayes|bootstrap|by|bysort|capture|collect|fmm|fp|frame|jackknife|mfp|mi|nestreg|noisily|permute|quietly|rolling|simulate|statsby|stepwise|svy|version|xi)\b[^:\r\n]*:[ \t]*|(?:capture|noisily|quietly|version)[ \t]+)?)[a-zA-Z]\w*/m,
+ lookbehind: true,
+ greedy: true,
+ alias: "keyword"
+ },
+ "variable": /\$\w+|[‘`']\w[^’`'\r\n]*[’`']/,
+ "keyword": /\b(?:bayes|bootstrap|by|bysort|capture|clear|collect|fmm|fp|frame|if|in|jackknife|mi[ \t]+estimate|mfp|nestreg|noisily|of|permute|quietly|rolling|simulate|sort|statsby|stepwise|svy|varlist|version|xi)\b/,
+ "boolean": /\b(?:off|on)\b/,
+ "number": /\b\d+(?:\.\d+)?\b|\B\.\d+/,
+ "function": /\b[a-z_]\w*(?=\()/i,
+ "operator": /\+\+|--|##?|[<>!=~]=?|[+\-*^&|/]/,
+ "punctuation": /[(){}[\],:]/
+ };
+ Prism.languages.stata["string-literal"].inside.interpolation.inside.expression.inside = Prism.languages.stata;
+ Prism.languages.iecst = {
+ "comment": [
+ {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\(\*[\s\S]*?(?:\*\)|$)|\{[\s\S]*?(?:\}|$))/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "keyword": [
+ /\b(?:END_)?(?:PROGRAM|CONFIGURATION|INTERFACE|FUNCTION_BLOCK|FUNCTION|ACTION|TRANSITION|TYPE|STRUCT|(?:INITIAL_)?STEP|NAMESPACE|LIBRARY|CHANNEL|FOLDER|RESOURCE|VAR_(?:ACCESS|CONFIG|EXTERNAL|GLOBAL|INPUT|IN_OUT|OUTPUT|TEMP)|VAR|METHOD|PROPERTY)\b/i,
+ /\b(?:AT|BY|(?:END_)?(?:CASE|FOR|IF|REPEAT|WHILE)|CONSTANT|CONTINUE|DO|ELSE|ELSIF|EXIT|EXTENDS|FROM|GET|GOTO|IMPLEMENTS|JMP|NON_RETAIN|OF|PRIVATE|PROTECTED|PUBLIC|RETAIN|RETURN|SET|TASK|THEN|TO|UNTIL|USING|WITH|__CATCH|__ENDTRY|__FINALLY|__TRY)\b/
+ ],
+ "class-name": /\b(?:ANY|ARRAY|BOOL|BYTE|U?(?:D|L|S)?INT|(?:D|L)?WORD|DATE(?:_AND_TIME)?|DT|L?REAL|POINTER|STRING|TIME(?:_OF_DAY)?|TOD)\b/,
+ "address": {
+ pattern: /%[IQM][XBWDL][\d.]*|%[IQ][\d.]*/,
+ alias: "symbol"
+ },
+ "number": /\b(?:16#[\da-f]+|2#[01_]+|0x[\da-f]+)\b|\b(?:D|DT|T|TOD)#[\d_shmd:]*|\b[A-Z]*#[\d.,_]*|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+ "boolean": /\b(?:FALSE|NULL|TRUE)\b/,
+ "operator": /S?R?:?=>?|&&?|\*\*?|<[=>]?|>=?|[-:^/+#]|\b(?:AND|EQ|EXPT|GE|GT|LE|LT|MOD|NE|NOT|OR|XOR)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "punctuation": /[()[\].,;]/
+ };
+ (function(Prism2) {
+ var unit = {
+ pattern: /(\b\d+)(?:%|[a-z]+)/,
+ lookbehind: true
+ };
+ var number = {
+ pattern: /(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,
+ lookbehind: true
+ };
+ var inside = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
+ lookbehind: true
+ },
+ "url": {
+ pattern: /\burl\((["']?).*?\1\)/i,
+ greedy: true
+ },
+ "string": {
+ pattern: /("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,
+ greedy: true
+ },
+ "interpolation": null,
+ // See below
+ "func": null,
+ // See below
+ "important": /\B!(?:important|optional)\b/i,
+ "keyword": {
+ pattern: /(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,
+ lookbehind: true
+ },
+ "hexcode": /#[\da-f]{3,6}/i,
+ "color": [
+ /\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,
+ {
+ pattern: /\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,
+ inside: {
+ "unit": unit,
+ "number": number,
+ "function": /[\w-]+(?=\()/,
+ "punctuation": /[(),]/
+ }
+ }
+ ],
+ "entity": /\\[\da-f]{1,8}/i,
+ "unit": unit,
+ "boolean": /\b(?:false|true)\b/,
+ "operator": [
+ // We want non-word chars around "-" because it is
+ // accepted in property names.
+ /~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/
+ ],
+ "number": number,
+ "punctuation": /[{}()\[\];:,]/
+ };
+ inside["interpolation"] = {
+ pattern: /\{[^\r\n}:]+\}/,
+ alias: "variable",
+ inside: {
+ "delimiter": {
+ pattern: /^\{|\}$/,
+ alias: "punctuation"
+ },
+ rest: inside
+ }
+ };
+ inside["func"] = {
+ pattern: /[\w-]+\([^)]*\).*/,
+ inside: {
+ "function": /^[^(]+/,
+ rest: inside
+ }
+ };
+ Prism2.languages.stylus = {
+ "atrule-declaration": {
+ pattern: /(^[ \t]*)@.+/m,
+ lookbehind: true,
+ inside: {
+ "atrule": /^@[\w-]+/,
+ rest: inside
+ }
+ },
+ "variable-declaration": {
+ pattern: /(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,
+ lookbehind: true,
+ inside: {
+ "variable": /^\S+/,
+ rest: inside
+ }
+ },
+ "statement": {
+ pattern: /(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,
+ lookbehind: true,
+ inside: {
+ "keyword": /^\S+/,
+ rest: inside
+ }
+ },
+ // A property/value pair cannot end with a comma or a brace
+ // It cannot have indented content unless it ended with a semicolon
+ "property-declaration": {
+ pattern: /((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,
+ lookbehind: true,
+ inside: {
+ "property": {
+ pattern: /^[^\s:]+/,
+ inside: {
+ "interpolation": inside.interpolation
+ }
+ },
+ rest: inside
+ }
+ },
+ // A selector can contain parentheses only as part of a pseudo-element
+ // It can span multiple lines.
+ // It must end with a comma or an accolade or have indented content.
+ "selector": {
+ pattern: /(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,
+ lookbehind: true,
+ inside: {
+ "interpolation": inside.interpolation,
+ "comment": inside.comment,
+ "punctuation": /[{},]/
+ }
+ },
+ "func": inside.func,
+ "string": inside.string,
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "interpolation": inside.interpolation,
+ "punctuation": /[{}()\[\];:.]/
+ };
+ })(Prism);
+ Prism.languages.supercollider = {
+ "comment": {
+ pattern: /\/\/.*|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\//,
+ greedy: true
+ },
+ "string": {
+ pattern: /(^|[^\\])"(?:[^"\\]|\\[\s\S])*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ "char": {
+ pattern: /\$(?:[^\\\r\n]|\\.)/,
+ greedy: true
+ },
+ "symbol": {
+ pattern: /(^|[^\\])'(?:[^'\\]|\\[\s\S])*'|\\\w+/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /\b(?:_|arg|classvar|const|nil|var|while)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "label": {
+ pattern: /\b[a-z_]\w*(?=\s*:)/,
+ alias: "property"
+ },
+ "number": /\b(?:inf|pi|0x[0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(?:pi)?|\d+r[0-9a-zA-Z]+(?:\.[0-9a-zA-Z]+)?|\d+[sb]{1,4}\d*)\b/,
+ "class-name": /\b[A-Z]\w*\b/,
+ "operator": /\.{2,3}|#(?![[{])|&&|[!=]==?|\+>>|\+{1,3}|-[->]|=>|>>|\?\?|@\|?@|\|(?:@|[!=]=)?\||!\?|<[!=>]|\*{1,2}|<{2,3}\*?|[-!%&/<>?@|=`]/,
+ "punctuation": /[{}()[\].:,;]|#[[{]/
+ };
+ Prism.languages.sclang = Prism.languages.supercollider;
+ Prism.languages.swift = {
+ "comment": {
+ // Nested comments are supported up to 2 levels
+ pattern: /(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,
+ lookbehind: true,
+ greedy: true
+ },
+ "string-literal": [
+ // https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html
+ {
+ pattern: RegExp(
+ /(^|[^"#])/.source + "(?:" + /"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source + "|" + /"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source + ")" + /(?!["#])/.source
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /(\\\()(?:[^()]|\([^()]*\))*(?=\))/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "interpolation-punctuation": {
+ pattern: /^\)|\\\($/,
+ alias: "punctuation"
+ },
+ "punctuation": /\\(?=[\r\n])/,
+ "string": /[\s\S]+/
+ }
+ },
+ {
+ pattern: RegExp(
+ /(^|[^"#])(#+)/.source + "(?:" + /"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source + "|" + /"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source + ")\\2"
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ "interpolation-punctuation": {
+ pattern: /^\)|\\#+\($/,
+ alias: "punctuation"
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ ],
+ "directive": {
+ // directives with conditions
+ pattern: RegExp(
+ /#/.source + "(?:" + (/(?:elseif|if)\b/.source + "(?:[ ]*" + /(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source + ")+") + "|" + /(?:else|endif)\b/.source + ")"
+ ),
+ alias: "property",
+ inside: {
+ "directive-name": /^#\w+/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /\b\d+(?:\.\d+)*\b/,
+ "operator": /!|&&|\|\||[<>]=?/,
+ "punctuation": /[(),]/
+ }
+ },
+ "literal": {
+ pattern: /#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,
+ alias: "constant"
+ },
+ "other-directive": {
+ pattern: /#\w+\b/,
+ alias: "property"
+ },
+ "attribute": {
+ pattern: /@\w+/,
+ alias: "atrule"
+ },
+ "function-definition": {
+ pattern: /(\bfunc\s+)\w+/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "label": {
+ // https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID141
+ pattern: /\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,
+ lookbehind: true,
+ alias: "important"
+ },
+ "keyword": /\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "nil": {
+ pattern: /\bnil\b/,
+ alias: "constant"
+ },
+ "short-argument": /\$\d+\b/,
+ "omit": {
+ pattern: /\b_\b/,
+ alias: "keyword"
+ },
+ "number": /\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,
+ // A class name must start with an upper-case letter and be either 1 letter long or contain a lower-case letter.
+ "class-name": /\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "constant": /\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,
+ // Operators are generic in Swift. Developers can even create new operators (e.g. +++).
+ // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html#ID481
+ // This regex only supports ASCII operators.
+ "operator": /[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,
+ "punctuation": /[{}[\]();,.:\\]/
+ };
+ Prism.languages.swift["string-literal"].forEach(function(rule) {
+ rule.inside["interpolation"].inside = Prism.languages.swift;
+ });
+ (function(Prism2) {
+ var comment = {
+ pattern: /^[;#].*/m,
+ greedy: true
+ };
+ var quotesSource = /"(?:[^\r\n"\\]|\\(?:[^\r]|\r\n?))*"(?!\S)/.source;
+ Prism2.languages.systemd = {
+ "comment": comment,
+ "section": {
+ pattern: /^\[[^\n\r\[\]]*\](?=[ \t]*$)/m,
+ greedy: true,
+ inside: {
+ "punctuation": /^\[|\]$/,
+ "section-name": {
+ pattern: /[\s\S]+/,
+ alias: "selector"
+ }
+ }
+ },
+ "key": {
+ pattern: /^[^\s=]+(?=[ \t]*=)/m,
+ greedy: true,
+ alias: "attr-name"
+ },
+ "value": {
+ // This pattern is quite complex because of two properties:
+ // 1) Quotes (strings) must be preceded by a space. Since we can't use lookbehinds, we have to "resolve"
+ // the lookbehind. You will see this in the main loop where spaces are handled separately.
+ // 2) Line continuations.
+ // After line continuations, empty lines and comments are ignored so we have to consume them.
+ pattern: RegExp(
+ /(=[ \t]*(?!\s))/.source + // the value either starts with quotes or not
+ "(?:" + quotesSource + '|(?=[^"\r\n]))(?:' + (/[^\s\\]/.source + // handle spaces separately because of quotes
+ '|[ ]+(?:(?![ "])|' + quotesSource + ")|" + /\\[\r\n]+(?:[#;].*[\r\n]+)*(?![#;])/.source) + ")*"
+ ),
+ lookbehind: true,
+ greedy: true,
+ alias: "attr-value",
+ inside: {
+ "comment": comment,
+ "quoted": {
+ pattern: RegExp(/(^|\s)/.source + quotesSource),
+ lookbehind: true,
+ greedy: true
+ },
+ "punctuation": /\\$/m,
+ "boolean": {
+ pattern: /^(?:false|no|off|on|true|yes)$/,
+ greedy: true
+ }
+ }
+ },
+ "punctuation": /=/
+ };
+ })(Prism);
+ (function(Prism2) {
+ function createBlock(prefix, inside, contentAlias) {
+ return {
+ pattern: RegExp("<#" + prefix + "[\\s\\S]*?#>"),
+ alias: "block",
+ inside: {
+ "delimiter": {
+ pattern: RegExp("^<#" + prefix + "|#>$"),
+ alias: "important"
+ },
+ "content": {
+ pattern: /[\s\S]+/,
+ inside,
+ alias: contentAlias
+ }
+ }
+ };
+ }
+ function createT4(insideLang) {
+ var grammar = Prism2.languages[insideLang];
+ var className = "language-" + insideLang;
+ return {
+ "block": {
+ pattern: /<#[\s\S]+?#>/,
+ inside: {
+ "directive": createBlock("@", {
+ "attr-value": {
+ pattern: /=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/,
+ inside: {
+ "punctuation": /^=|^["']|["']$/
+ }
+ },
+ "keyword": /\b\w+(?=\s)/,
+ "attr-name": /\b\w+/
+ }),
+ "expression": createBlock("=", grammar, className),
+ "class-feature": createBlock("\\+", grammar, className),
+ "standard": createBlock("", grammar, className)
+ }
+ }
+ };
+ }
+ Prism2.languages["t4-templating"] = Object.defineProperty({}, "createT4", { value: createT4 });
+ })(Prism);
+ Prism.languages.t4 = Prism.languages["t4-cs"] = Prism.languages["t4-templating"].createT4("csharp");
+ Prism.languages.vbnet = Prism.languages.extend("basic", {
+ "comment": [
+ {
+ pattern: /(?:!|REM\b).+/i,
+ inside: {
+ "keyword": /^REM/i
+ }
+ },
+ {
+ pattern: /(^|[^\\:])'.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /(^|[^"])"(?:""|[^"])*"(?!")/,
+ lookbehind: true,
+ greedy: true
+ },
+ "keyword": /(?:\b(?:ADDHANDLER|ADDRESSOF|ALIAS|AND|ANDALSO|AS|BEEP|BLOAD|BOOLEAN|BSAVE|BYREF|BYTE|BYVAL|CALL(?: ABSOLUTE)?|CASE|CATCH|CBOOL|CBYTE|CCHAR|CDATE|CDBL|CDEC|CHAIN|CHAR|CHDIR|CINT|CLASS|CLEAR|CLNG|CLOSE|CLS|COBJ|COM|COMMON|CONST|CONTINUE|CSBYTE|CSHORT|CSNG|CSTR|CTYPE|CUINT|CULNG|CUSHORT|DATA|DATE|DECIMAL|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DEFAULT|DELEGATE|DIM|DIRECTCAST|DO|DOUBLE|ELSE|ELSEIF|END|ENUM|ENVIRON|ERASE|ERROR|EVENT|EXIT|FALSE|FIELD|FILES|FINALLY|FOR(?: EACH)?|FRIEND|FUNCTION|GET|GETTYPE|GETXMLNAMESPACE|GLOBAL|GOSUB|GOTO|HANDLES|IF|IMPLEMENTS|IMPORTS|IN|INHERITS|INPUT|INTEGER|INTERFACE|IOCTL|IS|ISNOT|KEY|KILL|LET|LIB|LIKE|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|ME|MKDIR|MOD|MODULE|MUSTINHERIT|MUSTOVERRIDE|MYBASE|MYCLASS|NAME|NAMESPACE|NARROWING|NEW|NEXT|NOT|NOTHING|NOTINHERITABLE|NOTOVERRIDABLE|OBJECT|OF|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPERATOR|OPTION(?: BASE)?|OPTIONAL|OR|ORELSE|OUT|OVERLOADS|OVERRIDABLE|OVERRIDES|PARAMARRAY|PARTIAL|POKE|PRIVATE|PROPERTY|PROTECTED|PUBLIC|PUT|RAISEEVENT|READ|READONLY|REDIM|REM|REMOVEHANDLER|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SBYTE|SELECT(?: CASE)?|SET|SHADOWS|SHARED|SHELL|SHORT|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|STRUCTURE|SUB|SWAP|SYNCLOCK|SYSTEM|THEN|THROW|TIMER|TO|TROFF|TRON|TRUE|TRY|TRYCAST|TYPE|TYPEOF|UINTEGER|ULONG|UNLOCK|UNTIL|USHORT|USING|VIEW PRINT|WAIT|WEND|WHEN|WHILE|WIDENING|WITH|WITHEVENTS|WRITE|WRITEONLY|XOR)|\B(?:#CONST|#ELSE|#ELSEIF|#END|#IF))(?:\$|\b)/i,
+ "punctuation": /[,;:(){}]/
+ });
+ Prism.languages["t4-vb"] = Prism.languages["t4-templating"].createT4("vbnet");
+ (function(Prism2) {
+ var anchorOrAlias = /[*&][^\s[\]{},]+/;
+ var tag = /!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/;
+ var properties = "(?:" + tag.source + "(?:[ ]+" + anchorOrAlias.source + ")?|" + anchorOrAlias.source + "(?:[ ]+" + tag.source + ")?)";
+ var plainKey = /(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g, function() {
+ return /[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source;
+ });
+ var string = /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;
+ function createValuePattern(value, flags) {
+ flags = (flags || "").replace(/m/g, "") + "m";
+ var pattern = /([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g, function() {
+ return properties;
+ }).replace(/<<value>>/g, function() {
+ return value;
+ });
+ return RegExp(pattern, flags);
+ }
+ Prism2.languages.yaml = {
+ "scalar": {
+ pattern: RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g, function() {
+ return properties;
+ })),
+ lookbehind: true,
+ alias: "string"
+ },
+ "comment": /#.*/,
+ "key": {
+ pattern: RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g, function() {
+ return properties;
+ }).replace(/<<key>>/g, function() {
+ return "(?:" + plainKey + "|" + string + ")";
+ })),
+ lookbehind: true,
+ greedy: true,
+ alias: "atrule"
+ },
+ "directive": {
+ pattern: /(^[ \t]*)%.+/m,
+ lookbehind: true,
+ alias: "important"
+ },
+ "datetime": {
+ pattern: createValuePattern(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),
+ lookbehind: true,
+ alias: "number"
+ },
+ "boolean": {
+ pattern: createValuePattern(/false|true/.source, "i"),
+ lookbehind: true,
+ alias: "important"
+ },
+ "null": {
+ pattern: createValuePattern(/null|~/.source, "i"),
+ lookbehind: true,
+ alias: "important"
+ },
+ "string": {
+ pattern: createValuePattern(string),
+ lookbehind: true,
+ greedy: true
+ },
+ "number": {
+ pattern: createValuePattern(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source, "i"),
+ lookbehind: true
+ },
+ "tag": tag,
+ "important": anchorOrAlias,
+ "punctuation": /---|[:[\]{}\-,|>?]|\.\.\./
+ };
+ Prism2.languages.yml = Prism2.languages.yaml;
+ })(Prism);
+ Prism.languages.tap = {
+ "fail": /not ok[^#{\n\r]*/,
+ "pass": /ok[^#{\n\r]*/,
+ "pragma": /pragma [+-][a-z]+/,
+ "bailout": /bail out!.*/i,
+ "version": /TAP version \d+/i,
+ "plan": /\b\d+\.\.\d+(?: +#.*)?/,
+ "subtest": {
+ pattern: /# Subtest(?:: .*)?/,
+ greedy: true
+ },
+ "punctuation": /[{}]/,
+ "directive": /#.*/,
+ "yamlish": {
+ pattern: /(^[ \t]*)---[\s\S]*?[\r\n][ \t]*\.\.\.$/m,
+ lookbehind: true,
+ inside: Prism.languages.yaml,
+ alias: "language-yaml"
+ }
+ };
+ Prism.languages.tcl = {
+ "comment": {
+ pattern: /(^|[^\\])#.*/,
+ lookbehind: true
+ },
+ "string": {
+ pattern: /"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"/,
+ greedy: true
+ },
+ "variable": [
+ {
+ pattern: /(\$)(?:::)?(?:[a-zA-Z0-9]+::)*\w+/,
+ lookbehind: true
+ },
+ {
+ pattern: /(\$)\{[^}]+\}/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^[\t ]*set[ \t]+)(?:::)?(?:[a-zA-Z0-9]+::)*\w+/m,
+ lookbehind: true
+ }
+ ],
+ "function": {
+ pattern: /(^[\t ]*proc[ \t]+)\S+/m,
+ lookbehind: true
+ },
+ "builtin": [
+ {
+ pattern: /(^[\t ]*)(?:break|class|continue|error|eval|exit|for|foreach|if|proc|return|switch|while)\b/m,
+ lookbehind: true
+ },
+ /\b(?:else|elseif)\b/
+ ],
+ "scope": {
+ pattern: /(^[\t ]*)(?:global|upvar|variable)\b/m,
+ lookbehind: true,
+ alias: "constant"
+ },
+ "keyword": {
+ pattern: /(^[\t ]*|\[)(?:Safe_Base|Tcl|after|append|apply|array|auto_(?:execok|import|load|mkindex|qualify|reset)|automkindex_old|bgerror|binary|catch|cd|chan|clock|close|concat|dde|dict|encoding|eof|exec|expr|fblocked|fconfigure|fcopy|file(?:event|name)?|flush|gets|glob|history|http|incr|info|interp|join|lappend|lassign|lindex|linsert|list|llength|load|lrange|lrepeat|lreplace|lreverse|lsearch|lset|lsort|math(?:func|op)|memory|msgcat|namespace|open|package|parray|pid|pkg_mkIndex|platform|puts|pwd|re_syntax|read|refchan|regexp|registry|regsub|rename|scan|seek|set|socket|source|split|string|subst|tcl(?:_endOfWord|_findLibrary|startOf(?:Next|Previous)Word|test|vars|wordBreak(?:After|Before))|tell|time|tm|trace|unknown|unload|unset|update|uplevel|vwait)\b/m,
+ lookbehind: true
+ },
+ "operator": /!=?|\*\*?|==|&&?|\|\|?|<[=<]?|>[=>]?|[-+~\/%?^]|\b(?:eq|in|ne|ni)\b/,
+ "punctuation": /[{}()\[\]]/
+ };
+ (function(Prism2) {
+ Prism2.languages.tt2 = Prism2.languages.extend("clike", {
+ "comment": /#.*|\[%#[\s\S]*?%\]/,
+ "keyword": /\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|SWITCH|TAGS|THROW|TRY|UNLESS|USE|WHILE|WRAPPER)\b/,
+ "punctuation": /[[\]{},()]/
+ });
+ Prism2.languages.insertBefore("tt2", "number", {
+ "operator": /=[>=]?|!=?|<=?|>=?|&&|\|\|?|\b(?:and|not|or)\b/,
+ "variable": {
+ pattern: /\b[a-z]\w*(?:\s*\.\s*(?:\d+|\$?[a-z]\w*))*\b/i
+ }
+ });
+ Prism2.languages.insertBefore("tt2", "keyword", {
+ "delimiter": {
+ pattern: /^(?:\[%|%%)-?|-?%\]$/,
+ alias: "punctuation"
+ }
+ });
+ Prism2.languages.insertBefore("tt2", "string", {
+ "single-quoted-string": {
+ pattern: /'[^\\']*(?:\\[\s\S][^\\']*)*'/,
+ greedy: true,
+ alias: "string"
+ },
+ "double-quoted-string": {
+ pattern: /"[^\\"]*(?:\\[\s\S][^\\"]*)*"/,
+ greedy: true,
+ alias: "string",
+ inside: {
+ "variable": {
+ pattern: /\$(?:[a-z]\w*(?:\.(?:\d+|\$?[a-z]\w*))*)/i
+ }
+ }
+ }
+ });
+ delete Prism2.languages.tt2.string;
+ Prism2.hooks.add("before-tokenize", function(env) {
+ var tt2Pattern = /\[%[\s\S]+?%\]/g;
+ Prism2.languages["markup-templating"].buildPlaceholders(env, "tt2", tt2Pattern);
+ });
+ Prism2.hooks.add("after-tokenize", function(env) {
+ Prism2.languages["markup-templating"].tokenizePlaceholders(env, "tt2");
+ });
+ })(Prism);
+ (function(Prism2) {
+ var modifierRegex = /\([^|()\n]+\)|\[[^\]\n]+\]|\{[^}\n]+\}/.source;
+ var parenthesesRegex = /\)|\((?![^|()\n]+\))/.source;
+ function withModifier(source, flags) {
+ return RegExp(
+ source.replace(/<MOD>/g, function() {
+ return "(?:" + modifierRegex + ")";
+ }).replace(/<PAR>/g, function() {
+ return "(?:" + parenthesesRegex + ")";
+ }),
+ flags || ""
+ );
+ }
+ var modifierTokens = {
+ "css": {
+ pattern: /\{[^{}]+\}/,
+ inside: {
+ rest: Prism2.languages.css
+ }
+ },
+ "class-id": {
+ pattern: /(\()[^()]+(?=\))/,
+ lookbehind: true,
+ alias: "attr-value"
+ },
+ "lang": {
+ pattern: /(\[)[^\[\]]+(?=\])/,
+ lookbehind: true,
+ alias: "attr-value"
+ },
+ // Anything else is punctuation (the first pattern is for row/col spans inside tables)
+ "punctuation": /[\\\/]\d+|\S/
+ };
+ var textile = Prism2.languages.textile = Prism2.languages.extend("markup", {
+ "phrase": {
+ pattern: /(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,
+ lookbehind: true,
+ inside: {
+ // h1. Header 1
+ "block-tag": {
+ pattern: withModifier(/^[a-z]\w*(?:<MOD>|<PAR>|[<>=])*\./.source),
+ inside: {
+ "modifier": {
+ pattern: withModifier(/(^[a-z]\w*)(?:<MOD>|<PAR>|[<>=])+(?=\.)/.source),
+ lookbehind: true,
+ inside: modifierTokens
+ },
+ "tag": /^[a-z]\w*/,
+ "punctuation": /\.$/
+ }
+ },
+ // # List item
+ // * List item
+ "list": {
+ pattern: withModifier(/^[*#]+<MOD>*\s+\S.*/.source, "m"),
+ inside: {
+ "modifier": {
+ pattern: withModifier(/(^[*#]+)<MOD>+/.source),
+ lookbehind: true,
+ inside: modifierTokens
+ },
+ "punctuation": /^[*#]+/
+ }
+ },
+ // | cell | cell | cell |
+ "table": {
+ // Modifiers can be applied to the row: {color:red}.|1|2|3|
+ // or the cell: |{color:red}.1|2|3|
+ pattern: withModifier(/^(?:(?:<MOD>|<PAR>|[<>=^~])+\.\s*)?(?:\|(?:(?:<MOD>|<PAR>|[<>=^~_]|[\\/]\d+)+\.|(?!(?:<MOD>|<PAR>|[<>=^~_]|[\\/]\d+)+\.))[^|]*)+\|/.source, "m"),
+ inside: {
+ "modifier": {
+ // Modifiers for rows after the first one are
+ // preceded by a pipe and a line feed
+ pattern: withModifier(/(^|\|(?:\r?\n|\r)?)(?:<MOD>|<PAR>|[<>=^~_]|[\\/]\d+)+(?=\.)/.source),
+ lookbehind: true,
+ inside: modifierTokens
+ },
+ "punctuation": /\||^\./
+ }
+ },
+ "inline": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^|[^a-zA-Z\d])(\*\*|__|\?\?|[*_%@+\-^~])<MOD>*.+?\2(?![a-zA-Z\d])/.source),
+ lookbehind: true,
+ inside: {
+ // Note: superscripts and subscripts are not handled specifically
+ // *bold*, **bold**
+ "bold": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^(\*\*?)<MOD>*).+?(?=\2)/.source),
+ lookbehind: true
+ },
+ // _italic_, __italic__
+ "italic": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^(__?)<MOD>*).+?(?=\2)/.source),
+ lookbehind: true
+ },
+ // ??cite??
+ "cite": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^\?\?<MOD>*).+?(?=\?\?)/.source),
+ lookbehind: true,
+ alias: "string"
+ },
+ // @code@
+ "code": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^@<MOD>*).+?(?=@)/.source),
+ lookbehind: true,
+ alias: "keyword"
+ },
+ // +inserted+
+ "inserted": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^\+<MOD>*).+?(?=\+)/.source),
+ lookbehind: true
+ },
+ // -deleted-
+ "deleted": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^-<MOD>*).+?(?=-)/.source),
+ lookbehind: true
+ },
+ // %span%
+ "span": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^%<MOD>*).+?(?=%)/.source),
+ lookbehind: true
+ },
+ "modifier": {
+ pattern: withModifier(/(^\*\*|__|\?\?|[*_%@+\-^~])<MOD>+/.source),
+ lookbehind: true,
+ inside: modifierTokens
+ },
+ "punctuation": /[*_%?@+\-^~]+/
+ }
+ },
+ // [alias]http://example.com
+ "link-ref": {
+ pattern: /^\[[^\]]+\]\S+$/m,
+ inside: {
+ "string": {
+ pattern: /(^\[)[^\]]+(?=\])/,
+ lookbehind: true
+ },
+ "url": {
+ pattern: /(^\])\S+$/,
+ lookbehind: true
+ },
+ "punctuation": /[\[\]]/
+ }
+ },
+ // "text":http://example.com
+ // "text":link-ref
+ "link": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/"<MOD>*[^"]+":.+?(?=[^\w/]?(?:\s|$))/.source),
+ inside: {
+ "text": {
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
+ pattern: withModifier(/(^"<MOD>*)[^"]+(?=")/.source),
+ lookbehind: true
+ },
+ "modifier": {
+ pattern: withModifier(/(^")<MOD>+/.source),
+ lookbehind: true,
+ inside: modifierTokens
+ },
+ "url": {
+ pattern: /(:).+/,
+ lookbehind: true
+ },
+ "punctuation": /[":]/
+ }
+ },
+ // !image.jpg!
+ // !image.jpg(Title)!:http://example.com
+ "image": {
+ pattern: withModifier(/!(?:<MOD>|<PAR>|[<>=])*(?![<>=])[^!\s()]+(?:\([^)]+\))?!(?::.+?(?=[^\w/]?(?:\s|$)))?/.source),
+ inside: {
+ "source": {
+ pattern: withModifier(/(^!(?:<MOD>|<PAR>|[<>=])*)(?![<>=])[^!\s()]+(?:\([^)]+\))?(?=!)/.source),
+ lookbehind: true,
+ alias: "url"
+ },
+ "modifier": {
+ pattern: withModifier(/(^!)(?:<MOD>|<PAR>|[<>=])+/.source),
+ lookbehind: true,
+ inside: modifierTokens
+ },
+ "url": {
+ pattern: /(:).+/,
+ lookbehind: true
+ },
+ "punctuation": /[!:]/
+ }
+ },
+ // Footnote[1]
+ "footnote": {
+ pattern: /\b\[\d+\]/,
+ alias: "comment",
+ inside: {
+ "punctuation": /\[|\]/
+ }
+ },
+ // CSS(Cascading Style Sheet)
+ "acronym": {
+ pattern: /\b[A-Z\d]+\([^)]+\)/,
+ inside: {
+ "comment": {
+ pattern: /(\()[^()]+(?=\))/,
+ lookbehind: true
+ },
+ "punctuation": /[()]/
+ }
+ },
+ // Prism(C)
+ "mark": {
+ pattern: /\b\((?:C|R|TM)\)/,
+ alias: "comment",
+ inside: {
+ "punctuation": /[()]/
+ }
+ }
+ }
+ }
+ });
+ var phraseInside = textile["phrase"].inside;
+ var nestedPatterns = {
+ "inline": phraseInside["inline"],
+ "link": phraseInside["link"],
+ "image": phraseInside["image"],
+ "footnote": phraseInside["footnote"],
+ "acronym": phraseInside["acronym"],
+ "mark": phraseInside["mark"]
+ };
+ textile.tag.pattern = /<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i;
+ var phraseInlineInside = phraseInside["inline"].inside;
+ phraseInlineInside["bold"].inside = nestedPatterns;
+ phraseInlineInside["italic"].inside = nestedPatterns;
+ phraseInlineInside["inserted"].inside = nestedPatterns;
+ phraseInlineInside["deleted"].inside = nestedPatterns;
+ phraseInlineInside["span"].inside = nestedPatterns;
+ var phraseTableInside = phraseInside["table"].inside;
+ phraseTableInside["inline"] = nestedPatterns["inline"];
+ phraseTableInside["link"] = nestedPatterns["link"];
+ phraseTableInside["image"] = nestedPatterns["image"];
+ phraseTableInside["footnote"] = nestedPatterns["footnote"];
+ phraseTableInside["acronym"] = nestedPatterns["acronym"];
+ phraseTableInside["mark"] = nestedPatterns["mark"];
+ })(Prism);
+ (function(Prism2) {
+ var key = /(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;
+ function insertKey(pattern) {
+ return pattern.replace(/__/g, function() {
+ return key;
+ });
+ }
+ Prism2.languages.toml = {
+ "comment": {
+ pattern: /#.*/,
+ greedy: true
+ },
+ "table": {
+ pattern: RegExp(insertKey(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source), "m"),
+ lookbehind: true,
+ greedy: true,
+ alias: "class-name"
+ },
+ "key": {
+ pattern: RegExp(insertKey(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source), "m"),
+ lookbehind: true,
+ greedy: true,
+ alias: "property"
+ },
+ "string": {
+ pattern: /"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,
+ greedy: true
+ },
+ "date": [
+ {
+ // Offset Date-Time, Local Date-Time, Local Date
+ pattern: /\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,
+ alias: "number"
+ },
+ {
+ // Local Time
+ pattern: /\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,
+ alias: "number"
+ }
+ ],
+ "number": /(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "punctuation": /[.,=[\]{}]/
+ };
+ })(Prism);
+ (function(Prism2) {
+ Prism2.languages.tremor = {
+ "comment": {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
+ lookbehind: true
+ },
+ "interpolated-string": null,
+ // see below
+ "extractor": {
+ pattern: /\b[a-z_]\w*\|(?:[^\r\n\\|]|\\(?:\r\n|[\s\S]))*\|/i,
+ greedy: true,
+ inside: {
+ "regex": {
+ pattern: /(^re)\|[\s\S]+/,
+ lookbehind: true
+ },
+ "function": /^\w+/,
+ "value": /\|[\s\S]+/
+ }
+ },
+ "identifier": {
+ pattern: /`[^`]*`/,
+ greedy: true
+ },
+ "function": /\b[a-z_]\w*(?=\s*(?:::\s*<|\())\b/,
+ "keyword": /\b(?:args|as|by|case|config|connect|connector|const|copy|create|default|define|deploy|drop|each|emit|end|erase|event|flow|fn|for|from|group|having|insert|into|intrinsic|let|links|match|merge|mod|move|of|operator|patch|pipeline|recur|script|select|set|sliding|state|stream|to|tumbling|update|use|when|where|window|with)\b/,
+ "boolean": /\b(?:false|null|true)\b/i,
+ "number": /\b(?:0b[01_]*|0x[0-9a-fA-F_]*|\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee][+-]?[\d_]+)?)\b/,
+ "pattern-punctuation": {
+ pattern: /%(?=[({[])/,
+ alias: "punctuation"
+ },
+ "operator": /[-+*\/%~!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?>?=?|(?:absent|and|not|or|present|xor)\b/,
+ "punctuation": /::|[;\[\]()\{\},.:]/
+ };
+ var interpolationPattern = /#\{(?:[^"{}]|\{[^{}]*\}|"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*")*\}/.source;
+ Prism2.languages.tremor["interpolated-string"] = {
+ pattern: RegExp(
+ /(^|[^\\])/.source + '(?:"""(?:' + /[^"\\#]|\\[\s\S]|"(?!"")|#(?!\{)/.source + "|" + interpolationPattern + ')*"""|"(?:' + /[^"\\\r\n#]|\\(?:\r\n|[\s\S])|#(?!\{)/.source + "|" + interpolationPattern + ')*")'
+ ),
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: RegExp(interpolationPattern),
+ inside: {
+ "punctuation": /^#\{|\}$/,
+ "expression": {
+ pattern: /[\s\S]+/,
+ inside: Prism2.languages.tremor
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ };
+ Prism2.languages.troy = Prism2.languages["tremor"];
+ Prism2.languages.trickle = Prism2.languages["tremor"];
+ })(Prism);
+ Prism.languages.twig = {
+ "comment": /^\{#[\s\S]*?#\}$/,
+ "tag-name": {
+ pattern: /(^\{%-?\s*)\w+/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "delimiter": {
+ pattern: /^\{[{%]-?|-?[%}]\}$/,
+ alias: "punctuation"
+ },
+ "string": {
+ pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ inside: {
+ "punctuation": /^['"]|['"]$/
+ }
+ },
+ "keyword": /\b(?:even|if|odd)\b/,
+ "boolean": /\b(?:false|null|true)\b/,
+ "number": /\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,
+ "operator": [
+ {
+ pattern: /(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,
+ lookbehind: true
+ },
+ /[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/
+ ],
+ "punctuation": /[()\[\]{}:.,]/
+ };
+ Prism.hooks.add("before-tokenize", function(env) {
+ if (env.language !== "twig") {
+ return;
+ }
+ var pattern = /\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g;
+ Prism.languages["markup-templating"].buildPlaceholders(env, "twig", pattern);
+ });
+ Prism.hooks.add("after-tokenize", function(env) {
+ Prism.languages["markup-templating"].tokenizePlaceholders(env, "twig");
+ });
+ (function(Prism2) {
+ var keywords = /\b(?:ACT|ACTIFSUB|CARRAY|CASE|CLEARGIF|COA|COA_INT|CONSTANTS|CONTENT|CUR|EDITPANEL|EFFECT|EXT|FILE|FLUIDTEMPLATE|FORM|FRAME|FRAMESET|GIFBUILDER|GMENU|GMENU_FOLDOUT|GMENU_LAYERS|GP|HMENU|HRULER|HTML|IENV|IFSUB|IMAGE|IMGMENU|IMGMENUITEM|IMGTEXT|IMG_RESOURCE|INCLUDE_TYPOSCRIPT|JSMENU|JSMENUITEM|LLL|LOAD_REGISTER|NO|PAGE|RECORDS|RESTORE_REGISTER|TEMPLATE|TEXT|TMENU|TMENUITEM|TMENU_LAYERS|USER|USER_INT|_GIFBUILDER|global|globalString|globalVar)\b/;
+ Prism2.languages.typoscript = {
+ "comment": [
+ {
+ // multiline comments /* */
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: true
+ },
+ {
+ // double-slash comments - ignored when backslashes or colon is found in front
+ // also ignored whenever directly after an equal-sign, because it would probably be an url without protocol
+ pattern: /(^|[^\\:= \t]|(?:^|[^= \t])[ \t]+)\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // hash comments - ignored when leading quote is found for hex colors in strings
+ pattern: /(^|[^"'])#.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "function": [
+ {
+ // old include style
+ pattern: /<INCLUDE_TYPOSCRIPT:\s*source\s*=\s*(?:"[^"\r\n]*"|'[^'\r\n]*')\s*>/,
+ inside: {
+ "string": {
+ pattern: /"[^"\r\n]*"|'[^'\r\n]*'/,
+ inside: {
+ "keyword": keywords
+ }
+ },
+ "keyword": {
+ pattern: /INCLUDE_TYPOSCRIPT/
+ }
+ }
+ },
+ {
+ // new include style
+ pattern: /@import\s*(?:"[^"\r\n]*"|'[^'\r\n]*')/,
+ inside: {
+ "string": /"[^"\r\n]*"|'[^'\r\n]*'/
+ }
+ }
+ ],
+ "string": {
+ pattern: /^([^=]*=[< ]?)(?:(?!\]\n).)*/,
+ lookbehind: true,
+ inside: {
+ "function": /\{\$.*\}/,
+ // constants include
+ "keyword": keywords,
+ "number": /^\d+$/,
+ "punctuation": /[,|:]/
+ }
+ },
+ "keyword": keywords,
+ "number": {
+ // special highlighting for indexes of arrays in tags
+ pattern: /\b\d+\s*[.{=]/,
+ inside: {
+ "operator": /[.{=]/
+ }
+ },
+ "tag": {
+ pattern: /\.?[-\w\\]+\.?/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ "punctuation": /[{}[\];(),.:|]/,
+ "operator": /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/
+ };
+ Prism2.languages.tsconfig = Prism2.languages.typoscript;
+ })(Prism);
+ Prism.languages.unrealscript = {
+ "comment": /\/\/.*|\/\*[\s\S]*?\*\//,
+ "string": {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: true
+ },
+ "category": {
+ pattern: /(\b(?:(?:autoexpand|hide|show)categories|var)\s*\()[^()]+(?=\))/,
+ lookbehind: true,
+ greedy: true,
+ alias: "property"
+ },
+ "metadata": {
+ pattern: /(\w\s*)<\s*\w+\s*=[^<>|=\r\n]+(?:\|\s*\w+\s*=[^<>|=\r\n]+)*>/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "property": /\b\w+(?=\s*=)/,
+ "operator": /=/,
+ "punctuation": /[<>|]/
+ }
+ },
+ "macro": {
+ pattern: /`\w+/,
+ alias: "property"
+ },
+ "class-name": {
+ pattern: /(\b(?:class|enum|extends|interface|state(?:\(\))?|struct|within)\s+)\w+/,
+ lookbehind: true
+ },
+ "keyword": /\b(?:abstract|actor|array|auto|autoexpandcategories|bool|break|byte|case|class|classgroup|client|coerce|collapsecategories|config|const|continue|default|defaultproperties|delegate|dependson|deprecated|do|dontcollapsecategories|editconst|editinlinenew|else|enum|event|exec|export|extends|final|float|for|forcescriptorder|foreach|function|goto|guid|hidecategories|hidedropdown|if|ignores|implements|inherits|input|int|interface|iterator|latent|local|material|name|native|nativereplication|noexport|nontransient|noteditinlinenew|notplaceable|operator|optional|out|pawn|perobjectconfig|perobjectlocalized|placeable|postoperator|preoperator|private|protected|reliable|replication|return|server|showcategories|simulated|singular|state|static|string|struct|structdefault|structdefaultproperties|switch|texture|transient|travel|unreliable|until|var|vector|while|within)\b/,
+ "function": /\b[a-z_]\w*(?=\s*\()/i,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+ // https://docs.unrealengine.com/udk/Three/UnrealScriptExpressions.html
+ "operator": />>|<<|--|\+\+|\*\*|[-+*/~!=<>$@]=?|&&?|\|\|?|\^\^?|[?:%]|\b(?:ClockwiseFrom|Cross|Dot)\b/,
+ "punctuation": /[()[\]{};,.]/
+ };
+ Prism.languages.uc = Prism.languages.uscript = Prism.languages.unrealscript;
+ Prism.languages.uorazor = {
+ "comment-hash": {
+ pattern: /#.*/,
+ alias: "comment",
+ greedy: true
+ },
+ "comment-slash": {
+ pattern: /\/\/.*/,
+ alias: "comment",
+ greedy: true
+ },
+ "string": {
+ pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ inside: {
+ "punctuation": /^['"]|['"]$/
+ },
+ greedy: true
+ },
+ "source-layers": {
+ pattern: /\b(?:arms|backpack|blue|bracelet|cancel|clear|cloak|criminal|earrings|enemy|facialhair|friend|friendly|gloves|gray|grey|ground|hair|head|innerlegs|innertorso|innocent|lefthand|middletorso|murderer|neck|nonfriendly|onehandedsecondary|outerlegs|outertorso|pants|red|righthand|ring|self|shirt|shoes|talisman|waist)\b/i,
+ alias: "function"
+ },
+ "source-commands": {
+ pattern: /\b(?:alliance|attack|cast|clearall|clearignore|clearjournal|clearlist|clearsysmsg|createlist|createtimer|dclick|dclicktype|dclickvar|dress|dressconfig|drop|droprelloc|emote|getlabel|guild|gumpclose|gumpresponse|hotkey|ignore|lasttarget|lift|lifttype|menu|menuresponse|msg|org|organize|organizer|overhead|pause|poplist|potion|promptresponse|pushlist|removelist|removetimer|rename|restock|say|scav|scavenger|script|setability|setlasttarget|setskill|settimer|setvar|sysmsg|target|targetloc|targetrelloc|targettype|undress|unignore|unsetvar|useobject|useonce|useskill|usetype|virtue|wait|waitforgump|waitformenu|waitforprompt|waitforstat|waitforsysmsg|waitfortarget|walk|wfsysmsg|wft|whisper|yell)\b/,
+ alias: "function"
+ },
+ "tag-name": {
+ pattern: /(^\{%-?\s*)\w+/,
+ lookbehind: true,
+ alias: "keyword"
+ },
+ "delimiter": {
+ pattern: /^\{[{%]-?|-?[%}]\}$/,
+ alias: "punctuation"
+ },
+ "function": /\b(?:atlist|close|closest|count|counter|counttype|dead|dex|diffhits|diffmana|diffstam|diffweight|find|findbuff|finddebuff|findlayer|findtype|findtypelist|followers|gumpexists|hidden|hits|hp|hue|human|humanoid|ingump|inlist|insysmessage|insysmsg|int|invul|lhandempty|list|listexists|mana|maxhits|maxhp|maxmana|maxstam|maxweight|monster|mounted|name|next|noto|paralyzed|poisoned|position|prev|previous|queued|rand|random|rhandempty|skill|stam|str|targetexists|timer|timerexists|varexist|warmode|weight)\b/,
+ "keyword": /\b(?:and|as|break|continue|else|elseif|endfor|endif|endwhile|for|if|loop|not|or|replay|stop|while)\b/,
+ "boolean": /\b(?:false|null|true)\b/,
+ "number": /\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,
+ "operator": [
+ {
+ pattern: /(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,
+ lookbehind: true
+ },
+ /[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/
+ ],
+ "punctuation": /[()\[\]{}:.,]/
+ };
+ Prism.languages.uri = {
+ "scheme": {
+ pattern: /^[a-z][a-z0-9+.-]*:/im,
+ greedy: true,
+ inside: {
+ "scheme-delimiter": /:$/
+ }
+ },
+ "fragment": {
+ pattern: /#[\w\-.~!$&'()*+,;=%:@/?]*/,
+ inside: {
+ "fragment-delimiter": /^#/
+ }
+ },
+ "query": {
+ pattern: /\?[\w\-.~!$&'()*+,;=%:@/?]*/,
+ inside: {
+ "query-delimiter": {
+ pattern: /^\?/,
+ greedy: true
+ },
+ "pair-delimiter": /[&;]/,
+ "pair": {
+ pattern: /^[^=][\s\S]*/,
+ inside: {
+ "key": /^[^=]+/,
+ "value": {
+ pattern: /(^=)[\s\S]+/,
+ lookbehind: true
+ }
+ }
+ }
+ }
+ },
+ "authority": {
+ pattern: RegExp(
+ /^\/\//.source + /(?:[\w\-.~!$&'()*+,;=%:]*@)?/.source + ("(?:" + /\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\.[\w\-.~!$&'()*+,;=]+)\]/.source + "|" + /[\w\-.~!$&'()*+,;=%]*/.source + ")") + /(?::\d*)?/.source,
+ "m"
+ ),
+ inside: {
+ "authority-delimiter": /^\/\//,
+ "user-info-segment": {
+ pattern: /^[\w\-.~!$&'()*+,;=%:]*@/,
+ inside: {
+ "user-info-delimiter": /@$/,
+ "user-info": /^[\w\-.~!$&'()*+,;=%:]+/
+ }
+ },
+ "port-segment": {
+ pattern: /:\d*$/,
+ inside: {
+ "port-delimiter": /^:/,
+ "port": /^\d+/
+ }
+ },
+ "host": {
+ pattern: /[\s\S]+/,
+ inside: {
+ "ip-literal": {
+ pattern: /^\[[\s\S]+\]$/,
+ inside: {
+ "ip-literal-delimiter": /^\[|\]$/,
+ "ipv-future": /^v[\s\S]+/,
+ "ipv6-address": /^[\s\S]+/
+ }
+ },
+ "ipv4-address": /^(?:(?:[03-9]\d?|[12]\d{0,2})\.){3}(?:[03-9]\d?|[12]\d{0,2})$/
+ }
+ }
+ }
+ },
+ "path": {
+ pattern: /^[\w\-.~!$&'()*+,;=%:@/]+/m,
+ inside: {
+ "path-separator": /\//
+ }
+ }
+ };
+ Prism.languages.url = Prism.languages.uri;
+ (function(Prism2) {
+ var interpolationExpr = {
+ pattern: /[\s\S]+/,
+ inside: null
+ };
+ Prism2.languages.v = Prism2.languages.extend("clike", {
+ "string": {
+ pattern: /r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ alias: "quoted-string",
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,
+ lookbehind: true,
+ inside: {
+ "interpolation-variable": {
+ pattern: /^\$\w[\s\S]*$/,
+ alias: "variable"
+ },
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "punctuation"
+ },
+ "interpolation-expression": interpolationExpr
+ }
+ }
+ }
+ },
+ "class-name": {
+ pattern: /(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,
+ lookbehind: true
+ },
+ "keyword": /(?:\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\$(?:else|for|if)|#(?:flag|include))\b/,
+ "number": /\b(?:0x[a-f\d]+(?:_[a-f\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)\b/i,
+ "operator": /~|\?|[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\.?/,
+ "builtin": /\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\b/
+ });
+ interpolationExpr.inside = Prism2.languages.v;
+ Prism2.languages.insertBefore("v", "string", {
+ "char": {
+ pattern: /`(?:\\`|\\?[^`]{1,2})`/,
+ // using {1,2} instead of `u` flag for compatibility
+ alias: "rune"
+ }
+ });
+ Prism2.languages.insertBefore("v", "operator", {
+ "attribute": {
+ pattern: /(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,
+ lookbehind: true,
+ alias: "annotation",
+ inside: {
+ "punctuation": /[\[\]]/,
+ "keyword": /\w+/
+ }
+ },
+ "generic": {
+ pattern: /<\w+>(?=\s*[\)\{])/,
+ inside: {
+ "punctuation": /[<>]/,
+ "class-name": /\w+/
+ }
+ }
+ });
+ Prism2.languages.insertBefore("v", "function", {
+ "generic-function": {
+ // e.g. foo<T>( ...
+ pattern: /\b\w+\s*<\w+>(?=\()/,
+ inside: {
+ "function": /^\w+/,
+ "generic": {
+ pattern: /<\w+>/,
+ inside: Prism2.languages.v.generic.inside
+ }
+ }
+ }
+ });
+ })(Prism);
+ Prism.languages.vala = Prism.languages.extend("clike", {
+ // Classes copied from prism-csharp
+ "class-name": [
+ {
+ // (Foo bar, Bar baz)
+ pattern: /\b[A-Z]\w*(?:\.\w+)*\b(?=(?:\?\s+|\*?\s+\*?)\w)/,
+ inside: {
+ punctuation: /\./
+ }
+ },
+ {
+ // [Foo]
+ pattern: /(\[)[A-Z]\w*(?:\.\w+)*\b/,
+ lookbehind: true,
+ inside: {
+ punctuation: /\./
+ }
+ },
+ {
+ // class Foo : Bar
+ pattern: /(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/,
+ lookbehind: true,
+ inside: {
+ punctuation: /\./
+ }
+ },
+ {
+ // class Foo
+ pattern: /((?:\b(?:class|enum|interface|new|struct)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/,
+ lookbehind: true,
+ inside: {
+ punctuation: /\./
+ }
+ }
+ ],
+ "keyword": /\b(?:abstract|as|assert|async|base|bool|break|case|catch|char|class|const|construct|continue|default|delegate|delete|do|double|dynamic|else|ensures|enum|errordomain|extern|finally|float|for|foreach|get|if|in|inline|int|int16|int32|int64|int8|interface|internal|is|lock|long|namespace|new|null|out|override|owned|params|private|protected|public|ref|requires|return|set|short|signal|sizeof|size_t|ssize_t|static|string|struct|switch|this|throw|throws|try|typeof|uchar|uint|uint16|uint32|uint64|uint8|ulong|unichar|unowned|ushort|using|value|var|virtual|void|volatile|weak|while|yield)\b/i,
+ "function": /\b\w+(?=\s*\()/,
+ "number": /(?:\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?:f|u?l?)?/i,
+ "operator": /\+\+|--|&&|\|\||<<=?|>>=?|=>|->|~|[+\-*\/%&^|=!<>]=?|\?\??|\.\.\./,
+ "punctuation": /[{}[\];(),.:]/,
+ "constant": /\b[A-Z0-9_]+\b/
+ });
+ Prism.languages.insertBefore("vala", "string", {
+ "raw-string": {
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true,
+ alias: "string"
+ },
+ "template-string": {
+ pattern: /@"[\s\S]*?"/,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ pattern: /\$(?:\([^)]*\)|[a-zA-Z]\w*)/,
+ inside: {
+ "delimiter": {
+ pattern: /^\$\(?|\)$/,
+ alias: "punctuation"
+ },
+ rest: Prism.languages.vala
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ }
+ });
+ Prism.languages.insertBefore("vala", "keyword", {
+ "regex": {
+ pattern: /\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/,
+ greedy: true,
+ inside: {
+ "regex-source": {
+ pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
+ lookbehind: true,
+ alias: "language-regex",
+ inside: Prism.languages.regex
+ },
+ "regex-delimiter": /^\//,
+ "regex-flags": /^[a-z]+$/
+ }
+ }
+ });
+ (function(Prism2) {
+ Prism2.languages.velocity = Prism2.languages.extend("markup", {});
+ var velocity = {
+ "variable": {
+ pattern: /(^|[^\\](?:\\\\)*)\$!?(?:[a-z][\w-]*(?:\([^)]*\))?(?:\.[a-z][\w-]*(?:\([^)]*\))?|\[[^\]]+\])*|\{[^}]+\})/i,
+ lookbehind: true,
+ inside: {}
+ // See below
+ },
+ "string": {
+ pattern: /"[^"]*"|'[^']*'/,
+ greedy: true
+ },
+ "number": /\b\d+\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "operator": /[=!<>]=?|[+*/%-]|&&|\|\||\.\.|\b(?:eq|g[et]|l[et]|n(?:e|ot))\b/,
+ "punctuation": /[(){}[\]:,.]/
+ };
+ velocity.variable.inside = {
+ "string": velocity["string"],
+ "function": {
+ pattern: /([^\w-])[a-z][\w-]*(?=\()/,
+ lookbehind: true
+ },
+ "number": velocity["number"],
+ "boolean": velocity["boolean"],
+ "punctuation": velocity["punctuation"]
+ };
+ Prism2.languages.insertBefore("velocity", "comment", {
+ "unparsed": {
+ pattern: /(^|[^\\])#\[\[[\s\S]*?\]\]#/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "punctuation": /^#\[\[|\]\]#$/
+ }
+ },
+ "velocity-comment": [
+ {
+ pattern: /(^|[^\\])#\*[\s\S]*?\*#/,
+ lookbehind: true,
+ greedy: true,
+ alias: "comment"
+ },
+ {
+ pattern: /(^|[^\\])##.*/,
+ lookbehind: true,
+ greedy: true,
+ alias: "comment"
+ }
+ ],
+ "directive": {
+ pattern: /(^|[^\\](?:\\\\)*)#@?(?:[a-z][\w-]*|\{[a-z][\w-]*\})(?:\s*\((?:[^()]|\([^()]*\))*\))?/i,
+ lookbehind: true,
+ inside: {
+ "keyword": {
+ pattern: /^#@?(?:[a-z][\w-]*|\{[a-z][\w-]*\})|\bin\b/,
+ inside: {
+ "punctuation": /[{}]/
+ }
+ },
+ rest: velocity
+ }
+ },
+ "variable": velocity["variable"]
+ });
+ Prism2.languages.velocity["tag"].inside["attr-value"].inside.rest = Prism2.languages.velocity;
+ })(Prism);
+ Prism.languages.verilog = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
+ greedy: true
+ },
+ "kernel-function": {
+ // support for any kernel function (ex: $display())
+ pattern: /\B\$\w+\b/,
+ alias: "property"
+ },
+ // support for user defined constants (ex: `define)
+ "constant": /\B`\w+\b/,
+ "function": /\b\w+(?=\()/,
+ // support for verilog and system verilog keywords
+ "keyword": /\b(?:alias|and|assert|assign|assume|automatic|before|begin|bind|bins|binsof|bit|break|buf|bufif0|bufif1|byte|case|casex|casez|cell|chandle|class|clocking|cmos|config|const|constraint|context|continue|cover|covergroup|coverpoint|cross|deassign|default|defparam|design|disable|dist|do|edge|else|end|endcase|endclass|endclocking|endconfig|endfunction|endgenerate|endgroup|endinterface|endmodule|endpackage|endprimitive|endprogram|endproperty|endsequence|endspecify|endtable|endtask|enum|event|expect|export|extends|extern|final|first_match|for|force|foreach|forever|fork|forkjoin|function|generate|genvar|highz0|highz1|if|iff|ifnone|ignore_bins|illegal_bins|import|incdir|include|initial|inout|input|inside|instance|int|integer|interface|intersect|join|join_any|join_none|large|liblist|library|local|localparam|logic|longint|macromodule|matches|medium|modport|module|nand|negedge|new|nmos|nor|noshowcancelled|not|notif0|notif1|null|or|output|package|packed|parameter|pmos|posedge|primitive|priority|program|property|protected|pull0|pull1|pulldown|pullup|pulsestyle_ondetect|pulsestyle_onevent|pure|rand|randc|randcase|randsequence|rcmos|real|realtime|ref|reg|release|repeat|return|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|sequence|shortint|shortreal|showcancelled|signed|small|solve|specify|specparam|static|string|strong0|strong1|struct|super|supply0|supply1|table|tagged|task|this|throughout|time|timeprecision|timeunit|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|type|typedef|union|unique|unsigned|use|uwire|var|vectored|virtual|void|wait|wait_order|wand|weak0|weak1|while|wildcard|wire|with|within|wor|xnor|xor)\b/,
+ // bold highlighting for all verilog and system verilog logic blocks
+ "important": /\b(?:always|always_comb|always_ff|always_latch)\b(?: *@)?/,
+ // support for time ticks, vectors, and real numbers
+ "number": /\B##?\d+|(?:\b\d+)?'[odbh] ?[\da-fzx_?]+|\b(?:\d*[._])?\d+(?:e[-+]?\d+)?/i,
+ "operator": /[-+{}^~%*\/?=!<>&|]+/,
+ "punctuation": /[[\];(),.:]/
+ };
+ Prism.languages.vhdl = {
+ "comment": /--.+/,
+ // support for all logic vectors
+ "vhdl-vectors": {
+ "pattern": /\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i,
+ "alias": "number"
+ },
+ // support for operator overloading included
+ "quoted-function": {
+ pattern: /"\S+?"(?=\()/,
+ alias: "function"
+ },
+ "string": /"(?:[^\\"\r\n]|\\(?:\r\n|[\s\S]))*"/,
+ "attribute": {
+ pattern: /\b'\w+/,
+ alias: "attr-name"
+ },
+ // support for predefined attributes included
+ "keyword": /\b(?:access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|private|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|view|wait|when|while|with)\b/i,
+ "boolean": /\b(?:false|true)\b/i,
+ "function": /\w+(?=\()/,
+ // decimal, based, physical, and exponential numbers supported
+ "number": /'[01uxzwlh-]'|\b(?:\d+#[\da-f_.]+#|\d[\d_.]*)(?:e[-+]?\d+)?/i,
+ "operator": /[<>]=?|:=|[-+*/&=]|\b(?:abs|and|mod|nand|nor|not|or|rem|rol|ror|sla|sll|sra|srl|xnor|xor)\b/i,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.vim = {
+ "string": /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,
+ "comment": /".*/,
+ "function": /\b\w+(?=\()/,
+ "keyword": /\b(?:N|Next|P|Print|X|XMLent|XMLns|ab|abbreviate|abc|abclear|abo|aboveleft|al|all|ar|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|args|argu|argument|as|ascii|b|bN|bNext|ba|bad|badd|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bo|botright|bp|bprevious|br|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|brewind|bro|browse|bufdo|buffer|buffers|bun|bunload|bw|bwipeout|c|cN|cNext|cNfcNfile|ca|cabbrev|cabc|cabclear|cad|caddb|caddbuffer|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cg|cgetb|cgetbuffer|cgete|cgetexpr|cgetfile|change|changes|chd|chdir|che|checkpath|checkt|checktime|cl|cla|clast|clist|clo|close|cmapc|cmapclear|cn|cnew|cnewer|cnext|cnf|cnfile|cnorea|cnoreabbrev|co|col|colder|colo|colorscheme|comc|comclear|comp|compiler|con|conf|confirm|continue|cope|copen|copy|cp|cpf|cpfile|cprevious|cq|cquit|cr|crewind|cu|cuna|cunabbrev|cunmap|cw|cwindow|d|debugg|debuggreedy|delc|delcommand|delete|delf|delfunction|delm|delmarks|di|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|e|earlier|echoe|echoerr|echom|echomsg|echon|edit|el|else|elsei|elseif|em|emenu|en|endf|endfo|endfor|endfun|endfunction|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fin|fina|finally|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|foldd|folddoc|folddoclosed|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|h|ha|hardcopy|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iu|iuna|iunabbrev|iunmap|j|join|ju|jumps|k|kee|keepalt|keepj|keepjumps|keepmarks|l|lN|lNext|lNf|lNfile|la|lad|laddb|laddbuffer|laddexpr|laddf|laddfile|lan|language|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|left|lefta|leftabove|let|lex|lexpr|lf|lfile|lfir|lfirst|lg|lgetb|lgetbuffer|lgete|lgetexpr|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|list|ll|lla|llast|lli|llist|lm|lmak|lmake|lmap|lmapc|lmapclear|ln|lne|lnew|lnewer|lnext|lnf|lnfile|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lp|lpf|lpfile|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|m|ma|mak|make|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkv|mkvie|mkview|mkvimrc|mod|mode|move|mz|mzf|mzfile|mzscheme|n|nbkey|new|next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|o|omapc|omapclear|on|only|open|opt|options|ou|ounmap|p|pc|pclose|pe|ped|pedit|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|print|prof|profd|profdel|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|ptN|ptNext|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|py|pyf|pyfile|python|q|qa|qall|quit|quita|quitall|r|read|rec|recover|red|redi|redir|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|ru|rub|ruby|rubyd|rubydo|rubyf|rubyfile|runtime|rv|rviminfo|sN|sNext|sa|sal|sall|san|sandbox|sargument|sav|saveas|sb|sbN|sbNext|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbp|sbprevious|sbr|sbrewind|sbuffer|scrip|scripte|scriptencoding|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sl|sla|slast|sleep|sm|smagic|smap|smapc|smapclear|sme|smenu|sn|snext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|so|sor|sort|source|sp|spe|spelld|spelldump|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|split|spr|sprevious|sre|srewind|st|sta|stag|star|startg|startgreplace|startinsert|startr|startreplace|stj|stjump|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tN|tNext|ta|tab|tabN|tabNext|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabn|tabnew|tabnext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tmenu|tn|tnext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tunmenu|u|una|unabbreviate|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|ve|verb|verbose|version|vert|vertical|vi|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|w|wN|wNext|wa|wall|wh|while|win|winc|wincmd|windo|winp|winpos|winsize|wn|wnext|wp|wprevious|wq|wqa|wqall|write|ws|wsverb|wv|wviminfo|x|xa|xall|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,
+ "builtin": /\b(?:acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autocmd|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|t_AB|t_AF|t_AL|t_CS|t_CV|t_Ce|t_Co|t_Cs|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_IE|t_IS|t_K1|t_K3|t_K4|t_K5|t_K6|t_K7|t_K8|t_K9|t_KA|t_KB|t_KC|t_KD|t_KE|t_KF|t_KG|t_KH|t_KI|t_KJ|t_KK|t_KL|t_RI|t_RV|t_SI|t_Sb|t_Sf|t_WP|t_WS|t_ZH|t_ZR|t_al|t_bc|t_cd|t_ce|t_cl|t_cm|t_cs|t_da|t_db|t_dl|t_fs|t_k1|t_k2|t_k3|t_k4|t_k5|t_k6|t_k7|t_k8|t_k9|t_kB|t_kD|t_kI|t_kN|t_kP|t_kb|t_kd|t_ke|t_kh|t_kl|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_se|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_xs|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww)\b/,
+ "number": /\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,
+ "operator": /\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,
+ "punctuation": /[{}[\](),;:]/
+ };
+ Prism.languages["visual-basic"] = {
+ "comment": {
+ pattern: /(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,
+ inside: {
+ "keyword": /^REM/i
+ }
+ },
+ "directive": {
+ pattern: /#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\b_[ \t]*(?:\r\n?|\n)|.)+/i,
+ alias: "property",
+ greedy: true
+ },
+ "string": {
+ pattern: /\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,
+ greedy: true
+ },
+ "date": {
+ pattern: /#[ \t]*(?:\d+([/-])\d+\1\d+(?:[ \t]+(?:\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?))?|\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?)[ \t]*#/i,
+ alias: "number"
+ },
+ "number": /(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:[FRD]|U?[ILS])?/i,
+ "boolean": /\b(?:False|Nothing|True)\b/i,
+ "keyword": /\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\b/i,
+ "operator": /[+\-*/\\^<=>&#@$%!]|\b_(?=[ \t]*[\r\n])/,
+ "punctuation": /[{}().,:?]/
+ };
+ Prism.languages.vb = Prism.languages["visual-basic"];
+ Prism.languages.vba = Prism.languages["visual-basic"];
+ Prism.languages.warpscript = {
+ "comment": /#.*|\/\/.*|\/\*[\s\S]*?\*\//,
+ "string": {
+ pattern: /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'|<'(?:[^\\']|'(?!>)|\\.)*'>/,
+ greedy: true
+ },
+ "variable": /\$\S+/,
+ "macro": {
+ pattern: /@\S+/,
+ alias: "property"
+ },
+ // WarpScript doesn't have any keywords, these are all functions under the control category
+ // https://www.warp10.io/tags/control
+ "keyword": /\b(?:BREAK|CHECKMACRO|CONTINUE|CUDF|DEFINED|DEFINEDMACRO|EVAL|FAIL|FOR|FOREACH|FORSTEP|IFT|IFTE|MSGFAIL|NRETURN|RETHROW|RETURN|SWITCH|TRY|UDF|UNTIL|WHILE)\b/,
+ "number": /[+-]?\b(?:NaN|Infinity|\d+(?:\.\d*)?(?:[Ee][+-]?\d+)?|0x[\da-fA-F]+|0b[01]+)\b/,
+ "boolean": /\b(?:F|T|false|true)\b/,
+ "punctuation": /<%|%>|[{}[\]()]/,
+ // Some operators from the "operators" category
+ // https://www.warp10.io/tags/operators
+ "operator": /==|&&?|\|\|?|\*\*?|>>>?|<<|[<>!~]=?|[-/%^]|\+!?|\b(?:AND|NOT|OR)\b/
+ };
+ Prism.languages.wasm = {
+ "comment": [
+ /\(;[\s\S]*?;\)/,
+ {
+ pattern: /;;.*/,
+ greedy: true
+ }
+ ],
+ "string": {
+ pattern: /"(?:\\[\s\S]|[^"\\])*"/,
+ greedy: true
+ },
+ "keyword": [
+ {
+ pattern: /\b(?:align|offset)=/,
+ inside: {
+ "operator": /=/
+ }
+ },
+ {
+ pattern: /\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,
+ inside: {
+ "punctuation": /\./
+ }
+ },
+ /\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/
+ ],
+ "variable": /\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,
+ "number": /[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,
+ "punctuation": /[()]/
+ };
+ (function(Prism2) {
+ var id = /(?:\B-|\b_|\b)[A-Za-z][\w-]*(?![\w-])/.source;
+ var type = "(?:" + /\b(?:unsigned\s+)?long\s+long(?![\w-])/.source + "|" + /\b(?:unrestricted|unsigned)\s+[a-z]+(?![\w-])/.source + "|" + /(?!(?:unrestricted|unsigned)\b)/.source + id + /(?:\s*<(?:[^<>]|<[^<>]*>)*>)?/.source + ")" + /(?:\s*\?)?/.source;
+ var typeInside = {};
+ Prism2.languages["web-idl"] = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
+ greedy: true
+ },
+ "string": {
+ pattern: /"[^"]*"/,
+ greedy: true
+ },
+ "namespace": {
+ pattern: RegExp(/(\bnamespace\s+)/.source + id),
+ lookbehind: true
+ },
+ "class-name": [
+ {
+ pattern: /(^|[^\w-])(?:iterable|maplike|setlike)\s*<(?:[^<>]|<[^<>]*>)*>/,
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ pattern: RegExp(/(\b(?:attribute|const|deleter|getter|optional|setter)\s+)/.source + type),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // callback return type
+ pattern: RegExp("(" + /\bcallback\s+/.source + id + /\s*=\s*/.source + ")" + type),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ // typedef
+ pattern: RegExp(/(\btypedef\b\s*)/.source + type),
+ lookbehind: true,
+ inside: typeInside
+ },
+ {
+ pattern: RegExp(/(\b(?:callback|dictionary|enum|interface(?:\s+mixin)?)\s+)(?!(?:interface|mixin)\b)/.source + id),
+ lookbehind: true
+ },
+ {
+ // inheritance
+ pattern: RegExp(/(:\s*)/.source + id),
+ lookbehind: true
+ },
+ // includes and implements
+ RegExp(id + /(?=\s+(?:implements|includes)\b)/.source),
+ {
+ pattern: RegExp(/(\b(?:implements|includes)\s+)/.source + id),
+ lookbehind: true
+ },
+ {
+ // function return type, parameter types, and dictionary members
+ pattern: RegExp(type + "(?=" + /\s*(?:\.{3}\s*)?/.source + id + /\s*[(),;=]/.source + ")"),
+ inside: typeInside
+ }
+ ],
+ "builtin": /\b(?:ArrayBuffer|BigInt64Array|BigUint64Array|ByteString|DOMString|DataView|Float32Array|Float64Array|FrozenArray|Int16Array|Int32Array|Int8Array|ObservableArray|Promise|USVString|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray)\b/,
+ "keyword": [
+ /\b(?:async|attribute|callback|const|constructor|deleter|dictionary|enum|getter|implements|includes|inherit|interface|mixin|namespace|null|optional|or|partial|readonly|required|setter|static|stringifier|typedef|unrestricted)\b/,
+ // type keywords
+ /\b(?:any|bigint|boolean|byte|double|float|iterable|long|maplike|object|octet|record|sequence|setlike|short|symbol|undefined|unsigned|void)\b/
+ ],
+ "boolean": /\b(?:false|true)\b/,
+ "number": {
+ pattern: /(^|[^\w-])-?(?:0x[0-9a-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|NaN|Infinity)(?![\w-])/i,
+ lookbehind: true
+ },
+ "operator": /\.{3}|[=:?<>-]/,
+ "punctuation": /[(){}[\].,;]/
+ };
+ for (var key in Prism2.languages["web-idl"]) {
+ if (key !== "class-name") {
+ typeInside[key] = Prism2.languages["web-idl"][key];
+ }
+ }
+ Prism2.languages["webidl"] = Prism2.languages["web-idl"];
+ })(Prism);
+ Prism.languages.wgsl = {
+ "comment": {
+ pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ greedy: true
+ },
+ "builtin-attribute": {
+ pattern: /(@)builtin\(.*?\)/,
+ lookbehind: true,
+ inside: {
+ "attribute": {
+ pattern: /^builtin/,
+ alias: "attr-name"
+ },
+ "punctuation": /[(),]/,
+ "built-in-values": {
+ pattern: /\b(?:frag_depth|front_facing|global_invocation_id|instance_index|local_invocation_id|local_invocation_index|num_workgroups|position|sample_index|sample_mask|vertex_index|workgroup_id)\b/,
+ alias: "attr-value"
+ }
+ }
+ },
+ "attributes": {
+ pattern: /(@)(?:align|binding|compute|const|fragment|group|id|interpolate|invariant|location|size|vertex|workgroup_size)/i,
+ lookbehind: true,
+ alias: "attr-name"
+ },
+ "functions": {
+ pattern: /\b(fn\s+)[_a-zA-Z]\w*(?=[(<])/,
+ lookbehind: true,
+ alias: "function"
+ },
+ "keyword": /\b(?:bitcast|break|case|const|continue|continuing|default|discard|else|enable|fallthrough|fn|for|function|if|let|loop|private|return|storage|struct|switch|type|uniform|var|while|workgroup)\b/,
+ "builtin": /\b(?:abs|acos|acosh|all|any|array|asin|asinh|atan|atan2|atanh|atomic|atomicAdd|atomicAnd|atomicCompareExchangeWeak|atomicExchange|atomicLoad|atomicMax|atomicMin|atomicOr|atomicStore|atomicSub|atomicXor|bool|ceil|clamp|cos|cosh|countLeadingZeros|countOneBits|countTrailingZeros|cross|degrees|determinant|distance|dot|dpdx|dpdxCoarse|dpdxFine|dpdy|dpdyCoarse|dpdyFine|exp|exp2|extractBits|f32|f64|faceForward|firstLeadingBit|floor|fma|fract|frexp|fwidth|fwidthCoarse|fwidthFine|i32|i64|insertBits|inverseSqrt|ldexp|length|log|log2|mat[2-4]x[2-4]|max|min|mix|modf|normalize|override|pack2x16float|pack2x16snorm|pack2x16unorm|pack4x8snorm|pack4x8unorm|pow|ptr|quantizeToF16|radians|reflect|refract|reverseBits|round|sampler|sampler_comparison|select|shiftLeft|shiftRight|sign|sin|sinh|smoothstep|sqrt|staticAssert|step|storageBarrier|tan|tanh|textureDimensions|textureGather|textureGatherCompare|textureLoad|textureNumLayers|textureNumLevels|textureNumSamples|textureSample|textureSampleBias|textureSampleCompare|textureSampleCompareLevel|textureSampleGrad|textureSampleLevel|textureStore|texture_1d|texture_2d|texture_2d_array|texture_3d|texture_cube|texture_cube_array|texture_depth_2d|texture_depth_2d_array|texture_depth_cube|texture_depth_cube_array|texture_depth_multisampled_2d|texture_multisampled_2d|texture_storage_1d|texture_storage_2d|texture_storage_2d_array|texture_storage_3d|transpose|trunc|u32|u64|unpack2x16float|unpack2x16snorm|unpack2x16unorm|unpack4x8snorm|unpack4x8unorm|vec[2-4]|workgroupBarrier)\b/,
+ "function-calls": {
+ pattern: /\b[_a-z]\w*(?=\()/i,
+ alias: "function"
+ },
+ "class-name": /\b(?:[A-Z][A-Za-z0-9]*)\b/,
+ "bool-literal": {
+ pattern: /\b(?:false|true)\b/,
+ alias: "boolean"
+ },
+ "hex-int-literal": {
+ pattern: /\b0[xX][0-9a-fA-F]+[iu]?\b(?![.pP])/,
+ alias: "number"
+ },
+ "hex-float-literal": {
+ pattern: /\b0[xX][0-9a-fA-F]*(?:\.[0-9a-fA-F]*)?(?:[pP][+-]?\d+[fh]?)?/,
+ alias: "number"
+ },
+ "decimal-float-literal": [
+ { pattern: /\d*\.\d+(?:[eE](?:\+|-)?\d+)?[fh]?/, alias: "number" },
+ { pattern: /\d+\.\d*(?:[eE](?:\+|-)?\d+)?[fh]?/, alias: "number" },
+ { pattern: /\d+[eE](?:\+|-)?\d+[fh]?/, alias: "number" },
+ { pattern: /\b\d+[fh]\b/, alias: "number" }
+ ],
+ "int-literal": {
+ pattern: /\b\d+[iu]?\b/,
+ alias: "number"
+ },
+ "operator": [
+ { pattern: /(?:\^|~|\|(?!\|)|\|\||&&|<<|>>|!)(?!=)/ },
+ { pattern: /&(?![&=])/ },
+ { pattern: /(?:\+=|-=|\*=|\/=|%=|\^=|&=|\|=|<<=|>>=)/ },
+ { pattern: /(^|[^<>=!])=(?![=>])/, lookbehind: true },
+ { pattern: /(?:==|!=|<=|\+\+|--|(^|[^=])>=)/, lookbehind: true },
+ { pattern: /(?:(?:[+%]|(?:\*(?!\w)))(?!=))|(?:-(?!>))|(?:\/(?!\/))/ },
+ { pattern: /->/ }
+ ],
+ "punctuation": /[@(){}[\],;<>:.]/
+ };
+ Prism.languages.wiki = Prism.languages.extend("markup", {
+ "block-comment": {
+ pattern: /(^|[^\\])\/\*[\s\S]*?\*\//,
+ lookbehind: true,
+ alias: "comment"
+ },
+ "heading": {
+ pattern: /^(=+)[^=\r\n].*?\1/m,
+ inside: {
+ "punctuation": /^=+|=+$/,
+ "important": /.+/
+ }
+ },
+ "emphasis": {
+ // TODO Multi-line
+ pattern: /('{2,5}).+?\1/,
+ inside: {
+ "bold-italic": {
+ pattern: /(''''').+?(?=\1)/,
+ lookbehind: true,
+ alias: ["bold", "italic"]
+ },
+ "bold": {
+ pattern: /(''')[^'](?:.*?[^'])?(?=\1)/,
+ lookbehind: true
+ },
+ "italic": {
+ pattern: /('')[^'](?:.*?[^'])?(?=\1)/,
+ lookbehind: true
+ },
+ "punctuation": /^''+|''+$/
+ }
+ },
+ "hr": {
+ pattern: /^-{4,}/m,
+ alias: "punctuation"
+ },
+ "url": [
+ /ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:PMID|RFC) +\d+/i,
+ /\[\[.+?\]\]|\[.+?\]/
+ ],
+ "variable": [
+ /__[A-Z]+__/,
+ // FIXME Nested structures should be handled
+ // {{formatnum:{{#expr:{{{3}}}}}}}
+ /\{{3}.+?\}{3}/,
+ /\{\{.+?\}\}/
+ ],
+ "symbol": [
+ /^#redirect/im,
+ /~{3,5}/
+ ],
+ // Handle table attrs:
+ // {|
+ // ! style="text-align:left;"| Item
+ // |}
+ "table-tag": {
+ pattern: /((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m,
+ lookbehind: true,
+ inside: {
+ "table-bar": {
+ pattern: /\|$/,
+ alias: "punctuation"
+ },
+ rest: Prism.languages.markup["tag"].inside
+ }
+ },
+ "punctuation": /^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m
+ });
+ Prism.languages.insertBefore("wiki", "tag", {
+ // Prevent highlighting inside <nowiki>, <source> and <pre> tags
+ "nowiki": {
+ pattern: /<(nowiki|pre|source)\b[^>]*>[\s\S]*?<\/\1>/i,
+ inside: {
+ "tag": {
+ pattern: /<(?:nowiki|pre|source)\b[^>]*>|<\/(?:nowiki|pre|source)>/i,
+ inside: Prism.languages.markup["tag"].inside
+ }
+ }
+ }
+ });
+ Prism.languages.wolfram = {
+ "comment": (
+ // Allow one level of nesting - note: regex taken from applescipt
+ /\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/
+ ),
+ "string": {
+ pattern: /"(?:\\.|[^"\\\r\n])*"/,
+ greedy: true
+ },
+ "keyword": /\b(?:Abs|AbsArg|Accuracy|Block|Do|For|Function|If|Manipulate|Module|Nest|NestList|None|Return|Switch|Table|Which|While)\b/,
+ "context": {
+ pattern: /\b\w+`+\w*/,
+ alias: "class-name"
+ },
+ "blank": {
+ pattern: /\b\w+_\b/,
+ alias: "regex"
+ },
+ "global-variable": {
+ pattern: /\$\w+/,
+ alias: "variable"
+ },
+ "boolean": /\b(?:False|True)\b/,
+ "number": /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,
+ "operator": /\/\.|;|=\.|\^=|\^:=|:=|<<|>>|<\||\|>|:>|\|->|->|<-|@@@|@@|@|\/@|=!=|===|==|=|\+|-|\[\/-+%=\]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
+ "punctuation": /[{}[\];(),.:]/
+ };
+ Prism.languages.mathematica = Prism.languages.wolfram;
+ Prism.languages.wl = Prism.languages.wolfram;
+ Prism.languages.nb = Prism.languages.wolfram;
+ Prism.languages.wren = {
+ // Multiline comments in Wren can have nested multiline comments
+ // Comments: // and /* */
+ "comment": [
+ {
+ // support 3 levels of nesting
+ // regex: \/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\/
+ pattern: /\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*))*\*\/)*\*\/)*\*\//,
+ greedy: true
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ // Triple quoted strings are multiline but cannot have interpolation (raw strings)
+ // Based on prism-python.js
+ "triple-quoted-string": {
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true,
+ alias: "string"
+ },
+ // see below
+ "string-literal": null,
+ // #!/usr/bin/env wren on the first line
+ "hashbang": {
+ pattern: /^#!\/.+/,
+ greedy: true,
+ alias: "comment"
+ },
+ // Attributes are special keywords to add meta data to classes
+ "attribute": {
+ // #! attributes are stored in class properties
+ // #!myvar = true
+ // #attributes are not stored and dismissed at compilation
+ pattern: /#!?[ \t\u3000]*\w+/,
+ alias: "keyword"
+ },
+ "class-name": [
+ {
+ // class definition
+ // class Meta {}
+ pattern: /(\bclass\s+)\w+/,
+ lookbehind: true
+ },
+ // A class must always start with an uppercase.
+ // File.read
+ /\b[A-Z][a-z\d_]*\b/
+ ],
+ // A constant can be a variable, class, property or method. Just named in all uppercase letters
+ "constant": /\b[A-Z][A-Z\d_]*\b/,
+ "null": {
+ pattern: /\bnull\b/,
+ alias: "keyword"
+ },
+ "keyword": /\b(?:as|break|class|construct|continue|else|for|foreign|if|import|in|is|return|static|super|this|var|while)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "number": /\b(?:0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,
+ // Functions can be Class.method()
+ "function": /\b[a-z_]\w*(?=\s*[({])/i,
+ "operator": /<<|>>|[=!<>]=?|&&|\|\||[-+*/%~^&|?:]|\.{2,3}/,
+ "punctuation": /[\[\](){}.,;]/
+ };
+ Prism.languages.wren["string-literal"] = {
+ // A single quote string is multiline and can have interpolation (similar to JS backticks ``)
+ pattern: /(^|[^\\"])"(?:[^\\"%]|\\[\s\S]|%(?!\()|%\((?:[^()]|\((?:[^()]|\([^)]*\))*\))*\))*"/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ "interpolation": {
+ // "%(interpolation)"
+ pattern: /((?:^|[^\\])(?:\\{2})*)%\((?:[^()]|\((?:[^()]|\([^)]*\))*\))*\)/,
+ lookbehind: true,
+ inside: {
+ "expression": {
+ pattern: /^(%\()[\s\S]+(?=\)$)/,
+ lookbehind: true,
+ inside: Prism.languages.wren
+ },
+ "interpolation-punctuation": {
+ pattern: /^%\(|\)$/,
+ alias: "punctuation"
+ }
+ }
+ },
+ "string": /[\s\S]+/
+ }
+ };
+ (function(Prism2) {
+ Prism2.languages.xeora = Prism2.languages.extend("markup", {
+ "constant": {
+ pattern: /\$(?:DomainContents|PageRenderDuration)\$/,
+ inside: {
+ "punctuation": {
+ pattern: /\$/
+ }
+ }
+ },
+ "variable": {
+ pattern: /\$@?(?:#+|[-+*~=^])?[\w.]+\$/,
+ inside: {
+ "punctuation": {
+ pattern: /[$.]/
+ },
+ "operator": {
+ pattern: /#+|[-+*~=^@]/
+ }
+ }
+ },
+ "function-inline": {
+ pattern: /\$F:[-\w.]+\?[-\w.]+(?:,(?:(?:@[-#]*\w+\.[\w+.]\.*)*\|)*(?:(?:[\w+]|[-#*.~^]+[\w+]|=\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\w+\.[\w+.]\.*)+(?:(?:[\w+]|[-#*~^][-#*.~^]*[\w+]|=\S)(?:[^$=]|=+[^=])*=*)?)?)?\$/,
+ inside: {
+ "variable": {
+ pattern: /(?:[,|])@?(?:#+|[-+*~=^])?[\w.]+/,
+ inside: {
+ "punctuation": {
+ pattern: /[,.|]/
+ },
+ "operator": {
+ pattern: /#+|[-+*~=^@]/
+ }
+ }
+ },
+ "punctuation": {
+ pattern: /\$\w:|[$:?.,|]/
+ }
+ },
+ alias: "function"
+ },
+ "function-block": {
+ pattern: /\$XF:\{[-\w.]+\?[-\w.]+(?:,(?:(?:@[-#]*\w+\.[\w+.]\.*)*\|)*(?:(?:[\w+]|[-#*.~^]+[\w+]|=\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\w+\.[\w+.]\.*)+(?:(?:[\w+]|[-#*~^][-#*.~^]*[\w+]|=\S)(?:[^$=]|=+[^=])*=*)?)?)?\}:XF\$/,
+ inside: {
+ "punctuation": {
+ pattern: /[$:{}?.,|]/
+ }
+ },
+ alias: "function"
+ },
+ "directive-inline": {
+ pattern: /\$\w(?:#\d+\+?)?(?:\[[-\w.]+\])?:[-\/\w.]+\$/,
+ inside: {
+ "punctuation": {
+ pattern: /\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/,
+ inside: {
+ "tag": {
+ pattern: /#\d/
+ }
+ }
+ }
+ },
+ alias: "function"
+ },
+ "directive-block-open": {
+ pattern: /\$\w+:\{|\$\w(?:#\d+\+?)?(?:\[[-\w.]+\])?:[-\w.]+:\{(?:![A-Z]+)?/,
+ inside: {
+ "punctuation": {
+ pattern: /\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/,
+ inside: {
+ "tag": {
+ pattern: /#\d/
+ }
+ }
+ },
+ "attribute": {
+ pattern: /![A-Z]+$/,
+ inside: {
+ "punctuation": {
+ pattern: /!/
+ }
+ },
+ alias: "keyword"
+ }
+ },
+ alias: "function"
+ },
+ "directive-block-separator": {
+ pattern: /\}:[-\w.]+:\{/,
+ inside: {
+ "punctuation": {
+ pattern: /[:{}]/
+ }
+ },
+ alias: "function"
+ },
+ "directive-block-close": {
+ pattern: /\}:[-\w.]+\$/,
+ inside: {
+ "punctuation": {
+ pattern: /[:{}$]/
+ }
+ },
+ alias: "function"
+ }
+ });
+ Prism2.languages.insertBefore("inside", "punctuation", {
+ "variable": Prism2.languages.xeora["function-inline"].inside["variable"]
+ }, Prism2.languages.xeora["function-block"]);
+ Prism2.languages.xeoracube = Prism2.languages.xeora;
+ })(Prism);
+ (function(Prism2) {
+ function insertDocComment(lang, docComment) {
+ if (Prism2.languages[lang]) {
+ Prism2.languages.insertBefore(lang, "comment", {
+ "doc-comment": docComment
+ });
+ }
+ }
+ var tag = Prism2.languages.markup.tag;
+ var slashDocComment = {
+ pattern: /\/\/\/.*/,
+ greedy: true,
+ alias: "comment",
+ inside: {
+ "tag": tag
+ }
+ };
+ var tickDocComment = {
+ pattern: /'''.*/,
+ greedy: true,
+ alias: "comment",
+ inside: {
+ "tag": tag
+ }
+ };
+ insertDocComment("csharp", slashDocComment);
+ insertDocComment("fsharp", slashDocComment);
+ insertDocComment("vbnet", tickDocComment);
+ })(Prism);
+ Prism.languages.xojo = {
+ "comment": {
+ pattern: /(?:'|\/\/|Rem\b).+/i,
+ greedy: true
+ },
+ "string": {
+ pattern: /"(?:""|[^"])*"/,
+ greedy: true
+ },
+ "number": [
+ /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,
+ /&[bchou][a-z\d]+/i
+ ],
+ "directive": {
+ pattern: /#(?:Else|ElseIf|Endif|If|Pragma)\b/i,
+ alias: "property"
+ },
+ "keyword": /\b(?:AddHandler|App|Array|As(?:signs)?|Auto|Boolean|Break|By(?:Ref|Val)|Byte|Call|Case|Catch|CFStringRef|CGFloat|Class|Color|Const|Continue|CString|Currency|CurrentMethodName|Declare|Delegate|Dim|Do(?:uble|wnTo)?|Each|Else(?:If)?|End|Enumeration|Event|Exception|Exit|Extends|False|Finally|For|Function|Get|GetTypeInfo|Global|GOTO|If|Implements|In|Inherits|Int(?:8|16|32|64|eger|erface)?|Lib|Loop|Me|Module|Next|Nil|Object|Optional|OSType|ParamArray|Private|Property|Protected|PString|Ptr|Raise(?:Event)?|ReDim|RemoveHandler|Return|Select(?:or)?|Self|Set|Shared|Short|Single|Soft|Static|Step|String|Sub|Super|Text|Then|To|True|Try|Ubound|UInt(?:8|16|32|64|eger)?|Until|Using|Var(?:iant)?|Wend|While|WindowPtr|WString)\b/i,
+ "operator": /<[=>]?|>=?|[+\-*\/\\^=]|\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|WeakAddressOf|Xor)\b/i,
+ "punctuation": /[.,;:()]/
+ };
+ (function(Prism2) {
+ Prism2.languages.xquery = Prism2.languages.extend("markup", {
+ "xquery-comment": {
+ pattern: /\(:[\s\S]*?:\)/,
+ greedy: true,
+ alias: "comment"
+ },
+ "string": {
+ pattern: /(["'])(?:\1\1|(?!\1)[\s\S])*\1/,
+ greedy: true
+ },
+ "extension": {
+ pattern: /\(#.+?#\)/,
+ alias: "symbol"
+ },
+ "variable": /\$[-\w:]+/,
+ "axis": {
+ pattern: /(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "keyword-operator": {
+ pattern: /(^|[^:-])\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\b(?=$|[^:-])/,
+ lookbehind: true,
+ alias: "operator"
+ },
+ "keyword": {
+ pattern: /(^|[^:-])\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\b(?=$|[^:-])/,
+ lookbehind: true
+ },
+ "function": /[\w-]+(?::[\w-]+)*(?=\s*\()/,
+ "xquery-element": {
+ pattern: /(element\s+)[\w-]+(?::[\w-]+)*/,
+ lookbehind: true,
+ alias: "tag"
+ },
+ "xquery-attribute": {
+ pattern: /(attribute\s+)[\w-]+(?::[\w-]+)*/,
+ lookbehind: true,
+ alias: "attr-name"
+ },
+ "builtin": {
+ pattern: /(^|[^:-])\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:ENTITIES|ENTITY|ID|IDREFS?|NCName|NMTOKENS?|NOTATION|Name|QName|anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|int|integer|language|long|negativeInteger|nonNegativeInteger|nonPositiveInteger|normalizedString|positiveInteger|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\b(?=$|[^:-])/,
+ lookbehind: true
+ },
+ "number": /\b\d+(?:\.\d+)?(?:E[+-]?\d+)?/,
+ "operator": [
+ /[+*=?|@]|\.\.?|:=|!=|<[=<]?|>[=>]?/,
+ {
+ pattern: /(\s)-(?=\s)/,
+ lookbehind: true
+ }
+ ],
+ "punctuation": /[[\](){},;:/]/
+ });
+ Prism2.languages.xquery.tag.pattern = /<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/;
+ Prism2.languages.xquery["tag"].inside["attr-value"].pattern = /=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+)/;
+ Prism2.languages.xquery["tag"].inside["attr-value"].inside["punctuation"] = /^="|"$/;
+ Prism2.languages.xquery["tag"].inside["attr-value"].inside["expression"] = {
+ // Allow for two levels of nesting
+ pattern: /\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}/,
+ inside: Prism2.languages.xquery,
+ alias: "language-xquery"
+ };
+ var stringifyToken = function(token) {
+ if (typeof token === "string") {
+ return token;
+ }
+ if (typeof token.content === "string") {
+ return token.content;
+ }
+ return token.content.map(stringifyToken).join("");
+ };
+ var walkTokens = function(tokens) {
+ var openedTags = [];
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ var notTagNorBrace = false;
+ if (typeof token !== "string") {
+ if (token.type === "tag" && token.content[0] && token.content[0].type === "tag") {
+ if (token.content[0].content[0].content === "</") {
+ if (openedTags.length > 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) {
+ openedTags.pop();
+ }
+ } else {
+ if (token.content[token.content.length - 1].content === "/>") {
+ } else {
+ openedTags.push({
+ tagName: stringifyToken(token.content[0].content[1]),
+ openedBraces: 0
+ });
+ }
+ }
+ } else if (openedTags.length > 0 && token.type === "punctuation" && token.content === "{" && // Ignore `{{`
+ (!tokens[i + 1] || tokens[i + 1].type !== "punctuation" || tokens[i + 1].content !== "{") && (!tokens[i - 1] || tokens[i - 1].type !== "plain-text" || tokens[i - 1].content !== "{")) {
+ openedTags[openedTags.length - 1].openedBraces++;
+ } else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === "punctuation" && token.content === "}") {
+ openedTags[openedTags.length - 1].openedBraces--;
+ } else if (token.type !== "comment") {
+ notTagNorBrace = true;
+ }
+ }
+ if (notTagNorBrace || typeof token === "string") {
+ if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) {
+ var plainText = stringifyToken(token);
+ if (i < tokens.length - 1 && (typeof tokens[i + 1] === "string" || tokens[i + 1].type === "plain-text")) {
+ plainText += stringifyToken(tokens[i + 1]);
+ tokens.splice(i + 1, 1);
+ }
+ if (i > 0 && (typeof tokens[i - 1] === "string" || tokens[i - 1].type === "plain-text")) {
+ plainText = stringifyToken(tokens[i - 1]) + plainText;
+ tokens.splice(i - 1, 1);
+ i--;
+ }
+ if (/^\s+$/.test(plainText)) {
+ tokens[i] = plainText;
+ } else {
+ tokens[i] = new Prism2.Token("plain-text", plainText, null, plainText);
+ }
+ }
+ }
+ if (token.content && typeof token.content !== "string") {
+ walkTokens(token.content);
+ }
+ }
+ };
+ Prism2.hooks.add("after-tokenize", function(env) {
+ if (env.language !== "xquery") {
+ return;
+ }
+ walkTokens(env.tokens);
+ });
+ })(Prism);
+ Prism.languages.yang = {
+ // https://tools.ietf.org/html/rfc6020#page-34
+ // http://www.yang-central.org/twiki/bin/view/Main/YangExamples
+ "comment": /\/\*[\s\S]*?\*\/|\/\/.*/,
+ "string": {
+ pattern: /"(?:[^\\"]|\\.)*"|'[^']*'/,
+ greedy: true
+ },
+ "keyword": {
+ pattern: /(^|[{};\r\n][ \t]*)[a-z_][\w.-]*/i,
+ lookbehind: true
+ },
+ "namespace": {
+ pattern: /(\s)[a-z_][\w.-]*(?=:)/i,
+ lookbehind: true
+ },
+ "boolean": /\b(?:false|true)\b/,
+ "operator": /\+/,
+ "punctuation": /[{};:]/
+ };
+ (function(Prism2) {
+ function literal(str) {
+ return function() {
+ return str;
+ };
+ }
+ var keyword = /\b(?:align|allowzero|and|anyframe|anytype|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|nosuspend|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\b/;
+ var IDENTIFIER = "\\b(?!" + keyword.source + ")(?!\\d)\\w+\\b";
+ var ALIGN = /align\s*\((?:[^()]|\([^()]*\))*\)/.source;
+ var PREFIX_TYPE_OP = /(?:\?|\bpromise->|(?:\[[^[\]]*\]|\*(?!\*)|\*\*)(?:\s*<ALIGN>|\s*const\b|\s*volatile\b|\s*allowzero\b)*)/.source.replace(/<ALIGN>/g, literal(ALIGN));
+ var SUFFIX_EXPR = /(?:\bpromise\b|(?:\berror\.)?<ID>(?:\.<ID>)*(?!\s+<ID>))/.source.replace(/<ID>/g, literal(IDENTIFIER));
+ var TYPE = "(?!\\s)(?:!?\\s*(?:" + PREFIX_TYPE_OP + "\\s*)*" + SUFFIX_EXPR + ")+";
+ Prism2.languages.zig = {
+ "comment": [
+ {
+ pattern: /\/\/[/!].*/,
+ alias: "doc-comment"
+ },
+ /\/{2}.*/
+ ],
+ "string": [
+ {
+ // "string" and c"string"
+ pattern: /(^|[^\\@])c?"(?:[^"\\\r\n]|\\.)*"/,
+ lookbehind: true,
+ greedy: true
+ },
+ {
+ // multiline strings and c-strings
+ pattern: /([\r\n])([ \t]+c?\\{2}).*(?:(?:\r\n?|\n)\2.*)*/,
+ lookbehind: true,
+ greedy: true
+ }
+ ],
+ "char": {
+ // characters 'a', '\n', '\xFF', '\u{10FFFF}'
+ pattern: /(^|[^\\])'(?:[^'\\\r\n]|[\uD800-\uDFFF]{2}|\\(?:.|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'/,
+ lookbehind: true,
+ greedy: true
+ },
+ "builtin": /\B@(?!\d)\w+(?=\s*\()/,
+ "label": {
+ pattern: /(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/,
+ lookbehind: true
+ },
+ "class-name": [
+ // const Foo = struct {};
+ /\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/,
+ {
+ // const x: i32 = 9;
+ // var x: Bar;
+ // fn foo(x: bool, y: f32) void {}
+ pattern: RegExp(/(:\s*)<TYPE>(?=\s*(?:<ALIGN>\s*)?[=;,)])|<TYPE>(?=\s*(?:<ALIGN>\s*)?\{)/.source.replace(/<TYPE>/g, literal(TYPE)).replace(/<ALIGN>/g, literal(ALIGN))),
+ lookbehind: true,
+ inside: null
+ // see below
+ },
+ {
+ // extern fn foo(x: f64) f64; (optional alignment)
+ pattern: RegExp(/(\)\s*)<TYPE>(?=\s*(?:<ALIGN>\s*)?;)/.source.replace(/<TYPE>/g, literal(TYPE)).replace(/<ALIGN>/g, literal(ALIGN))),
+ lookbehind: true,
+ inside: null
+ // see below
+ }
+ ],
+ "builtin-type": {
+ pattern: /\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\b/,
+ alias: "keyword"
+ },
+ "keyword": keyword,
+ "function": /\b(?!\d)\w+(?=\s*\()/,
+ "number": /\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+(?:\.[a-fA-F\d]*)?(?:[pP][+-]?[a-fA-F\d]+)?|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)\b/,
+ "boolean": /\b(?:false|true)\b/,
+ "operator": /\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,
+ "punctuation": /[.:,;(){}[\]]/
+ };
+ Prism2.languages.zig["class-name"].forEach(function(obj) {
+ if (obj.inside === null) {
+ obj.inside = Prism2.languages.zig;
+ }
+ });
+ })(Prism);
+ (function() {
+ if (typeof Prism === "undefined" || typeof document === "undefined") {
+ return;
+ }
+ var PLUGIN_NAME = "line-numbers";
+ var NEW_LINE_EXP = /\n(?!$)/g;
+ var config = Prism.plugins.lineNumbers = {
+ /**
+ * Get node for provided line number
+ *
+ * @param {Element} element pre element
+ * @param {number} number line number
+ * @returns {Element|undefined}
+ */
+ getLine: function(element, number) {
+ if (element.tagName !== "PRE" || !element.classList.contains(PLUGIN_NAME)) {
+ return;
+ }
+ var lineNumberRows = element.querySelector(".line-numbers-rows");
+ if (!lineNumberRows) {
+ return;
+ }
+ var lineNumberStart = parseInt(element.getAttribute("data-start"), 10) || 1;
+ var lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);
+ if (number < lineNumberStart) {
+ number = lineNumberStart;
+ }
+ if (number > lineNumberEnd) {
+ number = lineNumberEnd;
+ }
+ var lineIndex = number - lineNumberStart;
+ return lineNumberRows.children[lineIndex];
+ },
+ /**
+ * Resizes the line numbers of the given element.
+ *
+ * This function will not add line numbers. It will only resize existing ones.
+ *
+ * @param {HTMLElement} element A `<pre>` element with line numbers.
+ * @returns {void}
+ */
+ resize: function(element) {
+ resizeElements([element]);
+ },
+ /**
+ * Whether the plugin can assume that the units font sizes and margins are not depended on the size of
+ * the current viewport.
+ *
+ * Setting this to `true` will allow the plugin to do certain optimizations for better performance.
+ *
+ * Set this to `false` if you use any of the following CSS units: `vh`, `vw`, `vmin`, `vmax`.
+ *
+ * @type {boolean}
+ */
+ assumeViewportIndependence: true
+ };
+ function resizeElements(elements) {
+ elements = elements.filter(function(e) {
+ var codeStyles = getStyles(e);
+ var whiteSpace = codeStyles["white-space"];
+ return whiteSpace === "pre-wrap" || whiteSpace === "pre-line";
+ });
+ if (elements.length == 0) {
+ return;
+ }
+ var infos = elements.map(function(element) {
+ var codeElement = element.querySelector("code");
+ var lineNumbersWrapper = element.querySelector(".line-numbers-rows");
+ if (!codeElement || !lineNumbersWrapper) {
+ return void 0;
+ }
+ var lineNumberSizer = element.querySelector(".line-numbers-sizer");
+ var codeLines = codeElement.textContent.split(NEW_LINE_EXP);
+ if (!lineNumberSizer) {
+ lineNumberSizer = document.createElement("span");
+ lineNumberSizer.className = "line-numbers-sizer";
+ codeElement.appendChild(lineNumberSizer);
+ }
+ lineNumberSizer.innerHTML = "0";
+ lineNumberSizer.style.display = "block";
+ var oneLinerHeight = lineNumberSizer.getBoundingClientRect().height;
+ lineNumberSizer.innerHTML = "";
+ return {
+ element,
+ lines: codeLines,
+ lineHeights: [],
+ oneLinerHeight,
+ sizer: lineNumberSizer
+ };
+ }).filter(Boolean);
+ infos.forEach(function(info) {
+ var lineNumberSizer = info.sizer;
+ var lines = info.lines;
+ var lineHeights = info.lineHeights;
+ var oneLinerHeight = info.oneLinerHeight;
+ lineHeights[lines.length - 1] = void 0;
+ lines.forEach(function(line, index) {
+ if (line && line.length > 1) {
+ var e = lineNumberSizer.appendChild(document.createElement("span"));
+ e.style.display = "block";
+ e.textContent = line;
+ } else {
+ lineHeights[index] = oneLinerHeight;
+ }
+ });
+ });
+ infos.forEach(function(info) {
+ var lineNumberSizer = info.sizer;
+ var lineHeights = info.lineHeights;
+ var childIndex = 0;
+ for (var i = 0; i < lineHeights.length; i++) {
+ if (lineHeights[i] === void 0) {
+ lineHeights[i] = lineNumberSizer.children[childIndex++].getBoundingClientRect().height;
+ }
+ }
+ });
+ infos.forEach(function(info) {
+ var lineNumberSizer = info.sizer;
+ var wrapper = info.element.querySelector(".line-numbers-rows");
+ lineNumberSizer.style.display = "none";
+ lineNumberSizer.innerHTML = "";
+ info.lineHeights.forEach(function(height, lineNumber) {
+ wrapper.children[lineNumber].style.height = height + "px";
+ });
+ });
+ }
+ function getStyles(element) {
+ if (!element) {
+ return null;
+ }
+ return window.getComputedStyle ? getComputedStyle(element) : element.currentStyle || null;
+ }
+ var lastWidth = void 0;
+ window.addEventListener("resize", function() {
+ if (config.assumeViewportIndependence && lastWidth === window.innerWidth) {
+ return;
+ }
+ lastWidth = window.innerWidth;
+ resizeElements(Array.prototype.slice.call(document.querySelectorAll("pre." + PLUGIN_NAME)));
+ });
+ Prism.hooks.add("complete", function(env) {
+ if (!env.code) {
+ return;
+ }
+ var code = (
+ /** @type {Element} */
+ env.element
+ );
+ var pre = (
+ /** @type {HTMLElement} */
+ code.parentNode
+ );
+ if (!pre || !/pre/i.test(pre.nodeName)) {
+ return;
+ }
+ if (code.querySelector(".line-numbers-rows")) {
+ return;
+ }
+ if (!Prism.util.isActive(code, PLUGIN_NAME)) {
+ return;
+ }
+ code.classList.remove(PLUGIN_NAME);
+ pre.classList.add(PLUGIN_NAME);
+ var match = env.code.match(NEW_LINE_EXP);
+ var linesNum = match ? match.length + 1 : 1;
+ var lineNumbersWrapper;
+ var lines = new Array(linesNum + 1).join("<span></span>");
+ lineNumbersWrapper = document.createElement("span");
+ lineNumbersWrapper.setAttribute("aria-hidden", "true");
+ lineNumbersWrapper.className = "line-numbers-rows";
+ lineNumbersWrapper.innerHTML = lines;
+ if (pre.hasAttribute("data-start")) {
+ pre.style.counterReset = "linenumber " + (parseInt(pre.getAttribute("data-start"), 10) - 1);
+ }
+ env.element.appendChild(lineNumbersWrapper);
+ resizeElements([pre]);
+ Prism.hooks.run("line-numbers", env);
+ });
+ Prism.hooks.add("line-numbers", function(env) {
+ env.plugins = env.plugins || {};
+ env.plugins.lineNumbers = true;
+ });
+ })();
+ (function() {
+ if (typeof Prism === "undefined" || typeof document === "undefined") {
+ return;
+ }
+ if (!Element.prototype.matches) {
+ Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
+ }
+ var LOADING_MESSAGE = "Loading\u2026";
+ var FAILURE_MESSAGE = function(status, message) {
+ return "\u2716 Error " + status + " while fetching file: " + message;
+ };
+ var FAILURE_EMPTY_MESSAGE = "\u2716 Error: File does not exist or is empty";
+ var EXTENSIONS = {
+ "js": "javascript",
+ "py": "python",
+ "rb": "ruby",
+ "ps1": "powershell",
+ "psm1": "powershell",
+ "sh": "bash",
+ "bat": "batch",
+ "h": "c",
+ "tex": "latex"
+ };
+ var STATUS_ATTR = "data-src-status";
+ var STATUS_LOADING = "loading";
+ var STATUS_LOADED = "loaded";
+ var STATUS_FAILED = "failed";
+ var SELECTOR = "pre[data-src]:not([" + STATUS_ATTR + '="' + STATUS_LOADED + '"]):not([' + STATUS_ATTR + '="' + STATUS_LOADING + '"])';
+ function loadFile(src, success, error) {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", src, true);
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status < 400 && xhr.responseText) {
+ success(xhr.responseText);
+ } else {
+ if (xhr.status >= 400) {
+ error(FAILURE_MESSAGE(xhr.status, xhr.statusText));
+ } else {
+ error(FAILURE_EMPTY_MESSAGE);
+ }
+ }
+ }
+ };
+ xhr.send(null);
+ }
+ function parseRange(range2) {
+ var m = /^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(range2 || "");
+ if (m) {
+ var start2 = Number(m[1]);
+ var comma = m[2];
+ var end2 = m[3];
+ if (!comma) {
+ return [start2, start2];
+ }
+ if (!end2) {
+ return [start2, void 0];
+ }
+ return [start2, Number(end2)];
+ }
+ return void 0;
+ }
+ Prism.hooks.add("before-highlightall", function(env) {
+ env.selector += ", " + SELECTOR;
+ });
+ Prism.hooks.add("before-sanity-check", function(env) {
+ var pre = (
+ /** @type {HTMLPreElement} */
+ env.element
+ );
+ if (pre.matches(SELECTOR)) {
+ env.code = "";
+ pre.setAttribute(STATUS_ATTR, STATUS_LOADING);
+ var code = pre.appendChild(document.createElement("CODE"));
+ code.textContent = LOADING_MESSAGE;
+ var src = pre.getAttribute("data-src");
+ var language = env.language;
+ if (language === "none") {
+ var extension = (/\.(\w+)$/.exec(src) || [, "none"])[1];
+ language = EXTENSIONS[extension] || extension;
+ }
+ Prism.util.setLanguage(code, language);
+ Prism.util.setLanguage(pre, language);
+ var autoloader = Prism.plugins.autoloader;
+ if (autoloader) {
+ autoloader.loadLanguages(language);
+ }
+ loadFile(
+ src,
+ function(text) {
+ pre.setAttribute(STATUS_ATTR, STATUS_LOADED);
+ var range2 = parseRange(pre.getAttribute("data-range"));
+ if (range2) {
+ var lines = text.split(/\r\n?|\n/g);
+ var start2 = range2[0];
+ var end2 = range2[1] == null ? lines.length : range2[1];
+ if (start2 < 0) {
+ start2 += lines.length;
+ }
+ start2 = Math.max(0, Math.min(start2 - 1, lines.length));
+ if (end2 < 0) {
+ end2 += lines.length;
+ }
+ end2 = Math.max(0, Math.min(end2, lines.length));
+ text = lines.slice(start2, end2).join("\n");
+ if (!pre.hasAttribute("data-start")) {
+ pre.setAttribute("data-start", String(start2 + 1));
+ }
+ }
+ code.textContent = text;
+ Prism.highlightElement(code);
+ },
+ function(error) {
+ pre.setAttribute(STATUS_ATTR, STATUS_FAILED);
+ code.textContent = error;
+ }
+ );
+ }
+ });
+ Prism.plugins.fileHighlight = {
+ /**
+ * Executes the File Highlight plugin for all matching `pre` elements under the given container.
+ *
+ * Note: Elements which are already loaded or currently loading will not be touched by this method.
+ *
+ * @param {ParentNode} [container=document]
+ */
+ highlight: function highlight(container) {
+ var elements = (container || document).querySelectorAll(SELECTOR);
+ for (var i = 0, element; element = elements[i++]; ) {
+ Prism.highlightElement(element);
+ }
+ }
+ };
+ var logged = false;
+ Prism.fileHighlight = function() {
+ if (!logged) {
+ console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.");
+ logged = true;
+ }
+ Prism.plugins.fileHighlight.highlight.apply(this, arguments);
+ };
+ })();
+ }
+ });
-got: "${I.nodeValue.trim()}"
+ // vendor/topbar.js
+ var require_topbar = __commonJS({
+ "vendor/topbar.js"(exports, module) {
+ (function(window2, document2) {
+ "use strict";
+ (function() {
+ var lastTime = 0;
+ var vendors = ["ms", "moz", "webkit", "o"];
+ for (var x = 0; x < vendors.length && !window2.requestAnimationFrame; ++x) {
+ window2.requestAnimationFrame = window2[vendors[x] + "RequestAnimationFrame"];
+ window2.cancelAnimationFrame = window2[vendors[x] + "CancelAnimationFrame"] || window2[vendors[x] + "CancelRequestAnimationFrame"];
+ }
+ if (!window2.requestAnimationFrame)
+ window2.requestAnimationFrame = function(callback, element) {
+ var currTime = (/* @__PURE__ */ new Date()).getTime();
+ var timeToCall = Math.max(0, 16 - (currTime - lastTime));
+ var id = window2.setTimeout(function() {
+ callback(currTime + timeToCall);
+ }, timeToCall);
+ lastTime = currTime + timeToCall;
+ return id;
+ };
+ if (!window2.cancelAnimationFrame)
+ window2.cancelAnimationFrame = function(id) {
+ clearTimeout(id);
+ };
+ })();
+ var canvas, progressTimerId, fadeTimerId, currentProgress, showing, addEvent = function(elem, type, handler) {
+ if (elem.addEventListener)
+ elem.addEventListener(type, handler, false);
+ else if (elem.attachEvent)
+ elem.attachEvent("on" + type, handler);
+ else
+ elem["on" + type] = handler;
+ }, options = {
+ autoRun: true,
+ barThickness: 3,
+ barColors: {
+ 0: "rgba(26, 188, 156, .9)",
+ ".25": "rgba(52, 152, 219, .9)",
+ ".50": "rgba(241, 196, 15, .9)",
+ ".75": "rgba(230, 126, 34, .9)",
+ "1.0": "rgba(211, 84, 0, .9)"
+ },
+ shadowBlur: 10,
+ shadowColor: "rgba(0, 0, 0, .6)",
+ className: null
+ }, repaint = function() {
+ canvas.width = window2.innerWidth;
+ canvas.height = options.barThickness * 5;
+ var ctx = canvas.getContext("2d");
+ ctx.shadowBlur = options.shadowBlur;
+ ctx.shadowColor = options.shadowColor;
+ var lineGradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
+ for (var stop in options.barColors)
+ lineGradient.addColorStop(stop, options.barColors[stop]);
+ ctx.lineWidth = options.barThickness;
+ ctx.beginPath();
+ ctx.moveTo(0, options.barThickness / 2);
+ ctx.lineTo(
+ Math.ceil(currentProgress * canvas.width),
+ options.barThickness / 2
+ );
+ ctx.strokeStyle = lineGradient;
+ ctx.stroke();
+ }, createCanvas = function() {
+ canvas = document2.createElement("canvas");
+ var style = canvas.style;
+ style.position = "fixed";
+ style.top = style.left = style.right = style.margin = style.padding = 0;
+ style.zIndex = 100001;
+ style.display = "none";
+ if (options.className)
+ canvas.classList.add(options.className);
+ document2.body.appendChild(canvas);
+ addEvent(window2, "resize", repaint);
+ }, topbar2 = {
+ config: function(opts) {
+ for (var key in opts)
+ if (options.hasOwnProperty(key))
+ options[key] = opts[key];
+ },
+ show: function() {
+ if (showing)
+ return;
+ showing = true;
+ if (fadeTimerId !== null)
+ window2.cancelAnimationFrame(fadeTimerId);
+ if (!canvas)
+ createCanvas();
+ canvas.style.opacity = 1;
+ canvas.style.display = "block";
+ topbar2.progress(0);
+ if (options.autoRun) {
+ (function loop() {
+ progressTimerId = window2.requestAnimationFrame(loop);
+ topbar2.progress(
+ "+" + 0.05 * Math.pow(1 - Math.sqrt(currentProgress), 2)
+ );
+ })();
+ }
+ },
+ progress: function(to) {
+ if (typeof to === "undefined")
+ return currentProgress;
+ if (typeof to === "string") {
+ to = (to.indexOf("+") >= 0 || to.indexOf("-") >= 0 ? currentProgress : 0) + parseFloat(to);
+ }
+ currentProgress = to > 1 ? 1 : to;
+ repaint();
+ return currentProgress;
+ },
+ hide: function() {
+ if (!showing)
+ return;
+ showing = false;
+ if (progressTimerId != null) {
+ window2.cancelAnimationFrame(progressTimerId);
+ progressTimerId = null;
+ }
+ (function loop() {
+ if (topbar2.progress("+.1") >= 1) {
+ canvas.style.opacity -= 0.05;
+ if (canvas.style.opacity <= 0.05) {
+ canvas.style.display = "none";
+ fadeTimerId = null;
+ return;
+ }
+ }
+ fadeTimerId = window2.requestAnimationFrame(loop);
+ })();
+ }
+ };
+ if (typeof module === "object" && typeof module.exports === "object") {
+ module.exports = topbar2;
+ } else if (typeof define === "function" && define.amd) {
+ define(function() {
+ return topbar2;
+ });
+ } else {
+ this.topbar = topbar2;
+ }
+ }).call(exports, window, document);
+ }
+ });
+
+ // js/app.js
+ var import_jquery3 = __toESM(require_jquery());
+
+ // node_modules/@popperjs/core/lib/index.js
+ var lib_exports = {};
+ __export(lib_exports, {
+ afterMain: () => afterMain,
+ afterRead: () => afterRead,
+ afterWrite: () => afterWrite,
+ applyStyles: () => applyStyles_default,
+ arrow: () => arrow_default,
+ auto: () => auto,
+ basePlacements: () => basePlacements,
+ beforeMain: () => beforeMain,
+ beforeRead: () => beforeRead,
+ beforeWrite: () => beforeWrite,
+ bottom: () => bottom,
+ clippingParents: () => clippingParents,
+ computeStyles: () => computeStyles_default,
+ createPopper: () => createPopper3,
+ createPopperBase: () => createPopper,
+ createPopperLite: () => createPopper2,
+ detectOverflow: () => detectOverflow,
+ end: () => end,
+ eventListeners: () => eventListeners_default,
+ flip: () => flip_default,
+ hide: () => hide_default,
+ left: () => left,
+ main: () => main,
+ modifierPhases: () => modifierPhases,
+ offset: () => offset_default,
+ placements: () => placements,
+ popper: () => popper,
+ popperGenerator: () => popperGenerator,
+ popperOffsets: () => popperOffsets_default,
+ preventOverflow: () => preventOverflow_default,
+ read: () => read,
+ reference: () => reference,
+ right: () => right,
+ start: () => start,
+ top: () => top,
+ variationPlacements: () => variationPlacements,
+ viewport: () => viewport,
+ write: () => write
+ });
+
+ // node_modules/@popperjs/core/lib/enums.js
+ var top = "top";
+ var bottom = "bottom";
+ var right = "right";
+ var left = "left";
+ var auto = "auto";
+ var basePlacements = [top, bottom, right, left];
+ var start = "start";
+ var end = "end";
+ var clippingParents = "clippingParents";
+ var viewport = "viewport";
+ var popper = "popper";
+ var reference = "reference";
+ var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {
+ return acc.concat([placement + "-" + start, placement + "-" + end]);
+ }, []);
+ var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {
+ return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+ }, []);
+ var beforeRead = "beforeRead";
+ var read = "read";
+ var afterRead = "afterRead";
+ var beforeMain = "beforeMain";
+ var main = "main";
+ var afterMain = "afterMain";
+ var beforeWrite = "beforeWrite";
+ var write = "write";
+ var afterWrite = "afterWrite";
+ var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+ // node_modules/@popperjs/core/lib/dom-utils/getNodeName.js
+ function getNodeName(element) {
+ return element ? (element.nodeName || "").toLowerCase() : null;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getWindow.js
+ function getWindow(node) {
+ if (node == null) {
+ return window;
+ }
+ if (node.toString() !== "[object Window]") {
+ var ownerDocument = node.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView || window : window;
+ }
+ return node;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/instanceOf.js
+ function isElement(node) {
+ var OwnElement = getWindow(node).Element;
+ return node instanceof OwnElement || node instanceof Element;
+ }
+ function isHTMLElement(node) {
+ var OwnElement = getWindow(node).HTMLElement;
+ return node instanceof OwnElement || node instanceof HTMLElement;
+ }
+ function isShadowRoot(node) {
+ if (typeof ShadowRoot === "undefined") {
+ return false;
+ }
+ var OwnElement = getWindow(node).ShadowRoot;
+ return node instanceof OwnElement || node instanceof ShadowRoot;
+ }
+
+ // node_modules/@popperjs/core/lib/modifiers/applyStyles.js
+ function applyStyles(_ref) {
+ var state = _ref.state;
+ Object.keys(state.elements).forEach(function(name) {
+ var style = state.styles[name] || {};
+ var attributes = state.attributes[name] || {};
+ var element = state.elements[name];
+ if (!isHTMLElement(element) || !getNodeName(element)) {
+ return;
+ }
+ Object.assign(element.style, style);
+ Object.keys(attributes).forEach(function(name2) {
+ var value = attributes[name2];
+ if (value === false) {
+ element.removeAttribute(name2);
+ } else {
+ element.setAttribute(name2, value === true ? "" : value);
+ }
+ });
+ });
+ }
+ function effect(_ref2) {
+ var state = _ref2.state;
+ var initialStyles = {
+ popper: {
+ position: state.options.strategy,
+ left: "0",
+ top: "0",
+ margin: "0"
+ },
+ arrow: {
+ position: "absolute"
+ },
+ reference: {}
+ };
+ Object.assign(state.elements.popper.style, initialStyles.popper);
+ state.styles = initialStyles;
+ if (state.elements.arrow) {
+ Object.assign(state.elements.arrow.style, initialStyles.arrow);
+ }
+ return function() {
+ Object.keys(state.elements).forEach(function(name) {
+ var element = state.elements[name];
+ var attributes = state.attributes[name] || {};
+ var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]);
+ var style = styleProperties.reduce(function(style2, property) {
+ style2[property] = "";
+ return style2;
+ }, {});
+ if (!isHTMLElement(element) || !getNodeName(element)) {
+ return;
+ }
+ Object.assign(element.style, style);
+ Object.keys(attributes).forEach(function(attribute) {
+ element.removeAttribute(attribute);
+ });
+ });
+ };
+ }
+ var applyStyles_default = {
+ name: "applyStyles",
+ enabled: true,
+ phase: "write",
+ fn: applyStyles,
+ effect,
+ requires: ["computeStyles"]
+ };
+
+ // node_modules/@popperjs/core/lib/utils/getBasePlacement.js
+ function getBasePlacement(placement) {
+ return placement.split("-")[0];
+ }
+
+ // node_modules/@popperjs/core/lib/utils/math.js
+ var max = Math.max;
+ var min = Math.min;
+ var round = Math.round;
+
+ // node_modules/@popperjs/core/lib/utils/userAgent.js
+ function getUAString() {
+ var uaData = navigator.userAgentData;
+ if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+ return uaData.brands.map(function(item) {
+ return item.brand + "/" + item.version;
+ }).join(" ");
+ }
+ return navigator.userAgent;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js
+ function isLayoutViewport() {
+ return !/^((?!chrome|android).)*safari/i.test(getUAString());
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
+ function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+ if (includeScale === void 0) {
+ includeScale = false;
+ }
+ if (isFixedStrategy === void 0) {
+ isFixedStrategy = false;
+ }
+ var clientRect = element.getBoundingClientRect();
+ var scaleX = 1;
+ var scaleY = 1;
+ if (includeScale && isHTMLElement(element)) {
+ scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+ scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+ }
+ var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport;
+ var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+ var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+ var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+ var width = clientRect.width / scaleX;
+ var height = clientRect.height / scaleY;
+ return {
+ width,
+ height,
+ top: y,
+ right: x + width,
+ bottom: y + height,
+ left: x,
+ x,
+ y
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js
+ function getLayoutRect(element) {
+ var clientRect = getBoundingClientRect(element);
+ var width = element.offsetWidth;
+ var height = element.offsetHeight;
+ if (Math.abs(clientRect.width - width) <= 1) {
+ width = clientRect.width;
+ }
+ if (Math.abs(clientRect.height - height) <= 1) {
+ height = clientRect.height;
+ }
+ return {
+ x: element.offsetLeft,
+ y: element.offsetTop,
+ width,
+ height
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/contains.js
+ function contains(parent, child) {
+ var rootNode = child.getRootNode && child.getRootNode();
+ if (parent.contains(child)) {
+ return true;
+ } else if (rootNode && isShadowRoot(rootNode)) {
+ var next = child;
+ do {
+ if (next && parent.isSameNode(next)) {
+ return true;
+ }
+ next = next.parentNode || next.host;
+ } while (next);
+ }
+ return false;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js
+ function getComputedStyle2(element) {
+ return getWindow(element).getComputedStyle(element);
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/isTableElement.js
+ function isTableElement(element) {
+ return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js
+ function getDocumentElement(element) {
+ return ((isElement(element) ? element.ownerDocument : (
+ // $FlowFixMe[prop-missing]
+ element.document
+ )) || window.document).documentElement;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getParentNode.js
+ function getParentNode(element) {
+ if (getNodeName(element) === "html") {
+ return element;
+ }
+ return (
+ // this is a quicker (but less type safe) way to save quite some bytes from the bundle
+ // $FlowFixMe[incompatible-return]
+ // $FlowFixMe[prop-missing]
+ element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+ element.parentNode || // DOM Element detected
+ (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+ // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+ getDocumentElement(element)
+ );
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js
+ function getTrueOffsetParent(element) {
+ if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+ getComputedStyle2(element).position === "fixed") {
+ return null;
+ }
+ return element.offsetParent;
+ }
+ function getContainingBlock(element) {
+ var isFirefox = /firefox/i.test(getUAString());
+ var isIE = /Trident/i.test(getUAString());
+ if (isIE && isHTMLElement(element)) {
+ var elementCss = getComputedStyle2(element);
+ if (elementCss.position === "fixed") {
+ return null;
+ }
+ }
+ var currentNode = getParentNode(element);
+ if (isShadowRoot(currentNode)) {
+ currentNode = currentNode.host;
+ }
+ while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) {
+ var css = getComputedStyle2(currentNode);
+ if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") {
+ return currentNode;
+ } else {
+ currentNode = currentNode.parentNode;
+ }
+ }
+ return null;
+ }
+ function getOffsetParent(element) {
+ var window2 = getWindow(element);
+ var offsetParent = getTrueOffsetParent(element);
+ while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") {
+ offsetParent = getTrueOffsetParent(offsetParent);
+ }
+ if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) {
+ return window2;
+ }
+ return offsetParent || getContainingBlock(element) || window2;
+ }
+
+ // node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js
+ function getMainAxisFromPlacement(placement) {
+ return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y";
+ }
+
+ // node_modules/@popperjs/core/lib/utils/within.js
+ function within(min2, value, max2) {
+ return max(min2, min(value, max2));
+ }
+ function withinMaxClamp(min2, value, max2) {
+ var v = within(min2, value, max2);
+ return v > max2 ? max2 : v;
+ }
+
+ // node_modules/@popperjs/core/lib/utils/getFreshSideObject.js
+ function getFreshSideObject() {
+ return {
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/utils/mergePaddingObject.js
+ function mergePaddingObject(paddingObject) {
+ return Object.assign({}, getFreshSideObject(), paddingObject);
+ }
+
+ // node_modules/@popperjs/core/lib/utils/expandToHashMap.js
+ function expandToHashMap(value, keys) {
+ return keys.reduce(function(hashMap, key) {
+ hashMap[key] = value;
+ return hashMap;
+ }, {});
+ }
+
+ // node_modules/@popperjs/core/lib/modifiers/arrow.js
+ var toPaddingObject = function toPaddingObject2(padding, state) {
+ padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, {
+ placement: state.placement
+ })) : padding;
+ return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
+ };
+ function arrow(_ref) {
+ var _state$modifiersData$;
+ var state = _ref.state, name = _ref.name, options = _ref.options;
+ var arrowElement = state.elements.arrow;
+ var popperOffsets2 = state.modifiersData.popperOffsets;
+ var basePlacement = getBasePlacement(state.placement);
+ var axis = getMainAxisFromPlacement(basePlacement);
+ var isVertical = [left, right].indexOf(basePlacement) >= 0;
+ var len = isVertical ? "height" : "width";
+ if (!arrowElement || !popperOffsets2) {
+ return;
+ }
+ var paddingObject = toPaddingObject(options.padding, state);
+ var arrowRect = getLayoutRect(arrowElement);
+ var minProp = axis === "y" ? top : left;
+ var maxProp = axis === "y" ? bottom : right;
+ var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len];
+ var startDiff = popperOffsets2[axis] - state.rects.reference[axis];
+ var arrowOffsetParent = getOffsetParent(arrowElement);
+ var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+ var centerToReference = endDiff / 2 - startDiff / 2;
+ var min2 = paddingObject[minProp];
+ var max2 = clientSize - arrowRect[len] - paddingObject[maxProp];
+ var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+ var offset2 = within(min2, center, max2);
+ var axisProp = axis;
+ state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$);
+ }
+ function effect2(_ref2) {
+ var state = _ref2.state, options = _ref2.options;
+ var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element;
+ if (arrowElement == null) {
+ return;
+ }
+ if (typeof arrowElement === "string") {
+ arrowElement = state.elements.popper.querySelector(arrowElement);
+ if (!arrowElement) {
+ return;
+ }
+ }
+ if (!contains(state.elements.popper, arrowElement)) {
+ return;
+ }
+ state.elements.arrow = arrowElement;
+ }
+ var arrow_default = {
+ name: "arrow",
+ enabled: true,
+ phase: "main",
+ fn: arrow,
+ effect: effect2,
+ requires: ["popperOffsets"],
+ requiresIfExists: ["preventOverflow"]
+ };
+
+ // node_modules/@popperjs/core/lib/utils/getVariation.js
+ function getVariation(placement) {
+ return placement.split("-")[1];
+ }
+
+ // node_modules/@popperjs/core/lib/modifiers/computeStyles.js
+ var unsetSides = {
+ top: "auto",
+ right: "auto",
+ bottom: "auto",
+ left: "auto"
+ };
+ function roundOffsetsByDPR(_ref, win) {
+ var x = _ref.x, y = _ref.y;
+ var dpr = win.devicePixelRatio || 1;
+ return {
+ x: round(x * dpr) / dpr || 0,
+ y: round(y * dpr) / dpr || 0
+ };
+ }
+ function mapToStyles(_ref2) {
+ var _Object$assign2;
+ var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed;
+ var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y;
+ var _ref3 = typeof roundOffsets === "function" ? roundOffsets({
+ x,
+ y
+ }) : {
+ x,
+ y
+ };
+ x = _ref3.x;
+ y = _ref3.y;
+ var hasX = offsets.hasOwnProperty("x");
+ var hasY = offsets.hasOwnProperty("y");
+ var sideX = left;
+ var sideY = top;
+ var win = window;
+ if (adaptive) {
+ var offsetParent = getOffsetParent(popper2);
+ var heightProp = "clientHeight";
+ var widthProp = "clientWidth";
+ if (offsetParent === getWindow(popper2)) {
+ offsetParent = getDocumentElement(popper2);
+ if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") {
+ heightProp = "scrollHeight";
+ widthProp = "scrollWidth";
+ }
+ }
+ offsetParent = offsetParent;
+ if (placement === top || (placement === left || placement === right) && variation === end) {
+ sideY = bottom;
+ var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : (
+ // $FlowFixMe[prop-missing]
+ offsetParent[heightProp]
+ );
+ y -= offsetY - popperRect.height;
+ y *= gpuAcceleration ? 1 : -1;
+ }
+ if (placement === left || (placement === top || placement === bottom) && variation === end) {
+ sideX = right;
+ var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : (
+ // $FlowFixMe[prop-missing]
+ offsetParent[widthProp]
+ );
+ x -= offsetX - popperRect.width;
+ x *= gpuAcceleration ? 1 : -1;
+ }
+ }
+ var commonStyles = Object.assign({
+ position
+ }, adaptive && unsetSides);
+ var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+ x,
+ y
+ }, getWindow(popper2)) : {
+ x,
+ y
+ };
+ x = _ref4.x;
+ y = _ref4.y;
+ if (gpuAcceleration) {
+ var _Object$assign;
+ return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+ }
+ return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2));
+ }
+ function computeStyles(_ref5) {
+ var state = _ref5.state, options = _ref5.options;
+ var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+ var commonStyles = {
+ placement: getBasePlacement(state.placement),
+ variation: getVariation(state.placement),
+ popper: state.elements.popper,
+ popperRect: state.rects.popper,
+ gpuAcceleration,
+ isFixed: state.options.strategy === "fixed"
+ };
+ if (state.modifiersData.popperOffsets != null) {
+ state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+ offsets: state.modifiersData.popperOffsets,
+ position: state.options.strategy,
+ adaptive,
+ roundOffsets
+ })));
+ }
+ if (state.modifiersData.arrow != null) {
+ state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+ offsets: state.modifiersData.arrow,
+ position: "absolute",
+ adaptive: false,
+ roundOffsets
+ })));
+ }
+ state.attributes.popper = Object.assign({}, state.attributes.popper, {
+ "data-popper-placement": state.placement
+ });
+ }
+ var computeStyles_default = {
+ name: "computeStyles",
+ enabled: true,
+ phase: "beforeWrite",
+ fn: computeStyles,
+ data: {}
+ };
+
+ // node_modules/@popperjs/core/lib/modifiers/eventListeners.js
+ var passive = {
+ passive: true
+ };
+ function effect3(_ref) {
+ var state = _ref.state, instance = _ref.instance, options = _ref.options;
+ var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize;
+ var window2 = getWindow(state.elements.popper);
+ var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+ if (scroll) {
+ scrollParents.forEach(function(scrollParent) {
+ scrollParent.addEventListener("scroll", instance.update, passive);
+ });
+ }
+ if (resize) {
+ window2.addEventListener("resize", instance.update, passive);
+ }
+ return function() {
+ if (scroll) {
+ scrollParents.forEach(function(scrollParent) {
+ scrollParent.removeEventListener("scroll", instance.update, passive);
+ });
+ }
+ if (resize) {
+ window2.removeEventListener("resize", instance.update, passive);
+ }
+ };
+ }
+ var eventListeners_default = {
+ name: "eventListeners",
+ enabled: true,
+ phase: "write",
+ fn: function fn() {
+ },
+ effect: effect3,
+ data: {}
+ };
+
+ // node_modules/@popperjs/core/lib/utils/getOppositePlacement.js
+ var hash = {
+ left: "right",
+ right: "left",
+ bottom: "top",
+ top: "bottom"
+ };
+ function getOppositePlacement(placement) {
+ return placement.replace(/left|right|bottom|top/g, function(matched) {
+ return hash[matched];
+ });
+ }
+
+ // node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js
+ var hash2 = {
+ start: "end",
+ end: "start"
+ };
+ function getOppositeVariationPlacement(placement) {
+ return placement.replace(/start|end/g, function(matched) {
+ return hash2[matched];
+ });
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js
+ function getWindowScroll(node) {
+ var win = getWindow(node);
+ var scrollLeft = win.pageXOffset;
+ var scrollTop = win.pageYOffset;
+ return {
+ scrollLeft,
+ scrollTop
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js
+ function getWindowScrollBarX(element) {
+ return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js
+ function getViewportRect(element, strategy) {
+ var win = getWindow(element);
+ var html = getDocumentElement(element);
+ var visualViewport = win.visualViewport;
+ var width = html.clientWidth;
+ var height = html.clientHeight;
+ var x = 0;
+ var y = 0;
+ if (visualViewport) {
+ width = visualViewport.width;
+ height = visualViewport.height;
+ var layoutViewport = isLayoutViewport();
+ if (layoutViewport || !layoutViewport && strategy === "fixed") {
+ x = visualViewport.offsetLeft;
+ y = visualViewport.offsetTop;
+ }
+ }
+ return {
+ width,
+ height,
+ x: x + getWindowScrollBarX(element),
+ y
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js
+ function getDocumentRect(element) {
+ var _element$ownerDocumen;
+ var html = getDocumentElement(element);
+ var winScroll = getWindowScroll(element);
+ var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+ var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+ var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+ var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+ var y = -winScroll.scrollTop;
+ if (getComputedStyle2(body || html).direction === "rtl") {
+ x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+ }
+ return {
+ width,
+ height,
+ x,
+ y
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js
+ function isScrollParent(element) {
+ var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY;
+ return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js
+ function getScrollParent(node) {
+ if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) {
+ return node.ownerDocument.body;
+ }
+ if (isHTMLElement(node) && isScrollParent(node)) {
+ return node;
+ }
+ return getScrollParent(getParentNode(node));
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js
+ function listScrollParents(element, list) {
+ var _element$ownerDocumen;
+ if (list === void 0) {
+ list = [];
+ }
+ var scrollParent = getScrollParent(element);
+ var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+ var win = getWindow(scrollParent);
+ var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+ var updatedList = list.concat(target);
+ return isBody ? updatedList : (
+ // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+ updatedList.concat(listScrollParents(getParentNode(target)))
+ );
+ }
+
+ // node_modules/@popperjs/core/lib/utils/rectToClientRect.js
+ function rectToClientRect(rect) {
+ return Object.assign({}, rect, {
+ left: rect.x,
+ top: rect.y,
+ right: rect.x + rect.width,
+ bottom: rect.y + rect.height
+ });
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js
+ function getInnerBoundingClientRect(element, strategy) {
+ var rect = getBoundingClientRect(element, false, strategy === "fixed");
+ rect.top = rect.top + element.clientTop;
+ rect.left = rect.left + element.clientLeft;
+ rect.bottom = rect.top + element.clientHeight;
+ rect.right = rect.left + element.clientWidth;
+ rect.width = element.clientWidth;
+ rect.height = element.clientHeight;
+ rect.x = rect.left;
+ rect.y = rect.top;
+ return rect;
+ }
+ function getClientRectFromMixedType(element, clippingParent, strategy) {
+ return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+ }
+ function getClippingParents(element) {
+ var clippingParents2 = listScrollParents(getParentNode(element));
+ var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0;
+ var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+ if (!isElement(clipperElement)) {
+ return [];
+ }
+ return clippingParents2.filter(function(clippingParent) {
+ return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body";
+ });
+ }
+ function getClippingRect(element, boundary, rootBoundary, strategy) {
+ var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary);
+ var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]);
+ var firstClippingParent = clippingParents2[0];
+ var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) {
+ var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+ accRect.top = max(rect.top, accRect.top);
+ accRect.right = min(rect.right, accRect.right);
+ accRect.bottom = min(rect.bottom, accRect.bottom);
+ accRect.left = max(rect.left, accRect.left);
+ return accRect;
+ }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+ clippingRect.width = clippingRect.right - clippingRect.left;
+ clippingRect.height = clippingRect.bottom - clippingRect.top;
+ clippingRect.x = clippingRect.left;
+ clippingRect.y = clippingRect.top;
+ return clippingRect;
+ }
+
+ // node_modules/@popperjs/core/lib/utils/computeOffsets.js
+ function computeOffsets(_ref) {
+ var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement;
+ var basePlacement = placement ? getBasePlacement(placement) : null;
+ var variation = placement ? getVariation(placement) : null;
+ var commonX = reference2.x + reference2.width / 2 - element.width / 2;
+ var commonY = reference2.y + reference2.height / 2 - element.height / 2;
+ var offsets;
+ switch (basePlacement) {
+ case top:
+ offsets = {
+ x: commonX,
+ y: reference2.y - element.height
+ };
+ break;
+ case bottom:
+ offsets = {
+ x: commonX,
+ y: reference2.y + reference2.height
+ };
+ break;
+ case right:
+ offsets = {
+ x: reference2.x + reference2.width,
+ y: commonY
+ };
+ break;
+ case left:
+ offsets = {
+ x: reference2.x - element.width,
+ y: commonY
+ };
+ break;
+ default:
+ offsets = {
+ x: reference2.x,
+ y: reference2.y
+ };
+ }
+ var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+ if (mainAxis != null) {
+ var len = mainAxis === "y" ? "height" : "width";
+ switch (variation) {
+ case start:
+ offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);
+ break;
+ case end:
+ offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);
+ break;
+ default:
+ }
+ }
+ return offsets;
+ }
+
+ // node_modules/@popperjs/core/lib/utils/detectOverflow.js
+ function detectOverflow(state, options) {
+ if (options === void 0) {
+ options = {};
+ }
+ var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding;
+ var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
+ var altContext = elementContext === popper ? reference : popper;
+ var popperRect = state.rects.popper;
+ var element = state.elements[altBoundary ? altContext : elementContext];
+ var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+ var referenceClientRect = getBoundingClientRect(state.elements.reference);
+ var popperOffsets2 = computeOffsets({
+ reference: referenceClientRect,
+ element: popperRect,
+ strategy: "absolute",
+ placement
+ });
+ var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2));
+ var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect;
+ var overflowOffsets = {
+ top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+ bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+ left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+ right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+ };
+ var offsetData = state.modifiersData.offset;
+ if (elementContext === popper && offsetData) {
+ var offset2 = offsetData[placement];
+ Object.keys(overflowOffsets).forEach(function(key) {
+ var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+ var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x";
+ overflowOffsets[key] += offset2[axis] * multiply;
+ });
+ }
+ return overflowOffsets;
+ }
+
+ // node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js
+ function computeAutoPlacement(state, options) {
+ if (options === void 0) {
+ options = {};
+ }
+ var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
+ var variation = getVariation(placement);
+ var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) {
+ return getVariation(placement2) === variation;
+ }) : basePlacements;
+ var allowedPlacements = placements2.filter(function(placement2) {
+ return allowedAutoPlacements.indexOf(placement2) >= 0;
+ });
+ if (allowedPlacements.length === 0) {
+ allowedPlacements = placements2;
+ }
+ var overflows = allowedPlacements.reduce(function(acc, placement2) {
+ acc[placement2] = detectOverflow(state, {
+ placement: placement2,
+ boundary,
+ rootBoundary,
+ padding
+ })[getBasePlacement(placement2)];
+ return acc;
+ }, {});
+ return Object.keys(overflows).sort(function(a, b) {
+ return overflows[a] - overflows[b];
+ });
+ }
+
+ // node_modules/@popperjs/core/lib/modifiers/flip.js
+ function getExpandedFallbackPlacements(placement) {
+ if (getBasePlacement(placement) === auto) {
+ return [];
+ }
+ var oppositePlacement = getOppositePlacement(placement);
+ return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+ }
+ function flip(_ref) {
+ var state = _ref.state, options = _ref.options, name = _ref.name;
+ if (state.modifiersData[name]._skip) {
+ return;
+ }
+ var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements;
+ var preferredPlacement = state.options.placement;
+ var basePlacement = getBasePlacement(preferredPlacement);
+ var isBasePlacement = basePlacement === preferredPlacement;
+ var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+ var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) {
+ return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, {
+ placement: placement2,
+ boundary,
+ rootBoundary,
+ padding,
+ flipVariations,
+ allowedAutoPlacements
+ }) : placement2);
+ }, []);
+ var referenceRect = state.rects.reference;
+ var popperRect = state.rects.popper;
+ var checksMap = /* @__PURE__ */ new Map();
+ var makeFallbackChecks = true;
+ var firstFittingPlacement = placements2[0];
+ for (var i = 0; i < placements2.length; i++) {
+ var placement = placements2[i];
+ var _basePlacement = getBasePlacement(placement);
+ var isStartVariation = getVariation(placement) === start;
+ var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+ var len = isVertical ? "width" : "height";
+ var overflow = detectOverflow(state, {
+ placement,
+ boundary,
+ rootBoundary,
+ altBoundary,
+ padding
+ });
+ var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+ if (referenceRect[len] > popperRect[len]) {
+ mainVariationSide = getOppositePlacement(mainVariationSide);
+ }
+ var altVariationSide = getOppositePlacement(mainVariationSide);
+ var checks = [];
+ if (checkMainAxis) {
+ checks.push(overflow[_basePlacement] <= 0);
+ }
+ if (checkAltAxis) {
+ checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+ }
+ if (checks.every(function(check) {
+ return check;
+ })) {
+ firstFittingPlacement = placement;
+ makeFallbackChecks = false;
+ break;
+ }
+ checksMap.set(placement, checks);
+ }
+ if (makeFallbackChecks) {
+ var numberOfChecks = flipVariations ? 3 : 1;
+ var _loop = function _loop2(_i2) {
+ var fittingPlacement = placements2.find(function(placement2) {
+ var checks2 = checksMap.get(placement2);
+ if (checks2) {
+ return checks2.slice(0, _i2).every(function(check) {
+ return check;
+ });
+ }
+ });
+ if (fittingPlacement) {
+ firstFittingPlacement = fittingPlacement;
+ return "break";
+ }
+ };
+ for (var _i = numberOfChecks; _i > 0; _i--) {
+ var _ret = _loop(_i);
+ if (_ret === "break")
+ break;
+ }
+ }
+ if (state.placement !== firstFittingPlacement) {
+ state.modifiersData[name]._skip = true;
+ state.placement = firstFittingPlacement;
+ state.reset = true;
+ }
+ }
+ var flip_default = {
+ name: "flip",
+ enabled: true,
+ phase: "main",
+ fn: flip,
+ requiresIfExists: ["offset"],
+ data: {
+ _skip: false
+ }
+ };
+
+ // node_modules/@popperjs/core/lib/modifiers/hide.js
+ function getSideOffsets(overflow, rect, preventedOffsets) {
+ if (preventedOffsets === void 0) {
+ preventedOffsets = {
+ x: 0,
+ y: 0
+ };
+ }
+ return {
+ top: overflow.top - rect.height - preventedOffsets.y,
+ right: overflow.right - rect.width + preventedOffsets.x,
+ bottom: overflow.bottom - rect.height + preventedOffsets.y,
+ left: overflow.left - rect.width - preventedOffsets.x
+ };
+ }
+ function isAnySideFullyClipped(overflow) {
+ return [top, right, bottom, left].some(function(side) {
+ return overflow[side] >= 0;
+ });
+ }
+ function hide(_ref) {
+ var state = _ref.state, name = _ref.name;
+ var referenceRect = state.rects.reference;
+ var popperRect = state.rects.popper;
+ var preventedOffsets = state.modifiersData.preventOverflow;
+ var referenceOverflow = detectOverflow(state, {
+ elementContext: "reference"
+ });
+ var popperAltOverflow = detectOverflow(state, {
+ altBoundary: true
+ });
+ var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+ var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+ var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+ var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+ state.modifiersData[name] = {
+ referenceClippingOffsets,
+ popperEscapeOffsets,
+ isReferenceHidden,
+ hasPopperEscaped
+ };
+ state.attributes.popper = Object.assign({}, state.attributes.popper, {
+ "data-popper-reference-hidden": isReferenceHidden,
+ "data-popper-escaped": hasPopperEscaped
+ });
+ }
+ var hide_default = {
+ name: "hide",
+ enabled: true,
+ phase: "main",
+ requiresIfExists: ["preventOverflow"],
+ fn: hide
+ };
+
+ // node_modules/@popperjs/core/lib/modifiers/offset.js
+ function distanceAndSkiddingToXY(placement, rects, offset2) {
+ var basePlacement = getBasePlacement(placement);
+ var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+ var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, {
+ placement
+ })) : offset2, skidding = _ref[0], distance = _ref[1];
+ skidding = skidding || 0;
+ distance = (distance || 0) * invertDistance;
+ return [left, right].indexOf(basePlacement) >= 0 ? {
+ x: distance,
+ y: skidding
+ } : {
+ x: skidding,
+ y: distance
+ };
+ }
+ function offset(_ref2) {
+ var state = _ref2.state, options = _ref2.options, name = _ref2.name;
+ var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset;
+ var data = placements.reduce(function(acc, placement) {
+ acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2);
+ return acc;
+ }, {});
+ var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y;
+ if (state.modifiersData.popperOffsets != null) {
+ state.modifiersData.popperOffsets.x += x;
+ state.modifiersData.popperOffsets.y += y;
+ }
+ state.modifiersData[name] = data;
+ }
+ var offset_default = {
+ name: "offset",
+ enabled: true,
+ phase: "main",
+ requires: ["popperOffsets"],
+ fn: offset
+ };
+
+ // node_modules/@popperjs/core/lib/modifiers/popperOffsets.js
+ function popperOffsets(_ref) {
+ var state = _ref.state, name = _ref.name;
+ state.modifiersData[name] = computeOffsets({
+ reference: state.rects.reference,
+ element: state.rects.popper,
+ strategy: "absolute",
+ placement: state.placement
+ });
+ }
+ var popperOffsets_default = {
+ name: "popperOffsets",
+ enabled: true,
+ phase: "read",
+ fn: popperOffsets,
+ data: {}
+ };
+
+ // node_modules/@popperjs/core/lib/utils/getAltAxis.js
+ function getAltAxis(axis) {
+ return axis === "x" ? "y" : "x";
+ }
+
+ // node_modules/@popperjs/core/lib/modifiers/preventOverflow.js
+ function preventOverflow(_ref) {
+ var state = _ref.state, options = _ref.options, name = _ref.name;
+ var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+ var overflow = detectOverflow(state, {
+ boundary,
+ rootBoundary,
+ padding,
+ altBoundary
+ });
+ var basePlacement = getBasePlacement(state.placement);
+ var variation = getVariation(state.placement);
+ var isBasePlacement = !variation;
+ var mainAxis = getMainAxisFromPlacement(basePlacement);
+ var altAxis = getAltAxis(mainAxis);
+ var popperOffsets2 = state.modifiersData.popperOffsets;
+ var referenceRect = state.rects.reference;
+ var popperRect = state.rects.popper;
+ var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, {
+ placement: state.placement
+ })) : tetherOffset;
+ var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? {
+ mainAxis: tetherOffsetValue,
+ altAxis: tetherOffsetValue
+ } : Object.assign({
+ mainAxis: 0,
+ altAxis: 0
+ }, tetherOffsetValue);
+ var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+ var data = {
+ x: 0,
+ y: 0
+ };
+ if (!popperOffsets2) {
+ return;
+ }
+ if (checkMainAxis) {
+ var _offsetModifierState$;
+ var mainSide = mainAxis === "y" ? top : left;
+ var altSide = mainAxis === "y" ? bottom : right;
+ var len = mainAxis === "y" ? "height" : "width";
+ var offset2 = popperOffsets2[mainAxis];
+ var min2 = offset2 + overflow[mainSide];
+ var max2 = offset2 - overflow[altSide];
+ var additive = tether ? -popperRect[len] / 2 : 0;
+ var minLen = variation === start ? referenceRect[len] : popperRect[len];
+ var maxLen = variation === start ? -popperRect[len] : -referenceRect[len];
+ var arrowElement = state.elements.arrow;
+ var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+ width: 0,
+ height: 0
+ };
+ var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject();
+ var arrowPaddingMin = arrowPaddingObject[mainSide];
+ var arrowPaddingMax = arrowPaddingObject[altSide];
+ var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+ var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+ var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+ var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+ var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+ var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+ var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset;
+ var tetherMax = offset2 + maxOffset - offsetModifierValue;
+ var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2);
+ popperOffsets2[mainAxis] = preventedOffset;
+ data[mainAxis] = preventedOffset - offset2;
+ }
+ if (checkAltAxis) {
+ var _offsetModifierState$2;
+ var _mainSide = mainAxis === "x" ? top : left;
+ var _altSide = mainAxis === "x" ? bottom : right;
+ var _offset = popperOffsets2[altAxis];
+ var _len = altAxis === "y" ? "height" : "width";
+ var _min = _offset + overflow[_mainSide];
+ var _max = _offset - overflow[_altSide];
+ var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+ var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+ var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+ var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+ var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+ popperOffsets2[altAxis] = _preventedOffset;
+ data[altAxis] = _preventedOffset - _offset;
+ }
+ state.modifiersData[name] = data;
+ }
+ var preventOverflow_default = {
+ name: "preventOverflow",
+ enabled: true,
+ phase: "main",
+ fn: preventOverflow,
+ requiresIfExists: ["offset"]
+ };
+
+ // node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js
+ function getHTMLElementScroll(element) {
+ return {
+ scrollLeft: element.scrollLeft,
+ scrollTop: element.scrollTop
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js
+ function getNodeScroll(node) {
+ if (node === getWindow(node) || !isHTMLElement(node)) {
+ return getWindowScroll(node);
+ } else {
+ return getHTMLElementScroll(node);
+ }
+ }
+
+ // node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js
+ function isElementScaled(element) {
+ var rect = element.getBoundingClientRect();
+ var scaleX = round(rect.width) / element.offsetWidth || 1;
+ var scaleY = round(rect.height) / element.offsetHeight || 1;
+ return scaleX !== 1 || scaleY !== 1;
+ }
+ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+ if (isFixed === void 0) {
+ isFixed = false;
+ }
+ var isOffsetParentAnElement = isHTMLElement(offsetParent);
+ var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+ var documentElement = getDocumentElement(offsetParent);
+ var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+ var scroll = {
+ scrollLeft: 0,
+ scrollTop: 0
+ };
+ var offsets = {
+ x: 0,
+ y: 0
+ };
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+ if (getNodeName(offsetParent) !== "body" || // https://github.com/popperjs/popper-core/issues/1078
+ isScrollParent(documentElement)) {
+ scroll = getNodeScroll(offsetParent);
+ }
+ if (isHTMLElement(offsetParent)) {
+ offsets = getBoundingClientRect(offsetParent, true);
+ offsets.x += offsetParent.clientLeft;
+ offsets.y += offsetParent.clientTop;
+ } else if (documentElement) {
+ offsets.x = getWindowScrollBarX(documentElement);
+ }
+ }
+ return {
+ x: rect.left + scroll.scrollLeft - offsets.x,
+ y: rect.top + scroll.scrollTop - offsets.y,
+ width: rect.width,
+ height: rect.height
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/utils/orderModifiers.js
+ function order(modifiers) {
+ var map = /* @__PURE__ */ new Map();
+ var visited = /* @__PURE__ */ new Set();
+ var result = [];
+ modifiers.forEach(function(modifier) {
+ map.set(modifier.name, modifier);
+ });
+ function sort(modifier) {
+ visited.add(modifier.name);
+ var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+ requires.forEach(function(dep) {
+ if (!visited.has(dep)) {
+ var depModifier = map.get(dep);
+ if (depModifier) {
+ sort(depModifier);
+ }
+ }
+ });
+ result.push(modifier);
+ }
+ modifiers.forEach(function(modifier) {
+ if (!visited.has(modifier.name)) {
+ sort(modifier);
+ }
+ });
+ return result;
+ }
+ function orderModifiers(modifiers) {
+ var orderedModifiers = order(modifiers);
+ return modifierPhases.reduce(function(acc, phase) {
+ return acc.concat(orderedModifiers.filter(function(modifier) {
+ return modifier.phase === phase;
+ }));
+ }, []);
+ }
+
+ // node_modules/@popperjs/core/lib/utils/debounce.js
+ function debounce(fn2) {
+ var pending;
+ return function() {
+ if (!pending) {
+ pending = new Promise(function(resolve) {
+ Promise.resolve().then(function() {
+ pending = void 0;
+ resolve(fn2());
+ });
+ });
+ }
+ return pending;
+ };
+ }
+
+ // node_modules/@popperjs/core/lib/utils/mergeByName.js
+ function mergeByName(modifiers) {
+ var merged = modifiers.reduce(function(merged2, current) {
+ var existing = merged2[current.name];
+ merged2[current.name] = existing ? Object.assign({}, existing, current, {
+ options: Object.assign({}, existing.options, current.options),
+ data: Object.assign({}, existing.data, current.data)
+ }) : current;
+ return merged2;
+ }, {});
+ return Object.keys(merged).map(function(key) {
+ return merged[key];
+ });
+ }
+
+ // node_modules/@popperjs/core/lib/createPopper.js
+ var DEFAULT_OPTIONS = {
+ placement: "bottom",
+ modifiers: [],
+ strategy: "absolute"
+ };
+ function areValidElements() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ return !args.some(function(element) {
+ return !(element && typeof element.getBoundingClientRect === "function");
+ });
+ }
+ function popperGenerator(generatorOptions) {
+ if (generatorOptions === void 0) {
+ generatorOptions = {};
+ }
+ var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers3 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+ return function createPopper4(reference2, popper2, options) {
+ if (options === void 0) {
+ options = defaultOptions;
+ }
+ var state = {
+ placement: "bottom",
+ orderedModifiers: [],
+ options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+ modifiersData: {},
+ elements: {
+ reference: reference2,
+ popper: popper2
+ },
+ attributes: {},
+ styles: {}
+ };
+ var effectCleanupFns = [];
+ var isDestroyed = false;
+ var instance = {
+ state,
+ setOptions: function setOptions(setOptionsAction) {
+ var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction;
+ cleanupModifierEffects();
+ state.options = Object.assign({}, defaultOptions, state.options, options2);
+ state.scrollParents = {
+ reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],
+ popper: listScrollParents(popper2)
+ };
+ var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers3, state.options.modifiers)));
+ state.orderedModifiers = orderedModifiers.filter(function(m) {
+ return m.enabled;
+ });
+ runModifierEffects();
+ return instance.update();
+ },
+ // Sync update – it will always be executed, even if not necessary. This
+ // is useful for low frequency updates where sync behavior simplifies the
+ // logic.
+ // For high frequency updates (e.g. `resize` and `scroll` events), always
+ // prefer the async Popper#update method
+ forceUpdate: function forceUpdate() {
+ if (isDestroyed) {
+ return;
+ }
+ var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;
+ if (!areValidElements(reference3, popper3)) {
+ return;
+ }
+ state.rects = {
+ reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"),
+ popper: getLayoutRect(popper3)
+ };
+ state.reset = false;
+ state.placement = state.options.placement;
+ state.orderedModifiers.forEach(function(modifier) {
+ return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+ });
+ for (var index = 0; index < state.orderedModifiers.length; index++) {
+ if (state.reset === true) {
+ state.reset = false;
+ index = -1;
+ continue;
+ }
+ var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name;
+ if (typeof fn2 === "function") {
+ state = fn2({
+ state,
+ options: _options,
+ name,
+ instance
+ }) || state;
+ }
+ }
+ },
+ // Async and optimistically optimized update – it will not be executed if
+ // not necessary (debounced to run at most once-per-tick)
+ update: debounce(function() {
+ return new Promise(function(resolve) {
+ instance.forceUpdate();
+ resolve(state);
+ });
+ }),
+ destroy: function destroy() {
+ cleanupModifierEffects();
+ isDestroyed = true;
+ }
+ };
+ if (!areValidElements(reference2, popper2)) {
+ return instance;
+ }
+ instance.setOptions(options).then(function(state2) {
+ if (!isDestroyed && options.onFirstUpdate) {
+ options.onFirstUpdate(state2);
+ }
+ });
+ function runModifierEffects() {
+ state.orderedModifiers.forEach(function(_ref) {
+ var name = _ref.name, _ref$options = _ref.options, options2 = _ref$options === void 0 ? {} : _ref$options, effect4 = _ref.effect;
+ if (typeof effect4 === "function") {
+ var cleanupFn = effect4({
+ state,
+ name,
+ instance,
+ options: options2
+ });
+ var noopFn = function noopFn2() {
+ };
+ effectCleanupFns.push(cleanupFn || noopFn);
+ }
+ });
+ }
+ function cleanupModifierEffects() {
+ effectCleanupFns.forEach(function(fn2) {
+ return fn2();
+ });
+ effectCleanupFns = [];
+ }
+ return instance;
+ };
+ }
+ var createPopper = /* @__PURE__ */ popperGenerator();
+
+ // node_modules/@popperjs/core/lib/popper-lite.js
+ var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default];
+ var createPopper2 = /* @__PURE__ */ popperGenerator({
+ defaultModifiers
+ });
+
+ // node_modules/@popperjs/core/lib/popper.js
+ var defaultModifiers2 = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default];
+ var createPopper3 = /* @__PURE__ */ popperGenerator({
+ defaultModifiers: defaultModifiers2
+ });
+
+ // node_modules/bootstrap/dist/js/bootstrap.esm.js
+ var elementMap = /* @__PURE__ */ new Map();
+ var Data = {
+ set(element, key, instance) {
+ if (!elementMap.has(element)) {
+ elementMap.set(element, /* @__PURE__ */ new Map());
+ }
+ const instanceMap = elementMap.get(element);
+ if (!instanceMap.has(key) && instanceMap.size !== 0) {
+ console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
+ return;
+ }
+ instanceMap.set(key, instance);
+ },
+ get(element, key) {
+ if (elementMap.has(element)) {
+ return elementMap.get(element).get(key) || null;
+ }
+ return null;
+ },
+ remove(element, key) {
+ if (!elementMap.has(element)) {
+ return;
+ }
+ const instanceMap = elementMap.get(element);
+ instanceMap.delete(key);
+ if (instanceMap.size === 0) {
+ elementMap.delete(element);
+ }
+ }
+ };
+ var MAX_UID = 1e6;
+ var MILLISECONDS_MULTIPLIER = 1e3;
+ var TRANSITION_END = "transitionend";
+ var parseSelector = (selector) => {
+ if (selector && window.CSS && window.CSS.escape) {
+ selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+ }
+ return selector;
+ };
+ var toType = (object) => {
+ if (object === null || object === void 0) {
+ return `${object}`;
+ }
+ return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
+ };
+ var getUID = (prefix) => {
+ do {
+ prefix += Math.floor(Math.random() * MAX_UID);
+ } while (document.getElementById(prefix));
+ return prefix;
+ };
+ var getTransitionDurationFromElement = (element) => {
+ if (!element) {
+ return 0;
+ }
+ let {
+ transitionDuration,
+ transitionDelay
+ } = window.getComputedStyle(element);
+ const floatTransitionDuration = Number.parseFloat(transitionDuration);
+ const floatTransitionDelay = Number.parseFloat(transitionDelay);
+ if (!floatTransitionDuration && !floatTransitionDelay) {
+ return 0;
+ }
+ transitionDuration = transitionDuration.split(",")[0];
+ transitionDelay = transitionDelay.split(",")[0];
+ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
+ };
+ var triggerTransitionEnd = (element) => {
+ element.dispatchEvent(new Event(TRANSITION_END));
+ };
+ var isElement2 = (object) => {
+ if (!object || typeof object !== "object") {
+ return false;
+ }
+ if (typeof object.jquery !== "undefined") {
+ object = object[0];
+ }
+ return typeof object.nodeType !== "undefined";
+ };
+ var getElement = (object) => {
+ if (isElement2(object)) {
+ return object.jquery ? object[0] : object;
+ }
+ if (typeof object === "string" && object.length > 0) {
+ return document.querySelector(parseSelector(object));
+ }
+ return null;
+ };
+ var isVisible = (element) => {
+ if (!isElement2(element) || element.getClientRects().length === 0) {
+ return false;
+ }
+ const elementIsVisible = getComputedStyle(element).getPropertyValue("visibility") === "visible";
+ const closedDetails = element.closest("details:not([open])");
+ if (!closedDetails) {
+ return elementIsVisible;
+ }
+ if (closedDetails !== element) {
+ const summary = element.closest("summary");
+ if (summary && summary.parentNode !== closedDetails) {
+ return false;
+ }
+ if (summary === null) {
+ return false;
+ }
+ }
+ return elementIsVisible;
+ };
+ var isDisabled = (element) => {
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
+ return true;
+ }
+ if (element.classList.contains("disabled")) {
+ return true;
+ }
+ if (typeof element.disabled !== "undefined") {
+ return element.disabled;
+ }
+ return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false";
+ };
+ var findShadowRoot = (element) => {
+ if (!document.documentElement.attachShadow) {
+ return null;
+ }
+ if (typeof element.getRootNode === "function") {
+ const root = element.getRootNode();
+ return root instanceof ShadowRoot ? root : null;
+ }
+ if (element instanceof ShadowRoot) {
+ return element;
+ }
+ if (!element.parentNode) {
+ return null;
+ }
+ return findShadowRoot(element.parentNode);
+ };
+ var noop = () => {
+ };
+ var reflow = (element) => {
+ element.offsetHeight;
+ };
+ var getjQuery = () => {
+ if (window.jQuery && !document.body.hasAttribute("data-bs-no-jquery")) {
+ return window.jQuery;
+ }
+ return null;
+ };
+ var DOMContentLoadedCallbacks = [];
+ var onDOMContentLoaded = (callback) => {
+ if (document.readyState === "loading") {
+ if (!DOMContentLoadedCallbacks.length) {
+ document.addEventListener("DOMContentLoaded", () => {
+ for (const callback2 of DOMContentLoadedCallbacks) {
+ callback2();
+ }
+ });
+ }
+ DOMContentLoadedCallbacks.push(callback);
+ } else {
+ callback();
+ }
+ };
+ var isRTL = () => document.documentElement.dir === "rtl";
+ var defineJQueryPlugin = (plugin) => {
+ onDOMContentLoaded(() => {
+ const $4 = getjQuery();
+ if ($4) {
+ const name = plugin.NAME;
+ const JQUERY_NO_CONFLICT = $4.fn[name];
+ $4.fn[name] = plugin.jQueryInterface;
+ $4.fn[name].Constructor = plugin;
+ $4.fn[name].noConflict = () => {
+ $4.fn[name] = JQUERY_NO_CONFLICT;
+ return plugin.jQueryInterface;
+ };
+ }
+ });
+ };
+ var execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+ return typeof possibleCallback === "function" ? possibleCallback(...args) : defaultValue;
+ };
+ var executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
+ if (!waitForTransition) {
+ execute(callback);
+ return;
+ }
+ const durationPadding = 5;
+ const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
+ let called = false;
+ const handler = ({
+ target
+ }) => {
+ if (target !== transitionElement) {
+ return;
+ }
+ called = true;
+ transitionElement.removeEventListener(TRANSITION_END, handler);
+ execute(callback);
+ };
+ transitionElement.addEventListener(TRANSITION_END, handler);
+ setTimeout(() => {
+ if (!called) {
+ triggerTransitionEnd(transitionElement);
+ }
+ }, emulatedDuration);
+ };
+ var getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
+ const listLength = list.length;
+ let index = list.indexOf(activeElement);
+ if (index === -1) {
+ return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
+ }
+ index += shouldGetNext ? 1 : -1;
+ if (isCycleAllowed) {
+ index = (index + listLength) % listLength;
+ }
+ return list[Math.max(0, Math.min(index, listLength - 1))];
+ };
+ var namespaceRegex = /[^.]*(?=\..*)\.|.*/;
+ var stripNameRegex = /\..*/;
+ var stripUidRegex = /::\d+$/;
+ var eventRegistry = {};
+ var uidEvent = 1;
+ var customEvents = {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ };
+ var nativeEvents = /* @__PURE__ */ new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]);
+ function makeEventUid(element, uid) {
+ return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
+ }
+ function getElementEvents(element) {
+ const uid = makeEventUid(element);
+ element.uidEvent = uid;
+ eventRegistry[uid] = eventRegistry[uid] || {};
+ return eventRegistry[uid];
+ }
+ function bootstrapHandler(element, fn2) {
+ return function handler(event) {
+ hydrateObj(event, {
+ delegateTarget: element
+ });
+ if (handler.oneOff) {
+ EventHandler.off(element, event.type, fn2);
+ }
+ return fn2.apply(element, [event]);
+ };
+ }
+ function bootstrapDelegationHandler(element, selector, fn2) {
+ return function handler(event) {
+ const domElements = element.querySelectorAll(selector);
+ for (let {
+ target
+ } = event; target && target !== this; target = target.parentNode) {
+ for (const domElement of domElements) {
+ if (domElement !== target) {
+ continue;
+ }
+ hydrateObj(event, {
+ delegateTarget: target
+ });
+ if (handler.oneOff) {
+ EventHandler.off(element, event.type, selector, fn2);
+ }
+ return fn2.apply(target, [event]);
+ }
+ }
+ };
+ }
+ function findHandler(events, callable, delegationSelector = null) {
+ return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector);
+ }
+ function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
+ const isDelegated = typeof handler === "string";
+ const callable = isDelegated ? delegationFunction : handler || delegationFunction;
+ let typeEvent = getTypeEvent(originalTypeEvent);
+ if (!nativeEvents.has(typeEvent)) {
+ typeEvent = originalTypeEvent;
+ }
+ return [isDelegated, callable, typeEvent];
+ }
+ function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
+ if (typeof originalTypeEvent !== "string" || !element) {
+ return;
+ }
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+ if (originalTypeEvent in customEvents) {
+ const wrapFunction = (fn3) => {
+ return function(event) {
+ if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
+ return fn3.call(this, event);
+ }
+ };
+ };
+ callable = wrapFunction(callable);
+ }
+ const events = getElementEvents(element);
+ const handlers = events[typeEvent] || (events[typeEvent] = {});
+ const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
+ if (previousFunction) {
+ previousFunction.oneOff = previousFunction.oneOff && oneOff;
+ return;
+ }
+ const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ""));
+ const fn2 = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
+ fn2.delegationSelector = isDelegated ? handler : null;
+ fn2.callable = callable;
+ fn2.oneOff = oneOff;
+ fn2.uidEvent = uid;
+ handlers[uid] = fn2;
+ element.addEventListener(typeEvent, fn2, isDelegated);
+ }
+ function removeHandler(element, events, typeEvent, handler, delegationSelector) {
+ const fn2 = findHandler(events[typeEvent], handler, delegationSelector);
+ if (!fn2) {
+ return;
+ }
+ element.removeEventListener(typeEvent, fn2, Boolean(delegationSelector));
+ delete events[typeEvent][fn2.uidEvent];
+ }
+ function removeNamespacedHandlers(element, events, typeEvent, namespace) {
+ const storeElementEvent = events[typeEvent] || {};
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
+ if (handlerKey.includes(namespace)) {
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+ }
+ }
+ }
+ function getTypeEvent(event) {
+ event = event.replace(stripNameRegex, "");
+ return customEvents[event] || event;
+ }
+ var EventHandler = {
+ on(element, event, handler, delegationFunction) {
+ addHandler(element, event, handler, delegationFunction, false);
+ },
+ one(element, event, handler, delegationFunction) {
+ addHandler(element, event, handler, delegationFunction, true);
+ },
+ off(element, originalTypeEvent, handler, delegationFunction) {
+ if (typeof originalTypeEvent !== "string" || !element) {
+ return;
+ }
+ const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+ const inNamespace = typeEvent !== originalTypeEvent;
+ const events = getElementEvents(element);
+ const storeElementEvent = events[typeEvent] || {};
+ const isNamespace = originalTypeEvent.startsWith(".");
+ if (typeof callable !== "undefined") {
+ if (!Object.keys(storeElementEvent).length) {
+ return;
+ }
+ removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
+ return;
+ }
+ if (isNamespace) {
+ for (const elementEvent of Object.keys(events)) {
+ removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
+ }
+ }
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
+ const handlerKey = keyHandlers.replace(stripUidRegex, "");
+ if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+ }
+ }
+ },
+ trigger(element, event, args) {
+ if (typeof event !== "string" || !element) {
+ return null;
+ }
+ const $4 = getjQuery();
+ const typeEvent = getTypeEvent(event);
+ const inNamespace = event !== typeEvent;
+ let jQueryEvent = null;
+ let bubbles = true;
+ let nativeDispatch = true;
+ let defaultPrevented = false;
+ if (inNamespace && $4) {
+ jQueryEvent = $4.Event(event, args);
+ $4(element).trigger(jQueryEvent);
+ bubbles = !jQueryEvent.isPropagationStopped();
+ nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
+ defaultPrevented = jQueryEvent.isDefaultPrevented();
+ }
+ const evt = hydrateObj(new Event(event, {
+ bubbles,
+ cancelable: true
+ }), args);
+ if (defaultPrevented) {
+ evt.preventDefault();
+ }
+ if (nativeDispatch) {
+ element.dispatchEvent(evt);
+ }
+ if (evt.defaultPrevented && jQueryEvent) {
+ jQueryEvent.preventDefault();
+ }
+ return evt;
+ }
+ };
+ function hydrateObj(obj, meta = {}) {
+ for (const [key, value] of Object.entries(meta)) {
+ try {
+ obj[key] = value;
+ } catch (_unused) {
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ get() {
+ return value;
+ }
+ });
+ }
+ }
+ return obj;
+ }
+ function normalizeData(value) {
+ if (value === "true") {
+ return true;
+ }
+ if (value === "false") {
+ return false;
+ }
+ if (value === Number(value).toString()) {
+ return Number(value);
+ }
+ if (value === "" || value === "null") {
+ return null;
+ }
+ if (typeof value !== "string") {
+ return value;
+ }
+ try {
+ return JSON.parse(decodeURIComponent(value));
+ } catch (_unused) {
+ return value;
+ }
+ }
+ function normalizeDataKey(key) {
+ return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
+ }
+ var Manipulator = {
+ setDataAttribute(element, key, value) {
+ element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
+ },
+ removeDataAttribute(element, key) {
+ element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
+ },
+ getDataAttributes(element) {
+ if (!element) {
+ return {};
+ }
+ const attributes = {};
+ const bsKeys = Object.keys(element.dataset).filter((key) => key.startsWith("bs") && !key.startsWith("bsConfig"));
+ for (const key of bsKeys) {
+ let pureKey = key.replace(/^bs/, "");
+ pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
+ attributes[pureKey] = normalizeData(element.dataset[key]);
+ }
+ return attributes;
+ },
+ getDataAttribute(element, key) {
+ return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
+ }
+ };
+ var Config = class {
+ // Getters
+ static get Default() {
+ return {};
+ }
+ static get DefaultType() {
+ return {};
+ }
+ static get NAME() {
+ throw new Error('You have to implement the static method "NAME", for each component!');
+ }
+ _getConfig(config) {
+ config = this._mergeConfigObj(config);
+ config = this._configAfterMerge(config);
+ this._typeCheckConfig(config);
+ return config;
+ }
+ _configAfterMerge(config) {
+ return config;
+ }
+ _mergeConfigObj(config, element) {
+ const jsonConfig = isElement2(element) ? Manipulator.getDataAttribute(element, "config") : {};
+ return __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, this.constructor.Default), typeof jsonConfig === "object" ? jsonConfig : {}), isElement2(element) ? Manipulator.getDataAttributes(element) : {}), typeof config === "object" ? config : {});
+ }
+ _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
+ for (const [property, expectedTypes] of Object.entries(configTypes)) {
+ const value = config[property];
+ const valueType = isElement2(value) ? "element" : toType(value);
+ if (!new RegExp(expectedTypes).test(valueType)) {
+ throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
+ }
+ }
+ }
+ };
+ var VERSION = "5.3.3";
+ var BaseComponent = class extends Config {
+ constructor(element, config) {
+ super();
+ element = getElement(element);
+ if (!element) {
+ return;
+ }
+ this._element = element;
+ this._config = this._getConfig(config);
+ Data.set(this._element, this.constructor.DATA_KEY, this);
+ }
+ // Public
+ dispose() {
+ Data.remove(this._element, this.constructor.DATA_KEY);
+ EventHandler.off(this._element, this.constructor.EVENT_KEY);
+ for (const propertyName of Object.getOwnPropertyNames(this)) {
+ this[propertyName] = null;
+ }
+ }
+ _queueCallback(callback, element, isAnimated = true) {
+ executeAfterTransition(callback, element, isAnimated);
+ }
+ _getConfig(config) {
+ config = this._mergeConfigObj(config, this._element);
+ config = this._configAfterMerge(config);
+ this._typeCheckConfig(config);
+ return config;
+ }
+ // Static
+ static getInstance(element) {
+ return Data.get(getElement(element), this.DATA_KEY);
+ }
+ static getOrCreateInstance(element, config = {}) {
+ return this.getInstance(element) || new this(element, typeof config === "object" ? config : null);
+ }
+ static get VERSION() {
+ return VERSION;
+ }
+ static get DATA_KEY() {
+ return `bs.${this.NAME}`;
+ }
+ static get EVENT_KEY() {
+ return `.${this.DATA_KEY}`;
+ }
+ static eventName(name) {
+ return `${name}${this.EVENT_KEY}`;
+ }
+ };
+ var getSelector = (element) => {
+ let selector = element.getAttribute("data-bs-target");
+ if (!selector || selector === "#") {
+ let hrefAttribute = element.getAttribute("href");
+ if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) {
+ return null;
+ }
+ if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) {
+ hrefAttribute = `#${hrefAttribute.split("#")[1]}`;
+ }
+ selector = hrefAttribute && hrefAttribute !== "#" ? hrefAttribute.trim() : null;
+ }
+ return selector ? selector.split(",").map((sel) => parseSelector(sel)).join(",") : null;
+ };
+ var SelectorEngine = {
+ find(selector, element = document.documentElement) {
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+ },
+ findOne(selector, element = document.documentElement) {
+ return Element.prototype.querySelector.call(element, selector);
+ },
+ children(element, selector) {
+ return [].concat(...element.children).filter((child) => child.matches(selector));
+ },
+ parents(element, selector) {
+ const parents = [];
+ let ancestor = element.parentNode.closest(selector);
+ while (ancestor) {
+ parents.push(ancestor);
+ ancestor = ancestor.parentNode.closest(selector);
+ }
+ return parents;
+ },
+ prev(element, selector) {
+ let previous = element.previousElementSibling;
+ while (previous) {
+ if (previous.matches(selector)) {
+ return [previous];
+ }
+ previous = previous.previousElementSibling;
+ }
+ return [];
+ },
+ // TODO: this is now unused; remove later along with prev()
+ next(element, selector) {
+ let next = element.nextElementSibling;
+ while (next) {
+ if (next.matches(selector)) {
+ return [next];
+ }
+ next = next.nextElementSibling;
+ }
+ return [];
+ },
+ focusableChildren(element) {
+ const focusables = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((selector) => `${selector}:not([tabindex^="-"])`).join(",");
+ return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));
+ },
+ getSelectorFromElement(element) {
+ const selector = getSelector(element);
+ if (selector) {
+ return SelectorEngine.findOne(selector) ? selector : null;
+ }
+ return null;
+ },
+ getElementFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.findOne(selector) : null;
+ },
+ getMultipleElementsFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.find(selector) : [];
+ }
+ };
+ var enableDismissTrigger = (component, method = "hide") => {
+ const clickEvent = `click.dismiss${component.EVENT_KEY}`;
+ const name = component.NAME;
+ EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) {
+ if (["A", "AREA"].includes(this.tagName)) {
+ event.preventDefault();
+ }
+ if (isDisabled(this)) {
+ return;
+ }
+ const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+ const instance = component.getOrCreateInstance(target);
+ instance[method]();
+ });
+ };
+ var NAME$f = "alert";
+ var DATA_KEY$a = "bs.alert";
+ var EVENT_KEY$b = `.${DATA_KEY$a}`;
+ var EVENT_CLOSE = `close${EVENT_KEY$b}`;
+ var EVENT_CLOSED = `closed${EVENT_KEY$b}`;
+ var CLASS_NAME_FADE$5 = "fade";
+ var CLASS_NAME_SHOW$8 = "show";
+ var Alert = class _Alert extends BaseComponent {
+ // Getters
+ static get NAME() {
+ return NAME$f;
+ }
+ // Public
+ close() {
+ const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
+ if (closeEvent.defaultPrevented) {
+ return;
+ }
+ this._element.classList.remove(CLASS_NAME_SHOW$8);
+ const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
+ this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
+ }
+ // Private
+ _destroyElement() {
+ this._element.remove();
+ EventHandler.trigger(this._element, EVENT_CLOSED);
+ this.dispose();
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Alert.getOrCreateInstance(this);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config](this);
+ });
+ }
+ };
+ enableDismissTrigger(Alert, "close");
+ defineJQueryPlugin(Alert);
+ var NAME$e = "button";
+ var DATA_KEY$9 = "bs.button";
+ var EVENT_KEY$a = `.${DATA_KEY$9}`;
+ var DATA_API_KEY$6 = ".data-api";
+ var CLASS_NAME_ACTIVE$3 = "active";
+ var SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
+ var EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+ var Button = class _Button extends BaseComponent {
+ // Getters
+ static get NAME() {
+ return NAME$e;
+ }
+ // Public
+ toggle() {
+ this._element.setAttribute("aria-pressed", this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Button.getOrCreateInstance(this);
+ if (config === "toggle") {
+ data[config]();
+ }
+ });
+ }
+ };
+ EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, (event) => {
+ event.preventDefault();
+ const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
+ const data = Button.getOrCreateInstance(button);
+ data.toggle();
+ });
+ defineJQueryPlugin(Button);
+ var NAME$d = "swipe";
+ var EVENT_KEY$9 = ".bs.swipe";
+ var EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
+ var EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
+ var EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
+ var EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
+ var EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
+ var POINTER_TYPE_TOUCH = "touch";
+ var POINTER_TYPE_PEN = "pen";
+ var CLASS_NAME_POINTER_EVENT = "pointer-event";
+ var SWIPE_THRESHOLD = 40;
+ var Default$c = {
+ endCallback: null,
+ leftCallback: null,
+ rightCallback: null
+ };
+ var DefaultType$c = {
+ endCallback: "(function|null)",
+ leftCallback: "(function|null)",
+ rightCallback: "(function|null)"
+ };
+ var Swipe = class _Swipe extends Config {
+ constructor(element, config) {
+ super();
+ this._element = element;
+ if (!element || !_Swipe.isSupported()) {
+ return;
+ }
+ this._config = this._getConfig(config);
+ this._deltaX = 0;
+ this._supportPointerEvents = Boolean(window.PointerEvent);
+ this._initEvents();
+ }
+ // Getters
+ static get Default() {
+ return Default$c;
+ }
+ static get DefaultType() {
+ return DefaultType$c;
+ }
+ static get NAME() {
+ return NAME$d;
+ }
+ // Public
+ dispose() {
+ EventHandler.off(this._element, EVENT_KEY$9);
+ }
+ // Private
+ _start(event) {
+ if (!this._supportPointerEvents) {
+ this._deltaX = event.touches[0].clientX;
+ return;
+ }
+ if (this._eventIsPointerPenTouch(event)) {
+ this._deltaX = event.clientX;
+ }
+ }
+ _end(event) {
+ if (this._eventIsPointerPenTouch(event)) {
+ this._deltaX = event.clientX - this._deltaX;
+ }
+ this._handleSwipe();
+ execute(this._config.endCallback);
+ }
+ _move(event) {
+ this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
+ }
+ _handleSwipe() {
+ const absDeltaX = Math.abs(this._deltaX);
+ if (absDeltaX <= SWIPE_THRESHOLD) {
+ return;
+ }
+ const direction = absDeltaX / this._deltaX;
+ this._deltaX = 0;
+ if (!direction) {
+ return;
+ }
+ execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
+ }
+ _initEvents() {
+ if (this._supportPointerEvents) {
+ EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event));
+ EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event));
+ this._element.classList.add(CLASS_NAME_POINTER_EVENT);
+ } else {
+ EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event));
+ EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event));
+ EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event));
+ }
+ }
+ _eventIsPointerPenTouch(event) {
+ return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
+ }
+ // Static
+ static isSupported() {
+ return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0;
+ }
+ };
+ var NAME$c = "carousel";
+ var DATA_KEY$8 = "bs.carousel";
+ var EVENT_KEY$8 = `.${DATA_KEY$8}`;
+ var DATA_API_KEY$5 = ".data-api";
+ var ARROW_LEFT_KEY$1 = "ArrowLeft";
+ var ARROW_RIGHT_KEY$1 = "ArrowRight";
+ var TOUCHEVENT_COMPAT_WAIT = 500;
+ var ORDER_NEXT = "next";
+ var ORDER_PREV = "prev";
+ var DIRECTION_LEFT = "left";
+ var DIRECTION_RIGHT = "right";
+ var EVENT_SLIDE = `slide${EVENT_KEY$8}`;
+ var EVENT_SLID = `slid${EVENT_KEY$8}`;
+ var EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
+ var EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
+ var EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
+ var EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
+ var EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
+ var EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
+ var CLASS_NAME_CAROUSEL = "carousel";
+ var CLASS_NAME_ACTIVE$2 = "active";
+ var CLASS_NAME_SLIDE = "slide";
+ var CLASS_NAME_END = "carousel-item-end";
+ var CLASS_NAME_START = "carousel-item-start";
+ var CLASS_NAME_NEXT = "carousel-item-next";
+ var CLASS_NAME_PREV = "carousel-item-prev";
+ var SELECTOR_ACTIVE = ".active";
+ var SELECTOR_ITEM = ".carousel-item";
+ var SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
+ var SELECTOR_ITEM_IMG = ".carousel-item img";
+ var SELECTOR_INDICATORS = ".carousel-indicators";
+ var SELECTOR_DATA_SLIDE = "[data-bs-slide], [data-bs-slide-to]";
+ var SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
+ var KEY_TO_DIRECTION = {
+ [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
+ [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
+ };
+ var Default$b = {
+ interval: 5e3,
+ keyboard: true,
+ pause: "hover",
+ ride: false,
+ touch: true,
+ wrap: true
+ };
+ var DefaultType$b = {
+ interval: "(number|boolean)",
+ // TODO:v6 remove boolean support
+ keyboard: "boolean",
+ pause: "(string|boolean)",
+ ride: "(boolean|string)",
+ touch: "boolean",
+ wrap: "boolean"
+ };
+ var Carousel = class _Carousel extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._interval = null;
+ this._activeElement = null;
+ this._isSliding = false;
+ this.touchTimeout = null;
+ this._swipeHelper = null;
+ this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
+ this._addEventListeners();
+ if (this._config.ride === CLASS_NAME_CAROUSEL) {
+ this.cycle();
+ }
+ }
+ // Getters
+ static get Default() {
+ return Default$b;
+ }
+ static get DefaultType() {
+ return DefaultType$b;
+ }
+ static get NAME() {
+ return NAME$c;
+ }
+ // Public
+ next() {
+ this._slide(ORDER_NEXT);
+ }
+ nextWhenVisible() {
+ if (!document.hidden && isVisible(this._element)) {
+ this.next();
+ }
+ }
+ prev() {
+ this._slide(ORDER_PREV);
+ }
+ pause() {
+ if (this._isSliding) {
+ triggerTransitionEnd(this._element);
+ }
+ this._clearInterval();
+ }
+ cycle() {
+ this._clearInterval();
+ this._updateInterval();
+ this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
+ }
+ _maybeEnableCycle() {
+ if (!this._config.ride) {
+ return;
+ }
+ if (this._isSliding) {
+ EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
+ return;
+ }
+ this.cycle();
+ }
+ to(index) {
+ const items = this._getItems();
+ if (index > items.length - 1 || index < 0) {
+ return;
+ }
+ if (this._isSliding) {
+ EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
+ return;
+ }
+ const activeIndex = this._getItemIndex(this._getActive());
+ if (activeIndex === index) {
+ return;
+ }
+ const order2 = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
+ this._slide(order2, items[index]);
+ }
+ dispose() {
+ if (this._swipeHelper) {
+ this._swipeHelper.dispose();
+ }
+ super.dispose();
+ }
+ // Private
+ _configAfterMerge(config) {
+ config.defaultInterval = config.interval;
+ return config;
+ }
+ _addEventListeners() {
+ if (this._config.keyboard) {
+ EventHandler.on(this._element, EVENT_KEYDOWN$1, (event) => this._keydown(event));
+ }
+ if (this._config.pause === "hover") {
+ EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
+ EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
+ }
+ if (this._config.touch && Swipe.isSupported()) {
+ this._addTouchEventListeners();
+ }
+ }
+ _addTouchEventListeners() {
+ for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
+ EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault());
+ }
+ const endCallBack = () => {
+ if (this._config.pause !== "hover") {
+ return;
+ }
+ this.pause();
+ if (this.touchTimeout) {
+ clearTimeout(this.touchTimeout);
+ }
+ this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
+ };
+ const swipeConfig = {
+ leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
+ rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
+ endCallback: endCallBack
+ };
+ this._swipeHelper = new Swipe(this._element, swipeConfig);
+ }
+ _keydown(event) {
+ if (/input|textarea/i.test(event.target.tagName)) {
+ return;
+ }
+ const direction = KEY_TO_DIRECTION[event.key];
+ if (direction) {
+ event.preventDefault();
+ this._slide(this._directionToOrder(direction));
+ }
+ }
+ _getItemIndex(element) {
+ return this._getItems().indexOf(element);
+ }
+ _setActiveIndicatorElement(index) {
+ if (!this._indicatorsElement) {
+ return;
+ }
+ const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
+ activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
+ activeIndicator.removeAttribute("aria-current");
+ const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
+ if (newActiveIndicator) {
+ newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
+ newActiveIndicator.setAttribute("aria-current", "true");
+ }
+ }
+ _updateInterval() {
+ const element = this._activeElement || this._getActive();
+ if (!element) {
+ return;
+ }
+ const elementInterval = Number.parseInt(element.getAttribute("data-bs-interval"), 10);
+ this._config.interval = elementInterval || this._config.defaultInterval;
+ }
+ _slide(order2, element = null) {
+ if (this._isSliding) {
+ return;
+ }
+ const activeElement = this._getActive();
+ const isNext = order2 === ORDER_NEXT;
+ const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
+ if (nextElement === activeElement) {
+ return;
+ }
+ const nextElementIndex = this._getItemIndex(nextElement);
+ const triggerEvent = (eventName) => {
+ return EventHandler.trigger(this._element, eventName, {
+ relatedTarget: nextElement,
+ direction: this._orderToDirection(order2),
+ from: this._getItemIndex(activeElement),
+ to: nextElementIndex
+ });
+ };
+ const slideEvent = triggerEvent(EVENT_SLIDE);
+ if (slideEvent.defaultPrevented) {
+ return;
+ }
+ if (!activeElement || !nextElement) {
+ return;
+ }
+ const isCycling = Boolean(this._interval);
+ this.pause();
+ this._isSliding = true;
+ this._setActiveIndicatorElement(nextElementIndex);
+ this._activeElement = nextElement;
+ const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
+ const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
+ nextElement.classList.add(orderClassName);
+ reflow(nextElement);
+ activeElement.classList.add(directionalClassName);
+ nextElement.classList.add(directionalClassName);
+ const completeCallBack = () => {
+ nextElement.classList.remove(directionalClassName, orderClassName);
+ nextElement.classList.add(CLASS_NAME_ACTIVE$2);
+ activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
+ this._isSliding = false;
+ triggerEvent(EVENT_SLID);
+ };
+ this._queueCallback(completeCallBack, activeElement, this._isAnimated());
+ if (isCycling) {
+ this.cycle();
+ }
+ }
+ _isAnimated() {
+ return this._element.classList.contains(CLASS_NAME_SLIDE);
+ }
+ _getActive() {
+ return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
+ }
+ _getItems() {
+ return SelectorEngine.find(SELECTOR_ITEM, this._element);
+ }
+ _clearInterval() {
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ }
+ _directionToOrder(direction) {
+ if (isRTL()) {
+ return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
+ }
+ return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
+ }
+ _orderToDirection(order2) {
+ if (isRTL()) {
+ return order2 === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
+ }
+ return order2 === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Carousel.getOrCreateInstance(this, config);
+ if (typeof config === "number") {
+ data.to(config);
+ return;
+ }
+ if (typeof config === "string") {
+ if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ }
+ });
+ }
+ };
+ EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function(event) {
+ const target = SelectorEngine.getElementFromSelector(this);
+ if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
+ return;
+ }
+ event.preventDefault();
+ const carousel = Carousel.getOrCreateInstance(target);
+ const slideIndex = this.getAttribute("data-bs-slide-to");
+ if (slideIndex) {
+ carousel.to(slideIndex);
+ carousel._maybeEnableCycle();
+ return;
+ }
+ if (Manipulator.getDataAttribute(this, "slide") === "next") {
+ carousel.next();
+ carousel._maybeEnableCycle();
+ return;
+ }
+ carousel.prev();
+ carousel._maybeEnableCycle();
+ });
+ EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
+ const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
+ for (const carousel of carousels) {
+ Carousel.getOrCreateInstance(carousel);
+ }
+ });
+ defineJQueryPlugin(Carousel);
+ var NAME$b = "collapse";
+ var DATA_KEY$7 = "bs.collapse";
+ var EVENT_KEY$7 = `.${DATA_KEY$7}`;
+ var DATA_API_KEY$4 = ".data-api";
+ var EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
+ var EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
+ var EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
+ var EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
+ var EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
+ var CLASS_NAME_SHOW$7 = "show";
+ var CLASS_NAME_COLLAPSE = "collapse";
+ var CLASS_NAME_COLLAPSING = "collapsing";
+ var CLASS_NAME_COLLAPSED = "collapsed";
+ var CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
+ var CLASS_NAME_HORIZONTAL = "collapse-horizontal";
+ var WIDTH = "width";
+ var HEIGHT = "height";
+ var SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing";
+ var SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
+ var Default$a = {
+ parent: null,
+ toggle: true
+ };
+ var DefaultType$a = {
+ parent: "(null|element)",
+ toggle: "boolean"
+ };
+ var Collapse = class _Collapse extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._isTransitioning = false;
+ this._triggerArray = [];
+ const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
+ for (const elem of toggleList) {
+ const selector = SelectorEngine.getSelectorFromElement(elem);
+ const filterElement = SelectorEngine.find(selector).filter((foundElement) => foundElement === this._element);
+ if (selector !== null && filterElement.length) {
+ this._triggerArray.push(elem);
+ }
+ }
+ this._initializeChildren();
+ if (!this._config.parent) {
+ this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
+ }
+ if (this._config.toggle) {
+ this.toggle();
+ }
+ }
+ // Getters
+ static get Default() {
+ return Default$a;
+ }
+ static get DefaultType() {
+ return DefaultType$a;
+ }
+ static get NAME() {
+ return NAME$b;
+ }
+ // Public
+ toggle() {
+ if (this._isShown()) {
+ this.hide();
+ } else {
+ this.show();
+ }
+ }
+ show() {
+ if (this._isTransitioning || this._isShown()) {
+ return;
+ }
+ let activeChildren = [];
+ if (this._config.parent) {
+ activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((element) => element !== this._element).map((element) => _Collapse.getOrCreateInstance(element, {
+ toggle: false
+ }));
+ }
+ if (activeChildren.length && activeChildren[0]._isTransitioning) {
+ return;
+ }
+ const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
+ if (startEvent.defaultPrevented) {
+ return;
+ }
+ for (const activeInstance of activeChildren) {
+ activeInstance.hide();
+ }
+ const dimension = this._getDimension();
+ this._element.classList.remove(CLASS_NAME_COLLAPSE);
+ this._element.classList.add(CLASS_NAME_COLLAPSING);
+ this._element.style[dimension] = 0;
+ this._addAriaAndCollapsedClass(this._triggerArray, true);
+ this._isTransitioning = true;
+ const complete = () => {
+ this._isTransitioning = false;
+ this._element.classList.remove(CLASS_NAME_COLLAPSING);
+ this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+ this._element.style[dimension] = "";
+ EventHandler.trigger(this._element, EVENT_SHOWN$6);
+ };
+ const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
+ const scrollSize = `scroll${capitalizedDimension}`;
+ this._queueCallback(complete, this._element, true);
+ this._element.style[dimension] = `${this._element[scrollSize]}px`;
+ }
+ hide() {
+ if (this._isTransitioning || !this._isShown()) {
+ return;
+ }
+ const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
+ if (startEvent.defaultPrevented) {
+ return;
+ }
+ const dimension = this._getDimension();
+ this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
+ reflow(this._element);
+ this._element.classList.add(CLASS_NAME_COLLAPSING);
+ this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+ for (const trigger of this._triggerArray) {
+ const element = SelectorEngine.getElementFromSelector(trigger);
+ if (element && !this._isShown(element)) {
+ this._addAriaAndCollapsedClass([trigger], false);
+ }
+ }
+ this._isTransitioning = true;
+ const complete = () => {
+ this._isTransitioning = false;
+ this._element.classList.remove(CLASS_NAME_COLLAPSING);
+ this._element.classList.add(CLASS_NAME_COLLAPSE);
+ EventHandler.trigger(this._element, EVENT_HIDDEN$6);
+ };
+ this._element.style[dimension] = "";
+ this._queueCallback(complete, this._element, true);
+ }
+ _isShown(element = this._element) {
+ return element.classList.contains(CLASS_NAME_SHOW$7);
+ }
+ // Private
+ _configAfterMerge(config) {
+ config.toggle = Boolean(config.toggle);
+ config.parent = getElement(config.parent);
+ return config;
+ }
+ _getDimension() {
+ return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
+ }
+ _initializeChildren() {
+ if (!this._config.parent) {
+ return;
+ }
+ const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
+ for (const element of children) {
+ const selected = SelectorEngine.getElementFromSelector(element);
+ if (selected) {
+ this._addAriaAndCollapsedClass([element], this._isShown(selected));
+ }
+ }
+ }
+ _getFirstLevelChildren(selector) {
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+ return SelectorEngine.find(selector, this._config.parent).filter((element) => !children.includes(element));
+ }
+ _addAriaAndCollapsedClass(triggerArray, isOpen) {
+ if (!triggerArray.length) {
+ return;
+ }
+ for (const element of triggerArray) {
+ element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
+ element.setAttribute("aria-expanded", isOpen);
+ }
+ }
+ // Static
+ static jQueryInterface(config) {
+ const _config = {};
+ if (typeof config === "string" && /show|hide/.test(config)) {
+ _config.toggle = false;
+ }
+ return this.each(function() {
+ const data = _Collapse.getOrCreateInstance(this, _config);
+ if (typeof config === "string") {
+ if (typeof data[config] === "undefined") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ }
+ });
+ }
+ };
+ EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function(event) {
+ if (event.target.tagName === "A" || event.delegateTarget && event.delegateTarget.tagName === "A") {
+ event.preventDefault();
+ }
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
+ Collapse.getOrCreateInstance(element, {
+ toggle: false
+ }).toggle();
+ }
+ });
+ defineJQueryPlugin(Collapse);
+ var NAME$a = "dropdown";
+ var DATA_KEY$6 = "bs.dropdown";
+ var EVENT_KEY$6 = `.${DATA_KEY$6}`;
+ var DATA_API_KEY$3 = ".data-api";
+ var ESCAPE_KEY$2 = "Escape";
+ var TAB_KEY$1 = "Tab";
+ var ARROW_UP_KEY$1 = "ArrowUp";
+ var ARROW_DOWN_KEY$1 = "ArrowDown";
+ var RIGHT_MOUSE_BUTTON = 2;
+ var EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
+ var EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
+ var EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
+ var EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
+ var EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
+ var EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
+ var EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
+ var CLASS_NAME_SHOW$6 = "show";
+ var CLASS_NAME_DROPUP = "dropup";
+ var CLASS_NAME_DROPEND = "dropend";
+ var CLASS_NAME_DROPSTART = "dropstart";
+ var CLASS_NAME_DROPUP_CENTER = "dropup-center";
+ var CLASS_NAME_DROPDOWN_CENTER = "dropdown-center";
+ var SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
+ var SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
+ var SELECTOR_MENU = ".dropdown-menu";
+ var SELECTOR_NAVBAR = ".navbar";
+ var SELECTOR_NAVBAR_NAV = ".navbar-nav";
+ var SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)";
+ var PLACEMENT_TOP = isRTL() ? "top-end" : "top-start";
+ var PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end";
+ var PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start";
+ var PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end";
+ var PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start";
+ var PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start";
+ var PLACEMENT_TOPCENTER = "top";
+ var PLACEMENT_BOTTOMCENTER = "bottom";
+ var Default$9 = {
+ autoClose: true,
+ boundary: "clippingParents",
+ display: "dynamic",
+ offset: [0, 2],
+ popperConfig: null,
+ reference: "toggle"
+ };
+ var DefaultType$9 = {
+ autoClose: "(boolean|string)",
+ boundary: "(string|element)",
+ display: "string",
+ offset: "(array|string|function)",
+ popperConfig: "(null|object|function)",
+ reference: "(string|element|object)"
+ };
+ var Dropdown = class _Dropdown extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._popper = null;
+ this._parent = this._element.parentNode;
+ this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
+ this._inNavbar = this._detectNavbar();
+ }
+ // Getters
+ static get Default() {
+ return Default$9;
+ }
+ static get DefaultType() {
+ return DefaultType$9;
+ }
+ static get NAME() {
+ return NAME$a;
+ }
+ // Public
+ toggle() {
+ return this._isShown() ? this.hide() : this.show();
+ }
+ show() {
+ if (isDisabled(this._element) || this._isShown()) {
+ return;
+ }
+ const relatedTarget = {
+ relatedTarget: this._element
+ };
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
+ if (showEvent.defaultPrevented) {
+ return;
+ }
+ this._createPopper();
+ if ("ontouchstart" in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
+ for (const element of [].concat(...document.body.children)) {
+ EventHandler.on(element, "mouseover", noop);
+ }
+ }
+ this._element.focus();
+ this._element.setAttribute("aria-expanded", true);
+ this._menu.classList.add(CLASS_NAME_SHOW$6);
+ this._element.classList.add(CLASS_NAME_SHOW$6);
+ EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
+ }
+ hide() {
+ if (isDisabled(this._element) || !this._isShown()) {
+ return;
+ }
+ const relatedTarget = {
+ relatedTarget: this._element
+ };
+ this._completeHide(relatedTarget);
+ }
+ dispose() {
+ if (this._popper) {
+ this._popper.destroy();
+ }
+ super.dispose();
+ }
+ update() {
+ this._inNavbar = this._detectNavbar();
+ if (this._popper) {
+ this._popper.update();
+ }
+ }
+ // Private
+ _completeHide(relatedTarget) {
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+ if ("ontouchstart" in document.documentElement) {
+ for (const element of [].concat(...document.body.children)) {
+ EventHandler.off(element, "mouseover", noop);
+ }
+ }
+ if (this._popper) {
+ this._popper.destroy();
+ }
+ this._menu.classList.remove(CLASS_NAME_SHOW$6);
+ this._element.classList.remove(CLASS_NAME_SHOW$6);
+ this._element.setAttribute("aria-expanded", "false");
+ Manipulator.removeDataAttribute(this._menu, "popper");
+ EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
+ }
+ _getConfig(config) {
+ config = super._getConfig(config);
+ if (typeof config.reference === "object" && !isElement2(config.reference) && typeof config.reference.getBoundingClientRect !== "function") {
+ throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
+ }
+ return config;
+ }
+ _createPopper() {
+ if (typeof lib_exports === "undefined") {
+ throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");
+ }
+ let referenceElement = this._element;
+ if (this._config.reference === "parent") {
+ referenceElement = this._parent;
+ } else if (isElement2(this._config.reference)) {
+ referenceElement = getElement(this._config.reference);
+ } else if (typeof this._config.reference === "object") {
+ referenceElement = this._config.reference;
+ }
+ const popperConfig = this._getPopperConfig();
+ this._popper = createPopper3(referenceElement, this._menu, popperConfig);
+ }
+ _isShown() {
+ return this._menu.classList.contains(CLASS_NAME_SHOW$6);
+ }
+ _getPlacement() {
+ const parentDropdown = this._parent;
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
+ return PLACEMENT_RIGHT;
+ }
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
+ return PLACEMENT_LEFT;
+ }
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
+ return PLACEMENT_TOPCENTER;
+ }
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
+ return PLACEMENT_BOTTOMCENTER;
+ }
+ const isEnd = getComputedStyle(this._menu).getPropertyValue("--bs-position").trim() === "end";
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
+ return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
+ }
+ return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
+ }
+ _detectNavbar() {
+ return this._element.closest(SELECTOR_NAVBAR) !== null;
+ }
+ _getOffset() {
+ const {
+ offset: offset2
+ } = this._config;
+ if (typeof offset2 === "string") {
+ return offset2.split(",").map((value) => Number.parseInt(value, 10));
+ }
+ if (typeof offset2 === "function") {
+ return (popperData) => offset2(popperData, this._element);
+ }
+ return offset2;
+ }
+ _getPopperConfig() {
+ const defaultBsPopperConfig = {
+ placement: this._getPlacement(),
+ modifiers: [{
+ name: "preventOverflow",
+ options: {
+ boundary: this._config.boundary
+ }
+ }, {
+ name: "offset",
+ options: {
+ offset: this._getOffset()
+ }
+ }]
+ };
+ if (this._inNavbar || this._config.display === "static") {
+ Manipulator.setDataAttribute(this._menu, "popper", "static");
+ defaultBsPopperConfig.modifiers = [{
+ name: "applyStyles",
+ enabled: false
+ }];
+ }
+ return __spreadValues(__spreadValues({}, defaultBsPopperConfig), execute(this._config.popperConfig, [defaultBsPopperConfig]));
+ }
+ _selectMenuItem({
+ key,
+ target
+ }) {
+ const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) => isVisible(element));
+ if (!items.length) {
+ return;
+ }
+ getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Dropdown.getOrCreateInstance(this, config);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (typeof data[config] === "undefined") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ });
+ }
+ static clearMenus(event) {
+ if (event.button === RIGHT_MOUSE_BUTTON || event.type === "keyup" && event.key !== TAB_KEY$1) {
+ return;
+ }
+ const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
+ for (const toggle of openToggles) {
+ const context = _Dropdown.getInstance(toggle);
+ if (!context || context._config.autoClose === false) {
+ continue;
+ }
+ const composedPath = event.composedPath();
+ const isMenuTarget = composedPath.includes(context._menu);
+ if (composedPath.includes(context._element) || context._config.autoClose === "inside" && !isMenuTarget || context._config.autoClose === "outside" && isMenuTarget) {
+ continue;
+ }
+ if (context._menu.contains(event.target) && (event.type === "keyup" && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
+ continue;
+ }
+ const relatedTarget = {
+ relatedTarget: context._element
+ };
+ if (event.type === "click") {
+ relatedTarget.clickEvent = event;
+ }
+ context._completeHide(relatedTarget);
+ }
+ }
+ static dataApiKeydownHandler(event) {
+ const isInput = /input|textarea/i.test(event.target.tagName);
+ const isEscapeEvent = event.key === ESCAPE_KEY$2;
+ const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
+ if (!isUpOrDownEvent && !isEscapeEvent) {
+ return;
+ }
+ if (isInput && !isEscapeEvent) {
+ return;
+ }
+ event.preventDefault();
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
+ const instance = _Dropdown.getOrCreateInstance(getToggleButton);
+ if (isUpOrDownEvent) {
+ event.stopPropagation();
+ instance.show();
+ instance._selectMenuItem(event);
+ return;
+ }
+ if (instance._isShown()) {
+ event.stopPropagation();
+ instance.hide();
+ getToggleButton.focus();
+ }
+ }
+ };
+ EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
+ EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
+ EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
+ EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
+ EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function(event) {
+ event.preventDefault();
+ Dropdown.getOrCreateInstance(this).toggle();
+ });
+ defineJQueryPlugin(Dropdown);
+ var NAME$9 = "backdrop";
+ var CLASS_NAME_FADE$4 = "fade";
+ var CLASS_NAME_SHOW$5 = "show";
+ var EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
+ var Default$8 = {
+ className: "modal-backdrop",
+ clickCallback: null,
+ isAnimated: false,
+ isVisible: true,
+ // if false, we use the backdrop helper without adding any element to the dom
+ rootElement: "body"
+ // give the choice to place backdrop under different elements
+ };
+ var DefaultType$8 = {
+ className: "string",
+ clickCallback: "(function|null)",
+ isAnimated: "boolean",
+ isVisible: "boolean",
+ rootElement: "(element|string)"
+ };
+ var Backdrop = class extends Config {
+ constructor(config) {
+ super();
+ this._config = this._getConfig(config);
+ this._isAppended = false;
+ this._element = null;
+ }
+ // Getters
+ static get Default() {
+ return Default$8;
+ }
+ static get DefaultType() {
+ return DefaultType$8;
+ }
+ static get NAME() {
+ return NAME$9;
+ }
+ // Public
+ show(callback) {
+ if (!this._config.isVisible) {
+ execute(callback);
+ return;
+ }
+ this._append();
+ const element = this._getElement();
+ if (this._config.isAnimated) {
+ reflow(element);
+ }
+ element.classList.add(CLASS_NAME_SHOW$5);
+ this._emulateAnimation(() => {
+ execute(callback);
+ });
+ }
+ hide(callback) {
+ if (!this._config.isVisible) {
+ execute(callback);
+ return;
+ }
+ this._getElement().classList.remove(CLASS_NAME_SHOW$5);
+ this._emulateAnimation(() => {
+ this.dispose();
+ execute(callback);
+ });
+ }
+ dispose() {
+ if (!this._isAppended) {
+ return;
+ }
+ EventHandler.off(this._element, EVENT_MOUSEDOWN);
+ this._element.remove();
+ this._isAppended = false;
+ }
+ // Private
+ _getElement() {
+ if (!this._element) {
+ const backdrop = document.createElement("div");
+ backdrop.className = this._config.className;
+ if (this._config.isAnimated) {
+ backdrop.classList.add(CLASS_NAME_FADE$4);
+ }
+ this._element = backdrop;
+ }
+ return this._element;
+ }
+ _configAfterMerge(config) {
+ config.rootElement = getElement(config.rootElement);
+ return config;
+ }
+ _append() {
+ if (this._isAppended) {
+ return;
+ }
+ const element = this._getElement();
+ this._config.rootElement.append(element);
+ EventHandler.on(element, EVENT_MOUSEDOWN, () => {
+ execute(this._config.clickCallback);
+ });
+ this._isAppended = true;
+ }
+ _emulateAnimation(callback) {
+ executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
+ }
+ };
+ var NAME$8 = "focustrap";
+ var DATA_KEY$5 = "bs.focustrap";
+ var EVENT_KEY$5 = `.${DATA_KEY$5}`;
+ var EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
+ var EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
+ var TAB_KEY = "Tab";
+ var TAB_NAV_FORWARD = "forward";
+ var TAB_NAV_BACKWARD = "backward";
+ var Default$7 = {
+ autofocus: true,
+ trapElement: null
+ // The element to trap focus inside of
+ };
+ var DefaultType$7 = {
+ autofocus: "boolean",
+ trapElement: "element"
+ };
+ var FocusTrap = class extends Config {
+ constructor(config) {
+ super();
+ this._config = this._getConfig(config);
+ this._isActive = false;
+ this._lastTabNavDirection = null;
+ }
+ // Getters
+ static get Default() {
+ return Default$7;
+ }
+ static get DefaultType() {
+ return DefaultType$7;
+ }
+ static get NAME() {
+ return NAME$8;
+ }
+ // Public
+ activate() {
+ if (this._isActive) {
+ return;
+ }
+ if (this._config.autofocus) {
+ this._config.trapElement.focus();
+ }
+ EventHandler.off(document, EVENT_KEY$5);
+ EventHandler.on(document, EVENT_FOCUSIN$2, (event) => this._handleFocusin(event));
+ EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));
+ this._isActive = true;
+ }
+ deactivate() {
+ if (!this._isActive) {
+ return;
+ }
+ this._isActive = false;
+ EventHandler.off(document, EVENT_KEY$5);
+ }
+ // Private
+ _handleFocusin(event) {
+ const {
+ trapElement
+ } = this._config;
+ if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
+ return;
+ }
+ const elements = SelectorEngine.focusableChildren(trapElement);
+ if (elements.length === 0) {
+ trapElement.focus();
+ } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
+ elements[elements.length - 1].focus();
+ } else {
+ elements[0].focus();
+ }
+ }
+ _handleKeydown(event) {
+ if (event.key !== TAB_KEY) {
+ return;
+ }
+ this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
+ }
+ };
+ var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
+ var SELECTOR_STICKY_CONTENT = ".sticky-top";
+ var PROPERTY_PADDING = "padding-right";
+ var PROPERTY_MARGIN = "margin-right";
+ var ScrollBarHelper = class {
+ constructor() {
+ this._element = document.body;
+ }
+ // Public
+ getWidth() {
+ const documentWidth = document.documentElement.clientWidth;
+ return Math.abs(window.innerWidth - documentWidth);
+ }
+ hide() {
+ const width = this.getWidth();
+ this._disableOverFlow();
+ this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
+ this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
+ this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width);
+ }
+ reset() {
+ this._resetElementAttributes(this._element, "overflow");
+ this._resetElementAttributes(this._element, PROPERTY_PADDING);
+ this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
+ this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
+ }
+ isOverflowing() {
+ return this.getWidth() > 0;
+ }
+ // Private
+ _disableOverFlow() {
+ this._saveInitialAttribute(this._element, "overflow");
+ this._element.style.overflow = "hidden";
+ }
+ _setElementAttributes(selector, styleProperty, callback) {
+ const scrollbarWidth = this.getWidth();
+ const manipulationCallBack = (element) => {
+ if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
+ return;
+ }
+ this._saveInitialAttribute(element, styleProperty);
+ const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
+ element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
+ };
+ this._applyManipulationCallback(selector, manipulationCallBack);
+ }
+ _saveInitialAttribute(element, styleProperty) {
+ const actualValue = element.style.getPropertyValue(styleProperty);
+ if (actualValue) {
+ Manipulator.setDataAttribute(element, styleProperty, actualValue);
+ }
+ }
+ _resetElementAttributes(selector, styleProperty) {
+ const manipulationCallBack = (element) => {
+ const value = Manipulator.getDataAttribute(element, styleProperty);
+ if (value === null) {
+ element.style.removeProperty(styleProperty);
+ return;
+ }
+ Manipulator.removeDataAttribute(element, styleProperty);
+ element.style.setProperty(styleProperty, value);
+ };
+ this._applyManipulationCallback(selector, manipulationCallBack);
+ }
+ _applyManipulationCallback(selector, callBack) {
+ if (isElement2(selector)) {
+ callBack(selector);
+ return;
+ }
+ for (const sel of SelectorEngine.find(selector, this._element)) {
+ callBack(sel);
+ }
+ }
+ };
+ var NAME$7 = "modal";
+ var DATA_KEY$4 = "bs.modal";
+ var EVENT_KEY$4 = `.${DATA_KEY$4}`;
+ var DATA_API_KEY$2 = ".data-api";
+ var ESCAPE_KEY$1 = "Escape";
+ var EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
+ var EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
+ var EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
+ var EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
+ var EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
+ var EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
+ var EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
+ var EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
+ var EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
+ var EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
+ var CLASS_NAME_OPEN = "modal-open";
+ var CLASS_NAME_FADE$3 = "fade";
+ var CLASS_NAME_SHOW$4 = "show";
+ var CLASS_NAME_STATIC = "modal-static";
+ var OPEN_SELECTOR$1 = ".modal.show";
+ var SELECTOR_DIALOG = ".modal-dialog";
+ var SELECTOR_MODAL_BODY = ".modal-body";
+ var SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
+ var Default$6 = {
+ backdrop: true,
+ focus: true,
+ keyboard: true
+ };
+ var DefaultType$6 = {
+ backdrop: "(boolean|string)",
+ focus: "boolean",
+ keyboard: "boolean"
+ };
+ var Modal = class _Modal extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
+ this._backdrop = this._initializeBackDrop();
+ this._focustrap = this._initializeFocusTrap();
+ this._isShown = false;
+ this._isTransitioning = false;
+ this._scrollBar = new ScrollBarHelper();
+ this._addEventListeners();
+ }
+ // Getters
+ static get Default() {
+ return Default$6;
+ }
+ static get DefaultType() {
+ return DefaultType$6;
+ }
+ static get NAME() {
+ return NAME$7;
+ }
+ // Public
+ toggle(relatedTarget) {
+ return this._isShown ? this.hide() : this.show(relatedTarget);
+ }
+ show(relatedTarget) {
+ if (this._isShown || this._isTransitioning) {
+ return;
+ }
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
+ relatedTarget
+ });
+ if (showEvent.defaultPrevented) {
+ return;
+ }
+ this._isShown = true;
+ this._isTransitioning = true;
+ this._scrollBar.hide();
+ document.body.classList.add(CLASS_NAME_OPEN);
+ this._adjustDialog();
+ this._backdrop.show(() => this._showElement(relatedTarget));
+ }
+ hide() {
+ if (!this._isShown || this._isTransitioning) {
+ return;
+ }
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+ this._isShown = false;
+ this._isTransitioning = true;
+ this._focustrap.deactivate();
+ this._element.classList.remove(CLASS_NAME_SHOW$4);
+ this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
+ }
+ dispose() {
+ EventHandler.off(window, EVENT_KEY$4);
+ EventHandler.off(this._dialog, EVENT_KEY$4);
+ this._backdrop.dispose();
+ this._focustrap.deactivate();
+ super.dispose();
+ }
+ handleUpdate() {
+ this._adjustDialog();
+ }
+ // Private
+ _initializeBackDrop() {
+ return new Backdrop({
+ isVisible: Boolean(this._config.backdrop),
+ // 'static' option will be translated to true, and booleans will keep their value,
+ isAnimated: this._isAnimated()
+ });
+ }
+ _initializeFocusTrap() {
+ return new FocusTrap({
+ trapElement: this._element
+ });
+ }
+ _showElement(relatedTarget) {
+ if (!document.body.contains(this._element)) {
+ document.body.append(this._element);
+ }
+ this._element.style.display = "block";
+ this._element.removeAttribute("aria-hidden");
+ this._element.setAttribute("aria-modal", true);
+ this._element.setAttribute("role", "dialog");
+ this._element.scrollTop = 0;
+ const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
+ if (modalBody) {
+ modalBody.scrollTop = 0;
+ }
+ reflow(this._element);
+ this._element.classList.add(CLASS_NAME_SHOW$4);
+ const transitionComplete = () => {
+ if (this._config.focus) {
+ this._focustrap.activate();
+ }
+ this._isTransitioning = false;
+ EventHandler.trigger(this._element, EVENT_SHOWN$4, {
+ relatedTarget
+ });
+ };
+ this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
+ }
+ _addEventListeners() {
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, (event) => {
+ if (event.key !== ESCAPE_KEY$1) {
+ return;
+ }
+ if (this._config.keyboard) {
+ this.hide();
+ return;
+ }
+ this._triggerBackdropTransition();
+ });
+ EventHandler.on(window, EVENT_RESIZE$1, () => {
+ if (this._isShown && !this._isTransitioning) {
+ this._adjustDialog();
+ }
+ });
+ EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {
+ EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => {
+ if (this._element !== event.target || this._element !== event2.target) {
+ return;
+ }
+ if (this._config.backdrop === "static") {
+ this._triggerBackdropTransition();
+ return;
+ }
+ if (this._config.backdrop) {
+ this.hide();
+ }
+ });
+ });
+ }
+ _hideModal() {
+ this._element.style.display = "none";
+ this._element.setAttribute("aria-hidden", true);
+ this._element.removeAttribute("aria-modal");
+ this._element.removeAttribute("role");
+ this._isTransitioning = false;
+ this._backdrop.hide(() => {
+ document.body.classList.remove(CLASS_NAME_OPEN);
+ this._resetAdjustments();
+ this._scrollBar.reset();
+ EventHandler.trigger(this._element, EVENT_HIDDEN$4);
+ });
+ }
+ _isAnimated() {
+ return this._element.classList.contains(CLASS_NAME_FADE$3);
+ }
+ _triggerBackdropTransition() {
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+ const initialOverflowY = this._element.style.overflowY;
+ if (initialOverflowY === "hidden" || this._element.classList.contains(CLASS_NAME_STATIC)) {
+ return;
+ }
+ if (!isModalOverflowing) {
+ this._element.style.overflowY = "hidden";
+ }
+ this._element.classList.add(CLASS_NAME_STATIC);
+ this._queueCallback(() => {
+ this._element.classList.remove(CLASS_NAME_STATIC);
+ this._queueCallback(() => {
+ this._element.style.overflowY = initialOverflowY;
+ }, this._dialog);
+ }, this._dialog);
+ this._element.focus();
+ }
+ /**
+ * The following methods are used to handle overflowing modals
+ */
+ _adjustDialog() {
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+ const scrollbarWidth = this._scrollBar.getWidth();
+ const isBodyOverflowing = scrollbarWidth > 0;
+ if (isBodyOverflowing && !isModalOverflowing) {
+ const property = isRTL() ? "paddingLeft" : "paddingRight";
+ this._element.style[property] = `${scrollbarWidth}px`;
+ }
+ if (!isBodyOverflowing && isModalOverflowing) {
+ const property = isRTL() ? "paddingRight" : "paddingLeft";
+ this._element.style[property] = `${scrollbarWidth}px`;
+ }
+ }
+ _resetAdjustments() {
+ this._element.style.paddingLeft = "";
+ this._element.style.paddingRight = "";
+ }
+ // Static
+ static jQueryInterface(config, relatedTarget) {
+ return this.each(function() {
+ const data = _Modal.getOrCreateInstance(this, config);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (typeof data[config] === "undefined") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config](relatedTarget);
+ });
+ }
+ };
+ EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function(event) {
+ const target = SelectorEngine.getElementFromSelector(this);
+ if (["A", "AREA"].includes(this.tagName)) {
+ event.preventDefault();
+ }
+ EventHandler.one(target, EVENT_SHOW$4, (showEvent) => {
+ if (showEvent.defaultPrevented) {
+ return;
+ }
+ EventHandler.one(target, EVENT_HIDDEN$4, () => {
+ if (isVisible(this)) {
+ this.focus();
+ }
+ });
+ });
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
+ if (alreadyOpen) {
+ Modal.getInstance(alreadyOpen).hide();
+ }
+ const data = Modal.getOrCreateInstance(target);
+ data.toggle(this);
+ });
+ enableDismissTrigger(Modal);
+ defineJQueryPlugin(Modal);
+ var NAME$6 = "offcanvas";
+ var DATA_KEY$3 = "bs.offcanvas";
+ var EVENT_KEY$3 = `.${DATA_KEY$3}`;
+ var DATA_API_KEY$1 = ".data-api";
+ var EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
+ var ESCAPE_KEY = "Escape";
+ var CLASS_NAME_SHOW$3 = "show";
+ var CLASS_NAME_SHOWING$1 = "showing";
+ var CLASS_NAME_HIDING = "hiding";
+ var CLASS_NAME_BACKDROP = "offcanvas-backdrop";
+ var OPEN_SELECTOR = ".offcanvas.show";
+ var EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
+ var EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
+ var EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
+ var EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
+ var EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
+ var EVENT_RESIZE = `resize${EVENT_KEY$3}`;
+ var EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
+ var EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
+ var SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
+ var Default$5 = {
+ backdrop: true,
+ keyboard: true,
+ scroll: false
+ };
+ var DefaultType$5 = {
+ backdrop: "(boolean|string)",
+ keyboard: "boolean",
+ scroll: "boolean"
+ };
+ var Offcanvas = class _Offcanvas extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._isShown = false;
+ this._backdrop = this._initializeBackDrop();
+ this._focustrap = this._initializeFocusTrap();
+ this._addEventListeners();
+ }
+ // Getters
+ static get Default() {
+ return Default$5;
+ }
+ static get DefaultType() {
+ return DefaultType$5;
+ }
+ static get NAME() {
+ return NAME$6;
+ }
+ // Public
+ toggle(relatedTarget) {
+ return this._isShown ? this.hide() : this.show(relatedTarget);
+ }
+ show(relatedTarget) {
+ if (this._isShown) {
+ return;
+ }
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
+ relatedTarget
+ });
+ if (showEvent.defaultPrevented) {
+ return;
+ }
+ this._isShown = true;
+ this._backdrop.show();
+ if (!this._config.scroll) {
+ new ScrollBarHelper().hide();
+ }
+ this._element.setAttribute("aria-modal", true);
+ this._element.setAttribute("role", "dialog");
+ this._element.classList.add(CLASS_NAME_SHOWING$1);
+ const completeCallBack = () => {
+ if (!this._config.scroll || this._config.backdrop) {
+ this._focustrap.activate();
+ }
+ this._element.classList.add(CLASS_NAME_SHOW$3);
+ this._element.classList.remove(CLASS_NAME_SHOWING$1);
+ EventHandler.trigger(this._element, EVENT_SHOWN$3, {
+ relatedTarget
+ });
+ };
+ this._queueCallback(completeCallBack, this._element, true);
+ }
+ hide() {
+ if (!this._isShown) {
+ return;
+ }
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+ this._focustrap.deactivate();
+ this._element.blur();
+ this._isShown = false;
+ this._element.classList.add(CLASS_NAME_HIDING);
+ this._backdrop.hide();
+ const completeCallback = () => {
+ this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
+ this._element.removeAttribute("aria-modal");
+ this._element.removeAttribute("role");
+ if (!this._config.scroll) {
+ new ScrollBarHelper().reset();
+ }
+ EventHandler.trigger(this._element, EVENT_HIDDEN$3);
+ };
+ this._queueCallback(completeCallback, this._element, true);
+ }
+ dispose() {
+ this._backdrop.dispose();
+ this._focustrap.deactivate();
+ super.dispose();
+ }
+ // Private
+ _initializeBackDrop() {
+ const clickCallback = () => {
+ if (this._config.backdrop === "static") {
+ EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+ return;
+ }
+ this.hide();
+ };
+ const isVisible2 = Boolean(this._config.backdrop);
+ return new Backdrop({
+ className: CLASS_NAME_BACKDROP,
+ isVisible: isVisible2,
+ isAnimated: true,
+ rootElement: this._element.parentNode,
+ clickCallback: isVisible2 ? clickCallback : null
+ });
+ }
+ _initializeFocusTrap() {
+ return new FocusTrap({
+ trapElement: this._element
+ });
+ }
+ _addEventListeners() {
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {
+ if (event.key !== ESCAPE_KEY) {
+ return;
+ }
+ if (this._config.keyboard) {
+ this.hide();
+ return;
+ }
+ EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+ });
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Offcanvas.getOrCreateInstance(this, config);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config](this);
+ });
+ }
+ };
+ EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function(event) {
+ const target = SelectorEngine.getElementFromSelector(this);
+ if (["A", "AREA"].includes(this.tagName)) {
+ event.preventDefault();
+ }
+ if (isDisabled(this)) {
+ return;
+ }
+ EventHandler.one(target, EVENT_HIDDEN$3, () => {
+ if (isVisible(this)) {
+ this.focus();
+ }
+ });
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
+ if (alreadyOpen && alreadyOpen !== target) {
+ Offcanvas.getInstance(alreadyOpen).hide();
+ }
+ const data = Offcanvas.getOrCreateInstance(target);
+ data.toggle(this);
+ });
+ EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
+ for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
+ Offcanvas.getOrCreateInstance(selector).show();
+ }
+ });
+ EventHandler.on(window, EVENT_RESIZE, () => {
+ for (const element of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]")) {
+ if (getComputedStyle(element).position !== "fixed") {
+ Offcanvas.getOrCreateInstance(element).hide();
+ }
+ }
+ });
+ enableDismissTrigger(Offcanvas);
+ defineJQueryPlugin(Offcanvas);
+ var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+ var DefaultAllowlist = {
+ // Global attributes allowed on any supplied element below.
+ "*": ["class", "dir", "id", "lang", "role", ARIA_ATTRIBUTE_PATTERN],
+ a: ["target", "href", "title", "rel"],
+ area: [],
+ b: [],
+ br: [],
+ col: [],
+ code: [],
+ dd: [],
+ div: [],
+ dl: [],
+ dt: [],
+ em: [],
+ hr: [],
+ h1: [],
+ h2: [],
+ h3: [],
+ h4: [],
+ h5: [],
+ h6: [],
+ i: [],
+ img: ["src", "srcset", "alt", "title", "width", "height"],
+ li: [],
+ ol: [],
+ p: [],
+ pre: [],
+ s: [],
+ small: [],
+ span: [],
+ sub: [],
+ sup: [],
+ strong: [],
+ u: [],
+ ul: []
+ };
+ var uriAttributes = /* @__PURE__ */ new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]);
+ var SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
+ var allowedAttribute = (attribute, allowedAttributeList) => {
+ const attributeName = attribute.nodeName.toLowerCase();
+ if (allowedAttributeList.includes(attributeName)) {
+ if (uriAttributes.has(attributeName)) {
+ return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
+ }
+ return true;
+ }
+ return allowedAttributeList.filter((attributeRegex) => attributeRegex instanceof RegExp).some((regex) => regex.test(attributeName));
+ };
+ function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
+ if (!unsafeHtml.length) {
+ return unsafeHtml;
+ }
+ if (sanitizeFunction && typeof sanitizeFunction === "function") {
+ return sanitizeFunction(unsafeHtml);
+ }
+ const domParser = new window.DOMParser();
+ const createdDocument = domParser.parseFromString(unsafeHtml, "text/html");
+ const elements = [].concat(...createdDocument.body.querySelectorAll("*"));
+ for (const element of elements) {
+ const elementName = element.nodeName.toLowerCase();
+ if (!Object.keys(allowList).includes(elementName)) {
+ element.remove();
+ continue;
+ }
+ const attributeList = [].concat(...element.attributes);
+ const allowedAttributes = [].concat(allowList["*"] || [], allowList[elementName] || []);
+ for (const attribute of attributeList) {
+ if (!allowedAttribute(attribute, allowedAttributes)) {
+ element.removeAttribute(attribute.nodeName);
+ }
+ }
+ }
+ return createdDocument.body.innerHTML;
+ }
+ var NAME$5 = "TemplateFactory";
+ var Default$4 = {
+ allowList: DefaultAllowlist,
+ content: {},
+ // { selector : text , selector2 : text2 , }
+ extraClass: "",
+ html: false,
+ sanitize: true,
+ sanitizeFn: null,
+ template: "<div></div>"
+ };
+ var DefaultType$4 = {
+ allowList: "object",
+ content: "object",
+ extraClass: "(string|function)",
+ html: "boolean",
+ sanitize: "boolean",
+ sanitizeFn: "(null|function)",
+ template: "string"
+ };
+ var DefaultContentType = {
+ entry: "(string|element|function|null)",
+ selector: "(string|element)"
+ };
+ var TemplateFactory = class extends Config {
+ constructor(config) {
+ super();
+ this._config = this._getConfig(config);
+ }
+ // Getters
+ static get Default() {
+ return Default$4;
+ }
+ static get DefaultType() {
+ return DefaultType$4;
+ }
+ static get NAME() {
+ return NAME$5;
+ }
+ // Public
+ getContent() {
+ return Object.values(this._config.content).map((config) => this._resolvePossibleFunction(config)).filter(Boolean);
+ }
+ hasContent() {
+ return this.getContent().length > 0;
+ }
+ changeContent(content) {
+ this._checkContent(content);
+ this._config.content = __spreadValues(__spreadValues({}, this._config.content), content);
+ return this;
+ }
+ toHtml() {
+ const templateWrapper = document.createElement("div");
+ templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
+ for (const [selector, text] of Object.entries(this._config.content)) {
+ this._setContent(templateWrapper, text, selector);
+ }
+ const template = templateWrapper.children[0];
+ const extraClass = this._resolvePossibleFunction(this._config.extraClass);
+ if (extraClass) {
+ template.classList.add(...extraClass.split(" "));
+ }
+ return template;
+ }
+ // Private
+ _typeCheckConfig(config) {
+ super._typeCheckConfig(config);
+ this._checkContent(config.content);
+ }
+ _checkContent(arg) {
+ for (const [selector, content] of Object.entries(arg)) {
+ super._typeCheckConfig({
+ selector,
+ entry: content
+ }, DefaultContentType);
+ }
+ }
+ _setContent(template, content, selector) {
+ const templateElement = SelectorEngine.findOne(selector, template);
+ if (!templateElement) {
+ return;
+ }
+ content = this._resolvePossibleFunction(content);
+ if (!content) {
+ templateElement.remove();
+ return;
+ }
+ if (isElement2(content)) {
+ this._putElementInTemplate(getElement(content), templateElement);
+ return;
+ }
+ if (this._config.html) {
+ templateElement.innerHTML = this._maybeSanitize(content);
+ return;
+ }
+ templateElement.textContent = content;
+ }
+ _maybeSanitize(arg) {
+ return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
+ }
+ _resolvePossibleFunction(arg) {
+ return execute(arg, [this]);
+ }
+ _putElementInTemplate(element, templateElement) {
+ if (this._config.html) {
+ templateElement.innerHTML = "";
+ templateElement.append(element);
+ return;
+ }
+ templateElement.textContent = element.textContent;
+ }
+ };
+ var NAME$4 = "tooltip";
+ var DISALLOWED_ATTRIBUTES = /* @__PURE__ */ new Set(["sanitize", "allowList", "sanitizeFn"]);
+ var CLASS_NAME_FADE$2 = "fade";
+ var CLASS_NAME_MODAL = "modal";
+ var CLASS_NAME_SHOW$2 = "show";
+ var SELECTOR_TOOLTIP_INNER = ".tooltip-inner";
+ var SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
+ var EVENT_MODAL_HIDE = "hide.bs.modal";
+ var TRIGGER_HOVER = "hover";
+ var TRIGGER_FOCUS = "focus";
+ var TRIGGER_CLICK = "click";
+ var TRIGGER_MANUAL = "manual";
+ var EVENT_HIDE$2 = "hide";
+ var EVENT_HIDDEN$2 = "hidden";
+ var EVENT_SHOW$2 = "show";
+ var EVENT_SHOWN$2 = "shown";
+ var EVENT_INSERTED = "inserted";
+ var EVENT_CLICK$1 = "click";
+ var EVENT_FOCUSIN$1 = "focusin";
+ var EVENT_FOCUSOUT$1 = "focusout";
+ var EVENT_MOUSEENTER = "mouseenter";
+ var EVENT_MOUSELEAVE = "mouseleave";
+ var AttachmentMap = {
+ AUTO: "auto",
+ TOP: "top",
+ RIGHT: isRTL() ? "left" : "right",
+ BOTTOM: "bottom",
+ LEFT: isRTL() ? "right" : "left"
+ };
+ var Default$3 = {
+ allowList: DefaultAllowlist,
+ animation: true,
+ boundary: "clippingParents",
+ container: false,
+ customClass: "",
+ delay: 0,
+ fallbackPlacements: ["top", "right", "bottom", "left"],
+ html: false,
+ offset: [0, 6],
+ placement: "top",
+ popperConfig: null,
+ sanitize: true,
+ sanitizeFn: null,
+ selector: false,
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ title: "",
+ trigger: "hover focus"
+ };
+ var DefaultType$3 = {
+ allowList: "object",
+ animation: "boolean",
+ boundary: "(string|element)",
+ container: "(string|element|boolean)",
+ customClass: "(string|function)",
+ delay: "(number|object)",
+ fallbackPlacements: "array",
+ html: "boolean",
+ offset: "(array|string|function)",
+ placement: "(string|function)",
+ popperConfig: "(null|object|function)",
+ sanitize: "boolean",
+ sanitizeFn: "(null|function)",
+ selector: "(string|boolean)",
+ template: "string",
+ title: "(string|element|function)",
+ trigger: "string"
+ };
+ var Tooltip = class _Tooltip extends BaseComponent {
+ constructor(element, config) {
+ if (typeof lib_exports === "undefined") {
+ throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");
+ }
+ super(element, config);
+ this._isEnabled = true;
+ this._timeout = 0;
+ this._isHovered = null;
+ this._activeTrigger = {};
+ this._popper = null;
+ this._templateFactory = null;
+ this._newContent = null;
+ this.tip = null;
+ this._setListeners();
+ if (!this._config.selector) {
+ this._fixTitle();
+ }
+ }
+ // Getters
+ static get Default() {
+ return Default$3;
+ }
+ static get DefaultType() {
+ return DefaultType$3;
+ }
+ static get NAME() {
+ return NAME$4;
+ }
+ // Public
+ enable() {
+ this._isEnabled = true;
+ }
+ disable() {
+ this._isEnabled = false;
+ }
+ toggleEnabled() {
+ this._isEnabled = !this._isEnabled;
+ }
+ toggle() {
+ if (!this._isEnabled) {
+ return;
+ }
+ this._activeTrigger.click = !this._activeTrigger.click;
+ if (this._isShown()) {
+ this._leave();
+ return;
+ }
+ this._enter();
+ }
+ dispose() {
+ clearTimeout(this._timeout);
+ EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+ if (this._element.getAttribute("data-bs-original-title")) {
+ this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title"));
+ }
+ this._disposePopper();
+ super.dispose();
+ }
+ show() {
+ if (this._element.style.display === "none") {
+ throw new Error("Please use show on visible elements");
+ }
+ if (!(this._isWithContent() && this._isEnabled)) {
+ return;
+ }
+ const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
+ const shadowRoot = findShadowRoot(this._element);
+ const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
+ if (showEvent.defaultPrevented || !isInTheDom) {
+ return;
+ }
+ this._disposePopper();
+ const tip = this._getTipElement();
+ this._element.setAttribute("aria-describedby", tip.getAttribute("id"));
+ const {
+ container
+ } = this._config;
+ if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
+ container.append(tip);
+ EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
+ }
+ this._popper = this._createPopper(tip);
+ tip.classList.add(CLASS_NAME_SHOW$2);
+ if ("ontouchstart" in document.documentElement) {
+ for (const element of [].concat(...document.body.children)) {
+ EventHandler.on(element, "mouseover", noop);
+ }
+ }
+ const complete = () => {
+ EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
+ if (this._isHovered === false) {
+ this._leave();
+ }
+ this._isHovered = false;
+ };
+ this._queueCallback(complete, this.tip, this._isAnimated());
+ }
+ hide() {
+ if (!this._isShown()) {
+ return;
+ }
+ const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+ const tip = this._getTipElement();
+ tip.classList.remove(CLASS_NAME_SHOW$2);
+ if ("ontouchstart" in document.documentElement) {
+ for (const element of [].concat(...document.body.children)) {
+ EventHandler.off(element, "mouseover", noop);
+ }
+ }
+ this._activeTrigger[TRIGGER_CLICK] = false;
+ this._activeTrigger[TRIGGER_FOCUS] = false;
+ this._activeTrigger[TRIGGER_HOVER] = false;
+ this._isHovered = null;
+ const complete = () => {
+ if (this._isWithActiveTrigger()) {
+ return;
+ }
+ if (!this._isHovered) {
+ this._disposePopper();
+ }
+ this._element.removeAttribute("aria-describedby");
+ EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
+ };
+ this._queueCallback(complete, this.tip, this._isAnimated());
+ }
+ update() {
+ if (this._popper) {
+ this._popper.update();
+ }
+ }
+ // Protected
+ _isWithContent() {
+ return Boolean(this._getTitle());
+ }
+ _getTipElement() {
+ if (!this.tip) {
+ this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
+ }
+ return this.tip;
+ }
+ _createTipElement(content) {
+ const tip = this._getTemplateFactory(content).toHtml();
+ if (!tip) {
+ return null;
+ }
+ tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+ tip.classList.add(`bs-${this.constructor.NAME}-auto`);
+ const tipId = getUID(this.constructor.NAME).toString();
+ tip.setAttribute("id", tipId);
+ if (this._isAnimated()) {
+ tip.classList.add(CLASS_NAME_FADE$2);
+ }
+ return tip;
+ }
+ setContent(content) {
+ this._newContent = content;
+ if (this._isShown()) {
+ this._disposePopper();
+ this.show();
+ }
+ }
+ _getTemplateFactory(content) {
+ if (this._templateFactory) {
+ this._templateFactory.changeContent(content);
+ } else {
+ this._templateFactory = new TemplateFactory(__spreadProps(__spreadValues({}, this._config), {
+ // the `content` var has to be after `this._config`
+ // to override config.content in case of popover
+ content,
+ extraClass: this._resolvePossibleFunction(this._config.customClass)
+ }));
+ }
+ return this._templateFactory;
+ }
+ _getContentForTemplate() {
+ return {
+ [SELECTOR_TOOLTIP_INNER]: this._getTitle()
+ };
+ }
+ _getTitle() {
+ return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title");
+ }
+ // Private
+ _initializeOnDelegatedTarget(event) {
+ return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
+ }
+ _isAnimated() {
+ return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
+ }
+ _isShown() {
+ return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
+ }
+ _createPopper(tip) {
+ const placement = execute(this._config.placement, [this, tip, this._element]);
+ const attachment = AttachmentMap[placement.toUpperCase()];
+ return createPopper3(this._element, tip, this._getPopperConfig(attachment));
+ }
+ _getOffset() {
+ const {
+ offset: offset2
+ } = this._config;
+ if (typeof offset2 === "string") {
+ return offset2.split(",").map((value) => Number.parseInt(value, 10));
+ }
+ if (typeof offset2 === "function") {
+ return (popperData) => offset2(popperData, this._element);
+ }
+ return offset2;
+ }
+ _resolvePossibleFunction(arg) {
+ return execute(arg, [this._element]);
+ }
+ _getPopperConfig(attachment) {
+ const defaultBsPopperConfig = {
+ placement: attachment,
+ modifiers: [{
+ name: "flip",
+ options: {
+ fallbackPlacements: this._config.fallbackPlacements
+ }
+ }, {
+ name: "offset",
+ options: {
+ offset: this._getOffset()
+ }
+ }, {
+ name: "preventOverflow",
+ options: {
+ boundary: this._config.boundary
+ }
+ }, {
+ name: "arrow",
+ options: {
+ element: `.${this.constructor.NAME}-arrow`
+ }
+ }, {
+ name: "preSetPlacement",
+ enabled: true,
+ phase: "beforeMain",
+ fn: (data) => {
+ this._getTipElement().setAttribute("data-popper-placement", data.state.placement);
+ }
+ }]
+ };
+ return __spreadValues(__spreadValues({}, defaultBsPopperConfig), execute(this._config.popperConfig, [defaultBsPopperConfig]));
+ }
+ _setListeners() {
+ const triggers = this._config.trigger.split(" ");
+ for (const trigger of triggers) {
+ if (trigger === "click") {
+ EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, (event) => {
+ const context = this._initializeOnDelegatedTarget(event);
+ context.toggle();
+ });
+ } else if (trigger !== TRIGGER_MANUAL) {
+ const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
+ const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
+ EventHandler.on(this._element, eventIn, this._config.selector, (event) => {
+ const context = this._initializeOnDelegatedTarget(event);
+ context._activeTrigger[event.type === "focusin" ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
+ context._enter();
+ });
+ EventHandler.on(this._element, eventOut, this._config.selector, (event) => {
+ const context = this._initializeOnDelegatedTarget(event);
+ context._activeTrigger[event.type === "focusout" ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
+ context._leave();
+ });
+ }
+ }
+ this._hideModalHandler = () => {
+ if (this._element) {
+ this.hide();
+ }
+ };
+ EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+ }
+ _fixTitle() {
+ const title = this._element.getAttribute("title");
+ if (!title) {
+ return;
+ }
+ if (!this._element.getAttribute("aria-label") && !this._element.textContent.trim()) {
+ this._element.setAttribute("aria-label", title);
+ }
+ this._element.setAttribute("data-bs-original-title", title);
+ this._element.removeAttribute("title");
+ }
+ _enter() {
+ if (this._isShown() || this._isHovered) {
+ this._isHovered = true;
+ return;
+ }
+ this._isHovered = true;
+ this._setTimeout(() => {
+ if (this._isHovered) {
+ this.show();
+ }
+ }, this._config.delay.show);
+ }
+ _leave() {
+ if (this._isWithActiveTrigger()) {
+ return;
+ }
+ this._isHovered = false;
+ this._setTimeout(() => {
+ if (!this._isHovered) {
+ this.hide();
+ }
+ }, this._config.delay.hide);
+ }
+ _setTimeout(handler, timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = setTimeout(handler, timeout);
+ }
+ _isWithActiveTrigger() {
+ return Object.values(this._activeTrigger).includes(true);
+ }
+ _getConfig(config) {
+ const dataAttributes = Manipulator.getDataAttributes(this._element);
+ for (const dataAttribute of Object.keys(dataAttributes)) {
+ if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
+ delete dataAttributes[dataAttribute];
+ }
+ }
+ config = __spreadValues(__spreadValues({}, dataAttributes), typeof config === "object" && config ? config : {});
+ config = this._mergeConfigObj(config);
+ config = this._configAfterMerge(config);
+ this._typeCheckConfig(config);
+ return config;
+ }
+ _configAfterMerge(config) {
+ config.container = config.container === false ? document.body : getElement(config.container);
+ if (typeof config.delay === "number") {
+ config.delay = {
+ show: config.delay,
+ hide: config.delay
+ };
+ }
+ if (typeof config.title === "number") {
+ config.title = config.title.toString();
+ }
+ if (typeof config.content === "number") {
+ config.content = config.content.toString();
+ }
+ return config;
+ }
+ _getDelegateConfig() {
+ const config = {};
+ for (const [key, value] of Object.entries(this._config)) {
+ if (this.constructor.Default[key] !== value) {
+ config[key] = value;
+ }
+ }
+ config.selector = false;
+ config.trigger = "manual";
+ return config;
+ }
+ _disposePopper() {
+ if (this._popper) {
+ this._popper.destroy();
+ this._popper = null;
+ }
+ if (this.tip) {
+ this.tip.remove();
+ this.tip = null;
+ }
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Tooltip.getOrCreateInstance(this, config);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (typeof data[config] === "undefined") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ });
+ }
+ };
+ defineJQueryPlugin(Tooltip);
+ var NAME$3 = "popover";
+ var SELECTOR_TITLE = ".popover-header";
+ var SELECTOR_CONTENT = ".popover-body";
+ var Default$2 = __spreadProps(__spreadValues({}, Tooltip.Default), {
+ content: "",
+ offset: [0, 8],
+ placement: "right",
+ template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',
+ trigger: "click"
+ });
+ var DefaultType$2 = __spreadProps(__spreadValues({}, Tooltip.DefaultType), {
+ content: "(null|string|element|function)"
+ });
+ var Popover = class _Popover extends Tooltip {
+ // Getters
+ static get Default() {
+ return Default$2;
+ }
+ static get DefaultType() {
+ return DefaultType$2;
+ }
+ static get NAME() {
+ return NAME$3;
+ }
+ // Overrides
+ _isWithContent() {
+ return this._getTitle() || this._getContent();
+ }
+ // Private
+ _getContentForTemplate() {
+ return {
+ [SELECTOR_TITLE]: this._getTitle(),
+ [SELECTOR_CONTENT]: this._getContent()
+ };
+ }
+ _getContent() {
+ return this._resolvePossibleFunction(this._config.content);
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Popover.getOrCreateInstance(this, config);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (typeof data[config] === "undefined") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ });
+ }
+ };
+ defineJQueryPlugin(Popover);
+ var NAME$2 = "scrollspy";
+ var DATA_KEY$2 = "bs.scrollspy";
+ var EVENT_KEY$2 = `.${DATA_KEY$2}`;
+ var DATA_API_KEY = ".data-api";
+ var EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
+ var EVENT_CLICK = `click${EVENT_KEY$2}`;
+ var EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
+ var CLASS_NAME_DROPDOWN_ITEM = "dropdown-item";
+ var CLASS_NAME_ACTIVE$1 = "active";
+ var SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
+ var SELECTOR_TARGET_LINKS = "[href]";
+ var SELECTOR_NAV_LIST_GROUP = ".nav, .list-group";
+ var SELECTOR_NAV_LINKS = ".nav-link";
+ var SELECTOR_NAV_ITEMS = ".nav-item";
+ var SELECTOR_LIST_ITEMS = ".list-group-item";
+ var SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
+ var SELECTOR_DROPDOWN = ".dropdown";
+ var SELECTOR_DROPDOWN_TOGGLE$1 = ".dropdown-toggle";
+ var Default$1 = {
+ offset: null,
+ // TODO: v6 @deprecated, keep it for backwards compatibility reasons
+ rootMargin: "0px 0px -25%",
+ smoothScroll: false,
+ target: null,
+ threshold: [0.1, 0.5, 1]
+ };
+ var DefaultType$1 = {
+ offset: "(number|null)",
+ // TODO v6 @deprecated, keep it for backwards compatibility reasons
+ rootMargin: "string",
+ smoothScroll: "boolean",
+ target: "element",
+ threshold: "array"
+ };
+ var ScrollSpy = class _ScrollSpy extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._targetLinks = /* @__PURE__ */ new Map();
+ this._observableSections = /* @__PURE__ */ new Map();
+ this._rootElement = getComputedStyle(this._element).overflowY === "visible" ? null : this._element;
+ this._activeTarget = null;
+ this._observer = null;
+ this._previousScrollData = {
+ visibleEntryTop: 0,
+ parentScrollTop: 0
+ };
+ this.refresh();
+ }
+ // Getters
+ static get Default() {
+ return Default$1;
+ }
+ static get DefaultType() {
+ return DefaultType$1;
+ }
+ static get NAME() {
+ return NAME$2;
+ }
+ // Public
+ refresh() {
+ this._initializeTargetsAndObservables();
+ this._maybeEnableSmoothScroll();
+ if (this._observer) {
+ this._observer.disconnect();
+ } else {
+ this._observer = this._getNewObserver();
+ }
+ for (const section of this._observableSections.values()) {
+ this._observer.observe(section);
+ }
+ }
+ dispose() {
+ this._observer.disconnect();
+ super.dispose();
+ }
+ // Private
+ _configAfterMerge(config) {
+ config.target = getElement(config.target) || document.body;
+ config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
+ if (typeof config.threshold === "string") {
+ config.threshold = config.threshold.split(",").map((value) => Number.parseFloat(value));
+ }
+ return config;
+ }
+ _maybeEnableSmoothScroll() {
+ if (!this._config.smoothScroll) {
+ return;
+ }
+ EventHandler.off(this._config.target, EVENT_CLICK);
+ EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {
+ const observableSection = this._observableSections.get(event.target.hash);
+ if (observableSection) {
+ event.preventDefault();
+ const root = this._rootElement || window;
+ const height = observableSection.offsetTop - this._element.offsetTop;
+ if (root.scrollTo) {
+ root.scrollTo({
+ top: height,
+ behavior: "smooth"
+ });
+ return;
+ }
+ root.scrollTop = height;
+ }
+ });
+ }
+ _getNewObserver() {
+ const options = {
+ root: this._rootElement,
+ threshold: this._config.threshold,
+ rootMargin: this._config.rootMargin
+ };
+ return new IntersectionObserver((entries) => this._observerCallback(entries), options);
+ }
+ // The logic of selection
+ _observerCallback(entries) {
+ const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);
+ const activate = (entry) => {
+ this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
+ this._process(targetElement(entry));
+ };
+ const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
+ const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
+ this._previousScrollData.parentScrollTop = parentScrollTop;
+ for (const entry of entries) {
+ if (!entry.isIntersecting) {
+ this._activeTarget = null;
+ this._clearActiveClass(targetElement(entry));
+ continue;
+ }
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+ if (userScrollsDown && entryIsLowerThanPrevious) {
+ activate(entry);
+ if (!parentScrollTop) {
+ return;
+ }
+ continue;
+ }
+ if (!userScrollsDown && !entryIsLowerThanPrevious) {
+ activate(entry);
+ }
+ }
+ }
+ _initializeTargetsAndObservables() {
+ this._targetLinks = /* @__PURE__ */ new Map();
+ this._observableSections = /* @__PURE__ */ new Map();
+ const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
+ for (const anchor of targetLinks) {
+ if (!anchor.hash || isDisabled(anchor)) {
+ continue;
+ }
+ const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
+ if (isVisible(observableSection)) {
+ this._targetLinks.set(decodeURI(anchor.hash), anchor);
+ this._observableSections.set(anchor.hash, observableSection);
+ }
+ }
+ }
+ _process(target) {
+ if (this._activeTarget === target) {
+ return;
+ }
+ this._clearActiveClass(this._config.target);
+ this._activeTarget = target;
+ target.classList.add(CLASS_NAME_ACTIVE$1);
+ this._activateParents(target);
+ EventHandler.trigger(this._element, EVENT_ACTIVATE, {
+ relatedTarget: target
+ });
+ }
+ _activateParents(target) {
+ if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
+ SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
+ return;
+ }
+ for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
+ for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
+ item.classList.add(CLASS_NAME_ACTIVE$1);
+ }
+ }
+ }
+ _clearActiveClass(parent) {
+ parent.classList.remove(CLASS_NAME_ACTIVE$1);
+ const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
+ for (const node of activeNodes) {
+ node.classList.remove(CLASS_NAME_ACTIVE$1);
+ }
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _ScrollSpy.getOrCreateInstance(this, config);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ });
+ }
+ };
+ EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
+ for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
+ ScrollSpy.getOrCreateInstance(spy);
+ }
+ });
+ defineJQueryPlugin(ScrollSpy);
+ var NAME$1 = "tab";
+ var DATA_KEY$1 = "bs.tab";
+ var EVENT_KEY$1 = `.${DATA_KEY$1}`;
+ var EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
+ var EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
+ var EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
+ var EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
+ var EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
+ var EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
+ var EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
+ var ARROW_LEFT_KEY = "ArrowLeft";
+ var ARROW_RIGHT_KEY = "ArrowRight";
+ var ARROW_UP_KEY = "ArrowUp";
+ var ARROW_DOWN_KEY = "ArrowDown";
+ var HOME_KEY = "Home";
+ var END_KEY = "End";
+ var CLASS_NAME_ACTIVE = "active";
+ var CLASS_NAME_FADE$1 = "fade";
+ var CLASS_NAME_SHOW$1 = "show";
+ var CLASS_DROPDOWN = "dropdown";
+ var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle";
+ var SELECTOR_DROPDOWN_MENU = ".dropdown-menu";
+ var NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
+ var SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
+ var SELECTOR_OUTER = ".nav-item, .list-group-item";
+ var SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
+ var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
+ var SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
+ var SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
+ var Tab = class _Tab extends BaseComponent {
+ constructor(element) {
+ super(element);
+ this._parent = this._element.closest(SELECTOR_TAB_PANEL);
+ if (!this._parent) {
+ return;
+ }
+ this._setInitialAttributes(this._parent, this._getChildren());
+ EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));
+ }
+ // Getters
+ static get NAME() {
+ return NAME$1;
+ }
+ // Public
+ show() {
+ const innerElem = this._element;
+ if (this._elemIsActive(innerElem)) {
+ return;
+ }
+ const active = this._getActiveElem();
+ const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
+ relatedTarget: innerElem
+ }) : null;
+ const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
+ relatedTarget: active
+ });
+ if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
+ return;
+ }
+ this._deactivate(active, innerElem);
+ this._activate(innerElem, active);
+ }
+ // Private
+ _activate(element, relatedElem) {
+ if (!element) {
+ return;
+ }
+ element.classList.add(CLASS_NAME_ACTIVE);
+ this._activate(SelectorEngine.getElementFromSelector(element));
+ const complete = () => {
+ if (element.getAttribute("role") !== "tab") {
+ element.classList.add(CLASS_NAME_SHOW$1);
+ return;
+ }
+ element.removeAttribute("tabindex");
+ element.setAttribute("aria-selected", true);
+ this._toggleDropDown(element, true);
+ EventHandler.trigger(element, EVENT_SHOWN$1, {
+ relatedTarget: relatedElem
+ });
+ };
+ this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+ }
+ _deactivate(element, relatedElem) {
+ if (!element) {
+ return;
+ }
+ element.classList.remove(CLASS_NAME_ACTIVE);
+ element.blur();
+ this._deactivate(SelectorEngine.getElementFromSelector(element));
+ const complete = () => {
+ if (element.getAttribute("role") !== "tab") {
+ element.classList.remove(CLASS_NAME_SHOW$1);
+ return;
+ }
+ element.setAttribute("aria-selected", false);
+ element.setAttribute("tabindex", "-1");
+ this._toggleDropDown(element, false);
+ EventHandler.trigger(element, EVENT_HIDDEN$1, {
+ relatedTarget: relatedElem
+ });
+ };
+ this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+ }
+ _keydown(event) {
+ if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+ const children = this._getChildren().filter((element) => !isDisabled(element));
+ let nextActiveElement;
+ if ([HOME_KEY, END_KEY].includes(event.key)) {
+ nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
+ } else {
+ const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
+ nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
+ }
+ if (nextActiveElement) {
+ nextActiveElement.focus({
+ preventScroll: true
+ });
+ _Tab.getOrCreateInstance(nextActiveElement).show();
+ }
+ }
+ _getChildren() {
+ return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
+ }
+ _getActiveElem() {
+ return this._getChildren().find((child) => this._elemIsActive(child)) || null;
+ }
+ _setInitialAttributes(parent, children) {
+ this._setAttributeIfNotExists(parent, "role", "tablist");
+ for (const child of children) {
+ this._setInitialAttributesOnChild(child);
+ }
+ }
+ _setInitialAttributesOnChild(child) {
+ child = this._getInnerElement(child);
+ const isActive = this._elemIsActive(child);
+ const outerElem = this._getOuterElement(child);
+ child.setAttribute("aria-selected", isActive);
+ if (outerElem !== child) {
+ this._setAttributeIfNotExists(outerElem, "role", "presentation");
+ }
+ if (!isActive) {
+ child.setAttribute("tabindex", "-1");
+ }
+ this._setAttributeIfNotExists(child, "role", "tab");
+ this._setInitialAttributesOnTargetPanel(child);
+ }
+ _setInitialAttributesOnTargetPanel(child) {
+ const target = SelectorEngine.getElementFromSelector(child);
+ if (!target) {
+ return;
+ }
+ this._setAttributeIfNotExists(target, "role", "tabpanel");
+ if (child.id) {
+ this._setAttributeIfNotExists(target, "aria-labelledby", `${child.id}`);
+ }
+ }
+ _toggleDropDown(element, open) {
+ const outerElem = this._getOuterElement(element);
+ if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
+ return;
+ }
+ const toggle = (selector, className) => {
+ const element2 = SelectorEngine.findOne(selector, outerElem);
+ if (element2) {
+ element2.classList.toggle(className, open);
+ }
+ };
+ toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
+ toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
+ outerElem.setAttribute("aria-expanded", open);
+ }
+ _setAttributeIfNotExists(element, attribute, value) {
+ if (!element.hasAttribute(attribute)) {
+ element.setAttribute(attribute, value);
+ }
+ }
+ _elemIsActive(elem) {
+ return elem.classList.contains(CLASS_NAME_ACTIVE);
+ }
+ // Try to get the inner element (usually the .nav-link)
+ _getInnerElement(elem) {
+ return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
+ }
+ // Try to get the outer element (usually the .nav-item)
+ _getOuterElement(elem) {
+ return elem.closest(SELECTOR_OUTER) || elem;
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Tab.getOrCreateInstance(this);
+ if (typeof config !== "string") {
+ return;
+ }
+ if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config]();
+ });
+ }
+ };
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event) {
+ if (["A", "AREA"].includes(this.tagName)) {
+ event.preventDefault();
+ }
+ if (isDisabled(this)) {
+ return;
+ }
+ Tab.getOrCreateInstance(this).show();
+ });
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+ for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
+ Tab.getOrCreateInstance(element);
+ }
+ });
+ defineJQueryPlugin(Tab);
+ var NAME = "toast";
+ var DATA_KEY = "bs.toast";
+ var EVENT_KEY = `.${DATA_KEY}`;
+ var EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
+ var EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
+ var EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
+ var EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
+ var EVENT_HIDE = `hide${EVENT_KEY}`;
+ var EVENT_HIDDEN = `hidden${EVENT_KEY}`;
+ var EVENT_SHOW = `show${EVENT_KEY}`;
+ var EVENT_SHOWN = `shown${EVENT_KEY}`;
+ var CLASS_NAME_FADE = "fade";
+ var CLASS_NAME_HIDE = "hide";
+ var CLASS_NAME_SHOW = "show";
+ var CLASS_NAME_SHOWING = "showing";
+ var DefaultType = {
+ animation: "boolean",
+ autohide: "boolean",
+ delay: "number"
+ };
+ var Default = {
+ animation: true,
+ autohide: true,
+ delay: 5e3
+ };
+ var Toast = class _Toast extends BaseComponent {
+ constructor(element, config) {
+ super(element, config);
+ this._timeout = null;
+ this._hasMouseInteraction = false;
+ this._hasKeyboardInteraction = false;
+ this._setListeners();
+ }
+ // Getters
+ static get Default() {
+ return Default;
+ }
+ static get DefaultType() {
+ return DefaultType;
+ }
+ static get NAME() {
+ return NAME;
+ }
+ // Public
+ show() {
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
+ if (showEvent.defaultPrevented) {
+ return;
+ }
+ this._clearTimeout();
+ if (this._config.animation) {
+ this._element.classList.add(CLASS_NAME_FADE);
+ }
+ const complete = () => {
+ this._element.classList.remove(CLASS_NAME_SHOWING);
+ EventHandler.trigger(this._element, EVENT_SHOWN);
+ this._maybeScheduleHide();
+ };
+ this._element.classList.remove(CLASS_NAME_HIDE);
+ reflow(this._element);
+ this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
+ this._queueCallback(complete, this._element, this._config.animation);
+ }
+ hide() {
+ if (!this.isShown()) {
+ return;
+ }
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+ const complete = () => {
+ this._element.classList.add(CLASS_NAME_HIDE);
+ this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
+ };
+ this._element.classList.add(CLASS_NAME_SHOWING);
+ this._queueCallback(complete, this._element, this._config.animation);
+ }
+ dispose() {
+ this._clearTimeout();
+ if (this.isShown()) {
+ this._element.classList.remove(CLASS_NAME_SHOW);
+ }
+ super.dispose();
+ }
+ isShown() {
+ return this._element.classList.contains(CLASS_NAME_SHOW);
+ }
+ // Private
+ _maybeScheduleHide() {
+ if (!this._config.autohide) {
+ return;
+ }
+ if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
+ return;
+ }
+ this._timeout = setTimeout(() => {
+ this.hide();
+ }, this._config.delay);
+ }
+ _onInteraction(event, isInteracting) {
+ switch (event.type) {
+ case "mouseover":
+ case "mouseout": {
+ this._hasMouseInteraction = isInteracting;
+ break;
+ }
+ case "focusin":
+ case "focusout": {
+ this._hasKeyboardInteraction = isInteracting;
+ break;
+ }
+ }
+ if (isInteracting) {
+ this._clearTimeout();
+ return;
+ }
+ const nextElement = event.relatedTarget;
+ if (this._element === nextElement || this._element.contains(nextElement)) {
+ return;
+ }
+ this._maybeScheduleHide();
+ }
+ _setListeners() {
+ EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true));
+ EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false));
+ EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true));
+ EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false));
+ }
+ _clearTimeout() {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ // Static
+ static jQueryInterface(config) {
+ return this.each(function() {
+ const data = _Toast.getOrCreateInstance(this, config);
+ if (typeof config === "string") {
+ if (typeof data[config] === "undefined") {
+ throw new TypeError(`No method named "${config}"`);
+ }
+ data[config](this);
+ }
+ });
+ }
+ };
+ enableDismissTrigger(Toast);
+ defineJQueryPlugin(Toast);
+
+ // js/app.js
+ var import_prism = __toESM(require_prism());
+
+ // js/repository.js
+ var import_jquery = __toESM(require_jquery());
+ (0, import_jquery.default)(function() {
+ (0, import_jquery.default)("select.tree").change(function() {
+ document.location = this.value;
+ });
+ });
+
+ // js/kmx_anim.js
+ var import_jquery2 = __toESM(require_jquery());
+
+ // js/kmx_colors.js
+ var kmx_colors = {
+ "kmx-black": "#1e1f1d",
+ "kmx-blue": "#5a60f9",
+ "kmx-blue1": "#6f72f9",
+ "kmx-blue2": "#9c99fd",
+ "kmx-blue3": "#5a60f9",
+ "kmx-blue4": "#6f72f9",
+ "kmx-blue5": "#9c99fd",
+ "index": [
+ "kmx-black",
+ "kmx-blue",
+ "kmx-blue1",
+ "kmx-blue2",
+ "kmx-blue3",
+ "kmx-blue4",
+ "kmx-blue5",
+ "kmx-cyan",
+ "kmx-cyan1",
+ "kmx-green",
+ "kmx-green1",
+ "kmx-orange",
+ "kmx-orange1",
+ "kmx-orange2",
+ "kmx-pink",
+ "kmx-white",
+ "kmx-white1",
+ "kmx-white2",
+ "kmx-yellow",
+ "kmx-yellow1",
+ "kmx-yellow2",
+ "kmx-yellow3"
+ ],
+ "kmx-cyan": "#d4f3f6",
+ "kmx-cyan1": "#d4f3f6",
+ "kmx-green": "#c4ed3a",
+ "kmx-green1": "#c4ed3a",
+ "kmx-orange": "#f8681c",
+ "kmx-orange1": "#fa7734",
+ "kmx-orange2": "#ffa532",
+ "kmx-pink": "#fc9ef9",
+ "kmx-white": "#f5f8f4",
+ "kmx-white1": "#fff9f2",
+ "kmx-white2": "#ffffff",
+ "kmx-yellow": "#ecfe49",
+ "kmx-yellow1": "#fff43e",
+ "kmx-yellow2": "#ecfe49",
+ "kmx-yellow3": "#fff43e"
+ };
+ var kmx_colors_default = kmx_colors;
+
+ // js/kmx_anim.js
+ function getRandomInt(max2) {
+ return Math.floor(Math.random() * max2);
+ }
+ (0, import_jquery2.default)(function() {
+ setInterval(function() {
+ const i = getRandomInt(kmx_colors_default.index.length);
+ const name = kmx_colors_default.index[i];
+ const color = kmx_colors_default[name];
+ const x = (getRandomInt(99) - 48) * 2e-3;
+ (0, import_jquery2.default)("a").css("text-shadow", "0 0 0");
+ (0, import_jquery2.default)("a:hover").css("text-shadow", x + "em 0 0 " + color);
+ }, 200);
+ });
+
+ // ../deps/phoenix_html/priv/static/phoenix_html.js
+ (function() {
+ var PolyfillEvent = eventConstructor();
+ function eventConstructor() {
+ if (typeof window.CustomEvent === "function")
+ return window.CustomEvent;
+ function CustomEvent2(event, params) {
+ params = params || { bubbles: false, cancelable: false, detail: void 0 };
+ var evt = document.createEvent("CustomEvent");
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+ return evt;
+ }
+ CustomEvent2.prototype = window.Event.prototype;
+ return CustomEvent2;
+ }
+ function buildHiddenInput(name, value) {
+ var input = document.createElement("input");
+ input.type = "hidden";
+ input.name = name;
+ input.value = value;
+ return input;
+ }
+ function handleClick(element, targetModifierKey) {
+ var to = element.getAttribute("data-to"), method = buildHiddenInput("_method", element.getAttribute("data-method")), csrf = buildHiddenInput("_csrf_token", element.getAttribute("data-csrf")), form = document.createElement("form"), submit = document.createElement("input"), target = element.getAttribute("target");
+ form.method = element.getAttribute("data-method") === "get" ? "get" : "post";
+ form.action = to;
+ form.style.display = "none";
+ if (target)
+ form.target = target;
+ else if (targetModifierKey)
+ form.target = "_blank";
+ form.appendChild(csrf);
+ form.appendChild(method);
+ document.body.appendChild(form);
+ submit.type = "submit";
+ form.appendChild(submit);
+ submit.click();
+ }
+ window.addEventListener("click", function(e) {
+ var element = e.target;
+ if (e.defaultPrevented)
+ return;
+ while (element && element.getAttribute) {
+ var phoenixLinkEvent = new PolyfillEvent("phoenix.link.click", {
+ "bubbles": true,
+ "cancelable": true
+ });
+ if (!element.dispatchEvent(phoenixLinkEvent)) {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ return false;
+ }
+ if (element.getAttribute("data-method")) {
+ handleClick(element, e.metaKey || e.shiftKey);
+ e.preventDefault();
+ return false;
+ } else {
+ element = element.parentNode;
+ }
+ }
+ }, false);
+ window.addEventListener("phoenix.link.click", function(e) {
+ var message = e.target.getAttribute("data-confirm");
+ if (message && !window.confirm(message)) {
+ e.preventDefault();
+ }
+ }, false);
+ })();
+
+ // ../deps/phoenix/priv/static/phoenix.mjs
+ var closure = (value) => {
+ if (typeof value === "function") {
+ return value;
+ } else {
+ let closure22 = function() {
+ return value;
+ };
+ return closure22;
+ }
+ };
+ var globalSelf = typeof self !== "undefined" ? self : null;
+ var phxWindow = typeof window !== "undefined" ? window : null;
+ var global2 = globalSelf || phxWindow || global2;
+ var DEFAULT_VSN = "2.0.0";
+ var SOCKET_STATES = { connecting: 0, open: 1, closing: 2, closed: 3 };
+ var DEFAULT_TIMEOUT = 1e4;
+ var WS_CLOSE_NORMAL = 1e3;
+ var CHANNEL_STATES = {
+ closed: "closed",
+ errored: "errored",
+ joined: "joined",
+ joining: "joining",
+ leaving: "leaving"
+ };
+ var CHANNEL_EVENTS = {
+ close: "phx_close",
+ error: "phx_error",
+ join: "phx_join",
+ reply: "phx_reply",
+ leave: "phx_leave"
+ };
+ var TRANSPORTS = {
+ longpoll: "longpoll",
+ websocket: "websocket"
+ };
+ var XHR_STATES = {
+ complete: 4
+ };
+ var Push = class {
+ constructor(channel, event, payload, timeout) {
+ this.channel = channel;
+ this.event = event;
+ this.payload = payload || function() {
+ return {};
+ };
+ this.receivedResp = null;
+ this.timeout = timeout;
+ this.timeoutTimer = null;
+ this.recHooks = [];
+ this.sent = false;
+ }
+ resend(timeout) {
+ this.timeout = timeout;
+ this.reset();
+ this.send();
+ }
+ send() {
+ if (this.hasReceived("timeout")) {
+ return;
+ }
+ this.startTimeout();
+ this.sent = true;
+ this.channel.socket.push({
+ topic: this.channel.topic,
+ event: this.event,
+ payload: this.payload(),
+ ref: this.ref,
+ join_ref: this.channel.joinRef()
+ });
+ }
+ receive(status, callback) {
+ if (this.hasReceived(status)) {
+ callback(this.receivedResp.response);
+ }
+ this.recHooks.push({ status, callback });
+ return this;
+ }
+ reset() {
+ this.cancelRefEvent();
+ this.ref = null;
+ this.refEvent = null;
+ this.receivedResp = null;
+ this.sent = false;
+ }
+ matchReceive({ status, response, _ref }) {
+ this.recHooks.filter((h) => h.status === status).forEach((h) => h.callback(response));
+ }
+ cancelRefEvent() {
+ if (!this.refEvent) {
+ return;
+ }
+ this.channel.off(this.refEvent);
+ }
+ cancelTimeout() {
+ clearTimeout(this.timeoutTimer);
+ this.timeoutTimer = null;
+ }
+ startTimeout() {
+ if (this.timeoutTimer) {
+ this.cancelTimeout();
+ }
+ this.ref = this.channel.socket.makeRef();
+ this.refEvent = this.channel.replyEventName(this.ref);
+ this.channel.on(this.refEvent, (payload) => {
+ this.cancelRefEvent();
+ this.cancelTimeout();
+ this.receivedResp = payload;
+ this.matchReceive(payload);
+ });
+ this.timeoutTimer = setTimeout(() => {
+ this.trigger("timeout", {});
+ }, this.timeout);
+ }
+ hasReceived(status) {
+ return this.receivedResp && this.receivedResp.status === status;
+ }
+ trigger(status, response) {
+ this.channel.trigger(this.refEvent, { status, response });
+ }
+ };
+ var Timer = class {
+ constructor(callback, timerCalc) {
+ this.callback = callback;
+ this.timerCalc = timerCalc;
+ this.timer = null;
+ this.tries = 0;
+ }
+ reset() {
+ this.tries = 0;
+ clearTimeout(this.timer);
+ }
+ scheduleTimeout() {
+ clearTimeout(this.timer);
+ this.timer = setTimeout(() => {
+ this.tries = this.tries + 1;
+ this.callback();
+ }, this.timerCalc(this.tries + 1));
+ }
+ };
+ var Channel = class {
+ constructor(topic, params, socket) {
+ this.state = CHANNEL_STATES.closed;
+ this.topic = topic;
+ this.params = closure(params || {});
+ this.socket = socket;
+ this.bindings = [];
+ this.bindingRef = 0;
+ this.timeout = this.socket.timeout;
+ this.joinedOnce = false;
+ this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout);
+ this.pushBuffer = [];
+ this.stateChangeRefs = [];
+ this.rejoinTimer = new Timer(() => {
+ if (this.socket.isConnected()) {
+ this.rejoin();
+ }
+ }, this.socket.rejoinAfterMs);
+ this.stateChangeRefs.push(this.socket.onError(() => this.rejoinTimer.reset()));
+ this.stateChangeRefs.push(this.socket.onOpen(() => {
+ this.rejoinTimer.reset();
+ if (this.isErrored()) {
+ this.rejoin();
+ }
+ }));
+ this.joinPush.receive("ok", () => {
+ this.state = CHANNEL_STATES.joined;
+ this.rejoinTimer.reset();
+ this.pushBuffer.forEach((pushEvent) => pushEvent.send());
+ this.pushBuffer = [];
+ });
+ this.joinPush.receive("error", () => {
+ this.state = CHANNEL_STATES.errored;
+ if (this.socket.isConnected()) {
+ this.rejoinTimer.scheduleTimeout();
+ }
+ });
+ this.onClose(() => {
+ this.rejoinTimer.reset();
+ if (this.socket.hasLogger())
+ this.socket.log("channel", `close ${this.topic} ${this.joinRef()}`);
+ this.state = CHANNEL_STATES.closed;
+ this.socket.remove(this);
+ });
+ this.onError((reason) => {
+ if (this.socket.hasLogger())
+ this.socket.log("channel", `error ${this.topic}`, reason);
+ if (this.isJoining()) {
+ this.joinPush.reset();
+ }
+ this.state = CHANNEL_STATES.errored;
+ if (this.socket.isConnected()) {
+ this.rejoinTimer.scheduleTimeout();
+ }
+ });
+ this.joinPush.receive("timeout", () => {
+ if (this.socket.hasLogger())
+ this.socket.log("channel", `timeout ${this.topic} (${this.joinRef()})`, this.joinPush.timeout);
+ let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), this.timeout);
+ leavePush.send();
+ this.state = CHANNEL_STATES.errored;
+ this.joinPush.reset();
+ if (this.socket.isConnected()) {
+ this.rejoinTimer.scheduleTimeout();
+ }
+ });
+ this.on(CHANNEL_EVENTS.reply, (payload, ref) => {
+ this.trigger(this.replyEventName(ref), payload);
+ });
+ }
+ join(timeout = this.timeout) {
+ if (this.joinedOnce) {
+ throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");
+ } else {
+ this.timeout = timeout;
+ this.joinedOnce = true;
+ this.rejoin();
+ return this.joinPush;
+ }
+ }
+ onClose(callback) {
+ this.on(CHANNEL_EVENTS.close, callback);
+ }
+ onError(callback) {
+ return this.on(CHANNEL_EVENTS.error, (reason) => callback(reason));
+ }
+ on(event, callback) {
+ let ref = this.bindingRef++;
+ this.bindings.push({ event, ref, callback });
+ return ref;
+ }
+ off(event, ref) {
+ this.bindings = this.bindings.filter((bind) => {
+ return !(bind.event === event && (typeof ref === "undefined" || ref === bind.ref));
+ });
+ }
+ canPush() {
+ return this.socket.isConnected() && this.isJoined();
+ }
+ push(event, payload, timeout = this.timeout) {
+ payload = payload || {};
+ if (!this.joinedOnce) {
+ throw new Error(`tried to push '${event}' to '${this.topic}' before joining. Use channel.join() before pushing events`);
+ }
+ let pushEvent = new Push(this, event, function() {
+ return payload;
+ }, timeout);
+ if (this.canPush()) {
+ pushEvent.send();
+ } else {
+ pushEvent.startTimeout();
+ this.pushBuffer.push(pushEvent);
+ }
+ return pushEvent;
+ }
+ leave(timeout = this.timeout) {
+ this.rejoinTimer.reset();
+ this.joinPush.cancelTimeout();
+ this.state = CHANNEL_STATES.leaving;
+ let onClose = () => {
+ if (this.socket.hasLogger())
+ this.socket.log("channel", `leave ${this.topic}`);
+ this.trigger(CHANNEL_EVENTS.close, "leave");
+ };
+ let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), timeout);
+ leavePush.receive("ok", () => onClose()).receive("timeout", () => onClose());
+ leavePush.send();
+ if (!this.canPush()) {
+ leavePush.trigger("ok", {});
+ }
+ return leavePush;
+ }
+ onMessage(_event, payload, _ref) {
+ return payload;
+ }
+ isMember(topic, event, payload, joinRef) {
+ if (this.topic !== topic) {
+ return false;
+ }
+ if (joinRef && joinRef !== this.joinRef()) {
+ if (this.socket.hasLogger())
+ this.socket.log("channel", "dropping outdated message", { topic, event, payload, joinRef });
+ return false;
+ } else {
+ return true;
+ }
+ }
+ joinRef() {
+ return this.joinPush.ref;
+ }
+ rejoin(timeout = this.timeout) {
+ if (this.isLeaving()) {
+ return;
+ }
+ this.socket.leaveOpenTopic(this.topic);
+ this.state = CHANNEL_STATES.joining;
+ this.joinPush.resend(timeout);
+ }
+ trigger(event, payload, ref, joinRef) {
+ let handledPayload = this.onMessage(event, payload, ref, joinRef);
+ if (payload && !handledPayload) {
+ throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");
+ }
+ let eventBindings = this.bindings.filter((bind) => bind.event === event);
+ for (let i = 0; i < eventBindings.length; i++) {
+ let bind = eventBindings[i];
+ bind.callback(handledPayload, ref, joinRef || this.joinRef());
+ }
+ }
+ replyEventName(ref) {
+ return `chan_reply_${ref}`;
+ }
+ isClosed() {
+ return this.state === CHANNEL_STATES.closed;
+ }
+ isErrored() {
+ return this.state === CHANNEL_STATES.errored;
+ }
+ isJoined() {
+ return this.state === CHANNEL_STATES.joined;
+ }
+ isJoining() {
+ return this.state === CHANNEL_STATES.joining;
+ }
+ isLeaving() {
+ return this.state === CHANNEL_STATES.leaving;
+ }
+ };
+ var Ajax = class {
+ static request(method, endPoint, accept, body, timeout, ontimeout, callback) {
+ if (global2.XDomainRequest) {
+ let req = new global2.XDomainRequest();
+ return this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback);
+ } else {
+ let req = new global2.XMLHttpRequest();
+ return this.xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback);
+ }
+ }
+ static xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback) {
+ req.timeout = timeout;
+ req.open(method, endPoint);
+ req.onload = () => {
+ let response = this.parseJSON(req.responseText);
+ callback && callback(response);
+ };
+ if (ontimeout) {
+ req.ontimeout = ontimeout;
+ }
+ req.onprogress = () => {
+ };
+ req.send(body);
+ return req;
+ }
+ static xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback) {
+ req.open(method, endPoint, true);
+ req.timeout = timeout;
+ req.setRequestHeader("Content-Type", accept);
+ req.onerror = () => callback && callback(null);
+ req.onreadystatechange = () => {
+ if (req.readyState === XHR_STATES.complete && callback) {
+ let response = this.parseJSON(req.responseText);
+ callback(response);
+ }
+ };
+ if (ontimeout) {
+ req.ontimeout = ontimeout;
+ }
+ req.send(body);
+ return req;
+ }
+ static parseJSON(resp) {
+ if (!resp || resp === "") {
+ return null;
+ }
+ try {
+ return JSON.parse(resp);
+ } catch (e) {
+ console && console.log("failed to parse JSON response", resp);
+ return null;
+ }
+ }
+ static serialize(obj, parentKey) {
+ let queryStr = [];
+ for (var key in obj) {
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) {
+ continue;
+ }
+ let paramKey = parentKey ? `${parentKey}[${key}]` : key;
+ let paramVal = obj[key];
+ if (typeof paramVal === "object") {
+ queryStr.push(this.serialize(paramVal, paramKey));
+ } else {
+ queryStr.push(encodeURIComponent(paramKey) + "=" + encodeURIComponent(paramVal));
+ }
+ }
+ return queryStr.join("&");
+ }
+ static appendParams(url, params) {
+ if (Object.keys(params).length === 0) {
+ return url;
+ }
+ let prefix = url.match(/\?/) ? "&" : "?";
+ return `${url}${prefix}${this.serialize(params)}`;
+ }
+ };
+ var LongPoll = class {
+ constructor(endPoint) {
+ this.endPoint = null;
+ this.token = null;
+ this.skipHeartbeat = true;
+ this.reqs = /* @__PURE__ */ new Set();
+ this.onopen = function() {
+ };
+ this.onerror = function() {
+ };
+ this.onmessage = function() {
+ };
+ this.onclose = function() {
+ };
+ this.pollEndpoint = this.normalizeEndpoint(endPoint);
+ this.readyState = SOCKET_STATES.connecting;
+ this.poll();
+ }
+ normalizeEndpoint(endPoint) {
+ return endPoint.replace("ws://", "http://").replace("wss://", "https://").replace(new RegExp("(.*)/" + TRANSPORTS.websocket), "$1/" + TRANSPORTS.longpoll);
+ }
+ endpointURL() {
+ return Ajax.appendParams(this.pollEndpoint, { token: this.token });
+ }
+ closeAndRetry(code, reason, wasClean) {
+ this.close(code, reason, wasClean);
+ this.readyState = SOCKET_STATES.connecting;
+ }
+ ontimeout() {
+ this.onerror("timeout");
+ this.closeAndRetry(1005, "timeout", false);
+ }
+ isActive() {
+ return this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting;
+ }
+ poll() {
+ this.ajax("GET", null, () => this.ontimeout(), (resp) => {
+ if (resp) {
+ var { status, token, messages } = resp;
+ this.token = token;
+ } else {
+ status = 0;
+ }
+ switch (status) {
+ case 200:
+ messages.forEach((msg) => {
+ setTimeout(() => this.onmessage({ data: msg }), 0);
+ });
+ this.poll();
+ break;
+ case 204:
+ this.poll();
+ break;
+ case 410:
+ this.readyState = SOCKET_STATES.open;
+ this.onopen({});
+ this.poll();
+ break;
+ case 403:
+ this.onerror(403);
+ this.close(1008, "forbidden", false);
+ break;
+ case 0:
+ case 500:
+ this.onerror(500);
+ this.closeAndRetry(1011, "internal server error", 500);
+ break;
+ default:
+ throw new Error(`unhandled poll status ${status}`);
+ }
+ });
+ }
+ send(body) {
+ this.ajax("POST", body, () => this.onerror("timeout"), (resp) => {
+ if (!resp || resp.status !== 200) {
+ this.onerror(resp && resp.status);
+ this.closeAndRetry(1011, "internal server error", false);
+ }
+ });
+ }
+ close(code, reason, wasClean) {
+ for (let req of this.reqs) {
+ req.abort();
+ }
+ this.readyState = SOCKET_STATES.closed;
+ let opts = Object.assign({ code: 1e3, reason: void 0, wasClean: true }, { code, reason, wasClean });
+ if (typeof CloseEvent !== "undefined") {
+ this.onclose(new CloseEvent("close", opts));
+ } else {
+ this.onclose(opts);
+ }
+ }
+ ajax(method, body, onCallerTimeout, callback) {
+ let req;
+ let ontimeout = () => {
+ this.reqs.delete(req);
+ onCallerTimeout();
+ };
+ req = Ajax.request(method, this.endpointURL(), "application/json", body, this.timeout, ontimeout, (resp) => {
+ this.reqs.delete(req);
+ if (this.isActive()) {
+ callback(resp);
+ }
+ });
+ this.reqs.add(req);
+ }
+ };
+ var serializer_default = {
+ HEADER_LENGTH: 1,
+ META_LENGTH: 4,
+ KINDS: { push: 0, reply: 1, broadcast: 2 },
+ encode(msg, callback) {
+ if (msg.payload.constructor === ArrayBuffer) {
+ return callback(this.binaryEncode(msg));
+ } else {
+ let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload];
+ return callback(JSON.stringify(payload));
+ }
+ },
+ decode(rawPayload, callback) {
+ if (rawPayload.constructor === ArrayBuffer) {
+ return callback(this.binaryDecode(rawPayload));
+ } else {
+ let [join_ref, ref, topic, event, payload] = JSON.parse(rawPayload);
+ return callback({ join_ref, ref, topic, event, payload });
+ }
+ },
+ binaryEncode(message) {
+ let { join_ref, ref, event, topic, payload } = message;
+ let metaLength = this.META_LENGTH + join_ref.length + ref.length + topic.length + event.length;
+ let header = new ArrayBuffer(this.HEADER_LENGTH + metaLength);
+ let view = new DataView(header);
+ let offset2 = 0;
+ view.setUint8(offset2++, this.KINDS.push);
+ view.setUint8(offset2++, join_ref.length);
+ view.setUint8(offset2++, ref.length);
+ view.setUint8(offset2++, topic.length);
+ view.setUint8(offset2++, event.length);
+ Array.from(join_ref, (char) => view.setUint8(offset2++, char.charCodeAt(0)));
+ Array.from(ref, (char) => view.setUint8(offset2++, char.charCodeAt(0)));
+ Array.from(topic, (char) => view.setUint8(offset2++, char.charCodeAt(0)));
+ Array.from(event, (char) => view.setUint8(offset2++, char.charCodeAt(0)));
+ var combined = new Uint8Array(header.byteLength + payload.byteLength);
+ combined.set(new Uint8Array(header), 0);
+ combined.set(new Uint8Array(payload), header.byteLength);
+ return combined.buffer;
+ },
+ binaryDecode(buffer) {
+ let view = new DataView(buffer);
+ let kind = view.getUint8(0);
+ let decoder = new TextDecoder();
+ switch (kind) {
+ case this.KINDS.push:
+ return this.decodePush(buffer, view, decoder);
+ case this.KINDS.reply:
+ return this.decodeReply(buffer, view, decoder);
+ case this.KINDS.broadcast:
+ return this.decodeBroadcast(buffer, view, decoder);
+ }
+ },
+ decodePush(buffer, view, decoder) {
+ let joinRefSize = view.getUint8(1);
+ let topicSize = view.getUint8(2);
+ let eventSize = view.getUint8(3);
+ let offset2 = this.HEADER_LENGTH + this.META_LENGTH - 1;
+ let joinRef = decoder.decode(buffer.slice(offset2, offset2 + joinRefSize));
+ offset2 = offset2 + joinRefSize;
+ let topic = decoder.decode(buffer.slice(offset2, offset2 + topicSize));
+ offset2 = offset2 + topicSize;
+ let event = decoder.decode(buffer.slice(offset2, offset2 + eventSize));
+ offset2 = offset2 + eventSize;
+ let data = buffer.slice(offset2, buffer.byteLength);
+ return { join_ref: joinRef, ref: null, topic, event, payload: data };
+ },
+ decodeReply(buffer, view, decoder) {
+ let joinRefSize = view.getUint8(1);
+ let refSize = view.getUint8(2);
+ let topicSize = view.getUint8(3);
+ let eventSize = view.getUint8(4);
+ let offset2 = this.HEADER_LENGTH + this.META_LENGTH;
+ let joinRef = decoder.decode(buffer.slice(offset2, offset2 + joinRefSize));
+ offset2 = offset2 + joinRefSize;
+ let ref = decoder.decode(buffer.slice(offset2, offset2 + refSize));
+ offset2 = offset2 + refSize;
+ let topic = decoder.decode(buffer.slice(offset2, offset2 + topicSize));
+ offset2 = offset2 + topicSize;
+ let event = decoder.decode(buffer.slice(offset2, offset2 + eventSize));
+ offset2 = offset2 + eventSize;
+ let data = buffer.slice(offset2, buffer.byteLength);
+ let payload = { status: event, response: data };
+ return { join_ref: joinRef, ref, topic, event: CHANNEL_EVENTS.reply, payload };
+ },
+ decodeBroadcast(buffer, view, decoder) {
+ let topicSize = view.getUint8(1);
+ let eventSize = view.getUint8(2);
+ let offset2 = this.HEADER_LENGTH + 2;
+ let topic = decoder.decode(buffer.slice(offset2, offset2 + topicSize));
+ offset2 = offset2 + topicSize;
+ let event = decoder.decode(buffer.slice(offset2, offset2 + eventSize));
+ offset2 = offset2 + eventSize;
+ let data = buffer.slice(offset2, buffer.byteLength);
+ return { join_ref: null, ref: null, topic, event, payload: data };
+ }
+ };
+ var Socket = class {
+ constructor(endPoint, opts = {}) {
+ this.stateChangeCallbacks = { open: [], close: [], error: [], message: [] };
+ this.channels = [];
+ this.sendBuffer = [];
+ this.ref = 0;
+ this.timeout = opts.timeout || DEFAULT_TIMEOUT;
+ this.transport = opts.transport || global2.WebSocket || LongPoll;
+ this.establishedConnections = 0;
+ this.defaultEncoder = serializer_default.encode.bind(serializer_default);
+ this.defaultDecoder = serializer_default.decode.bind(serializer_default);
+ this.closeWasClean = false;
+ this.binaryType = opts.binaryType || "arraybuffer";
+ this.connectClock = 1;
+ if (this.transport !== LongPoll) {
+ this.encode = opts.encode || this.defaultEncoder;
+ this.decode = opts.decode || this.defaultDecoder;
+ } else {
+ this.encode = this.defaultEncoder;
+ this.decode = this.defaultDecoder;
+ }
+ let awaitingConnectionOnPageShow = null;
+ if (phxWindow && phxWindow.addEventListener) {
+ phxWindow.addEventListener("pagehide", (_e) => {
+ if (this.conn) {
+ this.disconnect();
+ awaitingConnectionOnPageShow = this.connectClock;
+ }
+ });
+ phxWindow.addEventListener("pageshow", (_e) => {
+ if (awaitingConnectionOnPageShow === this.connectClock) {
+ awaitingConnectionOnPageShow = null;
+ this.connect();
+ }
+ });
+ }
+ this.heartbeatIntervalMs = opts.heartbeatIntervalMs || 3e4;
+ this.rejoinAfterMs = (tries) => {
+ if (opts.rejoinAfterMs) {
+ return opts.rejoinAfterMs(tries);
+ } else {
+ return [1e3, 2e3, 5e3][tries - 1] || 1e4;
+ }
+ };
+ this.reconnectAfterMs = (tries) => {
+ if (opts.reconnectAfterMs) {
+ return opts.reconnectAfterMs(tries);
+ } else {
+ return [10, 50, 100, 150, 200, 250, 500, 1e3, 2e3][tries - 1] || 5e3;
+ }
+ };
+ this.logger = opts.logger || null;
+ this.longpollerTimeout = opts.longpollerTimeout || 2e4;
+ this.params = closure(opts.params || {});
+ this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`;
+ this.vsn = opts.vsn || DEFAULT_VSN;
+ this.heartbeatTimeoutTimer = null;
+ this.heartbeatTimer = null;
+ this.pendingHeartbeatRef = null;
+ this.reconnectTimer = new Timer(() => {
+ this.teardown(() => this.connect());
+ }, this.reconnectAfterMs);
+ }
+ getLongPollTransport() {
+ return LongPoll;
+ }
+ replaceTransport(newTransport) {
+ this.connectClock++;
+ this.closeWasClean = true;
+ this.reconnectTimer.reset();
+ this.sendBuffer = [];
+ if (this.conn) {
+ this.conn.close();
+ this.conn = null;
+ }
+ this.transport = newTransport;
+ }
+ protocol() {
+ return location.protocol.match(/^https/) ? "wss" : "ws";
+ }
+ endPointURL() {
+ let uri = Ajax.appendParams(Ajax.appendParams(this.endPoint, this.params()), { vsn: this.vsn });
+ if (uri.charAt(0) !== "/") {
+ return uri;
+ }
+ if (uri.charAt(1) === "/") {
+ return `${this.protocol()}:${uri}`;
+ }
+ return `${this.protocol()}://${location.host}${uri}`;
+ }
+ disconnect(callback, code, reason) {
+ this.connectClock++;
+ this.closeWasClean = true;
+ this.reconnectTimer.reset();
+ this.teardown(callback, code, reason);
+ }
+ connect(params) {
+ if (params) {
+ console && console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor");
+ this.params = closure(params);
+ }
+ if (this.conn) {
+ return;
+ }
+ this.connectClock++;
+ this.closeWasClean = false;
+ this.conn = new this.transport(this.endPointURL());
+ this.conn.binaryType = this.binaryType;
+ this.conn.timeout = this.longpollerTimeout;
+ this.conn.onopen = () => this.onConnOpen();
+ this.conn.onerror = (error) => this.onConnError(error);
+ this.conn.onmessage = (event) => this.onConnMessage(event);
+ this.conn.onclose = (event) => this.onConnClose(event);
+ }
+ log(kind, msg, data) {
+ this.logger(kind, msg, data);
+ }
+ hasLogger() {
+ return this.logger !== null;
+ }
+ onOpen(callback) {
+ let ref = this.makeRef();
+ this.stateChangeCallbacks.open.push([ref, callback]);
+ return ref;
+ }
+ onClose(callback) {
+ let ref = this.makeRef();
+ this.stateChangeCallbacks.close.push([ref, callback]);
+ return ref;
+ }
+ onError(callback) {
+ let ref = this.makeRef();
+ this.stateChangeCallbacks.error.push([ref, callback]);
+ return ref;
+ }
+ onMessage(callback) {
+ let ref = this.makeRef();
+ this.stateChangeCallbacks.message.push([ref, callback]);
+ return ref;
+ }
+ ping(callback) {
+ if (!this.isConnected()) {
+ return false;
+ }
+ let ref = this.makeRef();
+ let startTime = Date.now();
+ this.push({ topic: "phoenix", event: "heartbeat", payload: {}, ref });
+ let onMsgRef = this.onMessage((msg) => {
+ if (msg.ref === ref) {
+ this.off([onMsgRef]);
+ callback(Date.now() - startTime);
+ }
+ });
+ return true;
+ }
+ clearHeartbeats() {
+ clearTimeout(this.heartbeatTimer);
+ clearTimeout(this.heartbeatTimeoutTimer);
+ }
+ onConnOpen() {
+ if (this.hasLogger())
+ this.log("transport", `connected to ${this.endPointURL()}`);
+ this.closeWasClean = false;
+ this.establishedConnections++;
+ this.flushSendBuffer();
+ this.reconnectTimer.reset();
+ this.resetHeartbeat();
+ this.stateChangeCallbacks.open.forEach(([, callback]) => callback());
+ }
+ heartbeatTimeout() {
+ if (this.pendingHeartbeatRef) {
+ this.pendingHeartbeatRef = null;
+ if (this.hasLogger()) {
+ this.log("transport", "heartbeat timeout. Attempting to re-establish connection");
+ }
+ this.triggerChanError();
+ this.closeWasClean = false;
+ this.teardown(() => this.reconnectTimer.scheduleTimeout(), WS_CLOSE_NORMAL, "heartbeat timeout");
+ }
+ }
+ resetHeartbeat() {
+ if (this.conn && this.conn.skipHeartbeat) {
+ return;
+ }
+ this.pendingHeartbeatRef = null;
+ this.clearHeartbeats();
+ this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);
+ }
+ teardown(callback, code, reason) {
+ if (!this.conn) {
+ return callback && callback();
+ }
+ this.waitForBufferDone(() => {
+ if (this.conn) {
+ if (code) {
+ this.conn.close(code, reason || "");
+ } else {
+ this.conn.close();
+ }
+ }
+ this.waitForSocketClosed(() => {
+ if (this.conn) {
+ this.conn.onopen = function() {
+ };
+ this.conn.onerror = function() {
+ };
+ this.conn.onmessage = function() {
+ };
+ this.conn.onclose = function() {
+ };
+ this.conn = null;
+ }
+ callback && callback();
+ });
+ });
+ }
+ waitForBufferDone(callback, tries = 1) {
+ if (tries === 5 || !this.conn || !this.conn.bufferedAmount) {
+ callback();
+ return;
+ }
+ setTimeout(() => {
+ this.waitForBufferDone(callback, tries + 1);
+ }, 150 * tries);
+ }
+ waitForSocketClosed(callback, tries = 1) {
+ if (tries === 5 || !this.conn || this.conn.readyState === SOCKET_STATES.closed) {
+ callback();
+ return;
+ }
+ setTimeout(() => {
+ this.waitForSocketClosed(callback, tries + 1);
+ }, 150 * tries);
+ }
+ onConnClose(event) {
+ let closeCode = event && event.code;
+ if (this.hasLogger())
+ this.log("transport", "close", event);
+ this.triggerChanError();
+ this.clearHeartbeats();
+ if (!this.closeWasClean && closeCode !== 1e3) {
+ this.reconnectTimer.scheduleTimeout();
+ }
+ this.stateChangeCallbacks.close.forEach(([, callback]) => callback(event));
+ }
+ onConnError(error) {
+ if (this.hasLogger())
+ this.log("transport", error);
+ let transportBefore = this.transport;
+ let establishedBefore = this.establishedConnections;
+ this.stateChangeCallbacks.error.forEach(([, callback]) => {
+ callback(error, transportBefore, establishedBefore);
+ });
+ if (transportBefore === this.transport || establishedBefore > 0) {
+ this.triggerChanError();
+ }
+ }
+ triggerChanError() {
+ this.channels.forEach((channel) => {
+ if (!(channel.isErrored() || channel.isLeaving() || channel.isClosed())) {
+ channel.trigger(CHANNEL_EVENTS.error);
+ }
+ });
+ }
+ connectionState() {
+ switch (this.conn && this.conn.readyState) {
+ case SOCKET_STATES.connecting:
+ return "connecting";
+ case SOCKET_STATES.open:
+ return "open";
+ case SOCKET_STATES.closing:
+ return "closing";
+ default:
+ return "closed";
+ }
+ }
+ isConnected() {
+ return this.connectionState() === "open";
+ }
+ remove(channel) {
+ this.off(channel.stateChangeRefs);
+ this.channels = this.channels.filter((c) => c.joinRef() !== channel.joinRef());
+ }
+ off(refs) {
+ for (let key in this.stateChangeCallbacks) {
+ this.stateChangeCallbacks[key] = this.stateChangeCallbacks[key].filter(([ref]) => {
+ return refs.indexOf(ref) === -1;
+ });
+ }
+ }
+ channel(topic, chanParams = {}) {
+ let chan = new Channel(topic, chanParams, this);
+ this.channels.push(chan);
+ return chan;
+ }
+ push(data) {
+ if (this.hasLogger()) {
+ let { topic, event, payload, ref, join_ref } = data;
+ this.log("push", `${topic} ${event} (${join_ref}, ${ref})`, payload);
+ }
+ if (this.isConnected()) {
+ this.encode(data, (result) => this.conn.send(result));
+ } else {
+ this.sendBuffer.push(() => this.encode(data, (result) => this.conn.send(result)));
+ }
+ }
+ makeRef() {
+ let newRef = this.ref + 1;
+ if (newRef === this.ref) {
+ this.ref = 0;
+ } else {
+ this.ref = newRef;
+ }
+ return this.ref.toString();
+ }
+ sendHeartbeat() {
+ if (this.pendingHeartbeatRef && !this.isConnected()) {
+ return;
+ }
+ this.pendingHeartbeatRef = this.makeRef();
+ this.push({ topic: "phoenix", event: "heartbeat", payload: {}, ref: this.pendingHeartbeatRef });
+ this.heartbeatTimeoutTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs);
+ }
+ flushSendBuffer() {
+ if (this.isConnected() && this.sendBuffer.length > 0) {
+ this.sendBuffer.forEach((callback) => callback());
+ this.sendBuffer = [];
+ }
+ }
+ onConnMessage(rawMessage) {
+ this.decode(rawMessage.data, (msg) => {
+ let { topic, event, payload, ref, join_ref } = msg;
+ if (ref && ref === this.pendingHeartbeatRef) {
+ this.clearHeartbeats();
+ this.pendingHeartbeatRef = null;
+ this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);
+ }
+ if (this.hasLogger())
+ this.log("receive", `${payload.status || ""} ${topic} ${event} ${ref && "(" + ref + ")" || ""}`, payload);
+ for (let i = 0; i < this.channels.length; i++) {
+ const channel = this.channels[i];
+ if (!channel.isMember(topic, event, payload, join_ref)) {
+ continue;
+ }
+ channel.trigger(event, payload, ref, join_ref);
+ }
+ for (let i = 0; i < this.stateChangeCallbacks.message.length; i++) {
+ let [, callback] = this.stateChangeCallbacks.message[i];
+ callback(msg);
+ }
+ });
+ }
+ leaveOpenTopic(topic) {
+ let dupChannel = this.channels.find((c) => c.topic === topic && (c.isJoined() || c.isJoining()));
+ if (dupChannel) {
+ if (this.hasLogger())
+ this.log("transport", `leaving duplicate topic "${topic}"`);
+ dupChannel.leave();
+ }
+ }
+ };
+
+ // ../deps/phoenix_live_view/priv/static/phoenix_live_view.esm.js
+ var CONSECUTIVE_RELOADS = "consecutive-reloads";
+ var MAX_RELOADS = 10;
+ var RELOAD_JITTER_MIN = 5e3;
+ var RELOAD_JITTER_MAX = 1e4;
+ var FAILSAFE_JITTER = 3e4;
+ var PHX_EVENT_CLASSES = [
+ "phx-click-loading",
+ "phx-change-loading",
+ "phx-submit-loading",
+ "phx-keydown-loading",
+ "phx-keyup-loading",
+ "phx-blur-loading",
+ "phx-focus-loading"
+ ];
+ var PHX_COMPONENT = "data-phx-component";
+ var PHX_LIVE_LINK = "data-phx-link";
+ var PHX_TRACK_STATIC = "track-static";
+ var PHX_LINK_STATE = "data-phx-link-state";
+ var PHX_REF = "data-phx-ref";
+ var PHX_REF_SRC = "data-phx-ref-src";
+ var PHX_TRACK_UPLOADS = "track-uploads";
+ var PHX_UPLOAD_REF = "data-phx-upload-ref";
+ var PHX_PREFLIGHTED_REFS = "data-phx-preflighted-refs";
+ var PHX_DONE_REFS = "data-phx-done-refs";
+ var PHX_DROP_TARGET = "drop-target";
+ var PHX_ACTIVE_ENTRY_REFS = "data-phx-active-refs";
+ var PHX_LIVE_FILE_UPDATED = "phx:live-file:updated";
+ var PHX_SKIP = "data-phx-skip";
+ var PHX_PRUNE = "data-phx-prune";
+ var PHX_PAGE_LOADING = "page-loading";
+ var PHX_CONNECTED_CLASS = "phx-connected";
+ var PHX_DISCONNECTED_CLASS = "phx-loading";
+ var PHX_NO_FEEDBACK_CLASS = "phx-no-feedback";
+ var PHX_ERROR_CLASS = "phx-error";
+ var PHX_PARENT_ID = "data-phx-parent-id";
+ var PHX_MAIN = "data-phx-main";
+ var PHX_ROOT_ID = "data-phx-root-id";
+ var PHX_TRIGGER_ACTION = "trigger-action";
+ var PHX_FEEDBACK_FOR = "feedback-for";
+ var PHX_HAS_FOCUSED = "phx-has-focused";
+ var FOCUSABLE_INPUTS = ["text", "textarea", "number", "email", "password", "search", "tel", "url", "date", "time", "datetime-local", "color", "range"];
+ var CHECKABLE_INPUTS = ["checkbox", "radio"];
+ var PHX_HAS_SUBMITTED = "phx-has-submitted";
+ var PHX_SESSION = "data-phx-session";
+ var PHX_VIEW_SELECTOR = `[${PHX_SESSION}]`;
+ var PHX_STICKY = "data-phx-sticky";
+ var PHX_STATIC = "data-phx-static";
+ var PHX_READONLY = "data-phx-readonly";
+ var PHX_DISABLED = "data-phx-disabled";
+ var PHX_DISABLE_WITH = "disable-with";
+ var PHX_DISABLE_WITH_RESTORE = "data-phx-disable-with-restore";
+ var PHX_HOOK = "hook";
+ var PHX_DEBOUNCE = "debounce";
+ var PHX_THROTTLE = "throttle";
+ var PHX_UPDATE = "update";
+ var PHX_KEY = "key";
+ var PHX_PRIVATE = "phxPrivate";
+ var PHX_AUTO_RECOVER = "auto-recover";
+ var PHX_LV_DEBUG = "phx:live-socket:debug";
+ var PHX_LV_PROFILE = "phx:live-socket:profiling";
+ var PHX_LV_LATENCY_SIM = "phx:live-socket:latency-sim";
+ var PHX_PROGRESS = "progress";
+ var LOADER_TIMEOUT = 1;
+ var BEFORE_UNLOAD_LOADER_TIMEOUT = 200;
+ var BINDING_PREFIX = "phx-";
+ var PUSH_TIMEOUT = 3e4;
+ var DEBOUNCE_TRIGGER = "debounce-trigger";
+ var THROTTLED = "throttled";
+ var DEBOUNCE_PREV_KEY = "debounce-prev-key";
+ var DEFAULTS = {
+ debounce: 300,
+ throttle: 300
+ };
+ var DYNAMICS = "d";
+ var STATIC = "s";
+ var COMPONENTS = "c";
+ var EVENTS = "e";
+ var REPLY = "r";
+ var TITLE = "t";
+ var TEMPLATES = "p";
+ var EntryUploader = class {
+ constructor(entry, chunkSize, liveSocket2) {
+ this.liveSocket = liveSocket2;
+ this.entry = entry;
+ this.offset = 0;
+ this.chunkSize = chunkSize;
+ this.chunkTimer = null;
+ this.uploadChannel = liveSocket2.channel(`lvu:${entry.ref}`, { token: entry.metadata() });
+ }
+ error(reason) {
+ clearTimeout(this.chunkTimer);
+ this.uploadChannel.leave();
+ this.entry.error(reason);
+ }
+ upload() {
+ this.uploadChannel.onError((reason) => this.error(reason));
+ this.uploadChannel.join().receive("ok", (_data) => this.readNextChunk()).receive("error", (reason) => this.error(reason));
+ }
+ isDone() {
+ return this.offset >= this.entry.file.size;
+ }
+ readNextChunk() {
+ let reader = new window.FileReader();
+ let blob = this.entry.file.slice(this.offset, this.chunkSize + this.offset);
+ reader.onload = (e) => {
+ if (e.target.error === null) {
+ this.offset += e.target.result.byteLength;
+ this.pushChunk(e.target.result);
+ } else {
+ return logError("Read error: " + e.target.error);
+ }
+ };
+ reader.readAsArrayBuffer(blob);
+ }
+ pushChunk(chunk) {
+ if (!this.uploadChannel.isJoined()) {
+ return;
+ }
+ this.uploadChannel.push("chunk", chunk).receive("ok", () => {
+ this.entry.progress(this.offset / this.entry.file.size * 100);
+ if (!this.isDone()) {
+ this.chunkTimer = setTimeout(() => this.readNextChunk(), this.liveSocket.getLatencySim() || 0);
+ }
+ });
+ }
+ };
+ var logError = (msg, obj) => console.error && console.error(msg, obj);
+ var isCid = (cid) => {
+ let type = typeof cid;
+ return type === "number" || type === "string" && /^(0|[1-9]\d*)$/.test(cid);
+ };
+ function detectDuplicateIds() {
+ let ids = /* @__PURE__ */ new Set();
+ let elems = document.querySelectorAll("*[id]");
+ for (let i = 0, len = elems.length; i < len; i++) {
+ if (ids.has(elems[i].id)) {
+ console.error(`Multiple IDs detected: ${elems[i].id}. Ensure unique element ids.`);
+ } else {
+ ids.add(elems[i].id);
+ }
+ }
+ }
+ var debug = (view, kind, msg, obj) => {
+ if (view.liveSocket.isDebugEnabled()) {
+ console.log(`${view.id} ${kind}: ${msg} - `, obj);
+ }
+ };
+ var closure2 = (val) => typeof val === "function" ? val : function() {
+ return val;
+ };
+ var clone = (obj) => {
+ return JSON.parse(JSON.stringify(obj));
+ };
+ var closestPhxBinding = (el, binding, borderEl) => {
+ do {
+ if (el.matches(`[${binding}]`)) {
+ return el;
+ }
+ el = el.parentElement || el.parentNode;
+ } while (el !== null && el.nodeType === 1 && !(borderEl && borderEl.isSameNode(el) || el.matches(PHX_VIEW_SELECTOR)));
+ return null;
+ };
+ var isObject = (obj) => {
+ return obj !== null && typeof obj === "object" && !(obj instanceof Array);
+ };
+ var isEqualObj = (obj1, obj2) => JSON.stringify(obj1) === JSON.stringify(obj2);
+ var isEmpty = (obj) => {
+ for (let x in obj) {
+ return false;
+ }
+ return true;
+ };
+ var maybe = (el, callback) => el && callback(el);
+ var channelUploader = function(entries, onError, resp, liveSocket2) {
+ entries.forEach((entry) => {
+ let entryUploader = new EntryUploader(entry, resp.config.chunk_size, liveSocket2);
+ entryUploader.upload();
+ });
+ };
+ var Browser = {
+ canPushState() {
+ return typeof history.pushState !== "undefined";
+ },
+ dropLocal(localStorage, namespace, subkey) {
+ return localStorage.removeItem(this.localKey(namespace, subkey));
+ },
+ updateLocal(localStorage, namespace, subkey, initial, func) {
+ let current = this.getLocal(localStorage, namespace, subkey);
+ let key = this.localKey(namespace, subkey);
+ let newVal = current === null ? initial : func(current);
+ localStorage.setItem(key, JSON.stringify(newVal));
+ return newVal;
+ },
+ getLocal(localStorage, namespace, subkey) {
+ return JSON.parse(localStorage.getItem(this.localKey(namespace, subkey)));
+ },
+ updateCurrentState(callback) {
+ if (!this.canPushState()) {
+ return;
+ }
+ history.replaceState(callback(history.state || {}), "", window.location.href);
+ },
+ pushState(kind, meta, to) {
+ if (this.canPushState()) {
+ if (to !== window.location.href) {
+ if (meta.type == "redirect" && meta.scroll) {
+ let currentState = history.state || {};
+ currentState.scroll = meta.scroll;
+ history.replaceState(currentState, "", window.location.href);
+ }
+ delete meta.scroll;
+ history[kind + "State"](meta, "", to || null);
+ let hashEl = this.getHashTargetEl(window.location.hash);
+ if (hashEl) {
+ hashEl.scrollIntoView();
+ } else if (meta.type === "redirect") {
+ window.scroll(0, 0);
+ }
+ }
+ } else {
+ this.redirect(to);
+ }
+ },
+ setCookie(name, value) {
+ document.cookie = `${name}=${value}`;
+ },
+ getCookie(name) {
+ return document.cookie.replace(new RegExp(`(?:(?:^|.*;s*)${name}s*=s*([^;]*).*$)|^.*$`), "$1");
+ },
+ redirect(toURL, flash) {
+ if (flash) {
+ Browser.setCookie("__phoenix_flash__", flash + "; max-age=60000; path=/");
+ }
+ window.location = toURL;
+ },
+ localKey(namespace, subkey) {
+ return `${namespace}-${subkey}`;
+ },
+ getHashTargetEl(maybeHash) {
+ let hash3 = maybeHash.toString().substring(1);
+ if (hash3 === "") {
+ return;
+ }
+ return document.getElementById(hash3) || document.querySelector(`a[name="${hash3}"]`);
+ }
+ };
+ var browser_default = Browser;
+ var DOM = {
+ byId(id) {
+ return document.getElementById(id) || logError(`no id found for ${id}`);
+ },
+ removeClass(el, className) {
+ el.classList.remove(className);
+ if (el.classList.length === 0) {
+ el.removeAttribute("class");
+ }
+ },
+ all(node, query, callback) {
+ if (!node) {
+ return [];
+ }
+ let array = Array.from(node.querySelectorAll(query));
+ return callback ? array.forEach(callback) : array;
+ },
+ childNodeLength(html) {
+ let template = document.createElement("template");
+ template.innerHTML = html;
+ return template.content.childElementCount;
+ },
+ isUploadInput(el) {
+ return el.type === "file" && el.getAttribute(PHX_UPLOAD_REF) !== null;
+ },
+ findUploadInputs(node) {
+ return this.all(node, `input[type="file"][${PHX_UPLOAD_REF}]`);
+ },
+ findComponentNodeList(node, cid) {
+ return this.filterWithinSameLiveView(this.all(node, `[${PHX_COMPONENT}="${cid}"]`), node);
+ },
+ isPhxDestroyed(node) {
+ return node.id && DOM.private(node, "destroyed") ? true : false;
+ },
+ markPhxChildDestroyed(el) {
+ if (this.isPhxChild(el)) {
+ el.setAttribute(PHX_SESSION, "");
+ }
+ this.putPrivate(el, "destroyed", true);
+ },
+ findPhxChildrenInFragment(html, parentId) {
+ let template = document.createElement("template");
+ template.innerHTML = html;
+ return this.findPhxChildren(template.content, parentId);
+ },
+ isIgnored(el, phxUpdate) {
+ return (el.getAttribute(phxUpdate) || el.getAttribute("data-phx-update")) === "ignore";
+ },
+ isPhxUpdate(el, phxUpdate, updateTypes) {
+ return el.getAttribute && updateTypes.indexOf(el.getAttribute(phxUpdate)) >= 0;
+ },
+ findPhxSticky(el) {
+ return this.all(el, `[${PHX_STICKY}]`);
+ },
+ findPhxChildren(el, parentId) {
+ return this.all(el, `${PHX_VIEW_SELECTOR}[${PHX_PARENT_ID}="${parentId}"]`);
+ },
+ findParentCIDs(node, cids) {
+ let initial = new Set(cids);
+ return cids.reduce((acc, cid) => {
+ let selector = `[${PHX_COMPONENT}="${cid}"] [${PHX_COMPONENT}]`;
+ this.filterWithinSameLiveView(this.all(node, selector), node).map((el) => parseInt(el.getAttribute(PHX_COMPONENT))).forEach((childCID) => acc.delete(childCID));
+ return acc;
+ }, initial);
+ },
+ filterWithinSameLiveView(nodes, parent) {
+ if (parent.querySelector(PHX_VIEW_SELECTOR)) {
+ return nodes.filter((el) => this.withinSameLiveView(el, parent));
+ } else {
+ return nodes;
+ }
+ },
+ withinSameLiveView(node, parent) {
+ while (node = node.parentNode) {
+ if (node.isSameNode(parent)) {
+ return true;
+ }
+ if (node.getAttribute(PHX_SESSION) !== null) {
+ return false;
+ }
+ }
+ },
+ private(el, key) {
+ return el[PHX_PRIVATE] && el[PHX_PRIVATE][key];
+ },
+ deletePrivate(el, key) {
+ el[PHX_PRIVATE] && delete el[PHX_PRIVATE][key];
+ },
+ putPrivate(el, key, value) {
+ if (!el[PHX_PRIVATE]) {
+ el[PHX_PRIVATE] = {};
+ }
+ el[PHX_PRIVATE][key] = value;
+ },
+ updatePrivate(el, key, defaultVal, updateFunc) {
+ let existing = this.private(el, key);
+ if (existing === void 0) {
+ this.putPrivate(el, key, updateFunc(defaultVal));
+ } else {
+ this.putPrivate(el, key, updateFunc(existing));
+ }
+ },
+ copyPrivates(target, source) {
+ if (source[PHX_PRIVATE]) {
+ target[PHX_PRIVATE] = source[PHX_PRIVATE];
+ }
+ },
+ putTitle(str) {
+ let titleEl = document.querySelector("title");
+ let { prefix, suffix } = titleEl.dataset;
+ document.title = `${prefix || ""}${str}${suffix || ""}`;
+ },
+ debounce(el, event, phxDebounce, defaultDebounce, phxThrottle, defaultThrottle, asyncFilter, callback) {
+ let debounce2 = el.getAttribute(phxDebounce);
+ let throttle = el.getAttribute(phxThrottle);
+ if (debounce2 === "") {
+ debounce2 = defaultDebounce;
+ }
+ if (throttle === "") {
+ throttle = defaultThrottle;
+ }
+ let value = debounce2 || throttle;
+ switch (value) {
+ case null:
+ return callback();
+ case "blur":
+ if (this.once(el, "debounce-blur")) {
+ el.addEventListener("blur", () => callback());
+ }
+ return;
+ default:
+ let timeout = parseInt(value);
+ let trigger = () => throttle ? this.deletePrivate(el, THROTTLED) : callback();
+ let currentCycle = this.incCycle(el, DEBOUNCE_TRIGGER, trigger);
+ if (isNaN(timeout)) {
+ return logError(`invalid throttle/debounce value: ${value}`);
+ }
+ if (throttle) {
+ let newKeyDown = false;
+ if (event.type === "keydown") {
+ let prevKey = this.private(el, DEBOUNCE_PREV_KEY);
+ this.putPrivate(el, DEBOUNCE_PREV_KEY, event.key);
+ newKeyDown = prevKey !== event.key;
+ }
+ if (!newKeyDown && this.private(el, THROTTLED)) {
+ return false;
+ } else {
+ callback();
+ this.putPrivate(el, THROTTLED, true);
+ setTimeout(() => {
+ if (asyncFilter()) {
+ this.triggerCycle(el, DEBOUNCE_TRIGGER);
+ }
+ }, timeout);
+ }
+ } else {
+ setTimeout(() => {
+ if (asyncFilter()) {
+ this.triggerCycle(el, DEBOUNCE_TRIGGER, currentCycle);
+ }
+ }, timeout);
+ }
+ let form = el.form;
+ if (form && this.once(form, "bind-debounce")) {
+ form.addEventListener("submit", () => {
+ Array.from(new FormData(form).entries(), ([name]) => {
+ let input = form.querySelector(`[name="${name}"]`);
+ this.incCycle(input, DEBOUNCE_TRIGGER);
+ this.deletePrivate(input, THROTTLED);
+ });
+ });
+ }
+ if (this.once(el, "bind-debounce")) {
+ el.addEventListener("blur", () => this.triggerCycle(el, DEBOUNCE_TRIGGER));
+ }
+ }
+ },
+ triggerCycle(el, key, currentCycle) {
+ let [cycle, trigger] = this.private(el, key);
+ if (!currentCycle) {
+ currentCycle = cycle;
+ }
+ if (currentCycle === cycle) {
+ this.incCycle(el, key);
+ trigger();
+ }
+ },
+ once(el, key) {
+ if (this.private(el, key) === true) {
+ return false;
+ }
+ this.putPrivate(el, key, true);
+ return true;
+ },
+ incCycle(el, key, trigger = function() {
+ }) {
+ let [currentCycle] = this.private(el, key) || [0, trigger];
+ currentCycle++;
+ this.putPrivate(el, key, [currentCycle, trigger]);
+ return currentCycle;
+ },
+ discardError(container, el, phxFeedbackFor) {
+ let field = el.getAttribute && el.getAttribute(phxFeedbackFor);
+ let input = field && container.querySelector(`[id="${field}"], [name="${field}"]`);
+ if (!input) {
+ return;
+ }
+ if (!(this.private(input, PHX_HAS_FOCUSED) || this.private(input.form, PHX_HAS_SUBMITTED))) {
+ el.classList.add(PHX_NO_FEEDBACK_CLASS);
+ }
+ },
+ showError(inputEl, phxFeedbackFor) {
+ if (inputEl.id || inputEl.name) {
+ this.all(inputEl.form, `[${phxFeedbackFor}="${inputEl.id}"], [${phxFeedbackFor}="${inputEl.name}"]`, (el) => {
+ this.removeClass(el, PHX_NO_FEEDBACK_CLASS);
+ });
+ }
+ },
+ isPhxChild(node) {
+ return node.getAttribute && node.getAttribute(PHX_PARENT_ID);
+ },
+ isPhxSticky(node) {
+ return node.getAttribute && node.getAttribute(PHX_STICKY) !== null;
+ },
+ firstPhxChild(el) {
+ return this.isPhxChild(el) ? el : this.all(el, `[${PHX_PARENT_ID}]`)[0];
+ },
+ dispatchEvent(target, name, opts = {}) {
+ let bubbles = opts.bubbles === void 0 ? true : !!opts.bubbles;
+ let eventOpts = { bubbles, cancelable: true, detail: opts.detail || {} };
+ let event = name === "click" ? new MouseEvent("click", eventOpts) : new CustomEvent(name, eventOpts);
+ target.dispatchEvent(event);
+ },
+ cloneNode(node, html) {
+ if (typeof html === "undefined") {
+ return node.cloneNode(true);
+ } else {
+ let cloned = node.cloneNode(false);
+ cloned.innerHTML = html;
+ return cloned;
+ }
+ },
+ mergeAttrs(target, source, opts = {}) {
+ let exclude = opts.exclude || [];
+ let isIgnored = opts.isIgnored;
+ let sourceAttrs = source.attributes;
+ for (let i = sourceAttrs.length - 1; i >= 0; i--) {
+ let name = sourceAttrs[i].name;
+ if (exclude.indexOf(name) < 0) {
+ target.setAttribute(name, source.getAttribute(name));
+ }
+ }
+ let targetAttrs = target.attributes;
+ for (let i = targetAttrs.length - 1; i >= 0; i--) {
+ let name = targetAttrs[i].name;
+ if (isIgnored) {
+ if (name.startsWith("data-") && !source.hasAttribute(name)) {
+ target.removeAttribute(name);
+ }
+ } else {
+ if (!source.hasAttribute(name)) {
+ target.removeAttribute(name);
+ }
+ }
+ }
+ },
+ mergeFocusedInput(target, source) {
+ if (!(target instanceof HTMLSelectElement)) {
+ DOM.mergeAttrs(target, source, { exclude: ["value"] });
+ }
+ if (source.readOnly) {
+ target.setAttribute("readonly", true);
+ } else {
+ target.removeAttribute("readonly");
+ }
+ },
+ hasSelectionRange(el) {
+ return el.setSelectionRange && (el.type === "text" || el.type === "textarea");
+ },
+ restoreFocus(focused, selectionStart, selectionEnd) {
+ if (!DOM.isTextualInput(focused)) {
+ return;
+ }
+ let wasFocused = focused.matches(":focus");
+ if (focused.readOnly) {
+ focused.blur();
+ }
+ if (!wasFocused) {
+ focused.focus();
+ }
+ if (this.hasSelectionRange(focused)) {
+ focused.setSelectionRange(selectionStart, selectionEnd);
+ }
+ },
+ isFormInput(el) {
+ return /^(?:input|select|textarea)$/i.test(el.tagName) && el.type !== "button";
+ },
+ syncAttrsToProps(el) {
+ if (el instanceof HTMLInputElement && CHECKABLE_INPUTS.indexOf(el.type.toLocaleLowerCase()) >= 0) {
+ el.checked = el.getAttribute("checked") !== null;
+ }
+ },
+ isTextualInput(el) {
+ return FOCUSABLE_INPUTS.indexOf(el.type) >= 0;
+ },
+ isNowTriggerFormExternal(el, phxTriggerExternal) {
+ return el.getAttribute && el.getAttribute(phxTriggerExternal) !== null;
+ },
+ syncPendingRef(fromEl, toEl, disableWith) {
+ let ref = fromEl.getAttribute(PHX_REF);
+ if (ref === null) {
+ return true;
+ }
+ let refSrc = fromEl.getAttribute(PHX_REF_SRC);
+ if (DOM.isFormInput(fromEl) || fromEl.getAttribute(disableWith) !== null) {
+ if (DOM.isUploadInput(fromEl)) {
+ DOM.mergeAttrs(fromEl, toEl, { isIgnored: true });
+ }
+ DOM.putPrivate(fromEl, PHX_REF, toEl);
+ return false;
+ } else {
+ PHX_EVENT_CLASSES.forEach((className) => {
+ fromEl.classList.contains(className) && toEl.classList.add(className);
+ });
+ toEl.setAttribute(PHX_REF, ref);
+ toEl.setAttribute(PHX_REF_SRC, refSrc);
+ return true;
+ }
+ },
+ cleanChildNodes(container, phxUpdate) {
+ if (DOM.isPhxUpdate(container, phxUpdate, ["append", "prepend"])) {
+ let toRemove = [];
+ container.childNodes.forEach((childNode) => {
+ if (!childNode.id) {
+ let isEmptyTextNode = childNode.nodeType === Node.TEXT_NODE && childNode.nodeValue.trim() === "";
+ if (!isEmptyTextNode) {
+ logError(`only HTML element tags with an id are allowed inside containers with phx-update.
+
+removing illegal node: "${(childNode.outerHTML || childNode.nodeValue).trim()}"
+
+`);
+ }
+ toRemove.push(childNode);
+ }
+ });
+ toRemove.forEach((childNode) => childNode.remove());
+ }
+ },
+ replaceRootContainer(container, tagName, attrs) {
+ let retainedAttrs = /* @__PURE__ */ new Set(["id", PHX_SESSION, PHX_STATIC, PHX_MAIN, PHX_ROOT_ID]);
+ if (container.tagName.toLowerCase() === tagName.toLowerCase()) {
+ Array.from(container.attributes).filter((attr) => !retainedAttrs.has(attr.name.toLowerCase())).forEach((attr) => container.removeAttribute(attr.name));
+ Object.keys(attrs).filter((name) => !retainedAttrs.has(name.toLowerCase())).forEach((attr) => container.setAttribute(attr, attrs[attr]));
+ return container;
+ } else {
+ let newContainer = document.createElement(tagName);
+ Object.keys(attrs).forEach((attr) => newContainer.setAttribute(attr, attrs[attr]));
+ retainedAttrs.forEach((attr) => newContainer.setAttribute(attr, container.getAttribute(attr)));
+ newContainer.innerHTML = container.innerHTML;
+ container.replaceWith(newContainer);
+ return newContainer;
+ }
+ },
+ getSticky(el, name, defaultVal) {
+ let op = (DOM.private(el, "sticky") || []).find(([existingName]) => name === existingName);
+ if (op) {
+ let [_name, _op, stashedResult] = op;
+ return stashedResult;
+ } else {
+ return typeof defaultVal === "function" ? defaultVal() : defaultVal;
+ }
+ },
+ deleteSticky(el, name) {
+ this.updatePrivate(el, "sticky", [], (ops) => {
+ return ops.filter(([existingName, _]) => existingName !== name);
+ });
+ },
+ putSticky(el, name, op) {
+ let stashedResult = op(el);
+ this.updatePrivate(el, "sticky", [], (ops) => {
+ let existingIndex = ops.findIndex(([existingName]) => name === existingName);
+ if (existingIndex >= 0) {
+ ops[existingIndex] = [name, op, stashedResult];
+ } else {
+ ops.push([name, op, stashedResult]);
+ }
+ return ops;
+ });
+ },
+ applyStickyOperations(el) {
+ let ops = DOM.private(el, "sticky");
+ if (!ops) {
+ return;
+ }
+ ops.forEach(([name, op, _stashed]) => this.putSticky(el, name, op));
+ }
+ };
+ var dom_default = DOM;
+ var UploadEntry = class {
+ static isActive(fileEl, file) {
+ let isNew = file._phxRef === void 0;
+ let activeRefs = fileEl.getAttribute(PHX_ACTIVE_ENTRY_REFS).split(",");
+ let isActive = activeRefs.indexOf(LiveUploader.genFileRef(file)) >= 0;
+ return file.size > 0 && (isNew || isActive);
+ }
+ static isPreflighted(fileEl, file) {
+ let preflightedRefs = fileEl.getAttribute(PHX_PREFLIGHTED_REFS).split(",");
+ let isPreflighted = preflightedRefs.indexOf(LiveUploader.genFileRef(file)) >= 0;
+ return isPreflighted && this.isActive(fileEl, file);
+ }
+ constructor(fileEl, file, view) {
+ this.ref = LiveUploader.genFileRef(file);
+ this.fileEl = fileEl;
+ this.file = file;
+ this.view = view;
+ this.meta = null;
+ this._isCancelled = false;
+ this._isDone = false;
+ this._progress = 0;
+ this._lastProgressSent = -1;
+ this._onDone = function() {
+ };
+ this._onElUpdated = this.onElUpdated.bind(this);
+ this.fileEl.addEventListener(PHX_LIVE_FILE_UPDATED, this._onElUpdated);
+ }
+ metadata() {
+ return this.meta;
+ }
+ progress(progress) {
+ this._progress = Math.floor(progress);
+ if (this._progress > this._lastProgressSent) {
+ if (this._progress >= 100) {
+ this._progress = 100;
+ this._lastProgressSent = 100;
+ this._isDone = true;
+ this.view.pushFileProgress(this.fileEl, this.ref, 100, () => {
+ LiveUploader.untrackFile(this.fileEl, this.file);
+ this._onDone();
+ });
+ } else {
+ this._lastProgressSent = this._progress;
+ this.view.pushFileProgress(this.fileEl, this.ref, this._progress);
+ }
+ }
+ }
+ cancel() {
+ this._isCancelled = true;
+ this._isDone = true;
+ this._onDone();
+ }
+ isDone() {
+ return this._isDone;
+ }
+ error(reason = "failed") {
+ this.view.pushFileProgress(this.fileEl, this.ref, { error: reason });
+ LiveUploader.clearFiles(this.fileEl);
+ }
+ onDone(callback) {
+ this._onDone = () => {
+ this.fileEl.removeEventListener(PHX_LIVE_FILE_UPDATED, this._onElUpdated);
+ callback();
+ };
+ }
+ onElUpdated() {
+ let activeRefs = this.fileEl.getAttribute(PHX_ACTIVE_ENTRY_REFS).split(",");
+ if (activeRefs.indexOf(this.ref) === -1) {
+ this.cancel();
+ }
+ }
+ toPreflightPayload() {
+ return {
+ last_modified: this.file.lastModified,
+ name: this.file.name,
+ size: this.file.size,
+ type: this.file.type,
+ ref: this.ref
+ };
+ }
+ uploader(uploaders) {
+ if (this.meta.uploader) {
+ let callback = uploaders[this.meta.uploader] || logError(`no uploader configured for ${this.meta.uploader}`);
+ return { name: this.meta.uploader, callback };
+ } else {
+ return { name: "channel", callback: channelUploader };
+ }
+ }
+ zipPostFlight(resp) {
+ this.meta = resp.entries[this.ref];
+ if (!this.meta) {
+ logError(`no preflight upload response returned with ref ${this.ref}`, { input: this.fileEl, response: resp });
+ }
+ }
+ };
+ var liveUploaderFileRef = 0;
+ var LiveUploader = class {
+ static genFileRef(file) {
+ let ref = file._phxRef;
+ if (ref !== void 0) {
+ return ref;
+ } else {
+ file._phxRef = (liveUploaderFileRef++).toString();
+ return file._phxRef;
+ }
+ }
+ static getEntryDataURL(inputEl, ref, callback) {
+ let file = this.activeFiles(inputEl).find((file2) => this.genFileRef(file2) === ref);
+ callback(URL.createObjectURL(file));
+ }
+ static hasUploadsInProgress(formEl) {
+ let active = 0;
+ dom_default.findUploadInputs(formEl).forEach((input) => {
+ if (input.getAttribute(PHX_PREFLIGHTED_REFS) !== input.getAttribute(PHX_DONE_REFS)) {
+ active++;
+ }
+ });
+ return active > 0;
+ }
+ static serializeUploads(inputEl) {
+ let files = this.activeFiles(inputEl);
+ let fileData = {};
+ files.forEach((file) => {
+ let entry = { path: inputEl.name };
+ let uploadRef = inputEl.getAttribute(PHX_UPLOAD_REF);
+ fileData[uploadRef] = fileData[uploadRef] || [];
+ entry.ref = this.genFileRef(file);
+ entry.name = file.name || entry.ref;
+ entry.type = file.type;
+ entry.size = file.size;
+ fileData[uploadRef].push(entry);
+ });
+ return fileData;
+ }
+ static clearFiles(inputEl) {
+ inputEl.value = null;
+ inputEl.removeAttribute(PHX_UPLOAD_REF);
+ dom_default.putPrivate(inputEl, "files", []);
+ }
+ static untrackFile(inputEl, file) {
+ dom_default.putPrivate(inputEl, "files", dom_default.private(inputEl, "files").filter((f) => !Object.is(f, file)));
+ }
+ static trackFiles(inputEl, files) {
+ if (inputEl.getAttribute("multiple") !== null) {
+ let newFiles = files.filter((file) => !this.activeFiles(inputEl).find((f) => Object.is(f, file)));
+ dom_default.putPrivate(inputEl, "files", this.activeFiles(inputEl).concat(newFiles));
+ inputEl.value = null;
+ } else {
+ dom_default.putPrivate(inputEl, "files", files);
+ }
+ }
+ static activeFileInputs(formEl) {
+ let fileInputs = dom_default.findUploadInputs(formEl);
+ return Array.from(fileInputs).filter((el) => el.files && this.activeFiles(el).length > 0);
+ }
+ static activeFiles(input) {
+ return (dom_default.private(input, "files") || []).filter((f) => UploadEntry.isActive(input, f));
+ }
+ static inputsAwaitingPreflight(formEl) {
+ let fileInputs = dom_default.findUploadInputs(formEl);
+ return Array.from(fileInputs).filter((input) => this.filesAwaitingPreflight(input).length > 0);
+ }
+ static filesAwaitingPreflight(input) {
+ return this.activeFiles(input).filter((f) => !UploadEntry.isPreflighted(input, f));
+ }
+ constructor(inputEl, view, onComplete) {
+ this.view = view;
+ this.onComplete = onComplete;
+ this._entries = Array.from(LiveUploader.filesAwaitingPreflight(inputEl) || []).map((file) => new UploadEntry(inputEl, file, view));
+ this.numEntriesInProgress = this._entries.length;
+ }
+ entries() {
+ return this._entries;
+ }
+ initAdapterUpload(resp, onError, liveSocket2) {
+ this._entries = this._entries.map((entry) => {
+ entry.zipPostFlight(resp);
+ entry.onDone(() => {
+ this.numEntriesInProgress--;
+ if (this.numEntriesInProgress === 0) {
+ this.onComplete();
+ }
+ });
+ return entry;
+ });
+ let groupedEntries = this._entries.reduce((acc, entry) => {
+ let { name, callback } = entry.uploader(liveSocket2.uploaders);
+ acc[name] = acc[name] || { callback, entries: [] };
+ acc[name].entries.push(entry);
+ return acc;
+ }, {});
+ for (let name in groupedEntries) {
+ let { callback, entries } = groupedEntries[name];
+ callback(entries, onError, resp, liveSocket2);
+ }
+ }
+ };
+ var Hooks = {
+ LiveFileUpload: {
+ activeRefs() {
+ return this.el.getAttribute(PHX_ACTIVE_ENTRY_REFS);
+ },
+ preflightedRefs() {
+ return this.el.getAttribute(PHX_PREFLIGHTED_REFS);
+ },
+ mounted() {
+ this.preflightedWas = this.preflightedRefs();
+ },
+ updated() {
+ let newPreflights = this.preflightedRefs();
+ if (this.preflightedWas !== newPreflights) {
+ this.preflightedWas = newPreflights;
+ if (newPreflights === "") {
+ this.__view.cancelSubmit(this.el.form);
+ }
+ }
+ if (this.activeRefs() === "") {
+ this.el.value = null;
+ }
+ this.el.dispatchEvent(new CustomEvent(PHX_LIVE_FILE_UPDATED));
+ }
+ },
+ LiveImgPreview: {
+ mounted() {
+ this.ref = this.el.getAttribute("data-phx-entry-ref");
+ this.inputEl = document.getElementById(this.el.getAttribute(PHX_UPLOAD_REF));
+ LiveUploader.getEntryDataURL(this.inputEl, this.ref, (url) => {
+ this.url = url;
+ this.el.src = url;
+ });
+ },
+ destroyed() {
+ URL.revokeObjectURL(this.url);
+ }
+ }
+ };
+ var hooks_default = Hooks;
+ var DOMPostMorphRestorer = class {
+ constructor(containerBefore, containerAfter, updateType) {
+ let idsBefore = /* @__PURE__ */ new Set();
+ let idsAfter = new Set([...containerAfter.children].map((child) => child.id));
+ let elementsToModify = [];
+ Array.from(containerBefore.children).forEach((child) => {
+ if (child.id) {
+ idsBefore.add(child.id);
+ if (idsAfter.has(child.id)) {
+ let previousElementId = child.previousElementSibling && child.previousElementSibling.id;
+ elementsToModify.push({ elementId: child.id, previousElementId });
+ }
+ }
+ });
+ this.containerId = containerAfter.id;
+ this.updateType = updateType;
+ this.elementsToModify = elementsToModify;
+ this.elementIdsToAdd = [...idsAfter].filter((id) => !idsBefore.has(id));
+ }
+ perform() {
+ let container = dom_default.byId(this.containerId);
+ this.elementsToModify.forEach((elementToModify) => {
+ if (elementToModify.previousElementId) {
+ maybe(document.getElementById(elementToModify.previousElementId), (previousElem) => {
+ maybe(document.getElementById(elementToModify.elementId), (elem) => {
+ let isInRightPlace = elem.previousElementSibling && elem.previousElementSibling.id == previousElem.id;
+ if (!isInRightPlace) {
+ previousElem.insertAdjacentElement("afterend", elem);
+ }
+ });
+ });
+ } else {
+ maybe(document.getElementById(elementToModify.elementId), (elem) => {
+ let isInRightPlace = elem.previousElementSibling == null;
+ if (!isInRightPlace) {
+ container.insertAdjacentElement("afterbegin", elem);
+ }
+ });
+ }
+ });
+ if (this.updateType == "prepend") {
+ this.elementIdsToAdd.reverse().forEach((elemId) => {
+ maybe(document.getElementById(elemId), (elem) => container.insertAdjacentElement("afterbegin", elem));
+ });
+ }
+ }
+ };
+ var DOCUMENT_FRAGMENT_NODE = 11;
+ function morphAttrs(fromNode, toNode) {
+ var toNodeAttrs = toNode.attributes;
+ var attr;
+ var attrName;
+ var attrNamespaceURI;
+ var attrValue;
+ var fromValue;
+ if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) {
+ return;
+ }
+ for (var i = toNodeAttrs.length - 1; i >= 0; i--) {
+ attr = toNodeAttrs[i];
+ attrName = attr.name;
+ attrNamespaceURI = attr.namespaceURI;
+ attrValue = attr.value;
+ if (attrNamespaceURI) {
+ attrName = attr.localName || attrName;
+ fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);
+ if (fromValue !== attrValue) {
+ if (attr.prefix === "xmlns") {
+ attrName = attr.name;
+ }
+ fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);
+ }
+ } else {
+ fromValue = fromNode.getAttribute(attrName);
+ if (fromValue !== attrValue) {
+ fromNode.setAttribute(attrName, attrValue);
+ }
+ }
+ }
+ var fromNodeAttrs = fromNode.attributes;
+ for (var d = fromNodeAttrs.length - 1; d >= 0; d--) {
+ attr = fromNodeAttrs[d];
+ attrName = attr.name;
+ attrNamespaceURI = attr.namespaceURI;
+ if (attrNamespaceURI) {
+ attrName = attr.localName || attrName;
+ if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) {
+ fromNode.removeAttributeNS(attrNamespaceURI, attrName);
+ }
+ } else {
+ if (!toNode.hasAttribute(attrName)) {
+ fromNode.removeAttribute(attrName);
+ }
+ }
+ }
+ }
+ var range;
+ var NS_XHTML = "http://www.w3.org/1999/xhtml";
+ var doc = typeof document === "undefined" ? void 0 : document;
+ var HAS_TEMPLATE_SUPPORT = !!doc && "content" in doc.createElement("template");
+ var HAS_RANGE_SUPPORT = !!doc && doc.createRange && "createContextualFragment" in doc.createRange();
+ function createFragmentFromTemplate(str) {
+ var template = doc.createElement("template");
+ template.innerHTML = str;
+ return template.content.childNodes[0];
+ }
+ function createFragmentFromRange(str) {
+ if (!range) {
+ range = doc.createRange();
+ range.selectNode(doc.body);
+ }
+ var fragment = range.createContextualFragment(str);
+ return fragment.childNodes[0];
+ }
+ function createFragmentFromWrap(str) {
+ var fragment = doc.createElement("body");
+ fragment.innerHTML = str;
+ return fragment.childNodes[0];
+ }
+ function toElement(str) {
+ str = str.trim();
+ if (HAS_TEMPLATE_SUPPORT) {
+ return createFragmentFromTemplate(str);
+ } else if (HAS_RANGE_SUPPORT) {
+ return createFragmentFromRange(str);
+ }
+ return createFragmentFromWrap(str);
+ }
+ function compareNodeNames(fromEl, toEl) {
+ var fromNodeName = fromEl.nodeName;
+ var toNodeName = toEl.nodeName;
+ var fromCodeStart, toCodeStart;
+ if (fromNodeName === toNodeName) {
+ return true;
+ }
+ fromCodeStart = fromNodeName.charCodeAt(0);
+ toCodeStart = toNodeName.charCodeAt(0);
+ if (fromCodeStart <= 90 && toCodeStart >= 97) {
+ return fromNodeName === toNodeName.toUpperCase();
+ } else if (toCodeStart <= 90 && fromCodeStart >= 97) {
+ return toNodeName === fromNodeName.toUpperCase();
+ } else {
+ return false;
+ }
+ }
+ function createElementNS(name, namespaceURI) {
+ return !namespaceURI || namespaceURI === NS_XHTML ? doc.createElement(name) : doc.createElementNS(namespaceURI, name);
+ }
+ function moveChildren(fromEl, toEl) {
+ var curChild = fromEl.firstChild;
+ while (curChild) {
+ var nextChild = curChild.nextSibling;
+ toEl.appendChild(curChild);
+ curChild = nextChild;
+ }
+ return toEl;
+ }
+ function syncBooleanAttrProp(fromEl, toEl, name) {
+ if (fromEl[name] !== toEl[name]) {
+ fromEl[name] = toEl[name];
+ if (fromEl[name]) {
+ fromEl.setAttribute(name, "");
+ } else {
+ fromEl.removeAttribute(name);
+ }
+ }
+ }
+ var specialElHandlers = {
+ OPTION: function(fromEl, toEl) {
+ var parentNode = fromEl.parentNode;
+ if (parentNode) {
+ var parentName = parentNode.nodeName.toUpperCase();
+ if (parentName === "OPTGROUP") {
+ parentNode = parentNode.parentNode;
+ parentName = parentNode && parentNode.nodeName.toUpperCase();
+ }
+ if (parentName === "SELECT" && !parentNode.hasAttribute("multiple")) {
+ if (fromEl.hasAttribute("selected") && !toEl.selected) {
+ fromEl.setAttribute("selected", "selected");
+ fromEl.removeAttribute("selected");
+ }
+ parentNode.selectedIndex = -1;
+ }
+ }
+ syncBooleanAttrProp(fromEl, toEl, "selected");
+ },
+ INPUT: function(fromEl, toEl) {
+ syncBooleanAttrProp(fromEl, toEl, "checked");
+ syncBooleanAttrProp(fromEl, toEl, "disabled");
+ if (fromEl.value !== toEl.value) {
+ fromEl.value = toEl.value;
+ }
+ if (!toEl.hasAttribute("value")) {
+ fromEl.removeAttribute("value");
+ }
+ },
+ TEXTAREA: function(fromEl, toEl) {
+ var newValue = toEl.value;
+ if (fromEl.value !== newValue) {
+ fromEl.value = newValue;
+ }
+ var firstChild = fromEl.firstChild;
+ if (firstChild) {
+ var oldValue = firstChild.nodeValue;
+ if (oldValue == newValue || !newValue && oldValue == fromEl.placeholder) {
+ return;
+ }
+ firstChild.nodeValue = newValue;
+ }
+ },
+ SELECT: function(fromEl, toEl) {
+ if (!toEl.hasAttribute("multiple")) {
+ var selectedIndex = -1;
+ var i = 0;
+ var curChild = fromEl.firstChild;
+ var optgroup;
+ var nodeName;
+ while (curChild) {
+ nodeName = curChild.nodeName && curChild.nodeName.toUpperCase();
+ if (nodeName === "OPTGROUP") {
+ optgroup = curChild;
+ curChild = optgroup.firstChild;
+ } else {
+ if (nodeName === "OPTION") {
+ if (curChild.hasAttribute("selected")) {
+ selectedIndex = i;
+ break;
+ }
+ i++;
+ }
+ curChild = curChild.nextSibling;
+ if (!curChild && optgroup) {
+ curChild = optgroup.nextSibling;
+ optgroup = null;
+ }
+ }
+ }
+ fromEl.selectedIndex = selectedIndex;
+ }
+ }
+ };
+ var ELEMENT_NODE = 1;
+ var DOCUMENT_FRAGMENT_NODE$1 = 11;
+ var TEXT_NODE = 3;
+ var COMMENT_NODE = 8;
+ function noop2() {
+ }
+ function defaultGetNodeKey(node) {
+ if (node) {
+ return node.getAttribute && node.getAttribute("id") || node.id;
+ }
+ }
+ function morphdomFactory(morphAttrs2) {
+ return function morphdom2(fromNode, toNode, options) {
+ if (!options) {
+ options = {};
+ }
+ if (typeof toNode === "string") {
+ if (fromNode.nodeName === "#document" || fromNode.nodeName === "HTML" || fromNode.nodeName === "BODY") {
+ var toNodeHtml = toNode;
+ toNode = doc.createElement("html");
+ toNode.innerHTML = toNodeHtml;
+ } else {
+ toNode = toElement(toNode);
+ }
+ }
+ var getNodeKey = options.getNodeKey || defaultGetNodeKey;
+ var onBeforeNodeAdded = options.onBeforeNodeAdded || noop2;
+ var onNodeAdded = options.onNodeAdded || noop2;
+ var onBeforeElUpdated = options.onBeforeElUpdated || noop2;
+ var onElUpdated = options.onElUpdated || noop2;
+ var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop2;
+ var onNodeDiscarded = options.onNodeDiscarded || noop2;
+ var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop2;
+ var childrenOnly = options.childrenOnly === true;
+ var fromNodesLookup = /* @__PURE__ */ Object.create(null);
+ var keyedRemovalList = [];
+ function addKeyedRemoval(key) {
+ keyedRemovalList.push(key);
+ }
+ function walkDiscardedChildNodes(node, skipKeyedNodes) {
+ if (node.nodeType === ELEMENT_NODE) {
+ var curChild = node.firstChild;
+ while (curChild) {
+ var key = void 0;
+ if (skipKeyedNodes && (key = getNodeKey(curChild))) {
+ addKeyedRemoval(key);
+ } else {
+ onNodeDiscarded(curChild);
+ if (curChild.firstChild) {
+ walkDiscardedChildNodes(curChild, skipKeyedNodes);
+ }
+ }
+ curChild = curChild.nextSibling;
+ }
+ }
+ }
+ function removeNode(node, parentNode, skipKeyedNodes) {
+ if (onBeforeNodeDiscarded(node) === false) {
+ return;
+ }
+ if (parentNode) {
+ parentNode.removeChild(node);
+ }
+ onNodeDiscarded(node);
+ walkDiscardedChildNodes(node, skipKeyedNodes);
+ }
+ function indexTree(node) {
+ if (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE$1) {
+ var curChild = node.firstChild;
+ while (curChild) {
+ var key = getNodeKey(curChild);
+ if (key) {
+ fromNodesLookup[key] = curChild;
+ }
+ indexTree(curChild);
+ curChild = curChild.nextSibling;
+ }
+ }
+ }
+ indexTree(fromNode);
+ function handleNodeAdded(el) {
+ onNodeAdded(el);
+ var curChild = el.firstChild;
+ while (curChild) {
+ var nextSibling = curChild.nextSibling;
+ var key = getNodeKey(curChild);
+ if (key) {
+ var unmatchedFromEl = fromNodesLookup[key];
+ if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {
+ curChild.parentNode.replaceChild(unmatchedFromEl, curChild);
+ morphEl(unmatchedFromEl, curChild);
+ } else {
+ handleNodeAdded(curChild);
+ }
+ } else {
+ handleNodeAdded(curChild);
+ }
+ curChild = nextSibling;
+ }
+ }
+ function cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey) {
+ while (curFromNodeChild) {
+ var fromNextSibling = curFromNodeChild.nextSibling;
+ if (curFromNodeKey = getNodeKey(curFromNodeChild)) {
+ addKeyedRemoval(curFromNodeKey);
+ } else {
+ removeNode(curFromNodeChild, fromEl, true);
+ }
+ curFromNodeChild = fromNextSibling;
+ }
+ }
+ function morphEl(fromEl, toEl, childrenOnly2) {
+ var toElKey = getNodeKey(toEl);
+ if (toElKey) {
+ delete fromNodesLookup[toElKey];
+ }
+ if (!childrenOnly2) {
+ if (onBeforeElUpdated(fromEl, toEl) === false) {
+ return;
+ }
+ morphAttrs2(fromEl, toEl);
+ onElUpdated(fromEl);
+ if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {
+ return;
+ }
+ }
+ if (fromEl.nodeName !== "TEXTAREA") {
+ morphChildren(fromEl, toEl);
+ } else {
+ specialElHandlers.TEXTAREA(fromEl, toEl);
+ }
+ }
+ function morphChildren(fromEl, toEl) {
+ var curToNodeChild = toEl.firstChild;
+ var curFromNodeChild = fromEl.firstChild;
+ var curToNodeKey;
+ var curFromNodeKey;
+ var fromNextSibling;
+ var toNextSibling;
+ var matchingFromEl;
+ outer:
+ while (curToNodeChild) {
+ toNextSibling = curToNodeChild.nextSibling;
+ curToNodeKey = getNodeKey(curToNodeChild);
+ while (curFromNodeChild) {
+ fromNextSibling = curFromNodeChild.nextSibling;
+ if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {
+ curToNodeChild = toNextSibling;
+ curFromNodeChild = fromNextSibling;
+ continue outer;
+ }
+ curFromNodeKey = getNodeKey(curFromNodeChild);
+ var curFromNodeType = curFromNodeChild.nodeType;
+ var isCompatible = void 0;
+ if (curFromNodeType === curToNodeChild.nodeType) {
+ if (curFromNodeType === ELEMENT_NODE) {
+ if (curToNodeKey) {
+ if (curToNodeKey !== curFromNodeKey) {
+ if (matchingFromEl = fromNodesLookup[curToNodeKey]) {
+ if (fromNextSibling === matchingFromEl) {
+ isCompatible = false;
+ } else {
+ fromEl.insertBefore(matchingFromEl, curFromNodeChild);
+ if (curFromNodeKey) {
+ addKeyedRemoval(curFromNodeKey);
+ } else {
+ removeNode(curFromNodeChild, fromEl, true);
+ }
+ curFromNodeChild = matchingFromEl;
+ }
+ } else {
+ isCompatible = false;
+ }
+ }
+ } else if (curFromNodeKey) {
+ isCompatible = false;
+ }
+ isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);
+ if (isCompatible) {
+ morphEl(curFromNodeChild, curToNodeChild);
+ }
+ } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {
+ isCompatible = true;
+ if (curFromNodeChild.nodeValue !== curToNodeChild.nodeValue) {
+ curFromNodeChild.nodeValue = curToNodeChild.nodeValue;
+ }
+ }
+ }
+ if (isCompatible) {
+ curToNodeChild = toNextSibling;
+ curFromNodeChild = fromNextSibling;
+ continue outer;
+ }
+ if (curFromNodeKey) {
+ addKeyedRemoval(curFromNodeKey);
+ } else {
+ removeNode(curFromNodeChild, fromEl, true);
+ }
+ curFromNodeChild = fromNextSibling;
+ }
+ if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {
+ fromEl.appendChild(matchingFromEl);
+ morphEl(matchingFromEl, curToNodeChild);
+ } else {
+ var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);
+ if (onBeforeNodeAddedResult !== false) {
+ if (onBeforeNodeAddedResult) {
+ curToNodeChild = onBeforeNodeAddedResult;
+ }
+ if (curToNodeChild.actualize) {
+ curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);
+ }
+ fromEl.appendChild(curToNodeChild);
+ handleNodeAdded(curToNodeChild);
+ }
+ }
+ curToNodeChild = toNextSibling;
+ curFromNodeChild = fromNextSibling;
+ }
+ cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey);
+ var specialElHandler = specialElHandlers[fromEl.nodeName];
+ if (specialElHandler) {
+ specialElHandler(fromEl, toEl);
+ }
+ }
+ var morphedNode = fromNode;
+ var morphedNodeType = morphedNode.nodeType;
+ var toNodeType = toNode.nodeType;
+ if (!childrenOnly) {
+ if (morphedNodeType === ELEMENT_NODE) {
+ if (toNodeType === ELEMENT_NODE) {
+ if (!compareNodeNames(fromNode, toNode)) {
+ onNodeDiscarded(fromNode);
+ morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));
+ }
+ } else {
+ morphedNode = toNode;
+ }
+ } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) {
+ if (toNodeType === morphedNodeType) {
+ if (morphedNode.nodeValue !== toNode.nodeValue) {
+ morphedNode.nodeValue = toNode.nodeValue;
+ }
+ return morphedNode;
+ } else {
+ morphedNode = toNode;
+ }
+ }
+ }
+ if (morphedNode === toNode) {
+ onNodeDiscarded(fromNode);
+ } else {
+ if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {
+ return;
+ }
+ morphEl(morphedNode, toNode, childrenOnly);
+ if (keyedRemovalList) {
+ for (var i = 0, len = keyedRemovalList.length; i < len; i++) {
+ var elToRemove = fromNodesLookup[keyedRemovalList[i]];
+ if (elToRemove) {
+ removeNode(elToRemove, elToRemove.parentNode, false);
+ }
+ }
+ }
+ }
+ if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {
+ if (morphedNode.actualize) {
+ morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);
+ }
+ fromNode.parentNode.replaceChild(morphedNode, fromNode);
+ }
+ return morphedNode;
+ };
+ }
+ var morphdom = morphdomFactory(morphAttrs);
+ var morphdom_esm_default = morphdom;
+ var DOMPatch = class {
+ static patchEl(fromEl, toEl, activeElement) {
+ morphdom_esm_default(fromEl, toEl, {
+ childrenOnly: false,
+ onBeforeElUpdated: (fromEl2, toEl2) => {
+ if (activeElement && activeElement.isSameNode(fromEl2) && dom_default.isFormInput(fromEl2)) {
+ dom_default.mergeFocusedInput(fromEl2, toEl2);
+ return false;
+ }
+ }
+ });
+ }
+ constructor(view, container, id, html, targetCID) {
+ this.view = view;
+ this.liveSocket = view.liveSocket;
+ this.container = container;
+ this.id = id;
+ this.rootID = view.root.id;
+ this.html = html;
+ this.targetCID = targetCID;
+ this.cidPatch = isCid(this.targetCID);
+ this.callbacks = {
+ beforeadded: [],
+ beforeupdated: [],
+ beforephxChildAdded: [],
+ afteradded: [],
+ afterupdated: [],
+ afterdiscarded: [],
+ afterphxChildAdded: [],
+ aftertransitionsDiscarded: []
+ };
+ }
+ before(kind, callback) {
+ this.callbacks[`before${kind}`].push(callback);
+ }
+ after(kind, callback) {
+ this.callbacks[`after${kind}`].push(callback);
+ }
+ trackBefore(kind, ...args) {
+ this.callbacks[`before${kind}`].forEach((callback) => callback(...args));
+ }
+ trackAfter(kind, ...args) {
+ this.callbacks[`after${kind}`].forEach((callback) => callback(...args));
+ }
+ markPrunableContentForRemoval() {
+ dom_default.all(this.container, "[phx-update=append] > *, [phx-update=prepend] > *", (el) => {
+ el.setAttribute(PHX_PRUNE, "");
+ });
+ }
+ perform() {
+ let { view, liveSocket: liveSocket2, container, html } = this;
+ let targetContainer = this.isCIDPatch() ? this.targetCIDContainer(html) : container;
+ if (this.isCIDPatch() && !targetContainer) {
+ return;
+ }
+ let focused = liveSocket2.getActiveElement();
+ let { selectionStart, selectionEnd } = focused && dom_default.hasSelectionRange(focused) ? focused : {};
+ let phxUpdate = liveSocket2.binding(PHX_UPDATE);
+ let phxFeedbackFor = liveSocket2.binding(PHX_FEEDBACK_FOR);
+ let disableWith = liveSocket2.binding(PHX_DISABLE_WITH);
+ let phxTriggerExternal = liveSocket2.binding(PHX_TRIGGER_ACTION);
+ let phxRemove = liveSocket2.binding("remove");
+ let added = [];
+ let updates = [];
+ let appendPrependUpdates = [];
+ let pendingRemoves = [];
+ let externalFormTriggered = null;
+ let diffHTML = liveSocket2.time("premorph container prep", () => {
+ return this.buildDiffHTML(container, html, phxUpdate, targetContainer);
+ });
+ this.trackBefore("added", container);
+ this.trackBefore("updated", container, container);
+ liveSocket2.time("morphdom", () => {
+ morphdom_esm_default(targetContainer, diffHTML, {
+ childrenOnly: targetContainer.getAttribute(PHX_COMPONENT) === null,
+ getNodeKey: (node) => {
+ return dom_default.isPhxDestroyed(node) ? null : node.id;
+ },
+ onBeforeNodeAdded: (el) => {
+ this.trackBefore("added", el);
+ return el;
+ },
+ onNodeAdded: (el) => {
+ if (el instanceof HTMLImageElement && el.srcset) {
+ el.srcset = el.srcset;
+ } else if (el instanceof HTMLVideoElement && el.autoplay) {
+ el.play();
+ }
+ if (dom_default.isNowTriggerFormExternal(el, phxTriggerExternal)) {
+ externalFormTriggered = el;
+ }
+ dom_default.discardError(targetContainer, el, phxFeedbackFor);
+ if (dom_default.isPhxChild(el) && view.ownsElement(el) || dom_default.isPhxSticky(el) && view.ownsElement(el.parentNode)) {
+ this.trackAfter("phxChildAdded", el);
+ }
+ added.push(el);
+ },
+ onNodeDiscarded: (el) => {
+ if (dom_default.isPhxChild(el) || dom_default.isPhxSticky(el)) {
+ liveSocket2.destroyViewByEl(el);
+ }
+ this.trackAfter("discarded", el);
+ },
+ onBeforeNodeDiscarded: (el) => {
+ if (el.getAttribute && el.getAttribute(PHX_PRUNE) !== null) {
+ return true;
+ }
+ if (el.parentNode !== null && dom_default.isPhxUpdate(el.parentNode, phxUpdate, ["append", "prepend"]) && el.id) {
+ return false;
+ }
+ if (el.getAttribute && el.getAttribute(phxRemove)) {
+ pendingRemoves.push(el);
+ return false;
+ }
+ if (this.skipCIDSibling(el)) {
+ return false;
+ }
+ return true;
+ },
+ onElUpdated: (el) => {
+ if (dom_default.isNowTriggerFormExternal(el, phxTriggerExternal)) {
+ externalFormTriggered = el;
+ }
+ updates.push(el);
+ },
+ onBeforeElUpdated: (fromEl, toEl) => {
+ dom_default.cleanChildNodes(toEl, phxUpdate);
+ if (this.skipCIDSibling(toEl)) {
+ return false;
+ }
+ if (dom_default.isPhxSticky(fromEl)) {
+ return false;
+ }
+ if (dom_default.isIgnored(fromEl, phxUpdate)) {
+ this.trackBefore("updated", fromEl, toEl);
+ dom_default.mergeAttrs(fromEl, toEl, { isIgnored: true });
+ updates.push(fromEl);
+ dom_default.applyStickyOperations(fromEl);
+ return false;
+ }
+ if (fromEl.type === "number" && (fromEl.validity && fromEl.validity.badInput)) {
+ return false;
+ }
+ if (!dom_default.syncPendingRef(fromEl, toEl, disableWith)) {
+ if (dom_default.isUploadInput(fromEl)) {
+ this.trackBefore("updated", fromEl, toEl);
+ updates.push(fromEl);
+ }
+ dom_default.applyStickyOperations(fromEl);
+ return false;
+ }
+ if (dom_default.isPhxChild(toEl)) {
+ let prevSession = fromEl.getAttribute(PHX_SESSION);
+ dom_default.mergeAttrs(fromEl, toEl, { exclude: [PHX_STATIC] });
+ if (prevSession !== "") {
+ fromEl.setAttribute(PHX_SESSION, prevSession);
+ }
+ fromEl.setAttribute(PHX_ROOT_ID, this.rootID);
+ dom_default.applyStickyOperations(fromEl);
+ return false;
+ }
+ dom_default.copyPrivates(toEl, fromEl);
+ dom_default.discardError(targetContainer, toEl, phxFeedbackFor);
+ let isFocusedFormEl = focused && fromEl.isSameNode(focused) && dom_default.isFormInput(fromEl);
+ if (isFocusedFormEl) {
+ this.trackBefore("updated", fromEl, toEl);
+ dom_default.mergeFocusedInput(fromEl, toEl);
+ dom_default.syncAttrsToProps(fromEl);
+ updates.push(fromEl);
+ dom_default.applyStickyOperations(fromEl);
+ return false;
+ } else {
+ if (dom_default.isPhxUpdate(toEl, phxUpdate, ["append", "prepend"])) {
+ appendPrependUpdates.push(new DOMPostMorphRestorer(fromEl, toEl, toEl.getAttribute(phxUpdate)));
+ }
+ dom_default.syncAttrsToProps(toEl);
+ dom_default.applyStickyOperations(toEl);
+ this.trackBefore("updated", fromEl, toEl);
+ return true;
+ }
+ }
+ });
+ });
+ if (liveSocket2.isDebugEnabled()) {
+ detectDuplicateIds();
+ }
+ if (appendPrependUpdates.length > 0) {
+ liveSocket2.time("post-morph append/prepend restoration", () => {
+ appendPrependUpdates.forEach((update) => update.perform());
+ });
+ }
+ liveSocket2.silenceEvents(() => dom_default.restoreFocus(focused, selectionStart, selectionEnd));
+ dom_default.dispatchEvent(document, "phx:update");
+ added.forEach((el) => this.trackAfter("added", el));
+ updates.forEach((el) => this.trackAfter("updated", el));
+ if (pendingRemoves.length > 0) {
+ liveSocket2.transitionRemoves(pendingRemoves);
+ liveSocket2.requestDOMUpdate(() => {
+ pendingRemoves.forEach((el) => {
+ let child = dom_default.firstPhxChild(el);
+ if (child) {
+ liveSocket2.destroyViewByEl(child);
+ }
+ el.remove();
+ });
+ this.trackAfter("transitionsDiscarded", pendingRemoves);
+ });
+ }
+ if (externalFormTriggered) {
+ liveSocket2.disconnect();
+ externalFormTriggered.submit();
+ }
+ return true;
+ }
+ isCIDPatch() {
+ return this.cidPatch;
+ }
+ skipCIDSibling(el) {
+ return el.nodeType === Node.ELEMENT_NODE && el.getAttribute(PHX_SKIP) !== null;
+ }
+ targetCIDContainer(html) {
+ if (!this.isCIDPatch()) {
+ return;
+ }
+ let [first, ...rest] = dom_default.findComponentNodeList(this.container, this.targetCID);
+ if (rest.length === 0 && dom_default.childNodeLength(html) === 1) {
+ return first;
+ } else {
+ return first && first.parentNode;
+ }
+ }
+ buildDiffHTML(container, html, phxUpdate, targetContainer) {
+ let isCIDPatch = this.isCIDPatch();
+ let isCIDWithSingleRoot = isCIDPatch && targetContainer.getAttribute(PHX_COMPONENT) === this.targetCID.toString();
+ if (!isCIDPatch || isCIDWithSingleRoot) {
+ return html;
+ } else {
+ let diffContainer = null;
+ let template = document.createElement("template");
+ diffContainer = dom_default.cloneNode(targetContainer);
+ let [firstComponent, ...rest] = dom_default.findComponentNodeList(diffContainer, this.targetCID);
+ template.innerHTML = html;
+ rest.forEach((el) => el.remove());
+ Array.from(diffContainer.childNodes).forEach((child) => {
+ if (child.id && child.nodeType === Node.ELEMENT_NODE && child.getAttribute(PHX_COMPONENT) !== this.targetCID.toString()) {
+ child.setAttribute(PHX_SKIP, "");
+ child.innerHTML = "";
+ }
+ });
+ Array.from(template.content.childNodes).forEach((el) => diffContainer.insertBefore(el, firstComponent));
+ firstComponent.remove();
+ return diffContainer.outerHTML;
+ }
+ }
+ };
+ var Rendered = class {
+ static extract(diff) {
+ let { [REPLY]: reply, [EVENTS]: events, [TITLE]: title } = diff;
+ delete diff[REPLY];
+ delete diff[EVENTS];
+ delete diff[TITLE];
+ return { diff, title, reply: reply || null, events: events || [] };
+ }
+ constructor(viewId, rendered) {
+ this.viewId = viewId;
+ this.rendered = {};
+ this.mergeDiff(rendered);
+ }
+ parentViewId() {
+ return this.viewId;
+ }
+ toString(onlyCids) {
+ return this.recursiveToString(this.rendered, this.rendered[COMPONENTS], onlyCids);
+ }
+ recursiveToString(rendered, components = rendered[COMPONENTS], onlyCids) {
+ onlyCids = onlyCids ? new Set(onlyCids) : null;
+ let output = { buffer: "", components, onlyCids };
+ this.toOutputBuffer(rendered, null, output);
+ return output.buffer;
+ }
+ componentCIDs(diff) {
+ return Object.keys(diff[COMPONENTS] || {}).map((i) => parseInt(i));
+ }
+ isComponentOnlyDiff(diff) {
+ if (!diff[COMPONENTS]) {
+ return false;
+ }
+ return Object.keys(diff).length === 1;
+ }
+ getComponent(diff, cid) {
+ return diff[COMPONENTS][cid];
+ }
+ mergeDiff(diff) {
+ let newc = diff[COMPONENTS];
+ let cache = {};
+ delete diff[COMPONENTS];
+ this.rendered = this.mutableMerge(this.rendered, diff);
+ this.rendered[COMPONENTS] = this.rendered[COMPONENTS] || {};
+ if (newc) {
+ let oldc = this.rendered[COMPONENTS];
+ for (let cid in newc) {
+ newc[cid] = this.cachedFindComponent(cid, newc[cid], oldc, newc, cache);
+ }
+ for (let cid in newc) {
+ oldc[cid] = newc[cid];
+ }
+ diff[COMPONENTS] = newc;
+ }
+ }
+ cachedFindComponent(cid, cdiff, oldc, newc, cache) {
+ if (cache[cid]) {
+ return cache[cid];
+ } else {
+ let ndiff, stat, scid = cdiff[STATIC];
+ if (isCid(scid)) {
+ let tdiff;
+ if (scid > 0) {
+ tdiff = this.cachedFindComponent(scid, newc[scid], oldc, newc, cache);
+ } else {
+ tdiff = oldc[-scid];
+ }
+ stat = tdiff[STATIC];
+ ndiff = this.cloneMerge(tdiff, cdiff);
+ ndiff[STATIC] = stat;
+ } else {
+ ndiff = cdiff[STATIC] !== void 0 ? cdiff : this.cloneMerge(oldc[cid] || {}, cdiff);
+ }
+ cache[cid] = ndiff;
+ return ndiff;
+ }
+ }
+ mutableMerge(target, source) {
+ if (source[STATIC] !== void 0) {
+ return source;
+ } else {
+ this.doMutableMerge(target, source);
+ return target;
+ }
+ }
+ doMutableMerge(target, source) {
+ for (let key in source) {
+ let val = source[key];
+ let targetVal = target[key];
+ if (isObject(val) && val[STATIC] === void 0 && isObject(targetVal)) {
+ this.doMutableMerge(targetVal, val);
+ } else {
+ target[key] = val;
+ }
+ }
+ }
+ cloneMerge(target, source) {
+ let merged = __spreadValues(__spreadValues({}, target), source);
+ for (let key in merged) {
+ let val = source[key];
+ let targetVal = target[key];
+ if (isObject(val) && val[STATIC] === void 0 && isObject(targetVal)) {
+ merged[key] = this.cloneMerge(targetVal, val);
+ }
+ }
+ return merged;
+ }
+ componentToString(cid) {
+ return this.recursiveCIDToString(this.rendered[COMPONENTS], cid);
+ }
+ pruneCIDs(cids) {
+ cids.forEach((cid) => delete this.rendered[COMPONENTS][cid]);
+ }
+ get() {
+ return this.rendered;
+ }
+ isNewFingerprint(diff = {}) {
+ return !!diff[STATIC];
+ }
+ templateStatic(part, templates) {
+ if (typeof part === "number") {
+ return templates[part];
+ } else {
+ return part;
+ }
+ }
+ toOutputBuffer(rendered, templates, output) {
+ if (rendered[DYNAMICS]) {
+ return this.comprehensionToBuffer(rendered, templates, output);
+ }
+ let { [STATIC]: statics } = rendered;
+ statics = this.templateStatic(statics, templates);
+ output.buffer += statics[0];
+ for (let i = 1; i < statics.length; i++) {
+ this.dynamicToBuffer(rendered[i - 1], templates, output);
+ output.buffer += statics[i];
+ }
+ }
+ comprehensionToBuffer(rendered, templates, output) {
+ let { [DYNAMICS]: dynamics, [STATIC]: statics } = rendered;
+ statics = this.templateStatic(statics, templates);
+ let compTemplates = templates || rendered[TEMPLATES];
+ for (let d = 0; d < dynamics.length; d++) {
+ let dynamic = dynamics[d];
+ output.buffer += statics[0];
+ for (let i = 1; i < statics.length; i++) {
+ this.dynamicToBuffer(dynamic[i - 1], compTemplates, output);
+ output.buffer += statics[i];
+ }
+ }
+ }
+ dynamicToBuffer(rendered, templates, output) {
+ if (typeof rendered === "number") {
+ output.buffer += this.recursiveCIDToString(output.components, rendered, output.onlyCids);
+ } else if (isObject(rendered)) {
+ this.toOutputBuffer(rendered, templates, output);
+ } else {
+ output.buffer += rendered;
+ }
+ }
+ recursiveCIDToString(components, cid, onlyCids) {
+ let component = components[cid] || logError(`no component for CID ${cid}`, components);
+ let template = document.createElement("template");
+ template.innerHTML = this.recursiveToString(component, components, onlyCids);
+ let container = template.content;
+ let skip = onlyCids && !onlyCids.has(cid);
+ let [hasChildNodes, hasChildComponents] = Array.from(container.childNodes).reduce(([hasNodes, hasComponents], child, i) => {
+ if (child.nodeType === Node.ELEMENT_NODE) {
+ if (child.getAttribute(PHX_COMPONENT)) {
+ return [hasNodes, true];
+ }
+ child.setAttribute(PHX_COMPONENT, cid);
+ if (!child.id) {
+ child.id = `${this.parentViewId()}-${cid}-${i}`;
+ }
+ if (skip) {
+ child.setAttribute(PHX_SKIP, "");
+ child.innerHTML = "";
+ }
+ return [true, hasComponents];
+ } else {
+ if (child.nodeValue.trim() !== "") {
+ logError(`only HTML element tags are allowed at the root of components.
+
+got: "${child.nodeValue.trim()}"
within:
-`,o.innerHTML.trim()),I.replaceWith(this.createSpan(I.nodeValue,e)),[!0,x]):(I.remove(),[C,x]),[!1,!1]);return!g&&!v?(We(`expected at least one HTML element tag inside a component, but the component is empty:
-`,o.innerHTML.trim()),this.createSpan("",e).outerHTML):(!g&&v&&We("expected at least one HTML element tag directly inside a component, but only subcomponents were found. A component must render at least one HTML tag directly inside itself.",o.innerHTML.trim()),o.innerHTML)}createSpan(t,e){let i=document.createElement("span");return i.innerText=t,i.setAttribute(ot,e),i}},zg=1,Wn=class{static makeID(){return zg++}static elementID(t){return t.phxHookId}constructor(t,e,i){this.__view=t,this.liveSocket=t.liveSocket,this.__callbacks=i,this.__listeners=new Set,this.__isDisconnected=!1,this.el=e,this.el.phxHookId=this.constructor.makeID();for(let s in this.__callbacks)this[s]=this.__callbacks[s]}__mounted(){this.mounted&&this.mounted()}__updated(){this.updated&&this.updated()}__beforeUpdate(){this.beforeUpdate&&this.beforeUpdate()}__destroyed(){this.destroyed&&this.destroyed()}__reconnected(){this.__isDisconnected&&(this.__isDisconnected=!1,this.reconnected&&this.reconnected())}__disconnected(){this.__isDisconnected=!0,this.disconnected&&this.disconnected()}pushEvent(t,e={},i=function(){}){return this.__view.pushHookEvent(null,t,e,i)}pushEventTo(t,e,i={},s=function(){}){return this.__view.withinTargets(t,(o,c)=>o.pushHookEvent(c,e,i,s))}handleEvent(t,e){let i=(s,o)=>o?t:e(s.detail);return window.addEventListener(`phx:${t}`,i),this.__listeners.add(i),i}removeHandleEvent(t){let e=t(null,!0);window.removeEventListener(`phx:${e}`,t),this.__listeners.delete(t)}upload(t,e){return this.__view.dispatchUploads(t,e)}uploadTo(t,e,i){return this.__view.withinTargets(t,s=>s.dispatchUploads(e,i))}__cleanup__(){this.__listeners.forEach(t=>this.removeHandleEvent(t))}},Kg={exec(t,e,i,s,o){let[c,d]=o||[null,{}];(e.charAt(0)==="["?JSON.parse(e):[[c,d]]).forEach(([v,C])=>{v===c&&d.data&&(C.data=Object.assign(C.data||{},d.data)),this.filterToEls(s,C).forEach(x=>{this[`exec_${v}`](t,e,i,s,x,C)})})},isVisible(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length>0)},exec_dispatch(t,e,i,s,o,{to:c,event:d,detail:g,bubbles:v}){g=g||{},g.dispatcher=s,j.dispatchEvent(o,d,{detail:g,bubbles:v})},exec_push(t,e,i,s,o,c){if(!i.isConnected())return;let{event:d,data:g,target:v,page_loading:C,loading:x,value:I,dispatcher:D}=c,S={loading:x,value:I,target:v,page_loading:!!C},N=t==="change"&&D?D:s,A=v||N.getAttribute(i.binding("target"))||N;i.withinTargets(A,(_,R)=>{if(t==="change"){let{newCid:F,_target:T,callback:H}=c;T=T||(s instanceof HTMLInputElement?s.name:void 0),T&&(S._target=T),_.pushInput(s,R,F,d||e,S,H)}else t==="submit"?_.submitForm(s,R,d||e,S):_.pushEvent(t,s,R,d||e,g,S)})},exec_add_class(t,e,i,s,o,{names:c,transition:d,time:g}){this.addOrRemoveClasses(o,c,[],d,g,i)},exec_remove_class(t,e,i,s,o,{names:c,transition:d,time:g}){this.addOrRemoveClasses(o,[],c,d,g,i)},exec_transition(t,e,i,s,o,{time:c,transition:d}){let[g,v,C]=d,x=()=>this.addOrRemoveClasses(o,g.concat(v),[]),I=()=>this.addOrRemoveClasses(o,C,g.concat(v));i.transition(c,x,I)},exec_toggle(t,e,i,s,o,{display:c,ins:d,outs:g,time:v}){this.toggle(t,i,o,c,d,g,v)},exec_show(t,e,i,s,o,{display:c,transition:d,time:g}){this.show(t,i,o,c,d,g)},exec_hide(t,e,i,s,o,{display:c,transition:d,time:g}){this.hide(t,i,o,c,d,g)},exec_set_attr(t,e,i,s,o,{attr:[c,d]}){this.setOrRemoveAttrs(o,[[c,d]],[])},exec_remove_attr(t,e,i,s,o,{attr:c}){this.setOrRemoveAttrs(o,[],[c])},show(t,e,i,s,o,c){this.isVisible(i)||this.toggle(t,e,i,s,o,null,c)},hide(t,e,i,s,o,c){this.isVisible(i)&&this.toggle(t,e,i,s,null,o,c)},toggle(t,e,i,s,o,c,d){let[g,v,C]=o||[[],[],[]],[x,I,D]=c||[[],[],[]];if(g.length>0||x.length>0)if(this.isVisible(i)){let S=()=>{this.addOrRemoveClasses(i,I,g.concat(v).concat(C)),window.requestAnimationFrame(()=>{this.addOrRemoveClasses(i,x,[]),window.requestAnimationFrame(()=>this.addOrRemoveClasses(i,D,I))})};i.dispatchEvent(new Event("phx:hide-start")),e.transition(d,S,()=>{this.addOrRemoveClasses(i,[],x.concat(D)),j.putSticky(i,"toggle",N=>N.style.display="none"),i.dispatchEvent(new Event("phx:hide-end"))})}else{if(t==="remove")return;let S=()=>{this.addOrRemoveClasses(i,v,x.concat(I).concat(D)),j.putSticky(i,"toggle",N=>N.style.display=s||"block"),window.requestAnimationFrame(()=>{this.addOrRemoveClasses(i,g,[]),window.requestAnimationFrame(()=>this.addOrRemoveClasses(i,C,v))})};i.dispatchEvent(new Event("phx:show-start")),e.transition(d,S,()=>{this.addOrRemoveClasses(i,[],g.concat(C)),i.dispatchEvent(new Event("phx:show-end"))})}else this.isVisible(i)?window.requestAnimationFrame(()=>{i.dispatchEvent(new Event("phx:hide-start")),j.putSticky(i,"toggle",S=>S.style.display="none"),i.dispatchEvent(new Event("phx:hide-end"))}):window.requestAnimationFrame(()=>{i.dispatchEvent(new Event("phx:show-start")),j.putSticky(i,"toggle",S=>S.style.display=s||"block"),i.dispatchEvent(new Event("phx:show-end"))})},addOrRemoveClasses(t,e,i,s,o,c){let[d,g,v]=s||[[],[],[]];if(d.length>0){let C=()=>this.addOrRemoveClasses(t,g.concat(d),[]),x=()=>this.addOrRemoveClasses(t,e.concat(v),i.concat(d).concat(g));return c.transition(o,C,x)}window.requestAnimationFrame(()=>{let[C,x]=j.getSticky(t,"classes",[[],[]]),I=e.filter(A=>C.indexOf(A)<0&&!t.classList.contains(A)),D=i.filter(A=>x.indexOf(A)<0&&t.classList.contains(A)),S=C.filter(A=>i.indexOf(A)<0).concat(I),N=x.filter(A=>e.indexOf(A)<0).concat(D);j.putSticky(t,"classes",A=>(A.classList.remove(...N),A.classList.add(...S),[S,N]))})},setOrRemoveAttrs(t,e,i){let[s,o]=j.getSticky(t,"attrs",[[],[]]),c=e.map(([v,C])=>v).concat(i),d=s.filter(([v,C])=>!c.includes(v)).concat(e),g=o.filter(v=>!c.includes(v)).concat(i);j.putSticky(t,"attrs",v=>(g.forEach(C=>v.removeAttribute(C)),d.forEach(([C,x])=>v.setAttribute(C,x)),[d,g]))},hasAllClasses(t,e){return e.every(i=>t.classList.contains(i))},isToggledOut(t,e){return!this.isVisible(t)||this.hasAllClasses(t,e)},filterToEls(t,{to:e}){return e?j.all(document,e):[t]}},Nt=Kg,Gr=(t,e,i=[])=>{let s=new FormData(t),o=[];s.forEach((d,g,v)=>{d instanceof File&&o.push(g)}),o.forEach(d=>s.delete(d));let c=new URLSearchParams;for(let[d,g]of s.entries())(i.length===0||i.indexOf(d)>=0)&&c.append(d,g);for(let d in e)c.append(d,e[d]);return c.toString()},cu=class{constructor(t,e,i,s){this.liveSocket=e,this.flash=s,this.parent=i,this.root=i?i.root:this,this.el=t,this.id=this.el.id,this.ref=0,this.childJoins=0,this.loaderTimer=null,this.pendingDiffs=[],this.pruningCIDs=[],this.redirect=!1,this.href=null,this.joinCount=this.parent?this.parent.joinCount-1:0,this.joinPending=!0,this.destroyed=!1,this.joinCallback=function(o){o&&o()},this.stopCallback=function(){},this.pendingJoinOps=this.parent?null:[],this.viewHooks={},this.uploaders={},this.formSubmits=[],this.children=this.parent?null:{},this.root.children[this.id]={},this.channel=this.liveSocket.channel(`lv:${this.id}`,()=>({redirect:this.redirect?this.href:void 0,url:this.redirect?void 0:this.href||void 0,params:this.connectParams(),session:this.getSession(),static:this.getStatic(),flash:this.flash})),this.showLoader(this.liveSocket.loaderTimeout),this.bindChannel()}setHref(t){this.href=t}setRedirect(t){this.redirect=!0,this.href=t}isMain(){return this.el.hasAttribute(Do)}connectParams(){let t=this.liveSocket.params(this.el),e=j.all(document,`[${this.binding(lg)}]`).map(i=>i.src||i.href).filter(i=>typeof i=="string");return e.length>0&&(t._track_static=e),t._mounts=this.joinCount,t}isConnected(){return this.channel.canPush()}getSession(){return this.el.getAttribute(li)}getStatic(){let t=this.el.getAttribute(qn);return t===""?null:t}destroy(t=function(){}){this.destroyAllChildren(),this.destroyed=!0,delete this.root.children[this.id],this.parent&&delete this.root.children[this.parent.id][this.id],clearTimeout(this.loaderTimer);let e=()=>{t();for(let i in this.viewHooks)this.destroyHook(this.viewHooks[i])};j.markPhxChildDestroyed(this.el),this.log("destroyed",()=>["the child has been removed from the parent"]),this.channel.leave().receive("ok",e).receive("error",e).receive("timeout",e)}setContainerClasses(...t){this.el.classList.remove(jl,mo,Ul),this.el.classList.add(...t)}showLoader(t){if(clearTimeout(this.loaderTimer),t)this.loaderTimer=setTimeout(()=>this.showLoader(),t);else{for(let e in this.viewHooks)this.viewHooks[e].__disconnected();this.setContainerClasses(mo)}}hideLoader(){clearTimeout(this.loaderTimer),this.setContainerClasses(jl)}triggerReconnected(){for(let t in this.viewHooks)this.viewHooks[t].__reconnected()}log(t,e){this.liveSocket.log(this,t,e)}transition(t,e,i=function(){}){this.liveSocket.transition(t,e,i)}withinTargets(t,e){if(t instanceof HTMLElement||t instanceof SVGElement)return this.liveSocket.owner(t,i=>e(i,t));if(ai(t))j.findComponentNodeList(this.el,t).length===0?We(`no component found matching phx-target of ${t}`):e(this,parseInt(t));else{let i=Array.from(document.querySelectorAll(t));i.length===0&&We(`nothing found matching the phx-target selector "${t}"`),i.forEach(s=>this.liveSocket.owner(s,o=>e(o,s)))}}applyDiff(t,e,i){this.log(t,()=>["",Jr(e)]);let{diff:s,reply:o,events:c,title:d}=iu.extract(e);return d&&j.putTitle(d),i({diff:s,reply:o,events:c}),o}onJoin(t){let{rendered:e,container:i}=t;if(i){let[s,o]=i;this.el=j.replaceRootContainer(this.el,s,o)}this.childJoins=0,this.joinPending=!0,this.flash=null,oi.dropLocal(this.liveSocket.localStorage,window.location.pathname,nu),this.applyDiff("mount",e,({diff:s,events:o})=>{this.rendered=new iu(this.id,s);let c=this.renderContainer(null,"join");this.dropPendingRefs();let d=this.formsForRecovery(c);this.joinCount++,d.length>0?d.forEach(([g,v,C],x)=>{this.pushFormRecovery(g,C,I=>{x===d.length-1&&this.onJoinComplete(I,c,o)})}):this.onJoinComplete(t,c,o)})}dropPendingRefs(){j.all(document,`[${Li}="${this.id}"][${Pt}]`,t=>{t.removeAttribute(Pt),t.removeAttribute(Li)})}onJoinComplete({live_patch:t},e,i){if(this.joinCount>1||this.parent&&!this.parent.isJoinPending())return this.applyJoinPatch(t,e,i);j.findPhxChildrenInFragment(e,this.id).filter(o=>{let c=o.id&&this.el.querySelector(`[id="${o.id}"]`),d=c&&c.getAttribute(qn);return d&&o.setAttribute(qn,d),this.joinChild(o)}).length===0?this.parent?(this.root.pendingJoinOps.push([this,()=>this.applyJoinPatch(t,e,i)]),this.parent.ackJoin(this)):(this.onAllChildJoinsComplete(),this.applyJoinPatch(t,e,i)):this.root.pendingJoinOps.push([this,()=>this.applyJoinPatch(t,e,i)])}attachTrueDocEl(){this.el=j.byId(this.id),this.el.setAttribute(Kn,this.root.id)}applyJoinPatch(t,e,i){this.attachTrueDocEl();let s=new Yr(this,this.el,this.id,e,null);if(s.markPrunableContentForRemoval(),this.performPatch(s,!1),this.joinNewChildren(),j.all(this.el,`[${this.binding(jn)}], [data-phx-${jn}]`,o=>{let c=this.addHook(o);c&&c.__mounted()}),this.joinPending=!1,this.liveSocket.dispatchEvents(i),this.applyPendingUpdates(),t){let{kind:o,to:c}=t;this.liveSocket.historyPatch(c,o)}this.hideLoader(),this.joinCount>1&&this.triggerReconnected(),this.stopCallback()}triggerBeforeUpdateHook(t,e){this.liveSocket.triggerDOM("onBeforeElUpdated",[t,e]);let i=this.getHook(t),s=i&&j.isIgnored(t,this.binding(ko));if(i&&!t.isEqualNode(e)&&!(s&&Cg(t.dataset,e.dataset)))return i.__beforeUpdate(),i}performPatch(t,e){let i=[],s=!1,o=new Set;return t.after("added",c=>{this.liveSocket.triggerDOM("onNodeAdded",[c]);let d=this.addHook(c);d&&d.__mounted()}),t.after("phxChildAdded",c=>{j.isPhxSticky(c)?this.liveSocket.joinRootViews():s=!0}),t.before("updated",(c,d)=>{this.triggerBeforeUpdateHook(c,d)&&o.add(c.id)}),t.after("updated",c=>{o.has(c.id)&&this.getHook(c).__updated()}),t.after("discarded",c=>{c.nodeType===Node.ELEMENT_NODE&&i.push(c)}),t.after("transitionsDiscarded",c=>this.afterElementsRemoved(c,e)),t.perform(),this.afterElementsRemoved(i,e),s}afterElementsRemoved(t,e){let i=[];t.forEach(s=>{let o=j.all(s,`[${ot}]`),c=j.all(s,`[${this.binding(jn)}]`);o.concat(s).forEach(d=>{let g=this.componentID(d);ai(g)&&i.indexOf(g)===-1&&i.push(g)}),c.concat(s).forEach(d=>{let g=this.getHook(d);g&&this.destroyHook(g)})}),e&&this.maybePushComponentsDestroyed(i)}joinNewChildren(){j.findPhxChildren(this.el,this.id).forEach(t=>this.joinChild(t))}getChildById(t){return this.root.children[this.id][t]}getDescendentByEl(t){return t.id===this.id?this:this.children[t.getAttribute(on)][t.id]}destroyDescendent(t){for(let e in this.root.children)for(let i in this.root.children[e])if(i===t)return this.root.children[e][i].destroy()}joinChild(t){if(!this.getChildById(t.id)){let i=new cu(t,this.liveSocket,this);return this.root.children[this.id][i.id]=i,i.join(),this.childJoins++,!0}}isJoinPending(){return this.joinPending}ackJoin(t){this.childJoins--,this.childJoins===0&&(this.parent?this.parent.ackJoin(this):this.onAllChildJoinsComplete())}onAllChildJoinsComplete(){this.joinCallback(()=>{this.pendingJoinOps.forEach(([t,e])=>{t.isDestroyed()||e()}),this.pendingJoinOps=[]})}update(t,e){if(this.isJoinPending()||this.liveSocket.hasPendingLink()&&!j.isPhxSticky(this.el))return this.pendingDiffs.push({diff:t,events:e});this.rendered.mergeDiff(t);let i=!1;this.rendered.isComponentOnlyDiff(t)?this.liveSocket.time("component patch complete",()=>{j.findParentCIDs(this.el,this.rendered.componentCIDs(t)).forEach(o=>{this.componentPatch(this.rendered.getComponent(t,o),o)&&(i=!0)})}):Gl(t)||this.liveSocket.time("full patch complete",()=>{let s=this.renderContainer(t,"update"),o=new Yr(this,this.el,this.id,s,null);i=this.performPatch(o,!0)}),this.liveSocket.dispatchEvents(e),i&&this.joinNewChildren()}renderContainer(t,e){return this.liveSocket.time(`toString diff (${e})`,()=>{let i=this.el.tagName,s=t?this.rendered.componentCIDs(t).concat(this.pruningCIDs):null,o=this.rendered.toString(s);return`<${i}>${o}</${i}>`})}componentPatch(t,e){if(Gl(t))return!1;let i=this.rendered.componentToString(e),s=new Yr(this,this.el,this.id,i,e);return this.performPatch(s,!0)}getHook(t){return this.viewHooks[Wn.elementID(t)]}addHook(t){if(Wn.elementID(t)||!t.getAttribute)return;let e=t.getAttribute(`data-phx-${jn}`)||t.getAttribute(this.binding(jn));if(e&&!this.ownsElement(t))return;let i=this.liveSocket.getHookCallbacks(e);if(i){t.id||We(`no DOM ID for hook "${e}". Hooks require a unique ID on each element.`,t);let s=new Wn(this,t,i);return this.viewHooks[Wn.elementID(s.el)]=s,s}else e!==null&&We(`unknown hook found for "${e}"`,t)}destroyHook(t){t.__destroyed(),t.__cleanup__(),delete this.viewHooks[Wn.elementID(t.el)]}applyPendingUpdates(){this.pendingDiffs.forEach(({diff:t,events:e})=>this.update(t,e)),this.pendingDiffs=[]}onChannel(t,e){this.liveSocket.onChannel(this.channel,t,i=>{this.isJoinPending()?this.root.pendingJoinOps.push([this,()=>e(i)]):this.liveSocket.requestDOMUpdate(()=>e(i))})}bindChannel(){this.liveSocket.onChannel(this.channel,"diff",t=>{this.liveSocket.requestDOMUpdate(()=>{this.applyDiff("update",t,({diff:e,events:i})=>this.update(e,i))})}),this.onChannel("redirect",({to:t,flash:e})=>this.onRedirect({to:t,flash:e})),this.onChannel("live_patch",t=>this.onLivePatch(t)),this.onChannel("live_redirect",t=>this.onLiveRedirect(t)),this.channel.onError(t=>this.onError(t)),this.channel.onClose(t=>this.onClose(t))}destroyAllChildren(){for(let t in this.root.children[this.id])this.getChildById(t).destroy()}onLiveRedirect(t){let{to:e,kind:i,flash:s}=t,o=this.expandURL(e);this.liveSocket.historyRedirect(o,i,s)}onLivePatch(t){let{to:e,kind:i}=t;this.href=this.expandURL(e),this.liveSocket.historyPatch(e,i)}expandURL(t){return t.startsWith("/")?`${window.location.protocol}//${window.location.host}${t}`:t}onRedirect({to:t,flash:e}){this.liveSocket.redirect(t,e)}isDestroyed(){return this.destroyed}join(t){this.isMain()&&(this.stopCallback=this.liveSocket.withPageLoading({to:this.href,kind:"initial"})),this.joinCallback=e=>{e=e||function(){},t?t(this.joinCount,e):e()},this.liveSocket.wrapPush(this,{timeout:!1},()=>this.channel.join().receive("ok",e=>{this.isDestroyed()||this.liveSocket.requestDOMUpdate(()=>this.onJoin(e))}).receive("error",e=>!this.isDestroyed()&&this.onJoinError(e)).receive("timeout",()=>!this.isDestroyed()&&this.onJoinError({reason:"timeout"})))}onJoinError(t){if(t.reason==="unauthorized"||t.reason==="stale")return this.log("error",()=>["unauthorized live_redirect. Falling back to page request",t]),this.onRedirect({to:this.href});if((t.redirect||t.live_redirect)&&(this.joinPending=!1,this.channel.leave()),t.redirect)return this.onRedirect(t.redirect);if(t.live_redirect)return this.onLiveRedirect(t.live_redirect);this.log("error",()=>["unable to join",t]),this.liveSocket.isConnected()&&this.liveSocket.reloadWithJitter(this)}onClose(t){if(!this.isDestroyed()){if(this.liveSocket.hasPendingLink()&&t!=="leave")return this.liveSocket.reloadWithJitter(this);this.destroyAllChildren(),this.liveSocket.dropActiveElement(this),document.activeElement&&document.activeElement.blur(),this.liveSocket.isUnloaded()&&this.showLoader(bg)}}onError(t){this.onClose(t),this.liveSocket.isConnected()&&this.log("error",()=>["view crashed",t]),this.liveSocket.isUnloaded()||this.displayError()}displayError(){this.isMain()&&j.dispatchEvent(window,"phx:page-loading-start",{detail:{to:this.href,kind:"error"}}),this.showLoader(),this.setContainerClasses(mo,Ul)}pushWithReply(t,e,i,s=function(){}){if(!this.isConnected())return;let[o,[c],d]=t?t():[null,[],{}],g=function(){};return(d.page_loading||c&&c.getAttribute(this.binding(Fl))!==null)&&(g=this.liveSocket.withPageLoading({kind:"element",target:c})),typeof i.cid!="number"&&delete i.cid,this.liveSocket.wrapPush(this,{timeout:!0},()=>this.channel.push(e,i,_g).receive("ok",v=>{o!==null&&this.undoRefs(o);let C=x=>{v.redirect&&this.onRedirect(v.redirect),v.live_patch&&this.onLivePatch(v.live_patch),v.live_redirect&&this.onLiveRedirect(v.live_redirect),g(),s(v,x)};v.diff?this.liveSocket.requestDOMUpdate(()=>{let x=this.applyDiff("update",v.diff,({diff:I,events:D})=>{this.update(I,D)});C(x)}):C(null)}))}undoRefs(t){j.all(document,`[${Li}="${this.id}"][${Pt}="${t}"]`,e=>{let i=e.getAttribute(Vr);e.removeAttribute(Pt),e.removeAttribute(Li),e.getAttribute(vo)!==null&&(e.readOnly=!1,e.removeAttribute(vo)),i!==null&&(e.disabled=i==="true",e.removeAttribute(Vr)),ru.forEach(c=>j.removeClass(e,c));let s=e.getAttribute(Wr);s!==null&&(e.innerText=s,e.removeAttribute(Wr));let o=j.private(e,Pt);if(o){let c=this.triggerBeforeUpdateHook(e,o);Yr.patchEl(e,o,this.liveSocket.getActiveElement()),c&&c.__updated(),j.deletePrivate(e,Pt)}})}putRef(t,e,i={}){let s=this.ref++,o=this.binding(So);return i.loading&&(t=t.concat(j.all(document,i.loading))),t.forEach(c=>{c.classList.add(`phx-${e}-loading`),c.setAttribute(Pt,s),c.setAttribute(Li,this.el.id);let d=c.getAttribute(o);d!==null&&(c.getAttribute(Wr)||c.setAttribute(Wr,c.innerText),d!==""&&(c.innerText=d),c.setAttribute("disabled",""))}),[s,t,i]}componentID(t){let e=t.getAttribute&&t.getAttribute(ot);return e?parseInt(e):null}targetComponentID(t,e,i={}){if(ai(e))return e;let s=t.getAttribute(this.binding("target"));return ai(s)?parseInt(s):e&&(s!==null||i.target)?this.closestComponentID(e):null}closestComponentID(t){return ai(t)?t:t?qt(t.closest(`[${ot}]`),e=>this.ownsElement(e)&&this.componentID(e)):null}pushHookEvent(t,e,i,s){if(!this.isConnected())return this.log("hook",()=>["unable to push hook event. LiveView not connected",e,i]),!1;let[o,c,d]=this.putRef([],"hook");return this.pushWithReply(()=>[o,c,d],"event",{type:"hook",event:e,value:i,cid:this.closestComponentID(t)},(g,v)=>s(v,o)),o}extractMeta(t,e,i){let s=this.binding("value-");for(let o=0;o<t.attributes.length;o++){e||(e={});let c=t.attributes[o].name;c.startsWith(s)&&(e[c.replace(s,"")]=t.getAttribute(c))}if(t.value!==void 0&&(e||(e={}),e.value=t.value,t.tagName==="INPUT"&&au.indexOf(t.type)>=0&&!t.checked&&delete e.value),i){e||(e={});for(let o in i)e[o]=i[o]}return e}pushEvent(t,e,i,s,o,c={}){this.pushWithReply(()=>this.putRef([e],t,c),"event",{type:t,event:s,value:this.extractMeta(e,o,c.value),cid:this.targetComponentID(e,i,c)})}pushFileProgress(t,e,i,s=function(){}){this.liveSocket.withinOwners(t.form,(o,c)=>{o.pushWithReply(null,"progress",{event:t.getAttribute(o.binding(mg)),ref:t.getAttribute(Ni),entry_ref:e,progress:i,cid:o.targetComponentID(t.form,c)},s)})}pushInput(t,e,i,s,o,c){let d,g=ai(i)?i:this.targetComponentID(t.form,e),v=()=>this.putRef([t,t.form],"change",o),C;t.getAttribute(this.binding("change"))?C=Gr(t.form,{_target:o._target},[t.name]):C=Gr(t.form,{_target:o._target}),j.isUploadInput(t)&&t.files&&t.files.length>0&&Ve.trackFiles(t,Array.from(t.files)),d=Ve.serializeUploads(t);let x={type:"form",event:s,value:C,uploads:d,cid:g};this.pushWithReply(v,"event",x,I=>{if(j.showError(t,this.liveSocket.binding(Co)),j.isUploadInput(t)&&t.getAttribute("data-phx-auto-upload")!==null){if(Ve.filesAwaitingPreflight(t).length>0){let[D,S]=v();this.uploadFiles(t.form,e,D,g,N=>{c&&c(I),this.triggerAwaitingSubmit(t.form)})}}else c&&c(I)})}triggerAwaitingSubmit(t){let e=this.getScheduledSubmit(t);if(e){let[i,s,o,c]=e;this.cancelSubmit(t),c()}}getScheduledSubmit(t){return this.formSubmits.find(([e,i,s,o])=>e.isSameNode(t))}scheduleSubmit(t,e,i,s){if(this.getScheduledSubmit(t))return!0;this.formSubmits.push([t,e,i,s])}cancelSubmit(t){this.formSubmits=this.formSubmits.filter(([e,i,s])=>e.isSameNode(t)?(this.undoRefs(i),!1):!0)}pushFormSubmit(t,e,i,s,o){let c=I=>!(zn(I,`${this.binding(ko)}=ignore`,I.form)||zn(I,"data-phx-update=ignore",I.form)),d=I=>I.hasAttribute(this.binding(So)),g=I=>I.tagName=="BUTTON",v=I=>["INPUT","TEXTAREA","SELECT"].includes(I.tagName),C=()=>{let I=Array.from(t.elements),D=I.filter(d),S=I.filter(g).filter(c),N=I.filter(v).filter(c);return S.forEach(A=>{A.setAttribute(Vr,A.disabled),A.disabled=!0}),N.forEach(A=>{A.setAttribute(vo,A.readOnly),A.readOnly=!0,A.files&&(A.setAttribute(Vr,A.disabled),A.disabled=!0)}),t.setAttribute(this.binding(Fl),""),this.putRef([t].concat(D).concat(S).concat(N),"submit",s)},x=this.targetComponentID(t,e);if(Ve.hasUploadsInProgress(t)){let[I,D]=C(),S=()=>this.pushFormSubmit(t,e,i,s,o);return this.scheduleSubmit(t,I,s,S)}else if(Ve.inputsAwaitingPreflight(t).length>0){let[I,D]=C(),S=()=>[I,D,s];this.uploadFiles(t,e,I,x,N=>{let A=Gr(t,{});this.pushWithReply(S,"event",{type:"form",event:i,value:A,cid:x},o)})}else{let I=Gr(t,{});this.pushWithReply(C,"event",{type:"form",event:i,value:I,cid:x},o)}}uploadFiles(t,e,i,s,o){let c=this.joinCount,d=Ve.activeFileInputs(t),g=d.length;d.forEach(v=>{let C=new Ve(v,this,()=>{g--,g===0&&o()});this.uploaders[v]=C;let x=C.entries().map(D=>D.toPreflightPayload()),I={ref:v.getAttribute(Ni),entries:x,cid:this.targetComponentID(v.form,e)};this.log("upload",()=>["sending preflight request",I]),this.pushWithReply(null,"allow_upload",I,D=>{if(this.log("upload",()=>["got preflight response",D]),D.error){this.undoRefs(i);let[S,N]=D.error;this.log("upload",()=>[`error for entry ${S}`,N])}else{let S=N=>{this.channel.onError(()=>{this.joinCount===c&&N()})};C.initAdapterUpload(D,S,this.liveSocket)}})})}dispatchUploads(t,e){let i=j.findUploadInputs(this.el).filter(s=>s.name===t);i.length===0?We(`no live file inputs found matching the name "${t}"`):i.length>1?We(`duplicate live file inputs found matching the name "${t}"`):j.dispatchEvent(i[0],su,{detail:{files:e}})}pushFormRecovery(t,e,i){this.liveSocket.withinOwners(t,(s,o)=>{let c=t.elements[0],d=t.getAttribute(this.binding(Wl))||t.getAttribute(this.binding("change"));Nt.exec("change",d,s,c,["push",{_target:c.name,newCid:e,callback:i}])})}pushLinkPatch(t,e,i){let s=this.liveSocket.setPendingLink(t),o=e?()=>this.putRef([e],"click"):null,c=()=>this.liveSocket.redirect(window.location.href),d=this.pushWithReply(o,"live_patch",{url:t},g=>{this.liveSocket.requestDOMUpdate(()=>{g.link_redirect?this.liveSocket.replaceMain(t,null,i,s):(this.liveSocket.commitPendingLink(s)&&(this.href=t),this.applyPendingUpdates(),i&&i(s))})});d?d.receive("timeout",c):c()}formsForRecovery(t){if(this.joinCount===0)return[];let e=this.binding("change"),i=document.createElement("template");return i.innerHTML=t,j.all(this.el,`form[${e}]`).filter(s=>s.id&&this.ownsElement(s)).filter(s=>s.elements.length>0).filter(s=>s.getAttribute(this.binding(Wl))!=="ignore").map(s=>{let o=i.content.querySelector(`form[id="${s.id}"][${e}="${s.getAttribute(e)}"]`);return o?[s,o,this.targetComponentID(o)]:[s,null,null]}).filter(([s,o,c])=>o)}maybePushComponentsDestroyed(t){let e=t.filter(i=>j.findComponentNodeList(this.el,i).length===0);e.length>0&&(this.pruningCIDs.push(...e),this.pushWithReply(null,"cids_will_destroy",{cids:e},()=>{this.pruningCIDs=this.pruningCIDs.filter(s=>e.indexOf(s)!==-1);let i=e.filter(s=>j.findComponentNodeList(this.el,s).length===0);i.length>0&&this.pushWithReply(null,"cids_destroyed",{cids:i},s=>{this.rendered.pruneCIDs(s.cids)})}))}ownsElement(t){return t.getAttribute(on)===this.id||qt(t.closest(an),e=>e.id)===this.id}submitForm(t,e,i,s={}){j.putPrivate(t,lu,!0);let o=this.liveSocket.binding(Co),c=Array.from(t.elements);this.liveSocket.blurActiveElement(this),this.pushFormSubmit(t,e,i,s,()=>{c.forEach(d=>j.showError(d,o)),this.liveSocket.restorePreviouslyActiveFocus()})}binding(t){return this.liveSocket.binding(t)}},fu=class{constructor(t,e,i={}){if(this.unloaded=!1,!e||e.constructor.name==="Object")throw new Error(`
+`, template.innerHTML.trim());
+ child.replaceWith(this.createSpan(child.nodeValue, cid));
+ return [true, hasComponents];
+ } else {
+ child.remove();
+ return [hasNodes, hasComponents];
+ }
+ }
+ }, [false, false]);
+ if (!hasChildNodes && !hasChildComponents) {
+ logError("expected at least one HTML element tag inside a component, but the component is empty:\n", template.innerHTML.trim());
+ return this.createSpan("", cid).outerHTML;
+ } else if (!hasChildNodes && hasChildComponents) {
+ logError("expected at least one HTML element tag directly inside a component, but only subcomponents were found. A component must render at least one HTML tag directly inside itself.", template.innerHTML.trim());
+ return template.innerHTML;
+ } else {
+ return template.innerHTML;
+ }
+ }
+ createSpan(text, cid) {
+ let span = document.createElement("span");
+ span.innerText = text;
+ span.setAttribute(PHX_COMPONENT, cid);
+ return span;
+ }
+ };
+ var viewHookID = 1;
+ var ViewHook = class {
+ static makeID() {
+ return viewHookID++;
+ }
+ static elementID(el) {
+ return el.phxHookId;
+ }
+ constructor(view, el, callbacks) {
+ this.__view = view;
+ this.liveSocket = view.liveSocket;
+ this.__callbacks = callbacks;
+ this.__listeners = /* @__PURE__ */ new Set();
+ this.__isDisconnected = false;
+ this.el = el;
+ this.el.phxHookId = this.constructor.makeID();
+ for (let key in this.__callbacks) {
+ this[key] = this.__callbacks[key];
+ }
+ }
+ __mounted() {
+ this.mounted && this.mounted();
+ }
+ __updated() {
+ this.updated && this.updated();
+ }
+ __beforeUpdate() {
+ this.beforeUpdate && this.beforeUpdate();
+ }
+ __destroyed() {
+ this.destroyed && this.destroyed();
+ }
+ __reconnected() {
+ if (this.__isDisconnected) {
+ this.__isDisconnected = false;
+ this.reconnected && this.reconnected();
+ }
+ }
+ __disconnected() {
+ this.__isDisconnected = true;
+ this.disconnected && this.disconnected();
+ }
+ pushEvent(event, payload = {}, onReply = function() {
+ }) {
+ return this.__view.pushHookEvent(null, event, payload, onReply);
+ }
+ pushEventTo(phxTarget, event, payload = {}, onReply = function() {
+ }) {
+ return this.__view.withinTargets(phxTarget, (view, targetCtx) => {
+ return view.pushHookEvent(targetCtx, event, payload, onReply);
+ });
+ }
+ handleEvent(event, callback) {
+ let callbackRef = (customEvent, bypass) => bypass ? event : callback(customEvent.detail);
+ window.addEventListener(`phx:${event}`, callbackRef);
+ this.__listeners.add(callbackRef);
+ return callbackRef;
+ }
+ removeHandleEvent(callbackRef) {
+ let event = callbackRef(null, true);
+ window.removeEventListener(`phx:${event}`, callbackRef);
+ this.__listeners.delete(callbackRef);
+ }
+ upload(name, files) {
+ return this.__view.dispatchUploads(name, files);
+ }
+ uploadTo(phxTarget, name, files) {
+ return this.__view.withinTargets(phxTarget, (view) => view.dispatchUploads(name, files));
+ }
+ __cleanup__() {
+ this.__listeners.forEach((callbackRef) => this.removeHandleEvent(callbackRef));
+ }
+ };
+ var JS = {
+ exec(eventType, phxEvent, view, sourceEl, defaults) {
+ let [defaultKind, defaultArgs] = defaults || [null, {}];
+ let commands = phxEvent.charAt(0) === "[" ? JSON.parse(phxEvent) : [[defaultKind, defaultArgs]];
+ commands.forEach(([kind, args]) => {
+ if (kind === defaultKind && defaultArgs.data) {
+ args.data = Object.assign(args.data || {}, defaultArgs.data);
+ }
+ this.filterToEls(sourceEl, args).forEach((el) => {
+ this[`exec_${kind}`](eventType, phxEvent, view, sourceEl, el, args);
+ });
+ });
+ },
+ isVisible(el) {
+ return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length > 0);
+ },
+ exec_dispatch(eventType, phxEvent, view, sourceEl, el, { to, event, detail, bubbles }) {
+ detail = detail || {};
+ detail.dispatcher = sourceEl;
+ dom_default.dispatchEvent(el, event, { detail, bubbles });
+ },
+ exec_push(eventType, phxEvent, view, sourceEl, el, args) {
+ if (!view.isConnected()) {
+ return;
+ }
+ let { event, data, target, page_loading, loading, value, dispatcher } = args;
+ let pushOpts = { loading, value, target, page_loading: !!page_loading };
+ let targetSrc = eventType === "change" && dispatcher ? dispatcher : sourceEl;
+ let phxTarget = target || targetSrc.getAttribute(view.binding("target")) || targetSrc;
+ view.withinTargets(phxTarget, (targetView, targetCtx) => {
+ if (eventType === "change") {
+ let { newCid, _target, callback } = args;
+ _target = _target || (sourceEl instanceof HTMLInputElement ? sourceEl.name : void 0);
+ if (_target) {
+ pushOpts._target = _target;
+ }
+ targetView.pushInput(sourceEl, targetCtx, newCid, event || phxEvent, pushOpts, callback);
+ } else if (eventType === "submit") {
+ targetView.submitForm(sourceEl, targetCtx, event || phxEvent, pushOpts);
+ } else {
+ targetView.pushEvent(eventType, sourceEl, targetCtx, event || phxEvent, data, pushOpts);
+ }
+ });
+ },
+ exec_add_class(eventType, phxEvent, view, sourceEl, el, { names, transition, time }) {
+ this.addOrRemoveClasses(el, names, [], transition, time, view);
+ },
+ exec_remove_class(eventType, phxEvent, view, sourceEl, el, { names, transition, time }) {
+ this.addOrRemoveClasses(el, [], names, transition, time, view);
+ },
+ exec_transition(eventType, phxEvent, view, sourceEl, el, { time, transition }) {
+ let [transition_start, running, transition_end] = transition;
+ let onStart = () => this.addOrRemoveClasses(el, transition_start.concat(running), []);
+ let onDone = () => this.addOrRemoveClasses(el, transition_end, transition_start.concat(running));
+ view.transition(time, onStart, onDone);
+ },
+ exec_toggle(eventType, phxEvent, view, sourceEl, el, { display, ins, outs, time }) {
+ this.toggle(eventType, view, el, display, ins, outs, time);
+ },
+ exec_show(eventType, phxEvent, view, sourceEl, el, { display, transition, time }) {
+ this.show(eventType, view, el, display, transition, time);
+ },
+ exec_hide(eventType, phxEvent, view, sourceEl, el, { display, transition, time }) {
+ this.hide(eventType, view, el, display, transition, time);
+ },
+ exec_set_attr(eventType, phxEvent, view, sourceEl, el, { attr: [attr, val] }) {
+ this.setOrRemoveAttrs(el, [[attr, val]], []);
+ },
+ exec_remove_attr(eventType, phxEvent, view, sourceEl, el, { attr }) {
+ this.setOrRemoveAttrs(el, [], [attr]);
+ },
+ show(eventType, view, el, display, transition, time) {
+ if (!this.isVisible(el)) {
+ this.toggle(eventType, view, el, display, transition, null, time);
+ }
+ },
+ hide(eventType, view, el, display, transition, time) {
+ if (this.isVisible(el)) {
+ this.toggle(eventType, view, el, display, null, transition, time);
+ }
+ },
+ toggle(eventType, view, el, display, ins, outs, time) {
+ let [inClasses, inStartClasses, inEndClasses] = ins || [[], [], []];
+ let [outClasses, outStartClasses, outEndClasses] = outs || [[], [], []];
+ if (inClasses.length > 0 || outClasses.length > 0) {
+ if (this.isVisible(el)) {
+ let onStart = () => {
+ this.addOrRemoveClasses(el, outStartClasses, inClasses.concat(inStartClasses).concat(inEndClasses));
+ window.requestAnimationFrame(() => {
+ this.addOrRemoveClasses(el, outClasses, []);
+ window.requestAnimationFrame(() => this.addOrRemoveClasses(el, outEndClasses, outStartClasses));
+ });
+ };
+ el.dispatchEvent(new Event("phx:hide-start"));
+ view.transition(time, onStart, () => {
+ this.addOrRemoveClasses(el, [], outClasses.concat(outEndClasses));
+ dom_default.putSticky(el, "toggle", (currentEl) => currentEl.style.display = "none");
+ el.dispatchEvent(new Event("phx:hide-end"));
+ });
+ } else {
+ if (eventType === "remove") {
+ return;
+ }
+ let onStart = () => {
+ this.addOrRemoveClasses(el, inStartClasses, outClasses.concat(outStartClasses).concat(outEndClasses));
+ dom_default.putSticky(el, "toggle", (currentEl) => currentEl.style.display = display || "block");
+ window.requestAnimationFrame(() => {
+ this.addOrRemoveClasses(el, inClasses, []);
+ window.requestAnimationFrame(() => this.addOrRemoveClasses(el, inEndClasses, inStartClasses));
+ });
+ };
+ el.dispatchEvent(new Event("phx:show-start"));
+ view.transition(time, onStart, () => {
+ this.addOrRemoveClasses(el, [], inClasses.concat(inEndClasses));
+ el.dispatchEvent(new Event("phx:show-end"));
+ });
+ }
+ } else {
+ if (this.isVisible(el)) {
+ window.requestAnimationFrame(() => {
+ el.dispatchEvent(new Event("phx:hide-start"));
+ dom_default.putSticky(el, "toggle", (currentEl) => currentEl.style.display = "none");
+ el.dispatchEvent(new Event("phx:hide-end"));
+ });
+ } else {
+ window.requestAnimationFrame(() => {
+ el.dispatchEvent(new Event("phx:show-start"));
+ dom_default.putSticky(el, "toggle", (currentEl) => currentEl.style.display = display || "block");
+ el.dispatchEvent(new Event("phx:show-end"));
+ });
+ }
+ }
+ },
+ addOrRemoveClasses(el, adds, removes, transition, time, view) {
+ let [transition_run, transition_start, transition_end] = transition || [[], [], []];
+ if (transition_run.length > 0) {
+ let onStart = () => this.addOrRemoveClasses(el, transition_start.concat(transition_run), []);
+ let onDone = () => this.addOrRemoveClasses(el, adds.concat(transition_end), removes.concat(transition_run).concat(transition_start));
+ return view.transition(time, onStart, onDone);
+ }
+ window.requestAnimationFrame(() => {
+ let [prevAdds, prevRemoves] = dom_default.getSticky(el, "classes", [[], []]);
+ let keepAdds = adds.filter((name) => prevAdds.indexOf(name) < 0 && !el.classList.contains(name));
+ let keepRemoves = removes.filter((name) => prevRemoves.indexOf(name) < 0 && el.classList.contains(name));
+ let newAdds = prevAdds.filter((name) => removes.indexOf(name) < 0).concat(keepAdds);
+ let newRemoves = prevRemoves.filter((name) => adds.indexOf(name) < 0).concat(keepRemoves);
+ dom_default.putSticky(el, "classes", (currentEl) => {
+ currentEl.classList.remove(...newRemoves);
+ currentEl.classList.add(...newAdds);
+ return [newAdds, newRemoves];
+ });
+ });
+ },
+ setOrRemoveAttrs(el, sets, removes) {
+ let [prevSets, prevRemoves] = dom_default.getSticky(el, "attrs", [[], []]);
+ let alteredAttrs = sets.map(([attr, _val]) => attr).concat(removes);
+ let newSets = prevSets.filter(([attr, _val]) => !alteredAttrs.includes(attr)).concat(sets);
+ let newRemoves = prevRemoves.filter((attr) => !alteredAttrs.includes(attr)).concat(removes);
+ dom_default.putSticky(el, "attrs", (currentEl) => {
+ newRemoves.forEach((attr) => currentEl.removeAttribute(attr));
+ newSets.forEach(([attr, val]) => currentEl.setAttribute(attr, val));
+ return [newSets, newRemoves];
+ });
+ },
+ hasAllClasses(el, classes) {
+ return classes.every((name) => el.classList.contains(name));
+ },
+ isToggledOut(el, outClasses) {
+ return !this.isVisible(el) || this.hasAllClasses(el, outClasses);
+ },
+ filterToEls(sourceEl, { to }) {
+ return to ? dom_default.all(document, to) : [sourceEl];
+ }
+ };
+ var js_default = JS;
+ var serializeForm = (form, meta, onlyNames = []) => {
+ let formData = new FormData(form);
+ let toRemove = [];
+ formData.forEach((val, key, _index) => {
+ if (val instanceof File) {
+ toRemove.push(key);
+ }
+ });
+ toRemove.forEach((key) => formData.delete(key));
+ let params = new URLSearchParams();
+ for (let [key, val] of formData.entries()) {
+ if (onlyNames.length === 0 || onlyNames.indexOf(key) >= 0) {
+ params.append(key, val);
+ }
+ }
+ for (let metaKey in meta) {
+ params.append(metaKey, meta[metaKey]);
+ }
+ return params.toString();
+ };
+ var View = class {
+ constructor(el, liveSocket2, parentView, flash) {
+ this.liveSocket = liveSocket2;
+ this.flash = flash;
+ this.parent = parentView;
+ this.root = parentView ? parentView.root : this;
+ this.el = el;
+ this.id = this.el.id;
+ this.ref = 0;
+ this.childJoins = 0;
+ this.loaderTimer = null;
+ this.pendingDiffs = [];
+ this.pruningCIDs = [];
+ this.redirect = false;
+ this.href = null;
+ this.joinCount = this.parent ? this.parent.joinCount - 1 : 0;
+ this.joinPending = true;
+ this.destroyed = false;
+ this.joinCallback = function(onDone) {
+ onDone && onDone();
+ };
+ this.stopCallback = function() {
+ };
+ this.pendingJoinOps = this.parent ? null : [];
+ this.viewHooks = {};
+ this.uploaders = {};
+ this.formSubmits = [];
+ this.children = this.parent ? null : {};
+ this.root.children[this.id] = {};
+ this.channel = this.liveSocket.channel(`lv:${this.id}`, () => {
+ return {
+ redirect: this.redirect ? this.href : void 0,
+ url: this.redirect ? void 0 : this.href || void 0,
+ params: this.connectParams(),
+ session: this.getSession(),
+ static: this.getStatic(),
+ flash: this.flash
+ };
+ });
+ this.showLoader(this.liveSocket.loaderTimeout);
+ this.bindChannel();
+ }
+ setHref(href) {
+ this.href = href;
+ }
+ setRedirect(href) {
+ this.redirect = true;
+ this.href = href;
+ }
+ isMain() {
+ return this.el.hasAttribute(PHX_MAIN);
+ }
+ connectParams() {
+ let params = this.liveSocket.params(this.el);
+ let manifest = dom_default.all(document, `[${this.binding(PHX_TRACK_STATIC)}]`).map((node) => node.src || node.href).filter((url) => typeof url === "string");
+ if (manifest.length > 0) {
+ params["_track_static"] = manifest;
+ }
+ params["_mounts"] = this.joinCount;
+ return params;
+ }
+ isConnected() {
+ return this.channel.canPush();
+ }
+ getSession() {
+ return this.el.getAttribute(PHX_SESSION);
+ }
+ getStatic() {
+ let val = this.el.getAttribute(PHX_STATIC);
+ return val === "" ? null : val;
+ }
+ destroy(callback = function() {
+ }) {
+ this.destroyAllChildren();
+ this.destroyed = true;
+ delete this.root.children[this.id];
+ if (this.parent) {
+ delete this.root.children[this.parent.id][this.id];
+ }
+ clearTimeout(this.loaderTimer);
+ let onFinished = () => {
+ callback();
+ for (let id in this.viewHooks) {
+ this.destroyHook(this.viewHooks[id]);
+ }
+ };
+ dom_default.markPhxChildDestroyed(this.el);
+ this.log("destroyed", () => ["the child has been removed from the parent"]);
+ this.channel.leave().receive("ok", onFinished).receive("error", onFinished).receive("timeout", onFinished);
+ }
+ setContainerClasses(...classes) {
+ this.el.classList.remove(PHX_CONNECTED_CLASS, PHX_DISCONNECTED_CLASS, PHX_ERROR_CLASS);
+ this.el.classList.add(...classes);
+ }
+ showLoader(timeout) {
+ clearTimeout(this.loaderTimer);
+ if (timeout) {
+ this.loaderTimer = setTimeout(() => this.showLoader(), timeout);
+ } else {
+ for (let id in this.viewHooks) {
+ this.viewHooks[id].__disconnected();
+ }
+ this.setContainerClasses(PHX_DISCONNECTED_CLASS);
+ }
+ }
+ hideLoader() {
+ clearTimeout(this.loaderTimer);
+ this.setContainerClasses(PHX_CONNECTED_CLASS);
+ }
+ triggerReconnected() {
+ for (let id in this.viewHooks) {
+ this.viewHooks[id].__reconnected();
+ }
+ }
+ log(kind, msgCallback) {
+ this.liveSocket.log(this, kind, msgCallback);
+ }
+ transition(time, onStart, onDone = function() {
+ }) {
+ this.liveSocket.transition(time, onStart, onDone);
+ }
+ withinTargets(phxTarget, callback) {
+ if (phxTarget instanceof HTMLElement || phxTarget instanceof SVGElement) {
+ return this.liveSocket.owner(phxTarget, (view) => callback(view, phxTarget));
+ }
+ if (isCid(phxTarget)) {
+ let targets = dom_default.findComponentNodeList(this.el, phxTarget);
+ if (targets.length === 0) {
+ logError(`no component found matching phx-target of ${phxTarget}`);
+ } else {
+ callback(this, parseInt(phxTarget));
+ }
+ } else {
+ let targets = Array.from(document.querySelectorAll(phxTarget));
+ if (targets.length === 0) {
+ logError(`nothing found matching the phx-target selector "${phxTarget}"`);
+ }
+ targets.forEach((target) => this.liveSocket.owner(target, (view) => callback(view, target)));
+ }
+ }
+ applyDiff(type, rawDiff, callback) {
+ this.log(type, () => ["", clone(rawDiff)]);
+ let { diff, reply, events, title } = Rendered.extract(rawDiff);
+ if (title) {
+ dom_default.putTitle(title);
+ }
+ callback({ diff, reply, events });
+ return reply;
+ }
+ onJoin(resp) {
+ let { rendered, container } = resp;
+ if (container) {
+ let [tag, attrs] = container;
+ this.el = dom_default.replaceRootContainer(this.el, tag, attrs);
+ }
+ this.childJoins = 0;
+ this.joinPending = true;
+ this.flash = null;
+ browser_default.dropLocal(this.liveSocket.localStorage, window.location.pathname, CONSECUTIVE_RELOADS);
+ this.applyDiff("mount", rendered, ({ diff, events }) => {
+ this.rendered = new Rendered(this.id, diff);
+ let html = this.renderContainer(null, "join");
+ this.dropPendingRefs();
+ let forms = this.formsForRecovery(html);
+ this.joinCount++;
+ if (forms.length > 0) {
+ forms.forEach(([form, newForm, newCid], i) => {
+ this.pushFormRecovery(form, newCid, (resp2) => {
+ if (i === forms.length - 1) {
+ this.onJoinComplete(resp2, html, events);
+ }
+ });
+ });
+ } else {
+ this.onJoinComplete(resp, html, events);
+ }
+ });
+ }
+ dropPendingRefs() {
+ dom_default.all(document, `[${PHX_REF_SRC}="${this.id}"][${PHX_REF}]`, (el) => {
+ el.removeAttribute(PHX_REF);
+ el.removeAttribute(PHX_REF_SRC);
+ });
+ }
+ onJoinComplete({ live_patch }, html, events) {
+ if (this.joinCount > 1 || this.parent && !this.parent.isJoinPending()) {
+ return this.applyJoinPatch(live_patch, html, events);
+ }
+ let newChildren = dom_default.findPhxChildrenInFragment(html, this.id).filter((toEl) => {
+ let fromEl = toEl.id && this.el.querySelector(`[id="${toEl.id}"]`);
+ let phxStatic = fromEl && fromEl.getAttribute(PHX_STATIC);
+ if (phxStatic) {
+ toEl.setAttribute(PHX_STATIC, phxStatic);
+ }
+ return this.joinChild(toEl);
+ });
+ if (newChildren.length === 0) {
+ if (this.parent) {
+ this.root.pendingJoinOps.push([this, () => this.applyJoinPatch(live_patch, html, events)]);
+ this.parent.ackJoin(this);
+ } else {
+ this.onAllChildJoinsComplete();
+ this.applyJoinPatch(live_patch, html, events);
+ }
+ } else {
+ this.root.pendingJoinOps.push([this, () => this.applyJoinPatch(live_patch, html, events)]);
+ }
+ }
+ attachTrueDocEl() {
+ this.el = dom_default.byId(this.id);
+ this.el.setAttribute(PHX_ROOT_ID, this.root.id);
+ }
+ applyJoinPatch(live_patch, html, events) {
+ this.attachTrueDocEl();
+ let patch = new DOMPatch(this, this.el, this.id, html, null);
+ patch.markPrunableContentForRemoval();
+ this.performPatch(patch, false);
+ this.joinNewChildren();
+ dom_default.all(this.el, `[${this.binding(PHX_HOOK)}], [data-phx-${PHX_HOOK}]`, (hookEl) => {
+ let hook = this.addHook(hookEl);
+ if (hook) {
+ hook.__mounted();
+ }
+ });
+ this.joinPending = false;
+ this.liveSocket.dispatchEvents(events);
+ this.applyPendingUpdates();
+ if (live_patch) {
+ let { kind, to } = live_patch;
+ this.liveSocket.historyPatch(to, kind);
+ }
+ this.hideLoader();
+ if (this.joinCount > 1) {
+ this.triggerReconnected();
+ }
+ this.stopCallback();
+ }
+ triggerBeforeUpdateHook(fromEl, toEl) {
+ this.liveSocket.triggerDOM("onBeforeElUpdated", [fromEl, toEl]);
+ let hook = this.getHook(fromEl);
+ let isIgnored = hook && dom_default.isIgnored(fromEl, this.binding(PHX_UPDATE));
+ if (hook && !fromEl.isEqualNode(toEl) && !(isIgnored && isEqualObj(fromEl.dataset, toEl.dataset))) {
+ hook.__beforeUpdate();
+ return hook;
+ }
+ }
+ performPatch(patch, pruneCids) {
+ let removedEls = [];
+ let phxChildrenAdded = false;
+ let updatedHookIds = /* @__PURE__ */ new Set();
+ patch.after("added", (el) => {
+ this.liveSocket.triggerDOM("onNodeAdded", [el]);
+ let newHook = this.addHook(el);
+ if (newHook) {
+ newHook.__mounted();
+ }
+ });
+ patch.after("phxChildAdded", (el) => {
+ if (dom_default.isPhxSticky(el)) {
+ this.liveSocket.joinRootViews();
+ } else {
+ phxChildrenAdded = true;
+ }
+ });
+ patch.before("updated", (fromEl, toEl) => {
+ let hook = this.triggerBeforeUpdateHook(fromEl, toEl);
+ if (hook) {
+ updatedHookIds.add(fromEl.id);
+ }
+ });
+ patch.after("updated", (el) => {
+ if (updatedHookIds.has(el.id)) {
+ this.getHook(el).__updated();
+ }
+ });
+ patch.after("discarded", (el) => {
+ if (el.nodeType === Node.ELEMENT_NODE) {
+ removedEls.push(el);
+ }
+ });
+ patch.after("transitionsDiscarded", (els) => this.afterElementsRemoved(els, pruneCids));
+ patch.perform();
+ this.afterElementsRemoved(removedEls, pruneCids);
+ return phxChildrenAdded;
+ }
+ afterElementsRemoved(elements, pruneCids) {
+ let destroyedCIDs = [];
+ elements.forEach((parent) => {
+ let components = dom_default.all(parent, `[${PHX_COMPONENT}]`);
+ let hooks = dom_default.all(parent, `[${this.binding(PHX_HOOK)}]`);
+ components.concat(parent).forEach((el) => {
+ let cid = this.componentID(el);
+ if (isCid(cid) && destroyedCIDs.indexOf(cid) === -1) {
+ destroyedCIDs.push(cid);
+ }
+ });
+ hooks.concat(parent).forEach((hookEl) => {
+ let hook = this.getHook(hookEl);
+ hook && this.destroyHook(hook);
+ });
+ });
+ if (pruneCids) {
+ this.maybePushComponentsDestroyed(destroyedCIDs);
+ }
+ }
+ joinNewChildren() {
+ dom_default.findPhxChildren(this.el, this.id).forEach((el) => this.joinChild(el));
+ }
+ getChildById(id) {
+ return this.root.children[this.id][id];
+ }
+ getDescendentByEl(el) {
+ if (el.id === this.id) {
+ return this;
+ } else {
+ return this.children[el.getAttribute(PHX_PARENT_ID)][el.id];
+ }
+ }
+ destroyDescendent(id) {
+ for (let parentId in this.root.children) {
+ for (let childId in this.root.children[parentId]) {
+ if (childId === id) {
+ return this.root.children[parentId][childId].destroy();
+ }
+ }
+ }
+ }
+ joinChild(el) {
+ let child = this.getChildById(el.id);
+ if (!child) {
+ let view = new View(el, this.liveSocket, this);
+ this.root.children[this.id][view.id] = view;
+ view.join();
+ this.childJoins++;
+ return true;
+ }
+ }
+ isJoinPending() {
+ return this.joinPending;
+ }
+ ackJoin(_child) {
+ this.childJoins--;
+ if (this.childJoins === 0) {
+ if (this.parent) {
+ this.parent.ackJoin(this);
+ } else {
+ this.onAllChildJoinsComplete();
+ }
+ }
+ }
+ onAllChildJoinsComplete() {
+ this.joinCallback(() => {
+ this.pendingJoinOps.forEach(([view, op]) => {
+ if (!view.isDestroyed()) {
+ op();
+ }
+ });
+ this.pendingJoinOps = [];
+ });
+ }
+ update(diff, events) {
+ if (this.isJoinPending() || this.liveSocket.hasPendingLink() && !dom_default.isPhxSticky(this.el)) {
+ return this.pendingDiffs.push({ diff, events });
+ }
+ this.rendered.mergeDiff(diff);
+ let phxChildrenAdded = false;
+ if (this.rendered.isComponentOnlyDiff(diff)) {
+ this.liveSocket.time("component patch complete", () => {
+ let parentCids = dom_default.findParentCIDs(this.el, this.rendered.componentCIDs(diff));
+ parentCids.forEach((parentCID) => {
+ if (this.componentPatch(this.rendered.getComponent(diff, parentCID), parentCID)) {
+ phxChildrenAdded = true;
+ }
+ });
+ });
+ } else if (!isEmpty(diff)) {
+ this.liveSocket.time("full patch complete", () => {
+ let html = this.renderContainer(diff, "update");
+ let patch = new DOMPatch(this, this.el, this.id, html, null);
+ phxChildrenAdded = this.performPatch(patch, true);
+ });
+ }
+ this.liveSocket.dispatchEvents(events);
+ if (phxChildrenAdded) {
+ this.joinNewChildren();
+ }
+ }
+ renderContainer(diff, kind) {
+ return this.liveSocket.time(`toString diff (${kind})`, () => {
+ let tag = this.el.tagName;
+ let cids = diff ? this.rendered.componentCIDs(diff).concat(this.pruningCIDs) : null;
+ let html = this.rendered.toString(cids);
+ return `<${tag}>${html}</${tag}>`;
+ });
+ }
+ componentPatch(diff, cid) {
+ if (isEmpty(diff))
+ return false;
+ let html = this.rendered.componentToString(cid);
+ let patch = new DOMPatch(this, this.el, this.id, html, cid);
+ let childrenAdded = this.performPatch(patch, true);
+ return childrenAdded;
+ }
+ getHook(el) {
+ return this.viewHooks[ViewHook.elementID(el)];
+ }
+ addHook(el) {
+ if (ViewHook.elementID(el) || !el.getAttribute) {
+ return;
+ }
+ let hookName = el.getAttribute(`data-phx-${PHX_HOOK}`) || el.getAttribute(this.binding(PHX_HOOK));
+ if (hookName && !this.ownsElement(el)) {
+ return;
+ }
+ let callbacks = this.liveSocket.getHookCallbacks(hookName);
+ if (callbacks) {
+ if (!el.id) {
+ logError(`no DOM ID for hook "${hookName}". Hooks require a unique ID on each element.`, el);
+ }
+ let hook = new ViewHook(this, el, callbacks);
+ this.viewHooks[ViewHook.elementID(hook.el)] = hook;
+ return hook;
+ } else if (hookName !== null) {
+ logError(`unknown hook found for "${hookName}"`, el);
+ }
+ }
+ destroyHook(hook) {
+ hook.__destroyed();
+ hook.__cleanup__();
+ delete this.viewHooks[ViewHook.elementID(hook.el)];
+ }
+ applyPendingUpdates() {
+ this.pendingDiffs.forEach(({ diff, events }) => this.update(diff, events));
+ this.pendingDiffs = [];
+ }
+ onChannel(event, cb) {
+ this.liveSocket.onChannel(this.channel, event, (resp) => {
+ if (this.isJoinPending()) {
+ this.root.pendingJoinOps.push([this, () => cb(resp)]);
+ } else {
+ this.liveSocket.requestDOMUpdate(() => cb(resp));
+ }
+ });
+ }
+ bindChannel() {
+ this.liveSocket.onChannel(this.channel, "diff", (rawDiff) => {
+ this.liveSocket.requestDOMUpdate(() => {
+ this.applyDiff("update", rawDiff, ({ diff, events }) => this.update(diff, events));
+ });
+ });
+ this.onChannel("redirect", ({ to, flash }) => this.onRedirect({ to, flash }));
+ this.onChannel("live_patch", (redir) => this.onLivePatch(redir));
+ this.onChannel("live_redirect", (redir) => this.onLiveRedirect(redir));
+ this.channel.onError((reason) => this.onError(reason));
+ this.channel.onClose((reason) => this.onClose(reason));
+ }
+ destroyAllChildren() {
+ for (let id in this.root.children[this.id]) {
+ this.getChildById(id).destroy();
+ }
+ }
+ onLiveRedirect(redir) {
+ let { to, kind, flash } = redir;
+ let url = this.expandURL(to);
+ this.liveSocket.historyRedirect(url, kind, flash);
+ }
+ onLivePatch(redir) {
+ let { to, kind } = redir;
+ this.href = this.expandURL(to);
+ this.liveSocket.historyPatch(to, kind);
+ }
+ expandURL(to) {
+ return to.startsWith("/") ? `${window.location.protocol}//${window.location.host}${to}` : to;
+ }
+ onRedirect({ to, flash }) {
+ this.liveSocket.redirect(to, flash);
+ }
+ isDestroyed() {
+ return this.destroyed;
+ }
+ join(callback) {
+ if (this.isMain()) {
+ this.stopCallback = this.liveSocket.withPageLoading({ to: this.href, kind: "initial" });
+ }
+ this.joinCallback = (onDone) => {
+ onDone = onDone || function() {
+ };
+ callback ? callback(this.joinCount, onDone) : onDone();
+ };
+ this.liveSocket.wrapPush(this, { timeout: false }, () => {
+ return this.channel.join().receive("ok", (data) => {
+ if (!this.isDestroyed()) {
+ this.liveSocket.requestDOMUpdate(() => this.onJoin(data));
+ }
+ }).receive("error", (resp) => !this.isDestroyed() && this.onJoinError(resp)).receive("timeout", () => !this.isDestroyed() && this.onJoinError({ reason: "timeout" }));
+ });
+ }
+ onJoinError(resp) {
+ if (resp.reason === "unauthorized" || resp.reason === "stale") {
+ this.log("error", () => ["unauthorized live_redirect. Falling back to page request", resp]);
+ return this.onRedirect({ to: this.href });
+ }
+ if (resp.redirect || resp.live_redirect) {
+ this.joinPending = false;
+ this.channel.leave();
+ }
+ if (resp.redirect) {
+ return this.onRedirect(resp.redirect);
+ }
+ if (resp.live_redirect) {
+ return this.onLiveRedirect(resp.live_redirect);
+ }
+ this.log("error", () => ["unable to join", resp]);
+ if (this.liveSocket.isConnected()) {
+ this.liveSocket.reloadWithJitter(this);
+ }
+ }
+ onClose(reason) {
+ if (this.isDestroyed()) {
+ return;
+ }
+ if (this.liveSocket.hasPendingLink() && reason !== "leave") {
+ return this.liveSocket.reloadWithJitter(this);
+ }
+ this.destroyAllChildren();
+ this.liveSocket.dropActiveElement(this);
+ if (document.activeElement) {
+ document.activeElement.blur();
+ }
+ if (this.liveSocket.isUnloaded()) {
+ this.showLoader(BEFORE_UNLOAD_LOADER_TIMEOUT);
+ }
+ }
+ onError(reason) {
+ this.onClose(reason);
+ if (this.liveSocket.isConnected()) {
+ this.log("error", () => ["view crashed", reason]);
+ }
+ if (!this.liveSocket.isUnloaded()) {
+ this.displayError();
+ }
+ }
+ displayError() {
+ if (this.isMain()) {
+ dom_default.dispatchEvent(window, "phx:page-loading-start", { detail: { to: this.href, kind: "error" } });
+ }
+ this.showLoader();
+ this.setContainerClasses(PHX_DISCONNECTED_CLASS, PHX_ERROR_CLASS);
+ }
+ pushWithReply(refGenerator, event, payload, onReply = function() {
+ }) {
+ if (!this.isConnected()) {
+ return;
+ }
+ let [ref, [el], opts] = refGenerator ? refGenerator() : [null, [], {}];
+ let onLoadingDone = function() {
+ };
+ if (opts.page_loading || el && el.getAttribute(this.binding(PHX_PAGE_LOADING)) !== null) {
+ onLoadingDone = this.liveSocket.withPageLoading({ kind: "element", target: el });
+ }
+ if (typeof payload.cid !== "number") {
+ delete payload.cid;
+ }
+ return this.liveSocket.wrapPush(this, { timeout: true }, () => {
+ return this.channel.push(event, payload, PUSH_TIMEOUT).receive("ok", (resp) => {
+ if (ref !== null) {
+ this.undoRefs(ref);
+ }
+ let finish = (hookReply) => {
+ if (resp.redirect) {
+ this.onRedirect(resp.redirect);
+ }
+ if (resp.live_patch) {
+ this.onLivePatch(resp.live_patch);
+ }
+ if (resp.live_redirect) {
+ this.onLiveRedirect(resp.live_redirect);
+ }
+ onLoadingDone();
+ onReply(resp, hookReply);
+ };
+ if (resp.diff) {
+ this.liveSocket.requestDOMUpdate(() => {
+ let hookReply = this.applyDiff("update", resp.diff, ({ diff, events }) => {
+ this.update(diff, events);
+ });
+ finish(hookReply);
+ });
+ } else {
+ finish(null);
+ }
+ });
+ });
+ }
+ undoRefs(ref) {
+ dom_default.all(document, `[${PHX_REF_SRC}="${this.id}"][${PHX_REF}="${ref}"]`, (el) => {
+ let disabledVal = el.getAttribute(PHX_DISABLED);
+ el.removeAttribute(PHX_REF);
+ el.removeAttribute(PHX_REF_SRC);
+ if (el.getAttribute(PHX_READONLY) !== null) {
+ el.readOnly = false;
+ el.removeAttribute(PHX_READONLY);
+ }
+ if (disabledVal !== null) {
+ el.disabled = disabledVal === "true" ? true : false;
+ el.removeAttribute(PHX_DISABLED);
+ }
+ PHX_EVENT_CLASSES.forEach((className) => dom_default.removeClass(el, className));
+ let disableRestore = el.getAttribute(PHX_DISABLE_WITH_RESTORE);
+ if (disableRestore !== null) {
+ el.innerText = disableRestore;
+ el.removeAttribute(PHX_DISABLE_WITH_RESTORE);
+ }
+ let toEl = dom_default.private(el, PHX_REF);
+ if (toEl) {
+ let hook = this.triggerBeforeUpdateHook(el, toEl);
+ DOMPatch.patchEl(el, toEl, this.liveSocket.getActiveElement());
+ if (hook) {
+ hook.__updated();
+ }
+ dom_default.deletePrivate(el, PHX_REF);
+ }
+ });
+ }
+ putRef(elements, event, opts = {}) {
+ let newRef = this.ref++;
+ let disableWith = this.binding(PHX_DISABLE_WITH);
+ if (opts.loading) {
+ elements = elements.concat(dom_default.all(document, opts.loading));
+ }
+ elements.forEach((el) => {
+ el.classList.add(`phx-${event}-loading`);
+ el.setAttribute(PHX_REF, newRef);
+ el.setAttribute(PHX_REF_SRC, this.el.id);
+ let disableText = el.getAttribute(disableWith);
+ if (disableText !== null) {
+ if (!el.getAttribute(PHX_DISABLE_WITH_RESTORE)) {
+ el.setAttribute(PHX_DISABLE_WITH_RESTORE, el.innerText);
+ }
+ if (disableText !== "") {
+ el.innerText = disableText;
+ }
+ el.setAttribute("disabled", "");
+ }
+ });
+ return [newRef, elements, opts];
+ }
+ componentID(el) {
+ let cid = el.getAttribute && el.getAttribute(PHX_COMPONENT);
+ return cid ? parseInt(cid) : null;
+ }
+ targetComponentID(target, targetCtx, opts = {}) {
+ if (isCid(targetCtx)) {
+ return targetCtx;
+ }
+ let cidOrSelector = target.getAttribute(this.binding("target"));
+ if (isCid(cidOrSelector)) {
+ return parseInt(cidOrSelector);
+ } else if (targetCtx && (cidOrSelector !== null || opts.target)) {
+ return this.closestComponentID(targetCtx);
+ } else {
+ return null;
+ }
+ }
+ closestComponentID(targetCtx) {
+ if (isCid(targetCtx)) {
+ return targetCtx;
+ } else if (targetCtx) {
+ return maybe(targetCtx.closest(`[${PHX_COMPONENT}]`), (el) => this.ownsElement(el) && this.componentID(el));
+ } else {
+ return null;
+ }
+ }
+ pushHookEvent(targetCtx, event, payload, onReply) {
+ if (!this.isConnected()) {
+ this.log("hook", () => ["unable to push hook event. LiveView not connected", event, payload]);
+ return false;
+ }
+ let [ref, els, opts] = this.putRef([], "hook");
+ this.pushWithReply(() => [ref, els, opts], "event", {
+ type: "hook",
+ event,
+ value: payload,
+ cid: this.closestComponentID(targetCtx)
+ }, (resp, reply) => onReply(reply, ref));
+ return ref;
+ }
+ extractMeta(el, meta, value) {
+ let prefix = this.binding("value-");
+ for (let i = 0; i < el.attributes.length; i++) {
+ if (!meta) {
+ meta = {};
+ }
+ let name = el.attributes[i].name;
+ if (name.startsWith(prefix)) {
+ meta[name.replace(prefix, "")] = el.getAttribute(name);
+ }
+ }
+ if (el.value !== void 0) {
+ if (!meta) {
+ meta = {};
+ }
+ meta.value = el.value;
+ if (el.tagName === "INPUT" && CHECKABLE_INPUTS.indexOf(el.type) >= 0 && !el.checked) {
+ delete meta.value;
+ }
+ }
+ if (value) {
+ if (!meta) {
+ meta = {};
+ }
+ for (let key in value) {
+ meta[key] = value[key];
+ }
+ }
+ return meta;
+ }
+ pushEvent(type, el, targetCtx, phxEvent, meta, opts = {}) {
+ this.pushWithReply(() => this.putRef([el], type, opts), "event", {
+ type,
+ event: phxEvent,
+ value: this.extractMeta(el, meta, opts.value),
+ cid: this.targetComponentID(el, targetCtx, opts)
+ });
+ }
+ pushFileProgress(fileEl, entryRef, progress, onReply = function() {
+ }) {
+ this.liveSocket.withinOwners(fileEl.form, (view, targetCtx) => {
+ view.pushWithReply(null, "progress", {
+ event: fileEl.getAttribute(view.binding(PHX_PROGRESS)),
+ ref: fileEl.getAttribute(PHX_UPLOAD_REF),
+ entry_ref: entryRef,
+ progress,
+ cid: view.targetComponentID(fileEl.form, targetCtx)
+ }, onReply);
+ });
+ }
+ pushInput(inputEl, targetCtx, forceCid, phxEvent, opts, callback) {
+ let uploads;
+ let cid = isCid(forceCid) ? forceCid : this.targetComponentID(inputEl.form, targetCtx);
+ let refGenerator = () => this.putRef([inputEl, inputEl.form], "change", opts);
+ let formData;
+ if (inputEl.getAttribute(this.binding("change"))) {
+ formData = serializeForm(inputEl.form, { _target: opts._target }, [inputEl.name]);
+ } else {
+ formData = serializeForm(inputEl.form, { _target: opts._target });
+ }
+ if (dom_default.isUploadInput(inputEl) && inputEl.files && inputEl.files.length > 0) {
+ LiveUploader.trackFiles(inputEl, Array.from(inputEl.files));
+ }
+ uploads = LiveUploader.serializeUploads(inputEl);
+ let event = {
+ type: "form",
+ event: phxEvent,
+ value: formData,
+ uploads,
+ cid
+ };
+ this.pushWithReply(refGenerator, "event", event, (resp) => {
+ dom_default.showError(inputEl, this.liveSocket.binding(PHX_FEEDBACK_FOR));
+ if (dom_default.isUploadInput(inputEl) && inputEl.getAttribute("data-phx-auto-upload") !== null) {
+ if (LiveUploader.filesAwaitingPreflight(inputEl).length > 0) {
+ let [ref, _els] = refGenerator();
+ this.uploadFiles(inputEl.form, targetCtx, ref, cid, (_uploads) => {
+ callback && callback(resp);
+ this.triggerAwaitingSubmit(inputEl.form);
+ });
+ }
+ } else {
+ callback && callback(resp);
+ }
+ });
+ }
+ triggerAwaitingSubmit(formEl) {
+ let awaitingSubmit = this.getScheduledSubmit(formEl);
+ if (awaitingSubmit) {
+ let [_el, _ref, _opts, callback] = awaitingSubmit;
+ this.cancelSubmit(formEl);
+ callback();
+ }
+ }
+ getScheduledSubmit(formEl) {
+ return this.formSubmits.find(([el, _ref, _opts, _callback]) => el.isSameNode(formEl));
+ }
+ scheduleSubmit(formEl, ref, opts, callback) {
+ if (this.getScheduledSubmit(formEl)) {
+ return true;
+ }
+ this.formSubmits.push([formEl, ref, opts, callback]);
+ }
+ cancelSubmit(formEl) {
+ this.formSubmits = this.formSubmits.filter(([el, ref, _callback]) => {
+ if (el.isSameNode(formEl)) {
+ this.undoRefs(ref);
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ pushFormSubmit(formEl, targetCtx, phxEvent, opts, onReply) {
+ let filterIgnored = (el) => {
+ let userIgnored = closestPhxBinding(el, `${this.binding(PHX_UPDATE)}=ignore`, el.form);
+ return !(userIgnored || closestPhxBinding(el, "data-phx-update=ignore", el.form));
+ };
+ let filterDisables = (el) => {
+ return el.hasAttribute(this.binding(PHX_DISABLE_WITH));
+ };
+ let filterButton = (el) => el.tagName == "BUTTON";
+ let filterInput = (el) => ["INPUT", "TEXTAREA", "SELECT"].includes(el.tagName);
+ let refGenerator = () => {
+ let formElements = Array.from(formEl.elements);
+ let disables = formElements.filter(filterDisables);
+ let buttons = formElements.filter(filterButton).filter(filterIgnored);
+ let inputs = formElements.filter(filterInput).filter(filterIgnored);
+ buttons.forEach((button) => {
+ button.setAttribute(PHX_DISABLED, button.disabled);
+ button.disabled = true;
+ });
+ inputs.forEach((input) => {
+ input.setAttribute(PHX_READONLY, input.readOnly);
+ input.readOnly = true;
+ if (input.files) {
+ input.setAttribute(PHX_DISABLED, input.disabled);
+ input.disabled = true;
+ }
+ });
+ formEl.setAttribute(this.binding(PHX_PAGE_LOADING), "");
+ return this.putRef([formEl].concat(disables).concat(buttons).concat(inputs), "submit", opts);
+ };
+ let cid = this.targetComponentID(formEl, targetCtx);
+ if (LiveUploader.hasUploadsInProgress(formEl)) {
+ let [ref, _els] = refGenerator();
+ let push = () => this.pushFormSubmit(formEl, targetCtx, phxEvent, opts, onReply);
+ return this.scheduleSubmit(formEl, ref, opts, push);
+ } else if (LiveUploader.inputsAwaitingPreflight(formEl).length > 0) {
+ let [ref, els] = refGenerator();
+ let proxyRefGen = () => [ref, els, opts];
+ this.uploadFiles(formEl, targetCtx, ref, cid, (_uploads) => {
+ let formData = serializeForm(formEl, {});
+ this.pushWithReply(proxyRefGen, "event", {
+ type: "form",
+ event: phxEvent,
+ value: formData,
+ cid
+ }, onReply);
+ });
+ } else {
+ let formData = serializeForm(formEl, {});
+ this.pushWithReply(refGenerator, "event", {
+ type: "form",
+ event: phxEvent,
+ value: formData,
+ cid
+ }, onReply);
+ }
+ }
+ uploadFiles(formEl, targetCtx, ref, cid, onComplete) {
+ let joinCountAtUpload = this.joinCount;
+ let inputEls = LiveUploader.activeFileInputs(formEl);
+ let numFileInputsInProgress = inputEls.length;
+ inputEls.forEach((inputEl) => {
+ let uploader = new LiveUploader(inputEl, this, () => {
+ numFileInputsInProgress--;
+ if (numFileInputsInProgress === 0) {
+ onComplete();
+ }
+ });
+ this.uploaders[inputEl] = uploader;
+ let entries = uploader.entries().map((entry) => entry.toPreflightPayload());
+ let payload = {
+ ref: inputEl.getAttribute(PHX_UPLOAD_REF),
+ entries,
+ cid: this.targetComponentID(inputEl.form, targetCtx)
+ };
+ this.log("upload", () => ["sending preflight request", payload]);
+ this.pushWithReply(null, "allow_upload", payload, (resp) => {
+ this.log("upload", () => ["got preflight response", resp]);
+ if (resp.error) {
+ this.undoRefs(ref);
+ let [entry_ref, reason] = resp.error;
+ this.log("upload", () => [`error for entry ${entry_ref}`, reason]);
+ } else {
+ let onError = (callback) => {
+ this.channel.onError(() => {
+ if (this.joinCount === joinCountAtUpload) {
+ callback();
+ }
+ });
+ };
+ uploader.initAdapterUpload(resp, onError, this.liveSocket);
+ }
+ });
+ });
+ }
+ dispatchUploads(name, filesOrBlobs) {
+ let inputs = dom_default.findUploadInputs(this.el).filter((el) => el.name === name);
+ if (inputs.length === 0) {
+ logError(`no live file inputs found matching the name "${name}"`);
+ } else if (inputs.length > 1) {
+ logError(`duplicate live file inputs found matching the name "${name}"`);
+ } else {
+ dom_default.dispatchEvent(inputs[0], PHX_TRACK_UPLOADS, { detail: { files: filesOrBlobs } });
+ }
+ }
+ pushFormRecovery(form, newCid, callback) {
+ this.liveSocket.withinOwners(form, (view, targetCtx) => {
+ let input = form.elements[0];
+ let phxEvent = form.getAttribute(this.binding(PHX_AUTO_RECOVER)) || form.getAttribute(this.binding("change"));
+ js_default.exec("change", phxEvent, view, input, ["push", { _target: input.name, newCid, callback }]);
+ });
+ }
+ pushLinkPatch(href, targetEl, callback) {
+ let linkRef = this.liveSocket.setPendingLink(href);
+ let refGen = targetEl ? () => this.putRef([targetEl], "click") : null;
+ let fallback = () => this.liveSocket.redirect(window.location.href);
+ let push = this.pushWithReply(refGen, "live_patch", { url: href }, (resp) => {
+ this.liveSocket.requestDOMUpdate(() => {
+ if (resp.link_redirect) {
+ this.liveSocket.replaceMain(href, null, callback, linkRef);
+ } else {
+ if (this.liveSocket.commitPendingLink(linkRef)) {
+ this.href = href;
+ }
+ this.applyPendingUpdates();
+ callback && callback(linkRef);
+ }
+ });
+ });
+ if (push) {
+ push.receive("timeout", fallback);
+ } else {
+ fallback();
+ }
+ }
+ formsForRecovery(html) {
+ if (this.joinCount === 0) {
+ return [];
+ }
+ let phxChange = this.binding("change");
+ let template = document.createElement("template");
+ template.innerHTML = html;
+ return dom_default.all(this.el, `form[${phxChange}]`).filter((form) => form.id && this.ownsElement(form)).filter((form) => form.elements.length > 0).filter((form) => form.getAttribute(this.binding(PHX_AUTO_RECOVER)) !== "ignore").map((form) => {
+ let newForm = template.content.querySelector(`form[id="${form.id}"][${phxChange}="${form.getAttribute(phxChange)}"]`);
+ if (newForm) {
+ return [form, newForm, this.targetComponentID(newForm)];
+ } else {
+ return [form, null, null];
+ }
+ }).filter(([form, newForm, newCid]) => newForm);
+ }
+ maybePushComponentsDestroyed(destroyedCIDs) {
+ let willDestroyCIDs = destroyedCIDs.filter((cid) => {
+ return dom_default.findComponentNodeList(this.el, cid).length === 0;
+ });
+ if (willDestroyCIDs.length > 0) {
+ this.pruningCIDs.push(...willDestroyCIDs);
+ this.pushWithReply(null, "cids_will_destroy", { cids: willDestroyCIDs }, () => {
+ this.pruningCIDs = this.pruningCIDs.filter((cid) => willDestroyCIDs.indexOf(cid) !== -1);
+ let completelyDestroyCIDs = willDestroyCIDs.filter((cid) => {
+ return dom_default.findComponentNodeList(this.el, cid).length === 0;
+ });
+ if (completelyDestroyCIDs.length > 0) {
+ this.pushWithReply(null, "cids_destroyed", { cids: completelyDestroyCIDs }, (resp) => {
+ this.rendered.pruneCIDs(resp.cids);
+ });
+ }
+ });
+ }
+ }
+ ownsElement(el) {
+ return el.getAttribute(PHX_PARENT_ID) === this.id || maybe(el.closest(PHX_VIEW_SELECTOR), (node) => node.id) === this.id;
+ }
+ submitForm(form, targetCtx, phxEvent, opts = {}) {
+ dom_default.putPrivate(form, PHX_HAS_SUBMITTED, true);
+ let phxFeedback = this.liveSocket.binding(PHX_FEEDBACK_FOR);
+ let inputs = Array.from(form.elements);
+ this.liveSocket.blurActiveElement(this);
+ this.pushFormSubmit(form, targetCtx, phxEvent, opts, () => {
+ inputs.forEach((input) => dom_default.showError(input, phxFeedback));
+ this.liveSocket.restorePreviouslyActiveFocus();
+ });
+ }
+ binding(kind) {
+ return this.liveSocket.binding(kind);
+ }
+ };
+ var LiveSocket = class {
+ constructor(url, phxSocket, opts = {}) {
+ this.unloaded = false;
+ if (!phxSocket || phxSocket.constructor.name === "Object") {
+ throw new Error(`
a phoenix Socket must be provided as the second argument to the LiveSocket constructor. For example:
import {Socket} from "phoenix"
import {LiveSocket} from "phoenix_live_view"
let liveSocket = new LiveSocket("/live", Socket, {...})
- `);this.socket=new e(t,i),this.bindingPrefix=i.bindingPrefix||yg,this.opts=i,this.params=_o(i.params||{}),this.viewLogger=i.viewLogger,this.metadataCallbacks=i.metadata||{},this.defaults=Object.assign(Jr(Eg),i.defaults||{}),this.activeElement=null,this.prevActive=null,this.silenced=!1,this.main=null,this.outgoingMainEl=null,this.clickStartedAtTarget=null,this.linkRef=1,this.roots={},this.href=window.location.href,this.pendingLink=null,this.currentLocation=Jr(window.location),this.hooks=i.hooks||{},this.uploaders=i.uploaders||{},this.loaderTimeout=i.loaderTimeout||vg,this.reloadWithJitterTimer=null,this.maxReloads=i.maxReloads||rg,this.reloadJitterMin=i.reloadJitterMin||sg,this.reloadJitterMax=i.reloadJitterMax||og,this.failsafeJitter=i.failsafeJitter||ag,this.localStorage=i.localStorage||window.localStorage,this.sessionStorage=i.sessionStorage||window.sessionStorage,this.boundTopLevelEvents=!1,this.domCallbacks=Object.assign({onNodeAdded:_o(),onBeforeElUpdated:_o()},i.dom||{}),this.transitions=new Xg,window.addEventListener("pagehide",s=>{this.unloaded=!0}),this.socket.onOpen(()=>{this.isUnloaded()&&window.location.reload()})}isProfileEnabled(){return this.sessionStorage.getItem(bo)==="true"}isDebugEnabled(){return this.sessionStorage.getItem(qr)==="true"}isDebugDisabled(){return this.sessionStorage.getItem(qr)==="false"}enableDebug(){this.sessionStorage.setItem(qr,"true")}enableProfiling(){this.sessionStorage.setItem(bo,"true")}disableDebug(){this.sessionStorage.setItem(qr,"false")}disableProfiling(){this.sessionStorage.removeItem(bo)}enableLatencySim(t){this.enableDebug(),console.log("latency simulator enabled for the duration of this browser session. Call disableLatencySim() to disable"),this.sessionStorage.setItem(yo,t)}disableLatencySim(){this.sessionStorage.removeItem(yo)}getLatencySim(){let t=this.sessionStorage.getItem(yo);return t?parseInt(t):null}getSocket(){return this.socket}connect(){window.location.hostname==="localhost"&&!this.isDebugDisabled()&&this.enableDebug();let t=()=>{this.joinRootViews()?(this.bindTopLevelEvents(),this.socket.connect()):this.main&&this.socket.connect()};["complete","loaded","interactive"].indexOf(document.readyState)>=0?t():document.addEventListener("DOMContentLoaded",()=>t())}disconnect(t){clearTimeout(this.reloadWithJitterTimer),this.socket.disconnect(t)}replaceTransport(t){clearTimeout(this.reloadWithJitterTimer),this.socket.replaceTransport(t),this.connect()}execJS(t,e,i=null){this.owner(t,s=>Nt.exec(i,e,s,t))}triggerDOM(t,e){this.domCallbacks[t](...e)}time(t,e){if(!this.isProfileEnabled()||!console.time)return e();console.time(t);let i=e();return console.timeEnd(t),i}log(t,e,i){if(this.viewLogger){let[s,o]=i();this.viewLogger(t,e,s,o)}else if(this.isDebugEnabled()){let[s,o]=i();xg(t,e,s,o)}}requestDOMUpdate(t){this.transitions.after(t)}transition(t,e,i=function(){}){this.transitions.addTransition(t,e,i)}onChannel(t,e,i){t.on(e,s=>{let o=this.getLatencySim();o?(console.log(`simulating ${o}ms of latency from server to client`),setTimeout(()=>i(s),o)):i(s)})}wrapPush(t,e,i){let s=this.getLatencySim(),o=t.joinCount;if(!s)return this.isConnected()&&e.timeout?i().receive("timeout",()=>{t.joinCount===o&&!t.isDestroyed()&&this.reloadWithJitter(t,()=>{this.log(t,"timeout",()=>["received timeout while communicating with server. Falling back to hard refresh for recovery"])})}):i();console.log(`simulating ${s}ms of latency from client to server`);let c={receives:[],receive(d,g){this.receives.push([d,g])}};return setTimeout(()=>{t.isDestroyed()||c.receives.reduce((d,[g,v])=>d.receive(g,v),i())},s),c}reloadWithJitter(t,e){clearTimeout(this.reloadWithJitterTimer),this.disconnect();let i=this.reloadJitterMin,s=this.reloadJitterMax,o=Math.floor(Math.random()*(s-i+1))+i,c=oi.updateLocal(this.localStorage,window.location.pathname,nu,0,d=>d+1);c>this.maxReloads&&(o=this.failsafeJitter),this.reloadWithJitterTimer=setTimeout(()=>{t.isDestroyed()||t.isConnected()||(t.destroy(),e?e():this.log(t,"join",()=>[`encountered ${c} consecutive reloads`]),c>this.maxReloads&&this.log(t,"join",()=>[`exceeded ${this.maxReloads} consecutive reloads. Entering failsafe mode`]),this.hasPendingLink()?window.location=this.pendingLink:window.location.reload())},o)}getHookCallbacks(t){return t&&t.startsWith("Phoenix.")?Dg[t.split(".")[1]]:this.hooks[t]}isUnloaded(){return this.unloaded}isConnected(){return this.socket.isConnected()}getBindingPrefix(){return this.bindingPrefix}binding(t){return`${this.getBindingPrefix()}${t}`}channel(t,e){return this.socket.channel(t,e)}joinRootViews(){let t=!1;return j.all(document,`${an}:not([${on}])`,e=>{if(!this.getRootById(e.id)){let i=this.newRootView(e);i.setHref(this.getHref()),i.join(),e.hasAttribute(Do)&&(this.main=i)}t=!0}),t}redirect(t,e){this.disconnect(),oi.redirect(t,e)}replaceMain(t,e,i=null,s=this.setPendingLink(t)){this.outgoingMainEl=this.outgoingMainEl||this.main.el;let o=j.cloneNode(this.outgoingMainEl,"");this.main.showLoader(this.loaderTimeout),this.main.destroy(),this.main=this.newRootView(o,e),this.main.setRedirect(t),this.transitionRemoves(),this.main.join((c,d)=>{c===1&&this.commitPendingLink(s)&&this.requestDOMUpdate(()=>{j.findPhxSticky(document).forEach(g=>o.appendChild(g)),this.outgoingMainEl.replaceWith(o),this.outgoingMainEl=null,i&&requestAnimationFrame(i),d()})})}transitionRemoves(t){let e=this.binding("remove");t=t||j.all(document,`[${e}]`),t.forEach(i=>{document.body.contains(i)&&this.execJS(i,i.getAttribute(e),"remove")})}isPhxView(t){return t.getAttribute&&t.getAttribute(li)!==null}newRootView(t,e){let i=new cu(t,this,null,e);return this.roots[i.id]=i,i}owner(t,e){let i=qt(t.closest(an),s=>this.getViewByEl(s))||this.main;i&&e(i)}withinOwners(t,e){this.owner(t,i=>e(i,t))}getViewByEl(t){let e=t.getAttribute(Kn);return qt(this.getRootById(e),i=>i.getDescendentByEl(t))}getRootById(t){return this.roots[t]}destroyAllViews(){for(let t in this.roots)this.roots[t].destroy(),delete this.roots[t];this.main=null}destroyViewByEl(t){let e=this.getRootById(t.getAttribute(Kn));e&&e.id===t.id?(e.destroy(),delete this.roots[e.id]):e&&e.destroyDescendent(t.id)}setActiveElement(t){if(this.activeElement===t)return;this.activeElement=t;let e=()=>{t===this.activeElement&&(this.activeElement=null),t.removeEventListener("mouseup",this),t.removeEventListener("touchend",this)};t.addEventListener("mouseup",e),t.addEventListener("touchend",e)}getActiveElement(){return document.activeElement===document.body?this.activeElement||document.activeElement:document.activeElement||document.body}dropActiveElement(t){this.prevActive&&t.ownsElement(this.prevActive)&&(this.prevActive=null)}restorePreviouslyActiveFocus(){this.prevActive&&this.prevActive!==document.body&&this.prevActive.focus()}blurActiveElement(){this.prevActive=this.getActiveElement(),this.prevActive!==document.body&&this.prevActive.blur()}bindTopLevelEvents(){this.boundTopLevelEvents||(this.boundTopLevelEvents=!0,this.socket.onClose(t=>{t&&t.code===1e3&&this.main&&this.reloadWithJitter(this.main)}),document.body.addEventListener("click",function(){}),window.addEventListener("pageshow",t=>{t.persisted&&(this.getSocket().disconnect(),this.withPageLoading({to:window.location.href,kind:"redirect"}),window.location.reload())},!0),this.bindNav(),this.bindClicks(),this.bindForms(),this.bind({keyup:"keyup",keydown:"keydown"},(t,e,i,s,o,c)=>{let d=s.getAttribute(this.binding(gg)),g=t.key&&t.key.toLowerCase();if(d&&d.toLowerCase()!==g)return;let v={key:t.key,...this.eventMeta(e,t,s)};Nt.exec(e,o,i,s,["push",{data:v}])}),this.bind({blur:"focusout",focus:"focusin"},(t,e,i,s,o,c)=>{if(!c){let d={key:t.key,...this.eventMeta(e,t,s)};Nt.exec(e,o,i,s,["push",{data:d}])}}),this.bind({blur:"blur",focus:"focus"},(t,e,i,s,o,c,d)=>{if(d==="window"){let g=this.eventMeta(e,t,s);Nt.exec(e,c,i,s,["push",{data:g}])}}),window.addEventListener("dragover",t=>t.preventDefault()),window.addEventListener("drop",t=>{t.preventDefault();let e=qt(zn(t.target,this.binding(Ml)),o=>o.getAttribute(this.binding(Ml))),i=e&&document.getElementById(e),s=Array.from(t.dataTransfer.files||[]);!i||i.disabled||s.length===0||!(i.files instanceof FileList)||(Ve.trackFiles(i,s),i.dispatchEvent(new Event("input",{bubbles:!0})))}),this.on(su,t=>{let e=t.target;if(!j.isUploadInput(e))return;let i=Array.from(t.detail.files||[]).filter(s=>s instanceof File||s instanceof Blob);Ve.trackFiles(e,i),e.dispatchEvent(new Event("input",{bubbles:!0}))}))}eventMeta(t,e,i){let s=this.metadataCallbacks[t];return s?s(e,i):{}}setPendingLink(t){return this.linkRef++,this.pendingLink=t,this.linkRef}commitPendingLink(t){return this.linkRef!==t?!1:(this.href=this.pendingLink,this.pendingLink=null,!0)}getHref(){return this.href}hasPendingLink(){return!!this.pendingLink}bind(t,e){for(let i in t){let s=t[i];this.on(s,o=>{let c=this.binding(i),d=this.binding(`window-${i}`),g=o.target.getAttribute&&o.target.getAttribute(c);g?this.debounce(o.target,o,s,()=>{this.withinOwners(o.target,v=>{e(o,i,v,o.target,g,null)})}):j.all(document,`[${d}]`,v=>{let C=v.getAttribute(d);this.debounce(v,o,s,()=>{this.withinOwners(v,x=>{e(o,i,x,v,C,"window")})})})})}}bindClicks(){window.addEventListener("mousedown",t=>this.clickStartedAtTarget=t.target),this.bindClick("click","click",!1),this.bindClick("mousedown","capture-click",!0)}bindClick(t,e,i){let s=this.binding(e);window.addEventListener(t,o=>{let c=null;if(i)c=o.target.matches(`[${s}]`)?o.target:o.target.querySelector(`[${s}]`);else{let g=this.clickStartedAtTarget||o.target;c=zn(g,s),this.dispatchClickAway(o,g),this.clickStartedAtTarget=null}let d=c&&c.getAttribute(s);d&&(c.getAttribute("href")==="#"&&o.preventDefault(),this.debounce(c,o,"click",()=>{this.withinOwners(c,g=>{Nt.exec("click",d,g,c,["push",{data:this.eventMeta("click",o,c)}])})}))},i)}dispatchClickAway(t,e){let i=this.binding("click-away");j.all(document,`[${i}]`,s=>{s.isSameNode(e)||s.contains(e)||this.withinOwners(t.target,o=>{let c=s.getAttribute(i);Nt.isVisible(s)&&Nt.exec("click",c,o,s,["push",{data:this.eventMeta("click",t,t.target)}])})})}bindNav(){if(!oi.canPushState())return;history.scrollRestoration&&(history.scrollRestoration="manual");let t=null;window.addEventListener("scroll",e=>{clearTimeout(t),t=setTimeout(()=>{oi.updateCurrentState(i=>Object.assign(i,{scroll:window.scrollY}))},100)}),window.addEventListener("popstate",e=>{if(!this.registerNewLocation(window.location))return;let{type:i,id:s,root:o,scroll:c}=e.state||{},d=window.location.href;this.requestDOMUpdate(()=>{this.main.isConnected()&&i==="patch"&&s===this.main.id?this.main.pushLinkPatch(d,null):this.replaceMain(d,null,()=>{o&&this.replaceRootHistory(),typeof c=="number"&&setTimeout(()=>{window.scrollTo(0,c)},0)})})},!1),window.addEventListener("click",e=>{let i=zn(e.target,go),s=i&&i.getAttribute(go),o=e.metaKey||e.ctrlKey||e.button===1;if(!s||!this.isConnected()||!this.main||o)return;let c=i.href,d=i.getAttribute(ug);e.preventDefault(),e.stopImmediatePropagation(),this.pendingLink!==c&&this.requestDOMUpdate(()=>{if(s==="patch")this.pushHistoryPatch(c,d,i);else if(s==="redirect")this.historyRedirect(c,d);else throw new Error(`expected ${go} to be "patch" or "redirect", got: ${s}`)})},!1)}dispatchEvent(t,e={}){j.dispatchEvent(window,`phx:${t}`,{detail:e})}dispatchEvents(t){t.forEach(([e,i])=>this.dispatchEvent(e,i))}withPageLoading(t,e){j.dispatchEvent(window,"phx:page-loading-start",{detail:t});let i=()=>j.dispatchEvent(window,"phx:page-loading-stop",{detail:t});return e?e(i):i}pushHistoryPatch(t,e,i){this.withPageLoading({to:t,kind:"patch"},s=>{this.main.pushLinkPatch(t,i,o=>{this.historyPatch(t,e,o),s()})})}historyPatch(t,e,i=this.setPendingLink(t)){this.commitPendingLink(i)&&(oi.pushState(e,{type:"patch",id:this.main.id},t),this.registerNewLocation(window.location))}historyRedirect(t,e,i){let s=window.scrollY;this.withPageLoading({to:t,kind:"redirect"},o=>{this.replaceMain(t,i,()=>{oi.pushState(e,{type:"redirect",id:this.main.id,scroll:s},t),this.registerNewLocation(window.location),o()})})}replaceRootHistory(){oi.pushState("replace",{root:!0,type:"patch",id:this.main.id})}registerNewLocation(t){let{pathname:e,search:i}=this.currentLocation;return e+i===t.pathname+t.search?!1:(this.currentLocation=Jr(t),!0)}bindForms(){let t=0;this.on("submit",e=>{let i=e.target.getAttribute(this.binding("submit"));i&&(e.preventDefault(),e.target.disabled=!0,this.withinOwners(e.target,s=>{Nt.exec("submit",i,s,e.target,["push",{}])}))},!1);for(let e of["change","input"])this.on(e,i=>{let s=this.binding("change"),o=i.target,c=o.getAttribute(s),d=o.form&&o.form.getAttribute(s),g=c||d;if(!g||o.type==="number"&&o.validity&&o.validity.badInput)return;let v=c?o:o.form,C=t;t++;let{at:x,type:I}=j.private(o,"prev-iteration")||{};x===C-1&&e!==I||(j.putPrivate(o,"prev-iteration",{at:C,type:e}),this.debounce(o,i,e,()=>{this.withinOwners(v,D=>{j.putPrivate(o,ou,!0),j.isTextualInput(o)||this.setActiveElement(o),Nt.exec("change",g,D,o,["push",{_target:i.target.name,dispatcher:v}])})}))},!1)}debounce(t,e,i,s){if(i==="blur"||i==="focusout")return s();let o=this.binding(dg),c=this.binding(pg),d=this.defaults.debounce.toString(),g=this.defaults.throttle.toString();this.withinOwners(t,v=>{let C=()=>!v.isDestroyed()&&document.body.contains(t);j.debounce(t,e,o,d,c,g,C,()=>{s()})})}silenceEvents(t){this.silenced=!0,t(),this.silenced=!1}on(t,e){window.addEventListener(t,i=>{this.silenced||e(i)})}},Xg=class{constructor(){this.transitions=new Set,this.pendingOps=[],this.reset()}reset(){this.transitions.forEach(t=>{cancelTimeout(t),this.transitions.delete(t)}),this.flushPendingOps()}after(t){this.size()===0?t():this.pushPendingOp(t)}addTransition(t,e,i){e();let s=setTimeout(()=>{this.transitions.delete(s),i(),this.size()===0&&this.flushPendingOps()},t);this.transitions.add(s)}pushPendingOp(t){this.pendingOps.push(t)}size(){return this.transitions.size}flushPendingOps(){this.pendingOps.forEach(t=>t()),this.pendingOps=[]}};var Zr=yn(du());window.$=Lo.default;window.jQuery=Lo.default;var Yg=document.querySelector("meta[name='csrf-token']").getAttribute("content"),pu=new fu("/live",$l,{params:{_csrf_token:Yg}});Zr.default.config({barColors:{0:"#29d"},shadowColor:"rgba(0, 0, 0, .3)"});window.addEventListener("phx:page-loading-start",t=>Zr.default.show());window.addEventListener("phx:page-loading-stop",t=>Zr.default.hide());pu.connect();window.liveSocket=pu;})();
+ `);
+ }
+ this.socket = new phxSocket(url, opts);
+ this.bindingPrefix = opts.bindingPrefix || BINDING_PREFIX;
+ this.opts = opts;
+ this.params = closure2(opts.params || {});
+ this.viewLogger = opts.viewLogger;
+ this.metadataCallbacks = opts.metadata || {};
+ this.defaults = Object.assign(clone(DEFAULTS), opts.defaults || {});
+ this.activeElement = null;
+ this.prevActive = null;
+ this.silenced = false;
+ this.main = null;
+ this.outgoingMainEl = null;
+ this.clickStartedAtTarget = null;
+ this.linkRef = 1;
+ this.roots = {};
+ this.href = window.location.href;
+ this.pendingLink = null;
+ this.currentLocation = clone(window.location);
+ this.hooks = opts.hooks || {};
+ this.uploaders = opts.uploaders || {};
+ this.loaderTimeout = opts.loaderTimeout || LOADER_TIMEOUT;
+ this.reloadWithJitterTimer = null;
+ this.maxReloads = opts.maxReloads || MAX_RELOADS;
+ this.reloadJitterMin = opts.reloadJitterMin || RELOAD_JITTER_MIN;
+ this.reloadJitterMax = opts.reloadJitterMax || RELOAD_JITTER_MAX;
+ this.failsafeJitter = opts.failsafeJitter || FAILSAFE_JITTER;
+ this.localStorage = opts.localStorage || window.localStorage;
+ this.sessionStorage = opts.sessionStorage || window.sessionStorage;
+ this.boundTopLevelEvents = false;
+ this.domCallbacks = Object.assign({ onNodeAdded: closure2(), onBeforeElUpdated: closure2() }, opts.dom || {});
+ this.transitions = new TransitionSet();
+ window.addEventListener("pagehide", (_e) => {
+ this.unloaded = true;
+ });
+ this.socket.onOpen(() => {
+ if (this.isUnloaded()) {
+ window.location.reload();
+ }
+ });
+ }
+ isProfileEnabled() {
+ return this.sessionStorage.getItem(PHX_LV_PROFILE) === "true";
+ }
+ isDebugEnabled() {
+ return this.sessionStorage.getItem(PHX_LV_DEBUG) === "true";
+ }
+ isDebugDisabled() {
+ return this.sessionStorage.getItem(PHX_LV_DEBUG) === "false";
+ }
+ enableDebug() {
+ this.sessionStorage.setItem(PHX_LV_DEBUG, "true");
+ }
+ enableProfiling() {
+ this.sessionStorage.setItem(PHX_LV_PROFILE, "true");
+ }
+ disableDebug() {
+ this.sessionStorage.setItem(PHX_LV_DEBUG, "false");
+ }
+ disableProfiling() {
+ this.sessionStorage.removeItem(PHX_LV_PROFILE);
+ }
+ enableLatencySim(upperBoundMs) {
+ this.enableDebug();
+ console.log("latency simulator enabled for the duration of this browser session. Call disableLatencySim() to disable");
+ this.sessionStorage.setItem(PHX_LV_LATENCY_SIM, upperBoundMs);
+ }
+ disableLatencySim() {
+ this.sessionStorage.removeItem(PHX_LV_LATENCY_SIM);
+ }
+ getLatencySim() {
+ let str = this.sessionStorage.getItem(PHX_LV_LATENCY_SIM);
+ return str ? parseInt(str) : null;
+ }
+ getSocket() {
+ return this.socket;
+ }
+ connect() {
+ if (window.location.hostname === "localhost" && !this.isDebugDisabled()) {
+ this.enableDebug();
+ }
+ let doConnect = () => {
+ if (this.joinRootViews()) {
+ this.bindTopLevelEvents();
+ this.socket.connect();
+ } else if (this.main) {
+ this.socket.connect();
+ }
+ };
+ if (["complete", "loaded", "interactive"].indexOf(document.readyState) >= 0) {
+ doConnect();
+ } else {
+ document.addEventListener("DOMContentLoaded", () => doConnect());
+ }
+ }
+ disconnect(callback) {
+ clearTimeout(this.reloadWithJitterTimer);
+ this.socket.disconnect(callback);
+ }
+ replaceTransport(transport) {
+ clearTimeout(this.reloadWithJitterTimer);
+ this.socket.replaceTransport(transport);
+ this.connect();
+ }
+ execJS(el, encodedJS, eventType = null) {
+ this.owner(el, (view) => js_default.exec(eventType, encodedJS, view, el));
+ }
+ triggerDOM(kind, args) {
+ this.domCallbacks[kind](...args);
+ }
+ time(name, func) {
+ if (!this.isProfileEnabled() || !console.time) {
+ return func();
+ }
+ console.time(name);
+ let result = func();
+ console.timeEnd(name);
+ return result;
+ }
+ log(view, kind, msgCallback) {
+ if (this.viewLogger) {
+ let [msg, obj] = msgCallback();
+ this.viewLogger(view, kind, msg, obj);
+ } else if (this.isDebugEnabled()) {
+ let [msg, obj] = msgCallback();
+ debug(view, kind, msg, obj);
+ }
+ }
+ requestDOMUpdate(callback) {
+ this.transitions.after(callback);
+ }
+ transition(time, onStart, onDone = function() {
+ }) {
+ this.transitions.addTransition(time, onStart, onDone);
+ }
+ onChannel(channel, event, cb) {
+ channel.on(event, (data) => {
+ let latency = this.getLatencySim();
+ if (!latency) {
+ cb(data);
+ } else {
+ console.log(`simulating ${latency}ms of latency from server to client`);
+ setTimeout(() => cb(data), latency);
+ }
+ });
+ }
+ wrapPush(view, opts, push) {
+ let latency = this.getLatencySim();
+ let oldJoinCount = view.joinCount;
+ if (!latency) {
+ if (this.isConnected() && opts.timeout) {
+ return push().receive("timeout", () => {
+ if (view.joinCount === oldJoinCount && !view.isDestroyed()) {
+ this.reloadWithJitter(view, () => {
+ this.log(view, "timeout", () => ["received timeout while communicating with server. Falling back to hard refresh for recovery"]);
+ });
+ }
+ });
+ } else {
+ return push();
+ }
+ }
+ console.log(`simulating ${latency}ms of latency from client to server`);
+ let fakePush = {
+ receives: [],
+ receive(kind, cb) {
+ this.receives.push([kind, cb]);
+ }
+ };
+ setTimeout(() => {
+ if (view.isDestroyed()) {
+ return;
+ }
+ fakePush.receives.reduce((acc, [kind, cb]) => acc.receive(kind, cb), push());
+ }, latency);
+ return fakePush;
+ }
+ reloadWithJitter(view, log) {
+ clearTimeout(this.reloadWithJitterTimer);
+ this.disconnect();
+ let minMs = this.reloadJitterMin;
+ let maxMs = this.reloadJitterMax;
+ let afterMs = Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs;
+ let tries = browser_default.updateLocal(this.localStorage, window.location.pathname, CONSECUTIVE_RELOADS, 0, (count) => count + 1);
+ if (tries > this.maxReloads) {
+ afterMs = this.failsafeJitter;
+ }
+ this.reloadWithJitterTimer = setTimeout(() => {
+ if (view.isDestroyed() || view.isConnected()) {
+ return;
+ }
+ view.destroy();
+ log ? log() : this.log(view, "join", () => [`encountered ${tries} consecutive reloads`]);
+ if (tries > this.maxReloads) {
+ this.log(view, "join", () => [`exceeded ${this.maxReloads} consecutive reloads. Entering failsafe mode`]);
+ }
+ if (this.hasPendingLink()) {
+ window.location = this.pendingLink;
+ } else {
+ window.location.reload();
+ }
+ }, afterMs);
+ }
+ getHookCallbacks(name) {
+ return name && name.startsWith("Phoenix.") ? hooks_default[name.split(".")[1]] : this.hooks[name];
+ }
+ isUnloaded() {
+ return this.unloaded;
+ }
+ isConnected() {
+ return this.socket.isConnected();
+ }
+ getBindingPrefix() {
+ return this.bindingPrefix;
+ }
+ binding(kind) {
+ return `${this.getBindingPrefix()}${kind}`;
+ }
+ channel(topic, params) {
+ return this.socket.channel(topic, params);
+ }
+ joinRootViews() {
+ let rootsFound = false;
+ dom_default.all(document, `${PHX_VIEW_SELECTOR}:not([${PHX_PARENT_ID}])`, (rootEl) => {
+ if (!this.getRootById(rootEl.id)) {
+ let view = this.newRootView(rootEl);
+ view.setHref(this.getHref());
+ view.join();
+ if (rootEl.hasAttribute(PHX_MAIN)) {
+ this.main = view;
+ }
+ }
+ rootsFound = true;
+ });
+ return rootsFound;
+ }
+ redirect(to, flash) {
+ this.disconnect();
+ browser_default.redirect(to, flash);
+ }
+ replaceMain(href, flash, callback = null, linkRef = this.setPendingLink(href)) {
+ this.outgoingMainEl = this.outgoingMainEl || this.main.el;
+ let newMainEl = dom_default.cloneNode(this.outgoingMainEl, "");
+ this.main.showLoader(this.loaderTimeout);
+ this.main.destroy();
+ this.main = this.newRootView(newMainEl, flash);
+ this.main.setRedirect(href);
+ this.transitionRemoves();
+ this.main.join((joinCount, onDone) => {
+ if (joinCount === 1 && this.commitPendingLink(linkRef)) {
+ this.requestDOMUpdate(() => {
+ dom_default.findPhxSticky(document).forEach((el) => newMainEl.appendChild(el));
+ this.outgoingMainEl.replaceWith(newMainEl);
+ this.outgoingMainEl = null;
+ callback && requestAnimationFrame(callback);
+ onDone();
+ });
+ }
+ });
+ }
+ transitionRemoves(elements) {
+ let removeAttr = this.binding("remove");
+ elements = elements || dom_default.all(document, `[${removeAttr}]`);
+ elements.forEach((el) => {
+ if (document.body.contains(el)) {
+ this.execJS(el, el.getAttribute(removeAttr), "remove");
+ }
+ });
+ }
+ isPhxView(el) {
+ return el.getAttribute && el.getAttribute(PHX_SESSION) !== null;
+ }
+ newRootView(el, flash) {
+ let view = new View(el, this, null, flash);
+ this.roots[view.id] = view;
+ return view;
+ }
+ owner(childEl, callback) {
+ let view = maybe(childEl.closest(PHX_VIEW_SELECTOR), (el) => this.getViewByEl(el)) || this.main;
+ if (view) {
+ callback(view);
+ }
+ }
+ withinOwners(childEl, callback) {
+ this.owner(childEl, (view) => callback(view, childEl));
+ }
+ getViewByEl(el) {
+ let rootId = el.getAttribute(PHX_ROOT_ID);
+ return maybe(this.getRootById(rootId), (root) => root.getDescendentByEl(el));
+ }
+ getRootById(id) {
+ return this.roots[id];
+ }
+ destroyAllViews() {
+ for (let id in this.roots) {
+ this.roots[id].destroy();
+ delete this.roots[id];
+ }
+ this.main = null;
+ }
+ destroyViewByEl(el) {
+ let root = this.getRootById(el.getAttribute(PHX_ROOT_ID));
+ if (root && root.id === el.id) {
+ root.destroy();
+ delete this.roots[root.id];
+ } else if (root) {
+ root.destroyDescendent(el.id);
+ }
+ }
+ setActiveElement(target) {
+ if (this.activeElement === target) {
+ return;
+ }
+ this.activeElement = target;
+ let cancel = () => {
+ if (target === this.activeElement) {
+ this.activeElement = null;
+ }
+ target.removeEventListener("mouseup", this);
+ target.removeEventListener("touchend", this);
+ };
+ target.addEventListener("mouseup", cancel);
+ target.addEventListener("touchend", cancel);
+ }
+ getActiveElement() {
+ if (document.activeElement === document.body) {
+ return this.activeElement || document.activeElement;
+ } else {
+ return document.activeElement || document.body;
+ }
+ }
+ dropActiveElement(view) {
+ if (this.prevActive && view.ownsElement(this.prevActive)) {
+ this.prevActive = null;
+ }
+ }
+ restorePreviouslyActiveFocus() {
+ if (this.prevActive && this.prevActive !== document.body) {
+ this.prevActive.focus();
+ }
+ }
+ blurActiveElement() {
+ this.prevActive = this.getActiveElement();
+ if (this.prevActive !== document.body) {
+ this.prevActive.blur();
+ }
+ }
+ bindTopLevelEvents() {
+ if (this.boundTopLevelEvents) {
+ return;
+ }
+ this.boundTopLevelEvents = true;
+ this.socket.onClose((event) => {
+ if (event && event.code === 1e3 && this.main) {
+ this.reloadWithJitter(this.main);
+ }
+ });
+ document.body.addEventListener("click", function() {
+ });
+ window.addEventListener("pageshow", (e) => {
+ if (e.persisted) {
+ this.getSocket().disconnect();
+ this.withPageLoading({ to: window.location.href, kind: "redirect" });
+ window.location.reload();
+ }
+ }, true);
+ this.bindNav();
+ this.bindClicks();
+ this.bindForms();
+ this.bind({ keyup: "keyup", keydown: "keydown" }, (e, type, view, targetEl, phxEvent, eventTarget) => {
+ let matchKey = targetEl.getAttribute(this.binding(PHX_KEY));
+ let pressedKey = e.key && e.key.toLowerCase();
+ if (matchKey && matchKey.toLowerCase() !== pressedKey) {
+ return;
+ }
+ let data = __spreadValues({ key: e.key }, this.eventMeta(type, e, targetEl));
+ js_default.exec(type, phxEvent, view, targetEl, ["push", { data }]);
+ });
+ this.bind({ blur: "focusout", focus: "focusin" }, (e, type, view, targetEl, phxEvent, eventTarget) => {
+ if (!eventTarget) {
+ let data = __spreadValues({ key: e.key }, this.eventMeta(type, e, targetEl));
+ js_default.exec(type, phxEvent, view, targetEl, ["push", { data }]);
+ }
+ });
+ this.bind({ blur: "blur", focus: "focus" }, (e, type, view, targetEl, targetCtx, phxEvent, phxTarget) => {
+ if (phxTarget === "window") {
+ let data = this.eventMeta(type, e, targetEl);
+ js_default.exec(type, phxEvent, view, targetEl, ["push", { data }]);
+ }
+ });
+ window.addEventListener("dragover", (e) => e.preventDefault());
+ window.addEventListener("drop", (e) => {
+ e.preventDefault();
+ let dropTargetId = maybe(closestPhxBinding(e.target, this.binding(PHX_DROP_TARGET)), (trueTarget) => {
+ return trueTarget.getAttribute(this.binding(PHX_DROP_TARGET));
+ });
+ let dropTarget = dropTargetId && document.getElementById(dropTargetId);
+ let files = Array.from(e.dataTransfer.files || []);
+ if (!dropTarget || dropTarget.disabled || files.length === 0 || !(dropTarget.files instanceof FileList)) {
+ return;
+ }
+ LiveUploader.trackFiles(dropTarget, files);
+ dropTarget.dispatchEvent(new Event("input", { bubbles: true }));
+ });
+ this.on(PHX_TRACK_UPLOADS, (e) => {
+ let uploadTarget = e.target;
+ if (!dom_default.isUploadInput(uploadTarget)) {
+ return;
+ }
+ let files = Array.from(e.detail.files || []).filter((f) => f instanceof File || f instanceof Blob);
+ LiveUploader.trackFiles(uploadTarget, files);
+ uploadTarget.dispatchEvent(new Event("input", { bubbles: true }));
+ });
+ }
+ eventMeta(eventName, e, targetEl) {
+ let callback = this.metadataCallbacks[eventName];
+ return callback ? callback(e, targetEl) : {};
+ }
+ setPendingLink(href) {
+ this.linkRef++;
+ this.pendingLink = href;
+ return this.linkRef;
+ }
+ commitPendingLink(linkRef) {
+ if (this.linkRef !== linkRef) {
+ return false;
+ } else {
+ this.href = this.pendingLink;
+ this.pendingLink = null;
+ return true;
+ }
+ }
+ getHref() {
+ return this.href;
+ }
+ hasPendingLink() {
+ return !!this.pendingLink;
+ }
+ bind(events, callback) {
+ for (let event in events) {
+ let browserEventName = events[event];
+ this.on(browserEventName, (e) => {
+ let binding = this.binding(event);
+ let windowBinding = this.binding(`window-${event}`);
+ let targetPhxEvent = e.target.getAttribute && e.target.getAttribute(binding);
+ if (targetPhxEvent) {
+ this.debounce(e.target, e, browserEventName, () => {
+ this.withinOwners(e.target, (view) => {
+ callback(e, event, view, e.target, targetPhxEvent, null);
+ });
+ });
+ } else {
+ dom_default.all(document, `[${windowBinding}]`, (el) => {
+ let phxEvent = el.getAttribute(windowBinding);
+ this.debounce(el, e, browserEventName, () => {
+ this.withinOwners(el, (view) => {
+ callback(e, event, view, el, phxEvent, "window");
+ });
+ });
+ });
+ }
+ });
+ }
+ }
+ bindClicks() {
+ window.addEventListener("mousedown", (e) => this.clickStartedAtTarget = e.target);
+ this.bindClick("click", "click", false);
+ this.bindClick("mousedown", "capture-click", true);
+ }
+ bindClick(eventName, bindingName, capture) {
+ let click = this.binding(bindingName);
+ window.addEventListener(eventName, (e) => {
+ let target = null;
+ if (capture) {
+ target = e.target.matches(`[${click}]`) ? e.target : e.target.querySelector(`[${click}]`);
+ } else {
+ let clickStartedAtTarget = this.clickStartedAtTarget || e.target;
+ target = closestPhxBinding(clickStartedAtTarget, click);
+ this.dispatchClickAway(e, clickStartedAtTarget);
+ this.clickStartedAtTarget = null;
+ }
+ let phxEvent = target && target.getAttribute(click);
+ if (!phxEvent) {
+ return;
+ }
+ if (target.getAttribute("href") === "#") {
+ e.preventDefault();
+ }
+ this.debounce(target, e, "click", () => {
+ this.withinOwners(target, (view) => {
+ js_default.exec("click", phxEvent, view, target, ["push", { data: this.eventMeta("click", e, target) }]);
+ });
+ });
+ }, capture);
+ }
+ dispatchClickAway(e, clickStartedAt) {
+ let phxClickAway = this.binding("click-away");
+ dom_default.all(document, `[${phxClickAway}]`, (el) => {
+ if (!(el.isSameNode(clickStartedAt) || el.contains(clickStartedAt))) {
+ this.withinOwners(e.target, (view) => {
+ let phxEvent = el.getAttribute(phxClickAway);
+ if (js_default.isVisible(el)) {
+ js_default.exec("click", phxEvent, view, el, ["push", { data: this.eventMeta("click", e, e.target) }]);
+ }
+ });
+ }
+ });
+ }
+ bindNav() {
+ if (!browser_default.canPushState()) {
+ return;
+ }
+ if (history.scrollRestoration) {
+ history.scrollRestoration = "manual";
+ }
+ let scrollTimer = null;
+ window.addEventListener("scroll", (_e) => {
+ clearTimeout(scrollTimer);
+ scrollTimer = setTimeout(() => {
+ browser_default.updateCurrentState((state) => Object.assign(state, { scroll: window.scrollY }));
+ }, 100);
+ });
+ window.addEventListener("popstate", (event) => {
+ if (!this.registerNewLocation(window.location)) {
+ return;
+ }
+ let { type, id, root, scroll } = event.state || {};
+ let href = window.location.href;
+ this.requestDOMUpdate(() => {
+ if (this.main.isConnected() && (type === "patch" && id === this.main.id)) {
+ this.main.pushLinkPatch(href, null);
+ } else {
+ this.replaceMain(href, null, () => {
+ if (root) {
+ this.replaceRootHistory();
+ }
+ if (typeof scroll === "number") {
+ setTimeout(() => {
+ window.scrollTo(0, scroll);
+ }, 0);
+ }
+ });
+ }
+ });
+ }, false);
+ window.addEventListener("click", (e) => {
+ let target = closestPhxBinding(e.target, PHX_LIVE_LINK);
+ let type = target && target.getAttribute(PHX_LIVE_LINK);
+ let wantsNewTab = e.metaKey || e.ctrlKey || e.button === 1;
+ if (!type || !this.isConnected() || !this.main || wantsNewTab) {
+ return;
+ }
+ let href = target.href;
+ let linkState = target.getAttribute(PHX_LINK_STATE);
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ if (this.pendingLink === href) {
+ return;
+ }
+ this.requestDOMUpdate(() => {
+ if (type === "patch") {
+ this.pushHistoryPatch(href, linkState, target);
+ } else if (type === "redirect") {
+ this.historyRedirect(href, linkState);
+ } else {
+ throw new Error(`expected ${PHX_LIVE_LINK} to be "patch" or "redirect", got: ${type}`);
+ }
+ });
+ }, false);
+ }
+ dispatchEvent(event, payload = {}) {
+ dom_default.dispatchEvent(window, `phx:${event}`, { detail: payload });
+ }
+ dispatchEvents(events) {
+ events.forEach(([event, payload]) => this.dispatchEvent(event, payload));
+ }
+ withPageLoading(info, callback) {
+ dom_default.dispatchEvent(window, "phx:page-loading-start", { detail: info });
+ let done = () => dom_default.dispatchEvent(window, "phx:page-loading-stop", { detail: info });
+ return callback ? callback(done) : done;
+ }
+ pushHistoryPatch(href, linkState, targetEl) {
+ this.withPageLoading({ to: href, kind: "patch" }, (done) => {
+ this.main.pushLinkPatch(href, targetEl, (linkRef) => {
+ this.historyPatch(href, linkState, linkRef);
+ done();
+ });
+ });
+ }
+ historyPatch(href, linkState, linkRef = this.setPendingLink(href)) {
+ if (!this.commitPendingLink(linkRef)) {
+ return;
+ }
+ browser_default.pushState(linkState, { type: "patch", id: this.main.id }, href);
+ this.registerNewLocation(window.location);
+ }
+ historyRedirect(href, linkState, flash) {
+ let scroll = window.scrollY;
+ this.withPageLoading({ to: href, kind: "redirect" }, (done) => {
+ this.replaceMain(href, flash, () => {
+ browser_default.pushState(linkState, { type: "redirect", id: this.main.id, scroll }, href);
+ this.registerNewLocation(window.location);
+ done();
+ });
+ });
+ }
+ replaceRootHistory() {
+ browser_default.pushState("replace", { root: true, type: "patch", id: this.main.id });
+ }
+ registerNewLocation(newLocation) {
+ let { pathname, search } = this.currentLocation;
+ if (pathname + search === newLocation.pathname + newLocation.search) {
+ return false;
+ } else {
+ this.currentLocation = clone(newLocation);
+ return true;
+ }
+ }
+ bindForms() {
+ let iterations = 0;
+ this.on("submit", (e) => {
+ let phxEvent = e.target.getAttribute(this.binding("submit"));
+ if (!phxEvent) {
+ return;
+ }
+ e.preventDefault();
+ e.target.disabled = true;
+ this.withinOwners(e.target, (view) => {
+ js_default.exec("submit", phxEvent, view, e.target, ["push", {}]);
+ });
+ }, false);
+ for (let type of ["change", "input"]) {
+ this.on(type, (e) => {
+ let phxChange = this.binding("change");
+ let input = e.target;
+ let inputEvent = input.getAttribute(phxChange);
+ let formEvent = input.form && input.form.getAttribute(phxChange);
+ let phxEvent = inputEvent || formEvent;
+ if (!phxEvent) {
+ return;
+ }
+ if (input.type === "number" && input.validity && input.validity.badInput) {
+ return;
+ }
+ let dispatcher = inputEvent ? input : input.form;
+ let currentIterations = iterations;
+ iterations++;
+ let { at, type: lastType } = dom_default.private(input, "prev-iteration") || {};
+ if (at === currentIterations - 1 && type !== lastType) {
+ return;
+ }
+ dom_default.putPrivate(input, "prev-iteration", { at: currentIterations, type });
+ this.debounce(input, e, type, () => {
+ this.withinOwners(dispatcher, (view) => {
+ dom_default.putPrivate(input, PHX_HAS_FOCUSED, true);
+ if (!dom_default.isTextualInput(input)) {
+ this.setActiveElement(input);
+ }
+ js_default.exec("change", phxEvent, view, input, ["push", { _target: e.target.name, dispatcher }]);
+ });
+ });
+ }, false);
+ }
+ }
+ debounce(el, event, eventType, callback) {
+ if (eventType === "blur" || eventType === "focusout") {
+ return callback();
+ }
+ let phxDebounce = this.binding(PHX_DEBOUNCE);
+ let phxThrottle = this.binding(PHX_THROTTLE);
+ let defaultDebounce = this.defaults.debounce.toString();
+ let defaultThrottle = this.defaults.throttle.toString();
+ this.withinOwners(el, (view) => {
+ let asyncFilter = () => !view.isDestroyed() && document.body.contains(el);
+ dom_default.debounce(el, event, phxDebounce, defaultDebounce, phxThrottle, defaultThrottle, asyncFilter, () => {
+ callback();
+ });
+ });
+ }
+ silenceEvents(callback) {
+ this.silenced = true;
+ callback();
+ this.silenced = false;
+ }
+ on(event, callback) {
+ window.addEventListener(event, (e) => {
+ if (!this.silenced) {
+ callback(e);
+ }
+ });
+ }
+ };
+ var TransitionSet = class {
+ constructor() {
+ this.transitions = /* @__PURE__ */ new Set();
+ this.pendingOps = [];
+ this.reset();
+ }
+ reset() {
+ this.transitions.forEach((timer) => {
+ cancelTimeout(timer);
+ this.transitions.delete(timer);
+ });
+ this.flushPendingOps();
+ }
+ after(callback) {
+ if (this.size() === 0) {
+ callback();
+ } else {
+ this.pushPendingOp(callback);
+ }
+ }
+ addTransition(time, onStart, onDone) {
+ onStart();
+ let timer = setTimeout(() => {
+ this.transitions.delete(timer);
+ onDone();
+ if (this.size() === 0) {
+ this.flushPendingOps();
+ }
+ }, time);
+ this.transitions.add(timer);
+ }
+ pushPendingOp(op) {
+ this.pendingOps.push(op);
+ }
+ size() {
+ return this.transitions.size;
+ }
+ flushPendingOps() {
+ this.pendingOps.forEach((op) => op());
+ this.pendingOps = [];
+ }
+ };
+
+ // js/app.js
+ var import_topbar = __toESM(require_topbar());
+ window.$ = import_jquery3.default;
+ window.jQuery = import_jquery3.default;
+ var csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content");
+ var liveSocket = new LiveSocket("/live", Socket, { params: { _csrf_token: csrfToken } });
+ import_topbar.default.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" });
+ window.addEventListener("phx:page-loading-start", (info) => import_topbar.default.show());
+ window.addEventListener("phx:page-loading-stop", (info) => import_topbar.default.hide());
+ liveSocket.connect();
+ window.liveSocket = liveSocket;
+})();
/**
* Prism: Lightweight, robust, elegant syntax highlighting
*
@@ -54,4 +36383,3 @@ bootstrap/dist/js/bootstrap.esm.js:
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*)
*/
-//# sourceMappingURL=app.js.map