UNPKG

@sutton-signwriting/core

Version:

a javascript package for node and browsers that supports general processing of the Sutton SignWriting script

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