UNPKG

7.46 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,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(((e=e||self).ssw=e.ssw||{},e.ssw.swuquery={}))}(this,(function(e){"use strict";let r={base:"(?:(?:\ud8c0[\udc01-\udfff])|(?:[\ud8c1-\ud8fc][\udc00-\udfff])|(?:\ud8fd[\udc00-\udc80]))",coord:"(?:(?:\ud836[\udc0c-\uddff]){2})?",var:"V[0-9]+"};r.symbol=`${r.base}f?r?`,r.range=`R${r.base}${r.base}`,r.prefix=`(?:A(?:${r.symbol}|${r.range})+)?T`,r.signbox=`(?:${r.symbol}${r.coord}|${r.range}${r.coord})*`,r.full=`Q(${r.prefix})?(${r.signbox})?(${r.var})?(-?)`;let t={symbol:"(?:(?:\ud8c0[\udc01-\udfff])|(?:[\ud8c1-\ud8fc][\udc00-\udfff])|(?:\ud8fd[\udc00-\udc80]))",coord:"(?:\ud836[\udc0c-\uddff]){2}",sort:"𝠀",box:"\ud836[\udc01-\udc04]"};t.prefix=`(?:${t.sort}(?:${t.symbol})+)`,t.spatial=`${t.symbol}${t.coord}`,t.signbox=`${t.box}${t.coord}(?:${t.spatial})*`,t.sign=`${t.prefix}?${t.signbox}`,t.sortable=`${t.prefix}${t.signbox}`;const o=e=>parseInt(e.codePointAt(0))-120844+250,s=e=>[o(e.slice(0,2)),o(e.slice(2,4))],n=e=>e.map(e=>(e=>String.fromCodePoint(120844+parseInt(e)-250))(e)).join(""),i=e=>{const r=(e=>parseInt(e.codePointAt(0)))(e)-262145,t=parseInt(r/96),o=parseInt((r-96*t)/16),s=parseInt(r-96*t-16*o);return"S"+(t+256).toString(16)+o.toString(16)+s.toString(16)},l=e=>(e=>String.fromCodePoint(e))(262145+96*(parseInt(e.slice(1,4),16)-256)+16*parseInt(e.slice(4,5),16)+parseInt(e.slice(5,6),16)),c=e=>({required:!0,parts:"T"==e?void 0:e.match(new RegExp(`(${r.symbol}|${r.range})`,"g")).map(e=>"R"!=e[0]?e:[e.slice(1,3),e.slice(3,5)])}),a=e=>e.match(new RegExp(`(${r.symbol}${r.coord}|${r.range}${r.coord})`,"g")).map(e=>{let r,t;return e.length>5?(r=s(e.slice(-4)),t=e.slice(0,-4)):t=e,t.includes("R")?{range:[t.slice(1,3),t.slice(3,5)],coord:r}:{symbol:t,coord:r}});let u={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}"};u.colorbase=`(?:${u.colorhex}|${u.colorname})`,u.color=`_${u.colorbase}_`,u.colors=`_${u.colorbase}(?:,${u.colorbase})?_`,u.background=`G${u.color}`,u.detail=`D${u.colors}`,u.detailsym=`D[0-9]{2}${u.colors}`,u.classes=`${u.classbase}(?: ${u.classbase})*`,u.full=`-(${u.colorize})?(${u.padding})?(${u.background})?(${u.detail})?(${u.zoom})?(?:-((?:${u.detailsym})*)((?:${u.zoomsym})*))?(?:-(${u.classes})?!(?:(${u.id})!)?)?`;const f=e=>{const r=`^(${t.prefix})?(${t.signbox})(${u.full})?`,o="string"==typeof e?e.match(new RegExp(r)):void 0;return o?{sequence:o[1]?o[1].slice(2).match(/.{2}/g):void 0,box:o[2].slice(0,2),max:s(o[2].slice(2,6)),spatials:o[2].length<7?void 0:o[2].slice(6).match(/(.{6})/g).map(e=>({symbol:e.slice(0,2),coord:s(e.slice(2))})),style:o[3]}:{}},d=e=>[e.charCodeAt(0).toString(16).toUpperCase(),e.charCodeAt(1).toString(16).toUpperCase()],p=(e,r)=>{if(e>r)return"";let t,o="",s=[];if(e=d(e),r=d(r),2!=e.length&&2!=r.length)return"";if(e[0]==r[0])e[1]==r[1]?(o="\\u"+e[0]+"\\u"+e[1],s.push(o)):(o="\\u"+e[0]+"[\\u"+e[1]+"-\\u"+r[1]+"]",s.push(o));else{o="DFFF"==e[1]?"\\u"+e[0]+"\\uDFFF":"\\u"+e[0]+"[\\u"+e[1]+"-\\uDFFF]",s.push(o);let t=parseInt(r[0],16)-parseInt(e[0],16);2==t&&(o="\\u"+(parseInt(e[0],16)+1).toString(16).toUpperCase(),o+="[\\uDC00-\\uDFFF]",s.push(o)),t>2&&(o="[",o+="\\u"+(parseInt(e[0],16)+1).toString(16).toUpperCase(),o+="-\\u"+(parseInt(r[0],16)-1).toString(16).toUpperCase(),o+="][\\uDC00-\\uDFFF]",s.push(o)),o="DC00"==r[1]?"\\u"+r[0]+"\\uDC00":"\\u"+r[0]+"[\\uDC00-\\u"+r[1]+"]",s.push(o)}return(e=>e.replace(/\\u([0-9A-F]{4})/g,(function(e,r){return String.fromCharCode(parseInt(r,16))})))(o=1==(t=s.length)?s[0]:"(("+(o=s.join(")|("))+"))")},g=e=>{let t=e.match(new RegExp(r.symbol));if(t){let e,r,o=t[0].slice(0,2),s=i(o),n=s.slice(0,4);if("fr"==t[0].slice(-2))return e=l(n+"00"),r=l(n+"5f"),p(e,r);if("r"==t[0].slice(-1))return e=l(s.slice(0,5)+"0"),r=l(s.slice(0,5)+"f"),p(e,r);if("f"==t[0].slice(-1)){return"("+[0,1,2,3,4,5].map((function(e){return l(n+e+s.slice(-1))})).join("|")+")"}return o}return""},m=e=>{if(!(e=e.match(new RegExp(`^${r.full}`))[0]))return"";let o,c,a,f,d,m,$,x,b,h,y=20,A=t.symbol,R=t.coord,w=t.box+R+"("+A+R+")*",C="("+t.sort+"("+A+")+)",F="R"+A+A,v=A+"f?r?",I="("+R+")?",S="("+u.full+")?";if("Q"==e)return[t.sign];if("Q-"==e)return[t.sign+"("+u.full+")?"];if("QT"==e)return[t.sortable];if("QT-"==e)return[t.sortable+"("+u.full+")?"];let E,D=[],j=e.indexOf("T")+1;if(j){h="("+t.sort;let r=e.slice(0,j);if(e=e.replace(r,""),"QT"==r)h+="("+A+")+)";else if(o=r.match(new RegExp("("+v+"|"+F+")","g"))){let e;for(c=0;c<o.length;c+=1)(e=o[c].match(new RegExp("^"+v)))?h+=g(e[0]):(f=i(o[c].slice(1,3)),d=i(o[c].slice(-2)),f=l(f.slice(0,4)+"00"),d=l(d.slice(0,4)+"5f"),h+=p(f,d));h+="("+A+")*)"}}if((o=e.match(new RegExp("(V[0-9]+)","g")))&&(y=1*o.toString().slice(1)),o=e.match(new RegExp("("+F+I+"|"+v+I+")","g")))for(c=0;c<o.length;c+=1)"R"!=(a=o[c].toString())[0]?(E=a.match(new RegExp(v))[0],$=g(E),E.length>a.length?(x=(m=s(a.slice(-4)))[0],b=m[1],$+=p(n([x-y,x+y])),$+=p(n([b-y,b+y]))):$+=R,$=w+$+"("+A+R+")*",$=j?h+$:C+"?"+$,e.indexOf("-")>0&&($+=S),D.push($)):(a=o[c].toString(),f=i(a.slice(1,3)),d=i(a.slice(3,5)),f=l(f.slice(0,4)+"00"),d=l(d.slice(0,4)+"5f"),$=p(f,d),a.length>5?(x=(m=s(a.slice(5,9)))[0],b=m[1],$+=p(n([x-y,x+y])),$+=p(n([b-y,b+y]))):$+=R,$=w+$+"("+A+R+")*",$=j?h+$:C+"?"+$,e.indexOf("-")>0&&($+=S),D.push($));return D.length||(e.indexOf("-")>0&&($+=S),D.push(h+w)),D};e.compose=e=>{if(!e||!e.query)return;let t="Q";return e.prefix&&e.prefix.required&&(Array.isArray(e.prefix.parts)&&(t+="A",t+=e.prefix.parts.map(e=>"string"==typeof e?e:Array.isArray(e)&&2==e.length?`R${e[0]}${e[1]}`:void 0).join("")),t+="T"),Array.isArray(e.signbox)&&(t+=e.signbox.map(e=>{let r;return e.symbol?r=e.symbol:e.range&&Array.isArray(e.range)&&2==e.range.length&&(r=`R${e.range[0]}${e.range[1]}`),r+(Array.isArray(e.coord)&&2==e.coord.length?n(e.coord):"")}).join("")),t=(t+=e.style?"-":"").match(new RegExp(`^${r.full}`))[0]},e.lines=(e,r)=>{if(!r)return[];let t,o,s,n,i,l=m(e);if(!l)return[];for(i=0;i<l.length;i+=1)t="^"+(t=l[i])+".*",o=r.match(new RegExp(t,"mg")),r=o?o.join("\n"):"";return n=r?(s=r.split("\n")).filter((function(e){return!(e in s)&&(s[e]=!0)}),{}):[]},e.parse=e=>{const t="string"==typeof e?e.match(new RegExp(`^${r.full}`)):void 0;return{query:!!t||void 0,prefix:t&&t[1]?c(t[1]):void 0,signbox:t&&t[2]?a(t[2]):void 0,variance:t&&t[3]?parseInt(t[3].slice(1)):void 0,style:!(!t||!t[4])||void 0}},e.range=p,e.re=r,e.regex=m,e.results=(e,r)=>{if(!r)return[];let t,o,s,n,i,l=m(e);if(!l)return[];for(i=0;i<l.length;i+=1)t=l[i],o=r.match(new RegExp(t,"g")),r=o?o.join(" "):"";return n=r?(s=r.split(" ")).filter((function(e){return!(e in s)&&(s[e]=!0)}),{}):[]},e.swu2query=(e,r)=>{let t="";const o=f(e);if(o.box){const e=r.indexOf("A")>-1,s=r.indexOf("a")>-1,i=r.indexOf("S")>-1,l=r.indexOf("s")>-1,c=r.indexOf("L")>-1;return(e||s||i||l)&&((e||s)&&o.sequence&&(t+="A",t+=o.sequence.map(e=>e+(s?"fr":"")).join(""),t+="T"),(i||l)&&o.spatials&&(t+=o.spatials.map(e=>e.symbol+(l?"fr":"")+(c?n(e.coord):"")).join(""))),t?"Q"+t:void 0}},e.symbolRanges=g,Object.defineProperty(e,"__esModule",{value:!0})}));