UNPKG

2.62 kBJavaScriptView Raw
1/* Sutton SignWriting Core Module v1.4.2 (https://github.com/sutton-signwriting/core), author: Steve Slevinski (https://SteveSlevinski.me), license: MIT */
2let o={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}"};o.colorbase=`(?:${o.colorhex}|${o.colorname})`,o.color=`_${o.colorbase}_`,o.colors=`_${o.colorbase}(?:,${o.colorbase})?_`,o.background=`G${o.color}`,o.detail=`D${o.colors}`,o.detailsym=`D[0-9]{2}${o.colors}`,o.classes=`${o.classbase}(?: ${o.classbase})*`,o.full=`-(${o.colorize})?(${o.padding})?(${o.background})?(${o.detail})?(${o.zoom})?(?:-((?:${o.detailsym})*))?(?:-(${o.classes})?!(?:(${o.id})!)?)?`;const e=e=>(new RegExp(`^${o.colorhex}$`).test(e)?"#":"")+e,a=a=>{const t=`^${o.full}`,s=("string"==typeof a?a.match(new RegExp(t)):[])||[];return l={colorize:s[1]?!!s[1]:void 0,padding:s[2]?parseInt(s[2].slice(1)):void 0,background:s[3]?e(s[3].slice(2,-1)):void 0,detail:s[4]?s[4].slice(2,-1).split(",").map(e):void 0,zoom:s[5]?"Zx"===s[5]?"x":parseFloat(s[5].slice(1)):void 0,detailsym:s[6]?s[6].match(new RegExp(o.detailsym,"g")).map((o=>{const a=o.split("_"),t=a[1].split(",").map(e);return{index:parseInt(a[0].slice(1)),detail:t}})):void 0,classes:s[7]?s[7]:void 0,id:s[8]?s[8]:void 0},Object.fromEntries(Object.entries(l).filter((([o,e])=>void 0!==e)));var l},t=e=>{if("object"!=typeof e||null===e)return;let a="-";a+=e.colorize?"C":"";const t=parseInt(e.padding);a+=!t||t<=0||t>99?"":"P"+(t>9?t:"0"+t);const s=e.background&&"string"==typeof e.background?e.background.match(o.colorbase)[0]:void 0;a+=s?"G_"+s+"_":"";const l=e.detail&&e.detail[0]&&"string"==typeof e.detail[0]?e.detail[0].match(o.colorbase)[0]:void 0,i=e.detail&&e.detail[1]&&"string"==typeof e.detail[1]?e.detail[1].match(o.colorbase)[0]:void 0;l&&(a+="D_"+l,i&&(a+=","+i),a+="_");const c="x"===e.zoom?"x":parseFloat(e.zoom);a+=!c||c<=0?"":"Z"+c;let d="";const r=e.detailsym&&Array.isArray(e.detailsym)?e.detailsym.map((e=>{const a=parseInt(e.index);if(!a||a<=0||a>99)return"";let t="D"+(a>9?a:"0"+a);const s=e.detail&&e.detail[0]?e.detail[0].match(o.colorbase)[0]:void 0,l=e.detail&&e.detail[1]?e.detail[1].match(o.colorbase)[0]:void 0;return s&&(t+="_"+s,l&&(t+=","+l),t+="_"),t})):[];d+=r.join("");let n="";const m=e.classes&&"string"==typeof e.classes?e.classes.match(o.classes)[0]:void 0;n+=m||"";const p=e.id&&"string"==typeof e.id?e.id.match(o.id)[0]:void 0;return n+=m||p?"!":"",n+=p?p+"!":"",a+(d||n?"-"+d:"")+(n?"-"+n:"")};export{t as compose,a as parse,o as re};