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) 7.99 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:"񀀀",base:"(?:(?:\ud8c0[\udc01-\udfff])|(?:[\ud8c1-\ud8fc][\udc00-\udfff])|(?:\ud8fd[\udc00-\udc80]))",coord:"(?:(?:\ud836[\udc0c-\uddff]){2})?",var:"V[0-9]+"};e.symbol=`${e.base}f?r?`,e.nullorsymbol=`(?:${e.null}|${e.symbol})`,e.range=`R${e.base}${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 r={null:"񀀀",symbol:"(?:(?:\ud8c0[\udc01-\udfff])|(?:[\ud8c1-\ud8fc][\udc00-\udfff])|(?:\ud8fd[\udc00-\udc80]))",coord:"(?:\ud836[\udc0c-\uddff]){2}",sort:"𝠀",box:"\ud836[\udc01-\udc04]"};r.nullorsymbol=`(?:${r.null}|${r.symbol})`,r.prefix=`(?:${r.sort}(?:${r.nullorsymbol})+)`,r.spatial=`${r.symbol}${r.coord}`,r.signbox=`${r.box}${r.coord}(?:${r.spatial})*`,r.sign=`${r.prefix}?${r.signbox}`,r.sortable=`${r.prefix}${r.signbox}`;const o=e=>parseInt(e.codePointAt(0))-120844+250,t=e=>String.fromCodePoint(120844+parseInt(e)-250),s=e=>[o(e.slice(0,2)),o(e.slice(2,4))],n=e=>e.map((e=>t(e))).join(""),i=e=>String.fromCodePoint(e),l=e=>{if("񀀀"===e)return"S00000";const r=(e=>parseInt(e.codePointAt(0)))(e)-262145,o=parseInt(r/96),t=parseInt((r-96*o)/16),s=parseInt(r-96*o-16*t);return"S"+(o+256).toString(16)+t.toString(16)+s.toString(16)},c=e=>i("S00000"===e?262144:262145+96*(parseInt(e.slice(1,4),16)-256)+16*parseInt(e.slice(4,5),16)+parseInt(e.slice(5,6),16)),a=o=>o.match(new RegExp(`(${e.list}${e.coord})`,"g")).map((e=>{let o,t;return o=e.match(new RegExp(`${r.coord}`)),o?(o=s(o[0]),t=e.slice(0,-4)):(o=void 0,t=e),t.includes("o")?{or:t.split("o").map((e=>e.includes("R")?[e.slice(1,3),e.slice(3,5)]:e)),coord:o,coord:o}:t.includes("R")?{range:[t.slice(1,3),t.slice(3,5)],coord:o}:{symbol:t,coord:o}}));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)",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.classes})?!(?:(${u.id})!)?)?`;const p=e=>{const o=`^(${r.prefix})?(${r.signbox})(${u.full})?`,t="string"==typeof e?e.match(new RegExp(o)):void 0;return t?{sequence:t[1]?t[1].slice(2).match(/.{2}/g):void 0,box:t[2].slice(0,2),max:s(t[2].slice(2,6)),spatials:t[2].length<7?void 0:t[2].slice(6).match(/(.{6})/g).map((e=>({symbol:e.slice(0,2),coord:s(e.slice(2))}))),style:t[3]}:{}},d=e=>[e.charCodeAt(0).toString(16).toUpperCase(),e.charCodeAt(1).toString(16).toUpperCase()],f=(e,r)=>{if(e>r)return"";let o,t="",s=[];if(e=d(e),r=d(r),2!=e.length&&2!=r.length)return"";if(e[0]==r[0])e[1]==r[1]?(t="\\u"+e[0]+"\\u"+e[1],s.push(t)):(t="\\u"+e[0]+"[\\u"+e[1]+"-\\u"+r[1]+"]",s.push(t));else{t="DFFF"==e[1]?"\\u"+e[0]+"\\uDFFF":"\\u"+e[0]+"[\\u"+e[1]+"-\\uDFFF]",s.push(t);let o=parseInt(r[0],16)-parseInt(e[0],16);2==o&&(t="\\u"+(parseInt(e[0],16)+1).toString(16).toUpperCase(),t+="[\\uDC00-\\uDFFF]",s.push(t)),o>2&&(t="[",t+="\\u"+(parseInt(e[0],16)+1).toString(16).toUpperCase(),t+="-\\u"+(parseInt(r[0],16)-1).toString(16).toUpperCase(),t+="][\\uDC00-\\uDFFF]",s.push(t)),t="DC00"==r[1]?"\\u"+r[0]+"\\uDC00":"\\u"+r[0]+"[\\uDC00-\\u"+r[1]+"]",s.push(t)}return o=s.length,1==o?t=s[0]:(t=s.join(")|("),t="(("+t+"))"),t.replace(/\\u([0-9A-F]{4})/g,(function(e,r){return String.fromCharCode(parseInt(r,16))}))},g=r=>{let o=r.match(new RegExp(e.symbol));if(o){let e,r,t=o[0].slice(0,2),s=l(t),n=s.slice(0,4);if("fr"==o[0].slice(-2))return e=c(n+"00"),r=c(n+"5f"),f(e,r);if("r"==o[0].slice(-1))return e=c(s.slice(0,5)+"0"),r=c(s.slice(0,5)+"f"),f(e,r);if("f"==o[0].slice(-1)){return"("+[0,1,2,3,4,5].map((function(e){return c(n+e+s.slice(-1))})).join("|")+")"}return t}return""},m=e=>{let r=l(e.slice(1,3)),o=l(e.slice(-2));return r=c(r.slice(0,4)+"00"),o=c(o.slice(0,4)+"5f"),f(r,o)},x=o=>{if(!(o=o.match(new RegExp(`^${e.full}`))[0]))return"";let n,i,l,c,a,p,d,x,$,h,b,y=20,A=r.box+r.coord+"(?:"+r.symbol+r.coord+")*",R="(?:"+r.sort+r.nullorsymbol+"+)",v="(?:"+u.full+")?";if("Q"==o)return[r.sign];if("Q-"==o)return[r.sign+"("+u.full+")?"];if("QT"==o)return[r.sortable];if("QT-"==o)return[r.sortable+"("+u.full+")?"];let w=[],E=o.indexOf("T")+1;if(E){b="(?:"+r.sort;let t=o.slice(0,E);if(o=o.replace(t,""),"QT"==t)b+=r.nullorsymbol+"+)";else if(n=t.match(new RegExp(e.list,"g")),n){for(a=0;a<n.length;a+=1)if(c=[],i=n[a].match(new RegExp(e.item,"g")),i){for(p=0;p<i.length;p+=1)l=i[p].match(new RegExp(e.range)),l?c.push(m(i[p])):c.push(g(i[p]));1==c.length?b+=c[0]:b+="(?:"+c.join("|")+")"}b+=r.nullorsymbol+"*)"}}if(n=o.match(new RegExp("(?:V[0-9]+)","g")),n&&(y=1*n.toString().slice(1)),n=o.match(new RegExp(e.list+e.coord,"g")),n)for(a=0;a<n.length;a+=1){if(c=[],i=n[a].match(new RegExp("("+e.range+"|"+e.symbol+")","g")),i){for(p=0;p<i.length;p+=1)l=i[p].match(new RegExp(e.range)),l?c.push(m(i[p])):c.push(g(i[p]));x=1==c.length?c[0]:"(?:"+c.join("|")+")"}d=n[a].match(new RegExp(`${r.coord}`)),d?(d=s(d[0]),$=d[0],h=d[1],x+=f(t($-y),t($+y)),x+=f(t(h-y),t(h+y))):x+=r.coord,x=A+x+"(?:"+r.symbol+r.coord+")*",x=E?b+x:R+"?"+x,o.indexOf("-")>0&&(x+=v),w.push(x)}return w.length||(o.indexOf("-")>0&&(x+=v),w.push(b+A)),w};exports.compose=r=>{if(!r||!r.query)return;let o="Q";return r.prefix&&r.prefix.required&&(Array.isArray(r.prefix.parts)&&(o+="A",o+=r.prefix.parts.map((e=>"string"==typeof e?e:Array.isArray(e)&&2==e.length?`R${e[0]}${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]}${e[1]}`:void 0)).join("o")):void 0)).join("")),o+="T"),Array.isArray(r.signbox)&&(o+=r.signbox.map((e=>{let r;return e.or?r=e.or.map((e=>"string"==typeof e?e:Array.isArray(e)&&2==e.length?`R${e[0]}${e[1]}`:void 0)).join("o"):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("")),o+=r.style?"-":"",o=o.match(new RegExp(`^${e.full}`))[0],o},exports.lines=(e,r)=>{if(!r)return[];let o,t,s,n,i,l=x(e);if(!l)return[];for(i=0;i<l.length;i+=1)o=l[i],o="^"+o+".*",t=r.match(new RegExp(o,"mg")),r=t?t.join("\n"):"";return r?(s=r.split("\n"),n=s.filter((function(e){return!(e in s)&&(s[e]=!0)}),{})):n=[],n},exports.parse=r=>{const o="string"==typeof r?r.match(new RegExp(`^${e.full}`)):void 0;return{query:!!o||void 0,prefix:o&&o[1]?(t=o[1],{required:!0,parts:"T"==t?void 0:t.match(new RegExp(`(${e.list})`,"g")).map((r=>r.includes("o")?["or"].concat(r.match(new RegExp(`(${e.item})`,"g")).map((e=>"R"!=e[0]?e:[e.slice(1,3),e.slice(3,5)]))):"R"!=r[0]?r:[r.slice(1,3),r.slice(3,5)]))}):void 0,signbox:o&&o[2]?a(o[2]):void 0,variance:o&&o[3]?parseInt(o[3].slice(1)):void 0,style:!(!o||!o[4])||void 0};var t},exports.range=f,exports.re=e,exports.regex=x,exports.results=(e,r)=>{if(!r)return[];let o,t,s,n,i,l=x(e);if(!l)return[];for(i=0;i<l.length;i+=1)o=l[i],t=r.match(new RegExp(o,"g")),r=t?t.join(" "):"";return r?(s=r.split(" "),n=s.filter((function(e){return!(e in s)&&(s[e]=!0)}),{})):n=[],n},exports.swu2query=(e,r)=>{let o="";const t=p(e);if(t.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)&&t.sequence&&(o+="A",o+=t.sequence.map((e=>e+(s?"fr":""))).join(""),o+="T"),(i||l)&&t.spatials&&(o+=t.spatials.map((e=>e.symbol+(l?"fr":"")+(c?n(e.coord):""))).join(""))),o?"Q"+o:void 0}},exports.symbolRanges=g;