@sutton-signwriting/sgnw-components
Version:
a javascript package of web components for use with the SignWriting script.
4 lines • 19.2 kB
JavaScript
/*!
* The Sutton SignWriting Web Components
*/
var t,e={exports:{}},n=(t||(t=1,function(t){const e=t=>"S00000"===t?0:1+96*(parseInt(t.slice(1,4),16)-256)+16*parseInt(t.slice(4,5),16)+parseInt(t.slice(5,6),16);let n={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]"};n.nullorsymbol=`(?:${n.null}|${n.symbol})`,n.prefix=`(?:${n.sort}${n.nullorsymbol}+)`,n.spatial=`${n.symbol}${n.coord}`,n.signbox=`${n.box}${n.coord}(?:${n.spatial})*`,n.sign=`${n.prefix}?${n.signbox}`,n.sortable=`${n.prefix}${n.signbox}`;let r={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}"};r.colorbase=`(?:${r.colorhex}|${r.colorname})`,r.color=`_${r.colorbase}_`,r.colors=`_${r.colorbase}(?:,${r.colorbase})?_`,r.background=`G${r.color}`,r.detail=`D${r.colors}`,r.detailsym=`D[0-9]{2}${r.colors}`,r.classes=`${r.classbase}(?: ${r.classbase})*`,r.full=`-(${r.colorize})?(${r.padding})?(${r.background})?(${r.detail})?(${r.zoom})?(?:-((?:${r.detailsym})*))?(?:-(${r.classes})?!(?:(${r.id})!)?)?`;const i=t=>(new RegExp(`^${r.colorhex}$`).test(t)?"#":"")+t,o=t=>{const e=("string"==typeof t?t.match(new RegExp(`^${r.full}`)):[])||[];return n={colorize:e[1]?!!e[1]:void 0,padding:e[2]?parseInt(e[2].slice(1)):void 0,background:e[3]?i(e[3].slice(2,-1)):void 0,detail:e[4]?e[4].slice(2,-1).split(",").map(i):void 0,zoom:e[5]?"Zx"===e[5]?"x":parseFloat(e[5].slice(1)):void 0,detailsym:e[6]?e[6].match(new RegExp(r.detailsym,"g")).map((t=>{const e=t.split("_"),n=e[1].split(",").map(i);return{index:parseInt(e[0].slice(1)),detail:n}})):void 0,classes:e[7]?e[7]:void 0,id:e[8]?e[8]:void 0},Object.fromEntries(Object.entries(n).filter((([t,e])=>void 0!==e)));var n},s=t=>t.split("x").map((t=>parseInt(t))),l=t=>{const e="string"==typeof t?t.match(new RegExp(`^(${n.symbol})(${n.coord})?(${r.full})?`)):void 0;return{symbol:e?e[1]:void 0,coord:e&&e[2]?s(e[2]):void 0,style:e?e[3]:void 0}},a=t=>{const e="string"==typeof t?t.match(new RegExp(`^(${n.prefix})?(${n.signbox})(${r.full})?`)):void 0;return e?{sequence:e[1]?e[1].slice(1).match(/.{6}/g):void 0,box:e[2][0],max:s(e[2].slice(1,8)),spatials:e[2].length<9?void 0:e[2].slice(8).match(/(.{13})/g).map((t=>({symbol:t.slice(0,6),coord:[parseInt(t.slice(6,9)),parseInt(t.slice(10,13))]}))),style:e[3]}:{}},c=t=>{if("string"!=typeof t)return[];const e=t.match(new RegExp(`(${n.sign}(${r.full})?|${n.spatial}(${r.full})?)`,"g"));return e?[...e]:[]},f=t=>{if("string"==typeof t.symbol){const e=(t.symbol.match(n.symbol)||[""])[0];if(e)return e+((((t.coord&&t.coord[0]||"").toString()+"x"+(t.coord&&t.coord[1]||"").toString()).match(n.coord)||[""])[0]||"")+("string"==typeof t.style&&(t.style.match(r.full)||[""])[0]||"")}},$=t=>{let e,n,r,i,s,c,f,$,u=a(t);u.spatials?(i=Math.min(...u.spatials.map((t=>t.coord[0]))),s=u.max[0],e=s-i,c=Math.min(...u.spatials.map((t=>t.coord[1]))),f=u.max[1],n=f-c,r="sign",$=u.box):(u=l(t),$="M",u.coord?(i=u.coord[0],e=2*(500-i),c=u.coord[1],n=2*(500-c),r="symbol"):(i=490,e=20,c=490,n=20,r="none"));let g=o(u.style);return{minX:i,minY:c,width:e,height:n,segment:r,lane:{B:0,L:-1,M:0,R:1}[$],padding:g.padding||0,zoom:g.zoom||1}},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}},g=(t,e)=>{if("string"!=typeof t)return{};const n=(t=>("object"!=typeof t&&(t={}),{...u,...t,punctuation:{...u.punctuation,...t.punctuation},style:{...u.style,...t.style}}))(e);let r=c(t),i=0,o=[],s=[],l=0,a=parseInt(n.width/2),f=n.height-n.margin,g=!0,p=!1;for(let t of r){let e=$(t);i+=l,i+=n.punctuation.spacing?"sign"==e.segment?n.pad:0:n.pad,p=i+e.height>f,p&&"symbol"==e.segment&&n.punctuation.pull&&g&&(p=!1,g=!1),0==s.length&&(p=!1),p&&(i=n.pad,o.push(s),s=[],g=!0),s.push(Object.assign(e,{x:a+n.offset*e.lane-(500-e.minX)*e.zoom*n.style.zoom,y:i,text:t})),i+=e.height*e.zoom*n.style.zoom,l=n.punctuation.spacing?"sign"==e.segment?n.pad:n.punctuation.pad:n.pad}if(s.length&&o.push(s),n.punctuation.pull)for(let t of o){let e=t[t.length-1],r=e.y+e.height-(n.height-n.margin);if(r>0){let e=parseInt(r/t.length)+1;for(let n in t)t[n].y-=e*n+e}}let d=[];for(let t of o){let e=[a-n.offset-n.pad],r=[a+n.offset+n.pad];for(let i of t)e.push(i.x-n.pad),r.push(i.x+i.width+n.pad);e=Math.min(...e),r=Math.max(...r);let i=n.width,o=0;n.dynamic?(i=r-e,o=-e):o=a-parseInt((e+r)/2);for(let e of t)e.x+=o;d.push(i)}return{options:n,widths:d,columns:o}},p=[256,517,759,767,877,895,903],d=[767,876],v=[767,885],x=["#0000CC","#CC0000","#FF0099","#006600","#000000","#884411","#FF9900"],h=t=>{const e=l(t);let n="#000000";if(e.symbol){const t=parseInt(e.symbol.slice(1,4),16),r=p.findIndex((e=>e>t));n=x[r<0?6:r-1]}return n};let y={};const w=152;let m;const b=function(t){if(l(t).symbol)return function(t){if(t in y)return[...y[t]];if(!m){const t=document.createElement("canvas");t.width=w,t.height=w,m=t.getContext("2d",{willReadFrequently:!0})}m.clearRect(0,0,w,w),m.font="60px 'SuttonSignWritingLine'",m.fillText(String.fromCodePoint(t+983040),0,0);const e=m.getImageData(0,0,w,w).data;let n,r,i,o;t:for(n=151;n>=0;n--)for(r=0;r<w;r+=1)for(o=0;o<4;o+=1)if(i=4*n+4*r*w+o,e[i])break t;var s=n;t:for(r=151;r>=0;r--)for(n=0;n<s;n+=1)for(o=0;o<4;o+=1)if(i=4*n+4*r*w+o,e[i])break t;var l=r+1;if(s=Math.ceil(s/2),l=Math.ceil(l/2),14394==t&&(s=19),[10468,10480,10496,10512,10500,10532,10548,10862,10878,10894,11058,11074,11476,11488,11492,11504,11508,11520,10516,10910,10926,11042,11082,10942].includes(t)&&(s=20),31921==t&&(s=22),38460==t&&(s=23),[20164,20212].includes(t)&&(s=25),31894==t&&(s=28),46698==t&&(s=29),29606==t&&(s=30),44855==t&&(s=40),32667==t&&(s=50),[11088,11474,11490,11506].includes(t)&&(l=20),6285==t&&(l=21),40804==t&&(l=31),41475==t&&(l=36),0==s&&0==l){const e={9:[15,30],10:[21,30],11:[30,15],12:[30,21],13:[15,30],14:[21,30]};t in e&&(s=e[t][0],l=e[t][1])}return 0!=s||0!=l?(y[t]=[s,l],[s,l]):void 0}(e(t))},I=function(t){return String.fromCodePoint(t+983040)},S=function(t){return String.fromCodePoint(t+1048576)},z=function(t){return I(e(t))},_=function(t){return S(e(t))},M=function(t){return n=e(t),` <text class="sym-fill" fill="white" style="pointer-events:none;font-family:'SuttonSignWritingFill';font-size:30px;">${S(n)}</text>\n <text class="sym-line" fill="black" style="pointer-events:none;font-family:'SuttonSignWritingLine';font-size:30px;">${I(n)}</text>`;var n};let A={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}"};A.colorbase=`(?:${A.colorhex}|${A.colorname})`,A.color=`_${A.colorbase}_`,A.colors=`_${A.colorbase}(?:,${A.colorbase})?_`,A.background=`G${A.color}`,A.detail=`D${A.colors}`,A.detailsym=`D[0-9]{2}${A.colors}`,A.classes=`${A.classbase}(?: ${A.classbase})*`,A.full=`-(${A.colorize})?(${A.padding})?(${A.background})?(${A.detail})?(${A.zoom})?(?:-((?:${A.detailsym})*))?(?:-(${A.classes})?!(?:(${A.id})!)?)?`;const Z=t=>(new RegExp(`^${A.colorhex}$`).test(t)?"#":"")+t,j=t=>{const e=("string"==typeof t?t.match(new RegExp(`^${A.full}`)):[])||[];return n={colorize:e[1]?!!e[1]:void 0,padding:e[2]?parseInt(e[2].slice(1)):void 0,background:e[3]?Z(e[3].slice(2,-1)):void 0,detail:e[4]?e[4].slice(2,-1).split(",").map(Z):void 0,zoom:e[5]?"Zx"===e[5]?"x":parseFloat(e[5].slice(1)):void 0,detailsym:e[6]?e[6].match(new RegExp(A.detailsym,"g")).map((t=>{const e=t.split("_"),n=e[1].split(",").map(Z);return{index:parseInt(e[0].slice(1)),detail:n}})):void 0,classes:e[7]?e[7]:void 0,id:e[8]?e[8]:void 0},Object.fromEntries(Object.entries(n).filter((([t,e])=>void 0!==e)));var n},F=t=>{if("object"!=typeof t||null===t)return;let e="-";e+=t.colorize?"C":"";const n=parseInt(t.padding);e+=!n||n<=0||n>99?"":"P"+(n>9?n:"0"+n);const r=t.background&&"string"==typeof t.background?t.background.match(A.colorbase)[0]:void 0;e+=r?"G_"+r+"_":"";const i=t.detail&&t.detail[0]&&"string"==typeof t.detail[0]?t.detail[0].match(A.colorbase)[0]:void 0,o=t.detail&&t.detail[1]&&"string"==typeof t.detail[1]?t.detail[1].match(A.colorbase)[0]:void 0;i&&(e+="D_"+i,o&&(e+=","+o),e+="_");const s="x"===t.zoom?"x":parseFloat(t.zoom);e+=!s||s<=0?"":"Z"+s;let l="";const a=t.detailsym&&Array.isArray(t.detailsym)?t.detailsym.map((t=>{const e=parseInt(t.index);if(!e||e<=0||e>99)return"";let n="D"+(e>9?e:"0"+e);const r=t.detail&&t.detail[0]?t.detail[0].match(A.colorbase)[0]:void 0,i=t.detail&&t.detail[1]?t.detail[1].match(A.colorbase)[0]:void 0;return r&&(n+="_"+r,i&&(n+=","+i),n+="_"),n})):[];l+=a.join("");let c="";const f=t.classes&&"string"==typeof t.classes?t.classes.match(A.classes)[0]:void 0;c+=f||"";const $=t.id&&"string"==typeof t.id?t.id.match(A.id)[0]:void 0;return c+=f||$?"!":"",c+=$?$+"!":"",e+(l||c?"-"+l:"")+(c?"-"+c:"")},k=t=>{const e=l(t);if(!e.symbol)return"";let n,r,i,o,s=j(e.style);if(e.coord)n=e.coord[0],r=e.coord[1],i=500-n+500,o=500-r+500;else{let t=b(e.symbol);if(!t)return"";n=500-parseInt((t[0]+1)/2),r=500-parseInt((t[1]+1)/2),i=500-n+500,o=500-r+500}let a,c=M(e.symbol);c=` <g transform="translate(${n},${r})">\n${c}\n </g>`,s.colorize?a=h(e.symbol):s.detail&&(a=s.detail[0]),a&&(c=c.replace(/class="sym-line" fill="black"/,`class="sym-line" fill="${a}"`));let f=s.detail&&s.detail[1];f&&(c=c.replace(/class="sym-fill" fill="white"/,`class="sym-fill" fill="${f}"`));let $="";return s.padding&&(n-=s.padding,r-=s.padding,i+=s.padding,o+=s.padding),s.background&&($=`\n <rect x="${n}" y="${r}" width="${i-n}" height="${o-r}" style="fill:${s.background};" />`),` <text font-size="0">${t}</text>${$}\n${c}`},R=t=>{let e=a(t);if(e.spatials){let n=j(e.style);n.detailsym&&n.detailsym.forEach((t=>{e.spatials[t.index-1]&&(e.spatials[t.index-1].detail=t.detail)}));let r=Math.min(...e.spatials.map((t=>t.coord[0]))),i=Math.min(...e.spatials.map((t=>t.coord[1]))),o=e.max[0],s=e.max[1],l="";n.padding&&(r-=n.padding,i-=n.padding,o+=n.padding,s+=n.padding),n.background&&(l=`\n <rect x="${r}" y="${i}" width="${o-r}" height="${s-i}" style="fill:${n.background};" />`);let a=` <text font-size="0">${t}</text>${l}`;const c=n.detail&&n.detail[0],f=n.detail&&n.detail[1];return a+="\n"+e.spatials.map((t=>{let e=M(t.symbol),r=c;t.detail?r=t.detail[0]:n.colorize&&(r=h(t.symbol)),r&&(e=e.replace(/class="sym-line" fill="black"/,`class="sym-line" fill="${r}"`));let i=f;return t.detail&&t.detail[1]&&(i=t.detail[1]),i&&(e=e.replace(/class="sym-fill" fill="white"/,`class="sym-fill" fill="${i}"`)),` <g transform="translate(${t.coord[0]},${t.coord[1]})">\n${e}\n </g>`})).join("\n"),a}return""},E=(t,e)=>{"object"!=typeof e&&(e={});const n=Object.assign(u,e);let r=n.width,i=n.height,o="";n.background&&(o=`\n <rect x="0" y="0" width="${r-0}" height="${i-0}" style="fill:${n.background};" />`);let s=`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" viewBox="0 0 ${r-0} ${i-0}">\n ${o}`;return s+=t.map((t=>{const e=t.text.indexOf("-");if(e>0){const r=t.text.substring(e),i={...n.style,...j(r)};t.text=t.text.replace(r,F(i))}else t.text+=F(n.style);return t.zoom=t.zoom*n.style.zoom,'<g transform="translate('+t.x+","+t.y+") scale("+t.zoom+") translate("+-t.minX+","+-t.minY+') ">'+("sign"==t.segment?R(t.text):k(t.text))+"</g>"})).join("\n"),s+="\n</svg>",s},W=(t,e)=>{const n=function(t,e){"object"!=typeof e&&(e={});const n=Object.assign(u,e),r=document.createElement("canvas");r.width=n.width,r.height=n.height;const i=r.getContext("2d");return n.background&&(i.rect(0,0,n.width,n.height),i.fillStyle=n.background,i.fill()),t.map((t=>{const e=t.text.indexOf("-");if(e>0){const r=t.text.substring(e),i={...n.style,...j(r)};t.text=t.text.replace(r,F(i))}else t.text+=F(n.style);t.zoom=t.zoom*n.style.zoom;let r={};if("sign"==t.segment)r=a(t.text);else{let e=l(t.text);r.style=e.style,r.spatials=[e]}let o=j(r.style);o.background&&(i.fillStyle=o.background,i.fillRect(t.x-o.padding*t.zoom,t.y-o.padding*t.zoom,(t.width+2*o.padding)*t.zoom,(t.height+2*o.padding)*t.zoom)),o.detailsym&&o.detailsym.forEach((t=>{r.spatials[t.index-1]&&(r.spatials[t.index-1].detail=t.detail)}));const s=o.detail&&o.detail[0]||"black",c=o.detail&&o.detail[1]||"white";r.spatials.forEach((e=>{let n=s;e.detail?n=e.detail[0]:o.colorize&&(n=h(e.symbol));let r=c;e.detail&&e.detail[1]&&(r=e.detail[1]),i.font=30*t.zoom+"px 'SuttonSignWritingFill'",i.fillStyle=r,i.fillText(_(e.symbol),t.x+(e.coord[0]-t.minX)*t.zoom,t.y+(e.coord[1]-t.minY)*t.zoom),i.font=30*t.zoom+"px 'SuttonSignWritingLine'",i.fillStyle=n,i.fillText(z(e.symbol),t.x+(e.coord[0]-t.minX)*t.zoom,t.y+(e.coord[1]-t.minY)*t.zoom)}))})),r}(t,e),r=n.toDataURL("image/png");return n.remove(),r};t.columnPng=W,t.columnSvg=E,t.columnsPng=function(t,e){"object"!=typeof e&&(e={});let n=g(t,e);return n.columns.map(((t,e)=>W(t,{...n.options,width:n.widths[e]})))},t.columnsSvg=function(t,e){"object"!=typeof e&&(e={});let n=g(t,e);return n.columns.map(((t,e)=>E(t,{...n.options,width:n.widths[e]})))},t.signNormalize=t=>{const e=a(t);if(e.spatials){const t=e.spatials.reduce(((t,e)=>{const n=b(e.symbol);return t[e.symbol]={width:n[0],height:n[1]},t}),{}),n=e=>({x1:Math.min(...e.map((t=>t.coord[0]))),y1:Math.min(...e.map((t=>t.coord[1]))),x2:Math.max(...e.map((e=>e.coord[0]+parseInt(t[e.symbol].width)))),y2:Math.max(...e.map((e=>e.coord[1]+parseInt(t[e.symbol].height))))}),r=d,i=e.spatials.filter((t=>{const e=parseInt(t.symbol.slice(1,4),16);return r[0]<=e&&r[1]>=e})),o=v,s=e.spatials.filter((t=>{const e=parseInt(t.symbol.slice(1,4),16);return o[0]<=e&&o[1]>=e}));let l=n(e.spatials),a=[l.x2,l.y2];if(i.length){const t=n(i);l.x1=t.x1,l.x2=t.x2}if(s.length){const t=n(s);l.y1=t.y1,l.y2=t.y2}const c=[parseInt((l.x2+l.x1)/2)-500,parseInt((l.y2+l.y1)/2)-500];return(e.sequence?"A"+e.sequence.join(""):"")+e.box+(a[0]-c[0])+"x"+(a[1]-c[1])+e.spatials.map((t=>t.symbol+(t.coord[0]-c[0])+"x"+(t.coord[1]-c[1]))).join("")+(e.style||"")}},t.signPng=t=>{const e=function(t){const e=a(t);if(e.spatials){const t=document.createElement("canvas"),n=t.getContext("2d");let r=j(e.style);r.detailsym&&r.detailsym.forEach((t=>{e.spatials[t.index-1]&&(e.spatials[t.index-1].detail=t.detail)}));let i=Math.min(...e.spatials.map((t=>t.coord[0]))),o=Math.min(...e.spatials.map((t=>t.coord[1]))),s=e.max[0],l=e.max[1];r.padding&&(i-=r.padding,o-=r.padding,s+=r.padding,l+=r.padding);let a=1;"x"!=r.zoom&&(a=r.zoom);let c=(s-i)*a,f=(l-o)*a;t.width=c||1,t.height=f||1,r.background&&(n.rect(0,0,c,f),n.fillStyle=r.background,n.fill());const $=r.detail&&r.detail[0]||"black",u=r.detail&&r.detail[1]||"white";return e.spatials.forEach((t=>{let e=$;t.detail?e=t.detail[0]:r.colorize&&(e=h(t.symbol));let s=u;t.detail&&t.detail[1]&&(s=t.detail[1]),n.font=30*a+"px 'SuttonSignWritingFill'",n.fillStyle=s,n.fillText(_(t.symbol),(t.coord[0]-i)*a,(t.coord[1]-o)*a),n.font=30*a+"px 'SuttonSignWritingLine'",n.fillStyle=e,n.fillText(z(t.symbol),(t.coord[0]-i)*a,(t.coord[1]-o)*a)})),t}}(t),n=e.toDataURL("image/png");return e.remove(),n},t.signSvg=t=>{let e=a(t);if(e.spatials){let n=j(e.style),r=Math.min(...e.spatials.map((t=>t.coord[0]))),i=Math.min(...e.spatials.map((t=>t.coord[1]))),o=e.max[0],s=e.max[1],l="";n.classes&&(l=` class="${n.classes}"`);let a="";n.id&&(a=` id="${n.id}"`),n.padding&&(r-=n.padding,i-=n.padding,o+=n.padding,s+=n.padding);let c="";"x"!=n.zoom&&(c=` width="${(o-r)*(n.zoom?n.zoom:1)}" height="${(s-i)*(n.zoom?n.zoom:1)}"`);let f=`<svg${l}${a} version="1.1" xmlns="http://www.w3.org/2000/svg"${c} viewBox="${r} ${i} ${o-r} ${s-i}">\n`;return f+=R(t),f+="\n</svg>",f}return'<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>'},t.signSvgBody=R,t.symbolFill=_,t.symbolFlop=(t,e=!0)=>{let n=l(t);if(!n.symbol)return t;if(!b(n.symbol))return t;const r=e?1:-1,i=n.symbol.slice(0,4);let o=parseInt(n.symbol.slice(4,5)),s=n.symbol.slice(5,6),a="";for(;!a||!b(a);)o+=r,o>5&&(o=0),o<0&&(o=5),a=i+o+s;return n.symbol=a,f(n)},t.symbolInvert=t=>{let e=l(t);if(!e.symbol)return t;if(!b(e.symbol))return t;const n=e.symbol.slice(0,4);let r=e.symbol.slice(4,5),i=e.symbol.slice(5,6);const o=n+"18";let s;if(s=b(n+"08")||b(o)?{0:"c",1:"d",2:"e",3:"f",4:"8",5:"9",6:"a",7:"b",c:"0",d:"1",e:"2",f:"3",8:"4",9:"5",a:"6",b:"7"}:{0:"4",1:"3",2:"2",3:"1",4:"0",5:"7",6:"6",7:"5"},i in s){const t=n+r+s[i];b(t)&&(e.symbol=t)}return f(e)},t.symbolLine=z,t.symbolMirror=t=>{let e=l(t);if(!e.symbol)return t;if(!b(e.symbol))return t;const n=e.symbol.slice(0,4);let r=e.symbol.slice(4,5),i=parseInt(e.symbol.slice(5,6),16);const o=n+"18";var s;b(n+"08")||b(o)?s=8:(0!==i&&4!=i||(s=0),1!=i&&5!=i||(s=6),2!=i&&6!=i||(s=4),3!=i&&7!=i||(s=2));let a="";for(;!a||!b(a);)i+=s,i>7&&s<8&&(i-=8),i>15&&(i-=16),a=n+r+i.toString(16);return e.symbol=a,f(e)},t.symbolNormalize=t=>{const e=l(t);if(!e.symbol)return null;{let t=b(e.symbol);if(t)return`${e.symbol}${500-parseInt((t[0]+1)/2)}x${500-parseInt((t[1]+1)/2)}${e.style||""}`}},t.symbolPng=t=>{const e=function(t){const e=l(t);if(e.symbol){let t=b(e.symbol);if(t){const n=document.createElement("canvas"),r=n.getContext("2d");let i=j(e.style),o="black";i.colorize?o=h(e.symbol):i.detail&&(o=i.detail[0]);let s=i.detail&&i.detail[1]||"white",l=500,a=l+t[0],c=500,f=c+t[1];i.padding&&(l-=i.padding,c-=i.padding,a+=i.padding,f+=i.padding);let $=1;"x"!=i.zoom&&($=i.zoom);let u=(a-l)*$,g=(f-c)*$;return n.width=u||1,n.height=g||1,i.background&&(r.rect(0,0,u,g),r.fillStyle=i.background,r.fill()),r.font=30*$+"px 'SuttonSignWritingFill'",r.fillStyle=s,r.fillText(_(e.symbol),(500-l)*$,(500-c)*$),r.font=30*$+"px 'SuttonSignWritingLine'",r.fillStyle=o,r.fillText(z(e.symbol),(500-l)*$,(500-c)*$),n}}}(t),n=e.toDataURL("image/png");return e.remove(),n},t.symbolRotate=(t,e=!0)=>{let n=l(t);if(!n.symbol)return t;if(!b(n.symbol))return t;const r=e?1:-1,i=n.symbol.slice(0,4);let o=n.symbol.slice(4,5),s=parseInt(n.symbol.slice(5,6),16),a="";for(;!a||!b(a);)s>7?(s+=r,s>15&&(s=8),s<8&&(s=15),a=i+o+s.toString(16)):(s-=r,s>7&&(s=0),s<0&&(s=7),a=i+o+s);return n.symbol=a,f(n)},t.symbolScroll=(t,e=!0)=>{let n=l(t);if(!n.symbol)return t;if(!b(n.symbol))return t;const r=e?1:-1,i=parseInt(n.symbol.slice(1,4),16)+r,o=n.symbol.slice(4,5),s=n.symbol.slice(5,6),a="S"+i.toString(16)+o+s;return b(a)&&(n.symbol=a),f(n)},t.symbolSize=b,t.symbolSvg=t=>{const e=l(t),n='<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>';if(!e.symbol)return n;let r,i,o,s,a=j(e.style);if(e.coord)r=e.coord[0],i=e.coord[1],o=500-r+500,s=500-i+500;else{let t=b(e.symbol);if(!t)return n;r=parseInt(500-t[0]/2),i=parseInt(500-t[1]/2),o=r+t[0],s=i+t[1]}let c="";a.classes&&(c=` class="${a.classes}"`);let f="";a.id&&(f=` id="${a.id}"`),a.padding&&(r-=a.padding,i-=a.padding,o+=a.padding,s+=a.padding);let $="";return"x"!=a.zoom&&($=` width="${(o-r)*(a.zoom?a.zoom:1)}" height="${(s-i)*(a.zoom?a.zoom:1)}"`),`<svg${c}${f} version="1.1" xmlns="http://www.w3.org/2000/svg"${$} viewBox="${r} ${i} ${o-r} ${s-i}">\n${k(t)}\n</svg>`},t.symbolSvgBody=k,t.symbolText=M,Object.defineProperty(t,"__esModule",{value:!0})}(e.exports)),e.exports);export{n as f}