@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 15.1 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{hexToRgba as e,isNamedColor as t,getNamedColorCopy as n,hslaToRgba as r}from"../../colorUtils.js";import u from"../../core/Error.js";import{BloomEffect as o,DropShadowEffect as c,BlurEffect as a,HueRotateEffect as i,OpacityEffect as l,ColorMatrixEffect as s}from"./effects.js";import{canInterpolateEffects as f,normalizeEffects as p}from"./utils.js";class h extends SyntaxError{constructor(e,t,n,r){super(e),this.expected=t,this.found=n,this.location=r,this.name="SyntaxError"}format(e){let t="Error: "+this.message;if(this.location){let n=null;const r=e.find(e=>e.source===this.location.source);r&&(n=r.text.split(/\r\n|\n|\r/g));const u=this.location.start,o=this.location.source&&"function"==typeof this.location.source.offset?this.location.source.offset(u):u,c=this.location.source+":"+o.line+":"+o.column;if(n){const e=this.location.end,r="".padEnd(o.line.toString().length," "),a=n[u.line-1],i=(u.line===e.line?e.column:a.length+1)-u.column||1;t+="\n --\x3e "+c+"\n"+r+" |\n"+o.line+" | "+a+"\n"+r+" | "+"".padEnd(u.column-1," ")+"".padEnd(i,"^")}else t+="\n at "+c}return t}static buildMessage(e,t){function n(e){return e.codePointAt(0).toString(16).toUpperCase()}const r=Object.prototype.hasOwnProperty.call(RegExp.prototype,"unicode")?new RegExp("[\\p{C}\\p{Mn}\\p{Mc}]","gu"):null;function u(e){return r?e.replace(r,e=>"\\u{"+n(e)+"}"):e}function o(e){return u(e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,e=>"\\x0"+n(e)).replace(/[\x10-\x1F\x7F-\x9F]/g,e=>"\\x"+n(e)))}function c(e){return u(e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,e=>"\\x0"+n(e)).replace(/[\x10-\x1F\x7F-\x9F]/g,e=>"\\x"+n(e)))}const a={literal:e=>'"'+o(e.text)+'"',class(e){const t=e.parts.map(e=>Array.isArray(e)?c(e[0])+"-"+c(e[1]):c(e));return"["+(e.inverted?"^":"")+t.join("")+"]"+(e.unicode?"u":"")},any:()=>"any character",end:()=>"end of input",other:e=>e.description};function i(e){return a[e.type](e)}function l(e){const t=e.map(i);if(t.sort(),t.length>0){let e=1;for(let n=1;n<t.length;n++)t[n-1]!==t[n]&&(t[e]=t[n],e++);t.length=e}switch(t.length){case 1:return t[0];case 2:return t[0]+" or "+t[1];default:return t.slice(0,-1).join(", ")+", or "+t[t.length-1]}}function s(e){return e?'"'+o(e)+'"':"end of input"}return"Expected "+l(e)+" but "+s(t)+" found."}}function m(e,t){const n={},r=(t=void 0!==t?t:{}).grammarSource,u={start:Qe};let o=Qe;const c="none",a=")",i=",",l="(",s="%",f="px",p="cm",m="mm",g="in",d="pt",y="pc",w="deg",x="rad",v="grad",A="turn",b="#",$=".",E="e",F=/^[ \t\n\r]/,C=/^[a-z\-]/,j=/^[0-9a-fA-F]/,P=/^[+\-]/,R=/^[0-9]/,S=Be("none"),q=Ue("none",!1),M=Ue(")",!1),z=Ue(",",!1),I=De([" ","\t","\n","\r"],!1,!1,!1),O=Be("function"),k=Ue("(",!1),N=Be("identifier"),T=De([["a","z"],"-"],!1,!1,!1),U=Be("percentage"),D=Ue("%",!1),L=Be("length"),B=Ue("px",!1),G=Ue("cm",!1),H=Ue("mm",!1),J=Ue("in",!1),K=Ue("pt",!1),Q=Ue("pc",!1),V=Be("angle"),W=Ue("deg",!1),X=Ue("rad",!1),Y=Ue("grad",!1),Z=Ue("turn",!1),_=Be("number"),ee=Be("color"),te=Ue("#",!1),ne=De([["0","9"],["a","f"],["A","F"]],!1,!1,!1),re=De(["+","-"],!1,!1,!1),ue=De([["0","9"]],!1,!1,!1),oe=Ue(".",!1),ce=Ue("e",!1);function ae(){return[]}function ie(e,t){return{type:"function",name:e,parameters:t||[]}}function le(e,t){return t.length>0?lt(e,t,3):[e]}function se(e){return{type:"quantity",value:e.value,unit:e.unit}}function fe(e){return{type:"color",colorType:e.type,value:e.value}}function pe(e){return e}function he(){return Ne()}function me(e){return{value:e,unit:"%"}}function ge(e){return{value:e,unit:"px"}}function de(e){return{value:e,unit:"cm"}}function ye(e){return{value:e,unit:"mm"}}function we(e){return{value:e,unit:"in"}}function xe(e){return{value:e,unit:"pt"}}function ve(e){return{value:e,unit:"pc"}}function Ae(e){return{value:e,unit:"deg"}}function be(e){return{value:e,unit:"rad"}}function $e(e){return{value:e,unit:"grad"}}function Ee(e){return{value:e,unit:"turn"}}function Fe(e){return{value:e,unit:null}}function Ce(){return{type:"hex",value:Ne()}}function je(e){return{type:"function",value:e}}function Pe(){return{type:"named",value:Ne()}}function Re(){return parseFloat(Ne())}let Se=0|t.peg$currPos,qe=Se;const Me=[{line:1,column:1}];let ze,Ie=Se,Oe=t.peg$maxFailExpected||[],ke=0|t.peg$silentFails;if(t.startRule){if(!(t.startRule in u))throw new Error("Can't start parsing from rule \""+t.startRule+'".');o=u[t.startRule]}function Ne(){return e.substring(qe,Se)}function Te(t=Se){const n=e.codePointAt(t);return void 0===n?"":String.fromCodePoint(n)}function Ue(e,t){return{type:"literal",text:e,ignoreCase:t}}function De(e,t,n,r){return{type:"class",parts:e,inverted:t,ignoreCase:n,unicode:r}}function Le(){return{type:"end"}}function Be(e){return{type:"other",description:e}}function Ge(t){let n,r=Me[t];if(r)return r;if(t>=Me.length)n=Me.length-1;else for(n=t;!Me[--n];);for(r=Me[n],r={line:r.line,column:r.column};n<t;)10===e.charCodeAt(n)?(r.line++,r.column=1):r.column++,n++;return Me[t]=r,r}function He(e,t,n){const u=Ge(e),o=Ge(t);return{source:r,start:{offset:e,line:u.line,column:u.column},end:{offset:t,line:o.line,column:o.column}}}function Je(e){Se<Ie||(Se>Ie&&(Ie=Se,Oe=[]),Oe.push(e))}function Ke(e,t,n){return new h(h.buildMessage(e,t),e,t,n)}function Qe(){let e;return e=Ve(),e===n&&(e=We()),e}function Ve(){let t,r;return ke++,t=Se,_e(),e.substr(Se,4)===c?(r=c,Se+=4):(r=n,0===ke&&Je(q)),r!==n?(_e(),qe=t,t=ae()):(Se=t,t=n),ke--,t===n&&0===ke&&Je(S),t}function We(){let e,t;if(e=[],t=Xe(),t!==n)for(;t!==n;)e.push(t),t=Xe();else e=n;return e}function Xe(){let t,r,u,o;return t=Se,_e(),r=et(),r!==n?(_e(),u=Ye(),u===n&&(u=null),_e(),41===e.charCodeAt(Se)?(o=a,Se++):(o=n,0===ke&&Je(M)),o!==n?(_e(),qe=t,t=ie(r,u)):(Se=t,t=n)):(Se=t,t=n),t}function Ye(){let t,r,u,o,c,a,l,s;if(t=Se,r=Ze(),r!==n){for(u=[],o=Se,c=_e(),44===e.charCodeAt(Se)?(a=i,Se++):(a=n,0===ke&&Je(z)),a===n&&(a=null),l=_e(),s=Ze(),s!==n?(c=[c,a,l,s],o=c):(Se=o,o=n);o!==n;)u.push(o),o=Se,c=_e(),44===e.charCodeAt(Se)?(a=i,Se++):(a=n,0===ke&&Je(z)),a===n&&(a=null),l=_e(),s=Ze(),s!==n?(c=[c,a,l,s],o=c):(Se=o,o=n);qe=t,t=le(r,u)}else Se=t,t=n;return t}function Ze(){let e,t;return e=Se,t=nt(),t===n&&(t=rt(),t===n&&(t=ut(),t===n&&(t=ot()))),t!==n&&(qe=e,t=se(t)),e=t,e===n&&(e=Se,t=ct(),t!==n&&(qe=e,t=fe(t)),e=t),e}function _e(){let t,r;for(ke++,t=[],r=e.charAt(Se),F.test(r)?Se++:(r=n,0===ke&&Je(I));r!==n;)t.push(r),r=e.charAt(Se),F.test(r)?Se++:(r=n,0===ke&&Je(I));return ke--,t}function et(){let t,r,u;return ke++,t=Se,r=tt(),r!==n?(40===e.charCodeAt(Se)?(u=l,Se++):(u=n,0===ke&&Je(k)),u!==n?(qe=t,t=pe(r)):(Se=t,t=n)):(Se=t,t=n),ke--,t===n&&(r=n,0===ke&&Je(O)),t}function tt(){let t,r,u;if(ke++,t=Se,r=[],u=e.charAt(Se),C.test(u)?Se++:(u=n,0===ke&&Je(T)),u!==n)for(;u!==n;)r.push(u),u=e.charAt(Se),C.test(u)?Se++:(u=n,0===ke&&Je(T));else r=n;return r!==n&&(qe=t,r=he()),t=r,ke--,t===n&&(r=n,0===ke&&Je(N)),t}function nt(){let t,r,u;return ke++,t=Se,_e(),r=at(),r!==n?(37===e.charCodeAt(Se)?(u=s,Se++):(u=n,0===ke&&Je(D)),u!==n?(qe=t,t=me(r)):(Se=t,t=n)):(Se=t,t=n),ke--,t===n&&0===ke&&Je(U),t}function rt(){let t,r,u;return ke++,t=Se,_e(),r=at(),r!==n?(e.substr(Se,2)===f?(u=f,Se+=2):(u=n,0===ke&&Je(B)),u!==n?(qe=t,t=ge(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,_e(),r=at(),r!==n?(e.substr(Se,2)===p?(u=p,Se+=2):(u=n,0===ke&&Je(G)),u!==n?(qe=t,t=de(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,_e(),r=at(),r!==n?(e.substr(Se,2)===m?(u=m,Se+=2):(u=n,0===ke&&Je(H)),u!==n?(qe=t,t=ye(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,_e(),r=at(),r!==n?(e.substr(Se,2)===g?(u=g,Se+=2):(u=n,0===ke&&Je(J)),u!==n?(qe=t,t=we(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,_e(),r=at(),r!==n?(e.substr(Se,2)===d?(u=d,Se+=2):(u=n,0===ke&&Je(K)),u!==n?(qe=t,t=xe(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,_e(),r=at(),r!==n?(e.substr(Se,2)===y?(u=y,Se+=2):(u=n,0===ke&&Je(Q)),u!==n?(qe=t,t=ve(r)):(Se=t,t=n)):(Se=t,t=n)))))),ke--,t===n&&0===ke&&Je(L),t}function ut(){let t,r,u;return ke++,t=Se,r=at(),r!==n?(e.substr(Se,3)===w?(u=w,Se+=3):(u=n,0===ke&&Je(W)),u!==n?(qe=t,t=Ae(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,r=at(),r!==n?(e.substr(Se,3)===x?(u=x,Se+=3):(u=n,0===ke&&Je(X)),u!==n?(qe=t,t=be(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,r=at(),r!==n?(e.substr(Se,4)===v?(u=v,Se+=4):(u=n,0===ke&&Je(Y)),u!==n?(qe=t,t=$e(r)):(Se=t,t=n)):(Se=t,t=n),t===n&&(t=Se,r=at(),r!==n?(e.substr(Se,4)===A?(u=A,Se+=4):(u=n,0===ke&&Je(Z)),u!==n?(qe=t,t=Ee(r)):(Se=t,t=n)):(Se=t,t=n)))),ke--,t===n&&(r=n,0===ke&&Je(V)),t}function ot(){let e,t;return ke++,e=Se,_e(),t=at(),t!==n?(qe=e,e=Fe(t)):(Se=e,e=n),ke--,e===n&&0===ke&&Je(_),e}function ct(){let t,r,u,o;if(ke++,t=Se,35===e.charCodeAt(Se)?(r=b,Se++):(r=n,0===ke&&Je(te)),r!==n){if(u=[],o=e.charAt(Se),j.test(o)?Se++:(o=n,0===ke&&Je(ne)),o!==n)for(;o!==n;)u.push(o),o=e.charAt(Se),j.test(o)?Se++:(o=n,0===ke&&Je(ne));else u=n;u!==n?(qe=t,t=Ce()):(Se=t,t=n)}else Se=t,t=n;return t===n&&(t=Se,r=Xe(),r!==n&&(qe=t,r=je(r)),t=r,t===n&&(t=Se,r=tt(),r!==n&&(qe=t,r=Pe()),t=r)),ke--,t===n&&(r=n,0===ke&&Je(ee)),t}function at(){let t,r,u,o,c,a,i,l;for(t=Se,r=e.charAt(Se),P.test(r)?Se++:(r=n,0===ke&&Je(re)),r===n&&(r=null),u=Se,o=[],c=e.charAt(Se),R.test(c)?Se++:(c=n,0===ke&&Je(ue));c!==n;)o.push(c),c=e.charAt(Se),R.test(c)?Se++:(c=n,0===ke&&Je(ue));if(46===e.charCodeAt(Se)?(c=$,Se++):(c=n,0===ke&&Je(oe)),c!==n){if(a=[],i=e.charAt(Se),R.test(i)?Se++:(i=n,0===ke&&Je(ue)),i!==n)for(;i!==n;)a.push(i),i=e.charAt(Se),R.test(i)?Se++:(i=n,0===ke&&Je(ue));else a=n;a!==n?(o=[o,c,a],u=o):(Se=u,u=n)}else Se=u,u=n;if(u===n)if(u=[],o=e.charAt(Se),R.test(o)?Se++:(o=n,0===ke&&Je(ue)),o!==n)for(;o!==n;)u.push(o),o=e.charAt(Se),R.test(o)?Se++:(o=n,0===ke&&Je(ue));else u=n;if(u!==n){if(o=Se,101===e.charCodeAt(Se)?(c=E,Se++):(c=n,0===ke&&Je(ce)),c!==n){if(a=e.charAt(Se),P.test(a)?Se++:(a=n,0===ke&&Je(re)),a===n&&(a=null),i=[],l=e.charAt(Se),R.test(l)?Se++:(l=n,0===ke&&Je(ue)),l!==n)for(;l!==n;)i.push(l),l=e.charAt(Se),R.test(l)?Se++:(l=n,0===ke&&Je(ue));else i=n;i!==n?(c=[c,a,i],o=c):(Se=o,o=n)}else Se=o,o=n;o===n&&(o=null),qe=t,t=Re()}else Se=t,t=n;return t}function it(e,t){return e.map(function(e){return e[t]})}function lt(e,t,n){return[e].concat(it(t,n))}ze=o();const st=ze!==n&&Se===e.length;function ft(){throw ze!==n&&Se<e.length&&Je(Le()),Ke(Oe,Ie<e.length?Te(Ie):null,Ie<e.length?He(Ie,Ie+1):He(Ie,Ie))}return t.peg$library?{peg$result:ze,peg$currPos:Se,peg$FAILED:n,peg$maxFailExpected:Oe,peg$maxFailPos:Ie,peg$success:st,peg$throw:st?void 0:ft}:st?ze:void ft()}function g(e){if(!e||0===e.length)return null;if("string"==typeof e){const t=d(e);return t&&0!==t.length?t:null}const t=e.map(e=>{if(!Number.isFinite(e.scale)||e.scale<=0)throw new u("effect:invalid-scale","scale must be finite and greater than 0",{stop:e});return{scale:e.scale,effects:d(e.value)}});t.sort((e,t)=>t.effects.length-e.effects.length);for(let n=0;n<t.length-1;n++){if(!f(t[n].effects,t[n+1].effects))throw new u("effect:interpolation-impossible","Cannot interpolate by scale between 2 lists of mixed effects",{a:t[n].effects,b:t[n+1].effects});p(t[n].effects,t[n+1].effects)}return t.sort((e,t)=>t.scale-e.scale),t}function d(e){let t;if(!e)return[];try{t=m(e)}catch(n){throw new u("effect:invalid-syntax","Invalid effect syntax",{value:e,error:n})}return t.map(e=>y(e))}function y(e){try{switch(e.name){case"grayscale":case"sepia":case"saturate":case"invert":case"brightness":case"contrast":return w(e);case"opacity":return x(e);case"hue-rotate":return v(e);case"blur":return A(e);case"drop-shadow":return b(e);case"bloom":return $(e)}}catch(t){throw t.details.filter=e,t}throw new u("effect:unknown-effect",`Effect '${e.name}' is not supported`,{effect:e})}function w(e){let t=1;return E(e.parameters,1),1===e.parameters.length&&(t=z(e.parameters[0])),new s(e.name,t)}function x(e){let t=1;return E(e.parameters,1),1===e.parameters.length&&(t=z(e.parameters[0])),new l(t)}function v(e){let t=0;return E(e.parameters,1),1===e.parameters.length&&(t=O(e.parameters[0])),new i(t)}function A(e){let t=0;return E(e.parameters,1),1===e.parameters.length&&(t=k(e.parameters[0]),C(t,e.parameters[0])),new a(t)}function b(e){const t=[];let n=null;for(const r of e.parameters)if("color"===r.type){if(t.length&&Object.freeze(t),n)throw new u("effect:type-error","Accepts only one color",{});n=N(r)}else{const e=k(r);if(Object.isFrozen(t))throw new u("effect:type-error","<length> parameters not consecutive",{lengths:t});t.push(e),3===t.length&&C(e,r)}if(t.length<2||t.length>3)throw new u("effect:type-error",`Expected <length>{2,3}, Actual: <length>{${t.length}}`,{lengths:t});return new c(t[0],t[1],t[2]||0,n||T("black"))}function $(e){let t=1,n=0,r=0;return E(e.parameters,3),e.parameters[0]&&(t=z(e.parameters[0])),e.parameters[1]&&(n=k(e.parameters[1]),C(n,e.parameters[1])),e.parameters[2]&&(r=z(e.parameters[2])),new o(t,n,r)}function E(e,t){if(e.length>t)throw new u("effect:type-error",`Function supports up to ${t} parameters, Actual: ${e.length}`,{parameters:e})}function F(e){if("color"===e.type)return"<color>";if(e.unit){if(e.unit in q)return"<length>";if(e.unit in R)return"<angle>";if("%"===e.unit)return"<percentage>"}return"<double>"}function C(e,t){if(e<0)throw new u("effect:type-error",`Negative values are not allowed, Actual: ${e}`,{term:t})}function j(e){if("quantity"!==e.type||null!==e.unit)throw new u("effect:type-error",`Expected <double>, Actual: ${F(e)}`,{term:e})}function P(e){if("quantity"!==e.type||null!==e.unit&&"%"!==e.unit)throw new u("effect:type-error",`Expected <double> or <percentage>, Actual: ${F(e)}`,{term:e})}const R={deg:1,grad:.9,rad:180/Math.PI,turn:360};function S(e){if("quantity"!==e.type||!(0===e.value&&null===e.unit||e.unit&&null!=R[e.unit]))throw new u("effect:type-error",`Expected <angle>, Actual: ${F(e)}`,{term:e})}const q={px:1,cm:96/2.54,mm:96/2.54/10,in:96,pc:16,pt:96/72};function M(e){if("quantity"!==e.type||!(0===e.value&&null===e.unit||e.unit&&null!=q[e.unit]))throw new u("effect:type-error",`Expected <length>, Actual: ${F(e)}`,{term:e})}function z(e){P(e);const t=e.value;return C(t,e),"%"===e.unit?.01*t:t}function I(e){return j(e),C(e.value,e),e.value}function O(e){return S(e),e.value*R[e.unit]||0}function k(e){return M(e),e.value*q[e.unit]||0}function N(t){switch(t.colorType){case"hex":return e(t.value);case"named":return T(t.value);case"function":return L(t.value)}}function T(e){if(!t(e))throw new u("effect:unknown-color",`color '${e}' isn't valid`,{namedColor:e});return n(e)}const U=/^rgba?/i,D=/^hsla?/i;function L(e){if(E(e.parameters,4),U.test(e.name))return[z(e.parameters[0]),z(e.parameters[1]),z(e.parameters[2]),e.parameters[3]?z(e.parameters[3]):1];if(D.test(e.name))return r(I(e.parameters[0]),z(e.parameters[1]),z(e.parameters[2]),e.parameters[3]?z(e.parameters[3]):1);throw new u("effect:syntax-error",`Invalid color function '${e.name}'`,{colorFunction:e})}export{g as parse};