UNPKG

9.28 kBJavaScriptView Raw
1/* Sutton SignWriting Core Module v1.2.0 (https://github.com/sutton-signwriting/core), author: Steve Slevinski (https://SteveSlevinski.me), license: MIT */
2!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports):"function"==typeof define&&define.amd?define(["exports"],a):a(((e=e||self).ssw=e.ssw||{},e.ssw.fswquery={}))}(this,(function(e){"use strict";let a={base:"[123][0-9a-f]{2}",coord:"(?:[0-9]{3}x[0-9]{3})?",var:"V[0-9]+"};a.symbol=`S${a.base}[0-5u][0-9a-fu]`,a.range=`R${a.base}t${a.base}`,a.prefix=`(?:A(?:${a.symbol}|${a.range})+)?T`,a.signbox=`(?:${a.symbol}${a.coord}|${a.range}${a.coord})*`,a.full=`Q(${a.prefix})?(${a.signbox})?(${a.var})?(-?)`;let s={symbol:"S[123][0-9a-f]{2}[0-5][0-9a-f]",coord:"[0-9]{3}x[0-9]{3}",sort:"A",box:"[BLMR]"};s.prefix=`(?:${s.sort}(?:${s.symbol})+)`,s.spatial=`${s.symbol}${s.coord}`,s.signbox=`${s.box}${s.coord}(?:${s.spatial})*`,s.sign=`${s.prefix}?${s.signbox}`,s.sortable=`${s.prefix}${s.signbox}`;const r=e=>e.split("x").map(e=>parseInt(e)),t=e=>({required:!0,parts:"T"==e?void 0:e.match(new RegExp(`(${a.symbol}|${a.range})`,"g")).map(e=>"S"==e[0]?e:e.slice(1).split("t"))}),i=e=>e.match(new RegExp(`(${a.symbol}${a.coord}|${a.range}${a.coord})`,"g")).map(e=>{let a,s;return e.includes("x")?(a=r(e.slice(-7)),s=e.slice(0,-7)):s=e,s.includes("S")?{symbol:s,coord:a}:{range:s.slice(1).split("t"),coord:a}});let c={colorize:"C",colorhex:"(?:[0-9a-fA-F]{3}){1,2}",colorname:"[a-zA-Z]+",padding:"P[0-9]{2}",zoom:"Z(?:[0-9]+(?:\\.[0-9]+)?|x)",zoomsym:"Z[0-9]{2},[0-9]+(?:\\.[0-9]+)?(?:,[0-9]{3}x[0-9]{3})?",classbase:"-?[_a-zA-Z][_a-zA-Z0-9-]{0,100}",id:"[a-zA-Z][_a-zA-Z0-9-]{0,100}"};c.colorbase=`(?:${c.colorhex}|${c.colorname})`,c.color=`_${c.colorbase}_`,c.colors=`_${c.colorbase}(?:,${c.colorbase})?_`,c.background=`G${c.color}`,c.detail=`D${c.colors}`,c.detailsym=`D[0-9]{2}${c.colors}`,c.classes=`${c.classbase}(?: ${c.classbase})*`,c.full=`-(${c.colorize})?(${c.padding})?(${c.background})?(${c.detail})?(${c.zoom})?(?:-((?:${c.detailsym})*)((?:${c.zoomsym})*))?(?:-(${c.classes})?!(?:(${c.id})!)?)?`;const n=e=>{const a=`^(${s.prefix})?(${s.signbox})(${c.full})?`,t="string"==typeof e?e.match(new RegExp(a)):void 0;return t?{sequence:t[1]?t[1].slice(1).match(/.{6}/g):void 0,box:t[2][0],max:r(t[2].slice(1,8)),spatials:t[2].length<9?void 0:t[2].slice(8).match(/(.{13})/g).map(e=>({symbol:e.slice(0,6),coord:[parseInt(e.slice(6,9)),parseInt(e.slice(10,13))]})),style:t[3]}:{}},o=(e,a,s)=>{let r,t,i,c,n,o,l;if(s||(s=""),r="",(e=("000"+e).slice(-3))===(a=""+a))return e;if(t=[],(e[0]!=a[0]||e[1]!=a[1])&&"0"!=e[2])if(r=e[0]+e[1],s){switch(e[2]){case"f":r+="f";break;case"e":r+="[ef]";break;case"d":case"c":case"b":case"a":r+="["+e[2]+"-f]";break;default:switch(e[2]){case"9":r+="[9a-f]";break;case"8":r+="[89a-f]";break;default:r+="["+e[2]+"-9a-f]"}}i=15-parseInt(e[2],16)+1,e=""+(parseInt(e,16)+i).toString(16),t.push(r)}else{switch(e[2]){case"9":r+="9";break;case"8":r+="[89]";break;default:r+="["+e[2]+"-9]"}e=""+(1*e+(i=9-e[2]+1)),t.push(r)}if(r="",e[0]!=a[0]&&"0"!=e[1])if(s){switch(r=e[0],e[1]){case"f":r+="f";break;case"e":r+="[ef]";break;case"d":case"c":case"b":case"a":r+="["+e[1]+"-f]";break;case"9":r+="[9a-f]";break;case"8":r+="[89a-f]";break;default:r+="["+e[1]+"-9a-f]"}r+="[0-9a-f]",i=15-parseInt(e[1],16)+1,e=""+(parseInt(e,16)+16*i).toString(16),t.push(r)}else{switch(r=e[0],i=9-e[1]+1,e[1]){case"9":r+="9";break;case"8":r+="[89]";break;default:r+="["+e[1]+"-9]"}r+="[0-9]",e=""+(1*e+10*(i=9-e[1]+1)),t.push(r)}if(r="",e[0]!=a[0])if(s){switch(i=parseInt(a[0],16)-parseInt(e[0],16),c=(parseInt(e[0],16)+i-1).toString(16),i){case 1:r=e[0];break;case 2:r="["+e[0]+c+"]";break;default:switch((o=parseInt(e[0],16)>9?"h":"d")+(l=parseInt(c,16)>9?"h":"d")){case"dd":r+="["+e[0]+"-"+c+"]";break;case"dh":switch(i=9-e[0]){case 0:r+="[9";break;case 1:r+="[89";break;default:r+="["+e[0]+"-9"}switch(c[0]){case"a":r+="a]";break;case"b":r+="ab]";break;default:r+="a-"+c+"]"}break;case"hh":r+="["+e[0]+"-"+c+"]"}}r+="[0-9a-f][0-9a-f]",i=parseInt(a[0],16)-parseInt(e[0],16),e=""+(parseInt(e,16)+256*i).toString(16),t.push(r)}else{switch(i=a[0]-e[0],c=1*e[0]+i-1,i){case 1:r=e[0];break;case 2:r="["+e[0]+c+"]";break;default:r="["+e[0]+"-"+c+"]"}r+="[0-9][0-9]",e=""+(1*e+100*i),t.push(r)}if(r="",e[1]!=a[1])if(s){switch(i=parseInt(a[1],16)-parseInt(e[1],16),c=(parseInt(e[1],16)+i-1).toString(16),r=e[0],i){case 1:r+=e[1];break;case 2:r+="["+e[1]+c+"]";break;default:switch((o=parseInt(e[1],16)>9?"h":"d")+(l=parseInt(c,16)>9?"h":"d")){case"dd":r+="["+e[1],i>1&&(r+="-"),r+=c+"]";break;case"dh":switch(i=9-e[1]){case 0:r+="[9";break;case 1:r+="[89";break;default:r+="["+e[1]+"-9"}switch(a[1]){case"a":r+="]";break;case"b":r+="a]";break;default:r+="a-"+(parseInt(a[1],16)-1).toString(16)+"]"}break;case"hh":r+="["+e[1],i>1&&(r+="-"),r+=(parseInt(a[1],16)-1).toString(16)+"]"}}r+="[0-9a-f]",i=parseInt(a[1],16)-parseInt(e[1],16),e=""+(parseInt(e,16)+16*i).toString(16),t.push(r)}else{switch(i=a[1]-e[1],c=1*e[1]+i-1,r=e[0],i){case 1:r+=e[1];break;case 2:r+="["+e[1]+c+"]";break;default:r+="["+e[1]+"-"+c+"]"}r+="[0-9]",e=""+(1*e+10*i),t.push(r)}if(r="",e[2]!=a[2])if(s){switch(r=e[0]+e[1],i=parseInt(a[2],16)-parseInt(e[2],16),(o=parseInt(e[2],16)>9?"h":"d")+(l=parseInt(a[2],16)>9?"h":"d")){case"dd":r+="["+e[2],i>1&&(r+="-"),r+=a[2]+"]";break;case"dh":switch(i=9-e[2]){case 0:r+="[9";break;case 1:r+="[89";break;default:r+="["+e[2]+"-9"}switch(a[2]){case"a":r+="a]";break;case"b":r+="ab]";break;default:r+="a-"+a[2]+"]"}break;case"hh":r+="["+e[2],i>1&&(r+="-"),r+=a[2]+"]"}i=parseInt(a[2],16)-parseInt(e[2],16),e=""+(parseInt(e,16)+i).toString(16),t.push(r)}else{switch(i=a[2]-e[2],r=e[0]+e[1],i){case 0:r+=e[2];break;case 1:r+="["+e[2]+a[2]+"]";break;default:r+="["+e[2]+"-"+a[2]+"]"}e=""+(1*e+i),t.push(r)}return r="","0"==e[2]&&"0"==a[2]&&(r=a,t.push(r)),r="",r=1==(n=t.length)?t[0]:"(("+(r=t.join(")|("))+"))"},l=e=>{if(!(e=e.match(new RegExp(`^${a.full}`))[0]))return"";var s,r,t,i,n,l,f,p,u,d,b,h,g=20,x="S[123][0-9a-f]{2}[0-5][0-9a-f]",$="[0-9]{3}x[0-9]{3}",m="[BLMR]("+$+")("+x+$+")*",k="(A("+x+")+)",y="R[123][0-9a-f]{2}t[123][0-9a-f]{2}",w="S[123][0-9a-f]{2}[0-5u][0-9a-fu]",I="("+c.full+")?";if("Q"==e)return[k+"?"+m];if("Q-"==e)return[k+"?"+m+I];if("QT"==e)return[k+m];if("QT-"==e)return[k+m+I];var A=[],S=e.indexOf("T")+1;if(S){h="(A";var v=e.slice(0,S);if(e=e.replace(v,""),"QT"==v)h+="("+x+")+)";else if(s=v.match(new RegExp("("+w+"|"+y+")","g"))){var R;for(r=0;r<s.length;r+=1)(R=s[r].match(new RegExp(w)))?(f=R[0].slice(0,4),f+="u"==(d=R[0].slice(4,5))?"[0-5]":d,h+=f+="u"==(b=R[0].slice(5,6))?"[0-9a-f]":b):(n=s[r].slice(1,4),l=s[r].slice(5,8),h+=f="S"+o(n,l,"hex")+"[0-5][0-9a-f]");h+="("+x+")*)"}}if((s=e.match(new RegExp("(V[0-9]+)","g")))&&(g=1*s.toString().slice(1)),t=w+"([0-9]{3}x[0-9]{3})?",s=e.match(new RegExp(t,"g")))for(r=0;r<s.length;r+=1)f="S"+(i=s[r].toString()).slice(1,4),f+="u"==(d=i.slice(4,5))?"[0-5]":d,f+="u"==(b=i.slice(5,6))?"[0-9a-f]":b,i.length>6?(p=1*i.slice(6,9),u=1*i.slice(10,13),f+=o(p-g,p+g),f+="x",f+=o(u-g,u+g)):f+=$,f=m+f+"("+x+$+")*",f=S?h+f:k+"?"+f,e.indexOf("-")>0&&(f+=I),A.push(f);if(t=y+"([0-9]{3}x[0-9]{3})?",s=e.match(new RegExp(t,"g")))for(r=0;r<s.length;r+=1)n=(i=s[r].toString()).slice(1,4),l=i.slice(5,8),f="S"+o(n,l,"hex")+"[0-5][0-9a-f]",i.length>8?(p=1*i.slice(8,11),u=1*i.slice(12,15),f+=o(p-g,p+g),f+="x",f+=o(u-g,u+g)):f+=$,f=m+f+"("+x+$+")*",f=S?h+f:k+"?"+f,e.indexOf("-")>0&&(f+=I),A.push(f);return A.length||(e.indexOf("-")>0&&(f+=I),A.push(h+m)),A};e.compose=e=>{if(!e||!e.query)return;let s="Q";return e.prefix&&e.prefix.required&&(Array.isArray(e.prefix.parts)&&(s+="A",s+=e.prefix.parts.map(e=>"string"==typeof e?e:Array.isArray(e)&&2==e.length?`R${e[0]}t${e[1]}`:void 0).join("")),s+="T"),Array.isArray(e.signbox)&&(s+=e.signbox.map(e=>{let a;return e.symbol?a=e.symbol:e.range&&Array.isArray(e.range)&&2==e.range.length&&(a=`R${e.range[0]}t${e.range[1]}`),a+(Array.isArray(e.coord)&&2==e.coord.length?e.coord.join("x"):"")}).join("")),s=(s+=e.style?"-":"").match(new RegExp(`^${a.full}`))[0]},e.fsw2query=(e,a)=>{let s="";const r=n(e);if(r.box){const e=a.indexOf("A")>-1,t=a.indexOf("a")>-1,i=a.indexOf("S")>-1,c=a.indexOf("s")>-1,n=a.indexOf("L")>-1;return(e||t||i||c)&&((e||t)&&r.sequence&&(s+="A",s+=r.sequence.map(e=>e.slice(0,4)+(t?"uu":e.slice(4,6))).join(""),s+="T"),(i||c)&&r.spatials&&(s+=r.spatials.map(e=>e.symbol.slice(0,4)+(c?"uu":e.symbol.slice(4,6))+(n?e.coord.join("x"):"")).join(""))),s?"Q"+s:void 0}},e.lines=(e,a)=>{if(!a)return[];let s,r,t,i,c,n=l(e);if(!n)return[];for(c=0;c<n.length;c+=1)s="^"+(s=n[c])+".*",r=a.match(new RegExp(s,"mg")),a=r?r.join("\n"):"";return i=a?(t=a.split("\n")).filter((function(e){return!(e in t)&&(t[e]=!0)}),{}):[]},e.parse=e=>{const s="string"==typeof e?e.match(new RegExp(`^${a.full}`)):void 0;return{query:!!s||void 0,prefix:s&&s[1]?t(s[1]):void 0,signbox:s&&s[2]?i(s[2]):void 0,variance:s&&s[3]?parseInt(s[3].slice(1)):void 0,style:!(!s||!s[4])||void 0}},e.range=o,e.re=a,e.regex=l,e.results=(e,a)=>{if(!a)return[];let s,r,t,i,c,n=l(e);if(!n)return[];for(c=0;c<n.length;c+=1)s=n[c],r=a.match(new RegExp(s,"g")),a=r?r.join(" "):"";return i=a?(t=a.split(" ")).filter((function(e){return!(e in t)&&(t[e]=!0)}),{}):[]},Object.defineProperty(e,"__esModule",{value:!0})}));