@sutton-signwriting/sgnw-components
Version:
a javascript package of web components for use with the SignWriting script.
4 lines • 9.31 kB
JavaScript
/*!
* The Sutton SignWriting Web Components
*/
var e,t={exports:{}},n=(e||(e=1,function(e){let t={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]"};t.nullorsymbol=`(?:${t.null}|${t.symbol})`,t.prefix=`(?:${t.sort}${t.nullorsymbol}+)`,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}`;let n={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}"};n.colorbase=`(?:${n.colorhex}|${n.colorname})`,n.color=`_${n.colorbase}_`,n.colors=`_${n.colorbase}(?:,${n.colorbase})?_`,n.background=`G${n.color}`,n.detail=`D${n.colors}`,n.detailsym=`D[0-9]{2}${n.colors}`,n.classes=`${n.classbase}(?: ${n.classbase})*`,n.full=`-(${n.colorize})?(${n.padding})?(${n.background})?(${n.detail})?(${n.zoom})?(?:-((?:${n.detailsym})*))?(?:-(${n.classes})?!(?:(${n.id})!)?)?`;const o=e=>(new RegExp(`^${n.colorhex}$`).test(e)?"#":"")+e,r=e=>{const t=("string"==typeof e?e.match(new RegExp(`^${n.full}`)):[])||[];return r={colorize:t[1]?!!t[1]:void 0,padding:t[2]?parseInt(t[2].slice(1)):void 0,background:t[3]?o(t[3].slice(2,-1)):void 0,detail:t[4]?t[4].slice(2,-1).split(",").map(o):void 0,zoom:t[5]?"Zx"===t[5]?"x":parseFloat(t[5].slice(1)):void 0,detailsym:t[6]?t[6].match(new RegExp(n.detailsym,"g")).map((e=>{const t=e.split("_"),n=t[1].split(",").map(o);return{index:parseInt(t[0].slice(1)),detail:n}})):void 0,classes:t[7]?t[7]:void 0,id:t[8]?t[8]:void 0},Object.fromEntries(Object.entries(r).filter((([e,t])=>void 0!==t)));var r},s=e=>e.split("x").map((e=>parseInt(e))),i={symbol:e=>{const o="string"==typeof e?e.match(new RegExp(`^(${t.symbol})(${t.coord})?(${n.full})?`)):void 0;return{symbol:o?o[1]:void 0,coord:o&&o[2]?s(o[2]):void 0,style:o?o[3]:void 0}},sign:e=>{const o="string"==typeof e?e.match(new RegExp(`^(${t.prefix})?(${t.signbox})(${n.full})?`)):void 0;return o?{sequence:o[1]?o[1].slice(1).match(/.{6}/g):void 0,box:o[2][0],max:s(o[2].slice(1,8)),spatials:o[2].length<9?void 0:o[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:o[3]}:{}},text:e=>{if("string"!=typeof e)return[];const o=e.match(new RegExp(`(${t.sign}(${n.full})?|${t.spatial}(${n.full})?)`,"g"));return o?[...o]:[]}},a={symbol:e=>{if("string"==typeof e.symbol){const o=(e.symbol.match(t.symbol)||[""])[0];if(o)return o+((((e.coord&&e.coord[0]||"").toString()+"x"+(e.coord&&e.coord[1]||"").toString()).match(t.coord)||[""])[0]||"")+("string"==typeof e.style&&(e.style.match(n.full)||[""])[0]||"")}},sign:e=>{let o="string"!=typeof e.box?"M":(e.box+"M").match(t.box);const r=(((e.max&&e.max[0]||"").toString()+"x"+(e.max&&e.max[1]||"").toString()).match(t.coord)||[""])[0]||"";if(!r)return;let s="";e.sequence&&Array.isArray(e.sequence)&&(s=e.sequence.map((e=>(e.match(t.nullorsymbol)||[""])[0])).join(""),s=s?"A"+s:"");let i="";return e.spatials&&Array.isArray(e.spatials)&&(i=e.spatials.map((e=>{if("string"==typeof e.symbol){const n=(e.symbol.match(t.symbol)||[""])[0];if(n){const o=(((e.coord&&e.coord[0]||"").toString()+"x"+(e.coord&&e.coord[1]||"").toString()).match(t.coord)||[""])[0]||"";if(o)return n+o}}return""})).join("")),s+o+r+i+("string"==typeof e.style&&(e.style.match(n.full)||[""])[0]||"")}},l=e=>{let t,n,o,s,a,l,c,d,$=i.sign(e);$.spatials?(s=Math.min(...$.spatials.map((e=>e.coord[0]))),a=$.max[0],t=a-s,l=Math.min(...$.spatials.map((e=>e.coord[1]))),c=$.max[1],n=c-l,o="sign",d=$.box):($=i.symbol(e),d="M",$.coord?(s=$.coord[0],t=2*(500-s),l=$.coord[1],n=2*(500-l),o="symbol"):(s=490,t=20,l=490,n=20,o="none"));let u=r($.style);return{minX:s,minY:l,width:t,height:n,segment:o,lane:{B:0,L:-1,M:0,R:1}[d],padding:u.padding||0,zoom:u.zoom||1}},c=[{index:0,name:"UNK",value:"[UNK]"},{index:1,name:"PAD",value:"[PAD]"},{index:2,name:"CLS",value:"[CLS]"},{index:3,name:"SEP",value:"[SEP]"}],d=(e,{sequence:t=!0,signbox:n=!0,sep:o="[SEP]"}={})=>{const r=e=>[e.slice(0,4),`c${e.charAt(4)}`,`r${e.charAt(5)}`],s=e=>e.map((e=>`p${e}`));return i.text(e).map((e=>{if(/[BLMR]/.test(e)){const a=i.sign(e),l=[];return a.sequence&&t&&l.push("A",...a.sequence.map((e=>r(e))).flat()),n&&l.push(a.box,...s(a.max),...a.spatials.flatMap((e=>[...r(e.symbol),...s(e.coord)]))),o?[...l,o]:l}{const a=i.symbol(e);if(!n&&!t)return[];let l=[];return l=!n&&t?["A",...r(a.symbol)]:["M",...s(a.coord.map((e=>1e3-e))),...r(a.symbol),...s(a.coord)],l.length>0&&o?[...l,o]:l}})).flatMap((e=>e))},$=(e,t=c)=>{const n=new Set(t.map((e=>e.value)));return e.filter((e=>!n.has(e))).join(" ").replace(/\bp(\d{3})\s+p(\d{3})/g,"$1x$2").replace(/ c(\d)\d? r(.)/g,"$1$2").replace(/ c(\d)\d?/g,"$10").replace(/ r(.)/g,"0$1").replace(/ /g,"").replace(/(\d)([BLMR])/g,"$1 $2").replace(/(\d)(AS)/g,"$1 $2").replace(/(A(?:S00000|S[123][0-9a-f]{2}[0-5][0-9a-f])+)( )([BLMR])/g,"$1$3")},u={height:500,width:150,offset:50,pad:20,margin:5,dynamic:!1,background:void 0,punctuation:{spacing:!0,pad:30,pull:!0},style:{detail:["black","white"],zoom:1}},f=e=>("object"!=typeof e&&(e={}),{...u,...e,punctuation:{...u.punctuation,...e.punctuation},style:{...u.style,...e.style}}),p=[256,517,759,767,877,895,903],g={all:[256,907],writing:[256,894],hand:[256,516],movement:[517,758],dynamic:[759,766],head:[767,876],hcenter:[767,876],vcenter:[767,885],trunk:[877,885],limb:[886,894],location:[895,902],punctuation:[903,907]},y=["#0000CC","#CC0000","#FF0099","#006600","#000000","#884411","#FF9900"];e.category=p,e.colorize=e=>{const t=i.symbol(e);let n="#000000";if(t.symbol){const e=parseInt(t.symbol.slice(1,4),16),o=p.findIndex((t=>t>e));n=y[o<0?6:o-1]}return n},e.colors=y,e.columnDefaults=u,e.columnDefaultsMerge=f,e.columns=(e,t)=>{if("string"!=typeof e)return{};let n=f(t);"x"==n.style.zoom&&(n.style.zoom=1);let o=i.text(e),r=0,s=[],a=[],c=0,d=parseInt(n.width/2),$=n.height-n.margin,u=!0,p=!1;for(let e of o){let t=l(e);"x"==t.zoom&&(t.zoom=1),r+=c,r+=n.punctuation.spacing?"sign"==t.segment?n.pad:0:n.pad,p=r+t.height>$,p&&"symbol"==t.segment&&n.punctuation.pull&&u&&(p=!1,u=!1),0==a.length&&(p=!1),p&&(r=n.pad,s.push(a),a=[],u=!0),a.push(Object.assign(t,{x:d+n.offset*t.lane-(500-t.minX)*t.zoom*n.style.zoom,y:r,text:e})),r+=t.height*t.zoom*n.style.zoom,c=n.punctuation.spacing?"sign"==t.segment?n.pad:n.punctuation.pad:n.pad}if(a.length&&s.push(a),n.punctuation.pull)for(let e of s){let t=e[e.length-1],o=t.y+t.height-(n.height-n.margin);if(o>0){let t=parseInt(o/e.length)+1;for(let n in e)e[n].y-=t*n+t}}let g=[];for(let e of s){let t=[d-n.offset-n.pad],o=[d+n.offset+n.pad];for(let r of e)t.push(r.x-n.pad),o.push(r.x+r.width+n.pad);t=Math.min(...t),o=Math.max(...o);let r=n.width,s=0;n.dynamic?(r=o-t,s=-t):s=d-parseInt((t+o)/2);for(let t of e)t.x+=s;g.push(r)}return{options:n,widths:g,columns:s}},e.compose=a,e.createTokenizer=(e=c,t=null)=>{const n=(e=>{const t={},n={},o={},r=new Set;return e.forEach((e=>{if(r.has(e.index))throw new Error(`Duplicate token index: ${e.index}`);r.add(e.index),t[e.index]=e,n[e.name]=e,o[e.value]=e})),{byIndex:t,byName:n,byValue:o,getByIndex:n=>t[n]||t[e.find((e=>"UNK"===e.name)).index],getByName:e=>n[e]||n.UNK,getByValue:e=>o[e]||n.UNK,getAllValues:()=>e.map((e=>e.value)),getAllIndices:()=>e.map((e=>e.index))}})(e),o=t??(n.getAllIndices().length>0?Math.max(...n.getAllIndices())+1:0),r=(()=>{const e=(e,t)=>Array.from({length:t-e},((t,n)=>e+n)),t=(t,n)=>e(t,n+1).map((e=>e.toString(16)));return["A","B","L","M","R","S000",...e(256,908).map((e=>`S${e.toString(16)}`)),...t(0,15).map((e=>`r${e}`)),...t(0,5).map((e=>`c${e}`)),...e(250,750).map((e=>`p${e}`))]})(),{i2s:s,s2i:i}=((e,t,n)=>{const o={},r={};return Object.values(t.byIndex).forEach((e=>{o[e.index]=e.value,r[e.value]=e.index})),e.forEach(((e,t)=>{const s=n+t;o[s]=e,r[e]=s})),{i2s:o,s2i:r}})(r,n,o),a={i2s:s,s2i:i,specialTokens:n,length:Object.keys(s).length,vocab:()=>Object.values(s),encodeTokens:e=>e.map((e=>void 0!==i[e]?i[e]:n.getByValue(e).index)),decodeTokens:e=>e.map((e=>s[e]||n.getByName("UNK").value)),encode:(e,t={})=>{const o=d(e,{...t,sep:n.getByName("SEP").value});return a.encodeTokens(o)},decode:t=>{if(0===t.length)return"";if(Array.isArray(t[0])){const n=t.map((e=>a.decodeTokens(e)));return $(n.flat(),e)}const n=a.decodeTokens(t);return $(n,e)},chunk:(e,t)=>((e,t,{cls:n="[CLS]",sep:o="[SEP]",pad:r="[PAD]"}={})=>{if(t<60)throw new Error("Chunk size must be at least 60 tokens to accommodate a typical sign");const s=[];let i=[],a=0;for(;a<e.length;){for(i=[n];a<e.length;){let n=a;for(;n<e.length&&e[n]!==o;)n++;if(i.length+(n-a+1)>t-1)break;for(;a<=n;)i.push(e[a]),a++}for(;i.length<t;)i.push(r);s.push(i)}return s})(e,t,{cls:n.getByName("CLS").value,sep:n.getByName("SEP").value,pad:n.getByName("PAD").value})};return a},e.detokenize=$,e.group=[256,270,286,324,332,390,420,442,461,501,517,534,554,597,613,648,678,695,725,739,759,767,778,810,827,857,877,886,895,903],e.info=l,e.isType=(e,t)=>{const n=i.symbol(e);if(n.symbol){const e=parseInt(n.symbol.slice(1,4),16),o=g[t];if(o)return o[0]<=e&&o[1]>=e}return!1},e.kind=[256,895,903],e.parse=i,e.ranges=g,e.re=t,e.tokenize=d,Object.defineProperty(e,"__esModule",{value:!0})}(t.exports)),t.exports);export{n as f}