UNPKG

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