@sutton-signwriting/sgnw-components
Version:
a javascript package of web components for use with the SignWriting script.
4 lines • 20 kB
JavaScript
/*!
* The Sutton SignWriting Web Components
*/
var t,e={exports:{}},n=(t||(t=1,function(t){const e=t=>t.map((t=>(t=>String.fromCodePoint(120844+parseInt(t)-250))(t))).join(""),n=t=>parseInt(t.codePointAt(0)),r=t=>n(t)-262144,i=t=>{if(""===t)return"S00000";const e=n(t)-262145,r=parseInt(e/96),i=parseInt((e-96*r)/16),o=parseInt(e-96*r-16*i);return"S"+(r+256).toString(16)+i.toString(16)+o.toString(16)},o=t=>{return e="S00000"===t?262144:262145+96*(parseInt(t.slice(1,4),16)-256)+16*parseInt(t.slice(4,5),16)+parseInt(t.slice(5,6),16),String.fromCodePoint(e);var e};let s={null:"",symbol:"(?:(?:\ud8c0[\udc01-\udfff])|(?:[\ud8c1-\ud8fc][\udc00-\udfff])|(?:\ud8fd[\udc00-\udc80]))",coord:"(?:\ud836[\udc0c-\uddff]){2}",sort:"𝠀",box:"\ud836[\udc01-\udc04]"};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}`;let l={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}"};l.colorbase=`(?:${l.colorhex}|${l.colorname})`,l.color=`_${l.colorbase}_`,l.colors=`_${l.colorbase}(?:,${l.colorbase})?_`,l.background=`G${l.color}`,l.detail=`D${l.colors}`,l.detailsym=`D[0-9]{2}${l.colors}`,l.classes=`${l.classbase}(?: ${l.classbase})*`,l.full=`-(${l.colorize})?(${l.padding})?(${l.background})?(${l.detail})?(${l.zoom})?(?:-((?:${l.detailsym})*))?(?:-(${l.classes})?!(?:(${l.id})!)?)?`;const a=t=>(new RegExp(`^${l.colorhex}$`).test(t)?"#":"")+t,c=t=>{const e=("string"==typeof t?t.match(new RegExp(`^${l.full}`)):[])||[];return n={colorize:e[1]?!!e[1]:void 0,padding:e[2]?parseInt(e[2].slice(1)):void 0,background:e[3]?a(e[3].slice(2,-1)):void 0,detail:e[4]?e[4].slice(2,-1).split(",").map(a):void 0,zoom:e[5]?"Zx"===e[5]?"x":parseFloat(e[5].slice(1)):void 0,detailsym:e[6]?e[6].match(new RegExp(l.detailsym,"g")).map((t=>{const e=t.split("_"),n=e[1].split(",").map(a);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=>parseInt(t.codePointAt(0))-120844+250,u=t=>[f(t.slice(0,2)),f(t.slice(2,4))],$=t=>t.map((t=>(t=>String.fromCodePoint(120844+parseInt(t)-250))(t))).join(""),d=t=>{const e="string"==typeof t?t.match(new RegExp(`^(${s.symbol})(${s.coord})?(${l.full})?`)):void 0;return{symbol:e?e[1]:void 0,coord:e&&e[2]?u(e[2]):void 0,style:e?e[3]:void 0}},g=t=>{const e="string"==typeof t?t.match(new RegExp(`^(${s.prefix})?(${s.signbox})(${l.full})?`)):void 0;return e?{sequence:e[1]?e[1].slice(2).match(/.{2}/g):void 0,box:e[2].slice(0,2),max:u(e[2].slice(2,6)),spatials:e[2].length<7?void 0:e[2].slice(6).match(/(.{6})/g).map((t=>({symbol:t.slice(0,2),coord:u(t.slice(2))}))),style:e[3]}:{}},p=t=>{if("string"!=typeof t)return[];const e=t.match(new RegExp(`(${s.sign}(${l.full})?|${s.spatial}(${l.full})?)`,"g"));return e?[...e]:[]},v=t=>{if("object"==typeof t&&null!==t&&"string"==typeof t.symbol){const e=(t.symbol.match(s.symbol)||[""])[0];if(e){const n=t.coord&&t.coord[0]||"",r=t.coord&&t.coord[1]||"";return e+(n&&r?$([n,r]):"")+("string"==typeof t.style&&(t.style.match(l.full)||[""])[0]||"")}}},h=t=>{let e,n,r,i,o,s,l,a,f=g(t);f.spatials?(i=Math.min(...f.spatials.map((t=>t.coord[0]))),o=f.max[0],e=o-i,s=Math.min(...f.spatials.map((t=>t.coord[1]))),l=f.max[1],n=l-s,r="sign",a=f.box):(f=d(t),a="𝠃",f.coord?(i=f.coord[0],e=2*(500-i),s=f.coord[1],n=2*(500-s),r="symbol"):(i=490,e=20,s=490,n=20,r="none"));let u=c(f.style);return{minX:i,minY:s,width:e,height:n,segment:r,lane:{"𝠁":0,"𝠂":-1,"𝠃":0,"𝠄":1}[a],padding:u.padding||0,zoom:u.zoom||1}},x={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}},y=(t,e)=>{if("string"!=typeof t)return{};const n=(t=>("object"!=typeof t&&(t={}),{...x,...t,punctuation:{...x.punctuation,...t.punctuation},style:{...x.style,...t.style}}))(e);let r=p(t),i=0,o=[],s=[],l=0,a=parseInt(n.width/2),c=n.height-n.margin,f=!0,u=!1;for(let t of r){let e=h(t);i+=l,i+=n.punctuation.spacing?"sign"==e.segment?n.pad:0:n.pad,u=i+e.height>c,u&&"symbol"==e.segment&&n.punctuation.pull&&f&&(u=!1,f=!1),0==s.length&&(u=!1),u&&(i=n.pad,o.push(s),s=[],f=!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 $=[];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;$.push(i)}return{options:n,widths:$,columns:o}},w=[262145,287201,310433,311201,321761,323489,324257],m=[311201,321760],b=[311201,322624],I=["#0000CC","#CC0000","#FF0099","#006600","#000000","#884411","#FF9900"],S=t=>{const e=d(t);let n="#000000";if(e.symbol){const t=(t=>parseInt(t.codePointAt(0)))(e.symbol),r=w.findIndex((e=>e>t));n=I[r<0?6:r-1]}return n};let z={};const _=152;let M;const j=function(t){if(d(t).symbol)return function(t){if(t in z)return[...z[t]];if(!M){const t=document.createElement("canvas");t.width=_,t.height=_,M=t.getContext("2d",{willReadFrequently:!0})}M.clearRect(0,0,_,_),M.font="60px 'SuttonSignWritingLine'",M.fillText(String.fromCodePoint(t+983040),0,0);const e=M.getImageData(0,0,_,_).data;let n,r,i,o;t:for(n=151;n>=0;n--)for(r=0;r<_;r+=1)for(o=0;o<4;o+=1)if(i=4*n+4*r*_+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*_+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?(z[t]=[s,l],[s,l]):void 0}(r(t))},Z=function(t){return String.fromCodePoint(t+983040)},F=function(t){return String.fromCodePoint(t+1048576)},A=function(t){return Z(r(t))},k=function(t){return F(r(t))},R=function(t){return e=r(t),` <text class="sym-fill" fill="white" style="pointer-events:none;font-family:'SuttonSignWritingFill';font-size:30px;">${F(e)}</text>\n <text class="sym-line" fill="black" style="pointer-events:none;font-family:'SuttonSignWritingLine';font-size:30px;">${Z(e)}</text>`;var e};let E={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}"};E.colorbase=`(?:${E.colorhex}|${E.colorname})`,E.color=`_${E.colorbase}_`,E.colors=`_${E.colorbase}(?:,${E.colorbase})?_`,E.background=`G${E.color}`,E.detail=`D${E.colors}`,E.detailsym=`D[0-9]{2}${E.colors}`,E.classes=`${E.classbase}(?: ${E.classbase})*`,E.full=`-(${E.colorize})?(${E.padding})?(${E.background})?(${E.detail})?(${E.zoom})?(?:-((?:${E.detailsym})*))?(?:-(${E.classes})?!(?:(${E.id})!)?)?`;const W=t=>(new RegExp(`^${E.colorhex}$`).test(t)?"#":"")+t,O=t=>{const e=("string"==typeof t?t.match(new RegExp(`^${E.full}`)):[])||[];return n={colorize:e[1]?!!e[1]:void 0,padding:e[2]?parseInt(e[2].slice(1)):void 0,background:e[3]?W(e[3].slice(2,-1)):void 0,detail:e[4]?e[4].slice(2,-1).split(",").map(W):void 0,zoom:e[5]?"Zx"===e[5]?"x":parseFloat(e[5].slice(1)):void 0,detailsym:e[6]?e[6].match(new RegExp(E.detailsym,"g")).map((t=>{const e=t.split("_"),n=e[1].split(",").map(W);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},C=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(E.colorbase)[0]:void 0;e+=r?"G_"+r+"_":"";const i=t.detail&&t.detail[0]&&"string"==typeof t.detail[0]?t.detail[0].match(E.colorbase)[0]:void 0,o=t.detail&&t.detail[1]&&"string"==typeof t.detail[1]?t.detail[1].match(E.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(E.colorbase)[0]:void 0,i=t.detail&&t.detail[1]?t.detail[1].match(E.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(E.classes)[0]:void 0;c+=f||"";const u=t.id&&"string"==typeof t.id?t.id.match(E.id)[0]:void 0;return c+=f||u?"!":"",c+=u?u+"!":"",e+(l||c?"-"+l:"")+(c?"-"+c:"")},D=t=>{const e=d(t);if(!e.symbol)return"";let n,r,i,o,s=O(e.style);if(e.coord)n=e.coord[0],r=e.coord[1],i=500-n+500,o=500-r+500;else{let t=j(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 l,a=R(e.symbol);a=` <g transform="translate(${n},${r})">\n${a}\n </g>`,s.colorize?l=S(e.symbol):s.detail&&(l=s.detail[0]),l&&(a=a.replace(/class="sym-line" fill="black"/,`class="sym-line" fill="${l}"`));let c=s.detail&&s.detail[1];c&&(a=a.replace(/class="sym-fill" fill="white"/,`class="sym-fill" fill="${c}"`));let f="";return s.padding&&(n-=s.padding,r-=s.padding,i+=s.padding,o+=s.padding),s.background&&(f=`\n <rect x="${n}" y="${r}" width="${i-n}" height="${o-r}" style="fill:${s.background};" />`),` <text font-size="0">${t}</text>${f}\n${a}`},L=t=>{let e=g(t);if(e.spatials){let n=O(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=R(t.symbol),r=c;t.detail?r=t.detail[0]:n.colorize&&(r=S(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""},B=(t,e)=>{"object"!=typeof e&&(e={});const n=Object.assign(x,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 <text font-size="0">0</text>${o}`;return s+=t.map((t=>{const e=t.text.indexOf("-");if(e>0){const r=t.text.substring(e),i={...n.style,...O(r)};t.text=t.text.replace(r,C(i))}else t.text+=C(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?L(t.text):D(t.text))+"</g>"})).join("\n"),s+="\n</svg>",s},G=(t,e)=>{const n=function(t,e){"object"!=typeof e&&(e={});const n=Object.assign(x,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,...O(r)};t.text=t.text.replace(r,C(i))}else t.text+=C(n.style);t.zoom=t.zoom*n.style.zoom;let r={};if("sign"==t.segment)r=g(t.text);else{let e=d(t.text);r.style=e.style,r.spatials=[e]}let o=O(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",l=o.detail&&o.detail[1]||"white";r.spatials.forEach((e=>{let n=s;e.detail?n=e.detail[0]:o.colorize&&(n=S(e.symbol));let r=l;e.detail&&e.detail[1]&&(r=e.detail[1]),i.font=30*t.zoom+"px 'SuttonSignWritingFill'",i.fillStyle=r,i.fillText(k(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(A(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=G,t.columnSvg=B,t.columnsPng=function(t,e){"object"!=typeof e&&(e={});let n=y(t,e);return n.columns.map(((t,e)=>G(t,{...n.options,width:n.widths[e]})))},t.columnsSvg=function(t,e){"object"!=typeof e&&(e={});let n=y(t,e);return n.columns.map(((t,e)=>B(t,{...n.options,width:n.widths[e]})))},t.signNormalize=t=>{const n=g(t);if(n.spatials){const t=n.spatials.reduce(((t,e)=>{const n=j(e.symbol);return t[e.symbol]={width:n[0],height:n[1]},t}),{}),r=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))))}),i=m,o=n.spatials.filter((t=>{const e=parseInt(t.symbol.slice(1,4),16);return i[0]<=e&&i[1]>=e})),s=b,l=n.spatials.filter((t=>{const e=parseInt(t.symbol.slice(1,4),16);return s[0]<=e&&s[1]>=e}));let a=r(n.spatials),c=[a.x2,a.y2];if(o.length){const t=r(o);a.x1=t.x1,a.x2=t.x2}if(l.length){const t=r(l);a.y1=t.y1,a.y2=t.y2}const f=[parseInt((a.x2+a.x1)/2)-500,parseInt((a.y2+a.y1)/2)-500];return(n.sequence?"𝠀"+n.sequence.join(""):"")+n.box+e([c[0]-f[0],c[1]-f[1]])+n.spatials.map((t=>t.symbol+e([t.coord[0]-f[0],t.coord[1]-f[1]]))).join("")+(n.style||"")}},t.signPng=t=>{const e=function(t){const e=g(t);if(e.spatials){const t=document.createElement("canvas"),n=t.getContext("2d");let r=O(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 u=r.detail&&r.detail[0]||"black",$=r.detail&&r.detail[1]||"white";return e.spatials.forEach((t=>{let e=u;t.detail?e=t.detail[0]:r.colorize&&(e=S(t.symbol));let s=$;t.detail&&t.detail[1]&&(s=t.detail[1]),n.font=30*a+"px 'SuttonSignWritingFill'",n.fillStyle=s,n.fillText(k(t.symbol),(t.coord[0]-i)*a,(t.coord[1]-o)*a),n.font=30*a+"px 'SuttonSignWritingLine'",n.fillStyle=e,n.fillText(A(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=g(t);if(e.spatials){let n=O(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+=L(t),f+="\n</svg>",f}return'<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>'},t.signSvgBody=L,t.symbolFill=k,t.symbolFlop=(t,e=!0)=>{let n=d(t);if(!n.symbol)return t;if(!j(n.symbol))return t;n.symbol=i(n.symbol);const r=e?1:-1,s=n.symbol.slice(0,4);let l=parseInt(n.symbol.slice(4,5)),a=n.symbol.slice(5,6),c="";for(;!c||!j(o(c));)l+=r,l>5&&(l=0),l<0&&(l=5),c=s+l+a;return n.symbol=o(c),v(n)},t.symbolInvert=t=>{let e=d(t);if(!e.symbol)return t;if(!j(e.symbol))return t;e.symbol=i(e.symbol);const n=e.symbol.slice(0,4);let r=e.symbol.slice(4,5),s=e.symbol.slice(5,6);const l=n+"18";let a;if(a=j(o(n+"08"))||j(o(l))?{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"},s in a){const t=n+r+a[s];j(o(t))&&(e.symbol=o(t))}return v(e)},t.symbolLine=A,t.symbolMirror=t=>{let e=d(t);if(!e.symbol)return t;if(!j(e.symbol))return t;e.symbol=i(e.symbol);const n=e.symbol.slice(0,4);let r=e.symbol.slice(4,5),s=parseInt(e.symbol.slice(5,6),16);const l=n+"18";var a;j(o(n+"08"))||j(o(l))?a=8:(0!==s&&4!=s||(a=0),1!=s&&5!=s||(a=6),2!=s&&6!=s||(a=4),3!=s&&7!=s||(a=2));let c="";for(;!c||!j(o(c));)s+=a,s>7&&a<8&&(s-=8),s>15&&(s-=16),c=n+r+s.toString(16);return e.symbol=o(c),v(e)},t.symbolNormalize=t=>{const n=d(t);if(!n.symbol)return null;{let t=j(n.symbol);if(t)return`${n.symbol}${e([500-parseInt((t[0]+1)/2),500-parseInt((t[1]+1)/2)])}${n.style||""}`}},t.symbolPng=t=>{const e=function(t){const e=d(t);if(e.symbol){let t=j(e.symbol);if(t){const n=document.createElement("canvas"),r=n.getContext("2d");let i=O(e.style),o="black";i.colorize?o=S(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 u=1;"x"!=i.zoom&&(u=i.zoom);let $=(a-l)*u,d=(f-c)*u;return n.width=$||1,n.height=d||1,i.background&&(r.rect(0,0,$,d),r.fillStyle=i.background,r.fill()),r.font=30*u+"px 'SuttonSignWritingFill'",r.fillStyle=s,r.fillText(k(e.symbol),(500-l)*u,(500-c)*u),r.font=30*u+"px 'SuttonSignWritingLine'",r.fillStyle=o,r.fillText(A(e.symbol),(500-l)*u,(500-c)*u),n}}}(t),n=e.toDataURL("image/png");return e.remove(),n},t.symbolRotate=(t,e=!0)=>{let n=d(t);if(!n.symbol)return t;if(!j(n.symbol))return t;n.symbol=i(n.symbol);const r=e?1:-1,s=n.symbol.slice(0,4);let l=n.symbol.slice(4,5),a=parseInt(n.symbol.slice(5,6),16),c="";for(;!c||!j(o(c));)a>7?(a+=r,a>15&&(a=8),a<8&&(a=15),c=s+l+a.toString(16)):(a-=r,a>7&&(a=0),a<0&&(a=7),c=s+l+a);return n.symbol=o(c),v(n)},t.symbolScroll=(t,e=!0)=>{let n=d(t);if(!n.symbol)return t;if(!j(n.symbol))return t;n.symbol=i(n.symbol);const r=e?1:-1,s=parseInt(n.symbol.slice(1,4),16)+r,l=n.symbol.slice(4,5),a=n.symbol.slice(5,6),c="S"+s.toString(16)+l+a;return 6==c.length&&j(o(c))&&(n.symbol=c),n.symbol=o(n.symbol),v(n)},t.symbolSize=j,t.symbolSvg=t=>{const e=d(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,l=O(e.style);if(e.coord)r=e.coord[0],i=e.coord[1],o=500-r+500,s=500-i+500;else{let t=j(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 a="";l.classes&&(a=` class="${l.classes}"`);let c="";l.id&&(c=` id="${l.id}"`),l.padding&&(r-=l.padding,i-=l.padding,o+=l.padding,s+=l.padding);let f="";return"x"!=l.zoom&&(f=` width="${(o-r)*(l.zoom?l.zoom:1)}" height="${(s-i)*(l.zoom?l.zoom:1)}"`),`<svg${a}${c} version="1.1" xmlns="http://www.w3.org/2000/svg"${f} viewBox="${r} ${i} ${o-r} ${s-i}">\n${D(t)}\n</svg>`},t.symbolSvgBody=D,t.symbolText=R,Object.defineProperty(t,"__esModule",{value:!0})}(e.exports)),e.exports);export{n as s}