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) 3.23 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={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 o=o=>(new RegExp(`^${e.colorhex}$`).test(o)?"#":"")+o,t=e=>"string"!=typeof e?[0,0,0]:e.replace(/rgba?\((.+?)\)/gi,((e,o)=>o)).split(",").map(Number),s=e=>e.slice(0,3).map((e=>e.toString(16).padStart(2,"0"))).join("");exports.compose=o=>{if("object"!=typeof o||null===o)return;let t="-";t+=o.colorize?"C":"";const s=parseInt(o.padding);t+=!s||s<=0||s>99?"":"P"+(s>9?s:"0"+s);const a=o.background&&"string"==typeof o.background?o.background.match(e.colorbase)[0]:void 0;t+=a?"G_"+a+"_":"";const r=o.detail&&o.detail[0]&&"string"==typeof o.detail[0]?o.detail[0].match(e.colorbase)[0]:void 0,i=o.detail&&o.detail[1]&&"string"==typeof o.detail[1]?o.detail[1].match(e.colorbase)[0]:void 0;r&&(t+="D_"+r,i&&(t+=","+i),t+="_");const l="x"===o.zoom?"x":parseFloat(o.zoom);t+=!l||l<=0?"":"Z"+l;let c="";const n=o.detailsym&&Array.isArray(o.detailsym)?o.detailsym.map((o=>{const t=parseInt(o.index);if(!t||t<=0||t>99)return"";let s="D"+(t>9?t:"0"+t);const a=o.detail&&o.detail[0]?o.detail[0].match(e.colorbase)[0]:void 0,r=o.detail&&o.detail[1]?o.detail[1].match(e.colorbase)[0]:void 0;return a&&(s+="_"+a,r&&(s+=","+r),s+="_"),s})):[];c+=n.join("");let d="";const p=o.classes&&"string"==typeof o.classes?o.classes.match(e.classes)[0]:void 0;d+=p||"";const m=o.id&&"string"==typeof o.id?o.id.match(e.id)[0]:void 0;return d+=p||m?"!":"",d+=m?m+"!":"",t+(c||d?"-"+c:"")+(d?"-"+d:"")},exports.merge=(e,o)=>{"object"!=typeof e&&(e={}),"object"!=typeof o&&(o={});const t="zoom"in e?e.zoom:1,s="zoom"in o?o.zoom:1;return{...e,...o,zoom:t*s}},exports.parse=t=>{const s=`^${e.full}`,a=("string"==typeof t?t.match(new RegExp(s)):[])||[];return r={colorize:a[1]?!!a[1]:void 0,padding:a[2]?parseInt(a[2].slice(1)):void 0,background:a[3]?o(a[3].slice(2,-1)):void 0,detail:a[4]?a[4].slice(2,-1).split(",").map(o):void 0,zoom:a[5]?"Zx"===a[5]?"x":parseFloat(a[5].slice(1)):void 0,detailsym:a[6]?a[6].match(new RegExp(e.detailsym,"g")).map((e=>{const t=e.split("_"),s=t[1].split(",").map(o);return{index:parseInt(t[0].slice(1)),detail:s}})):void 0,classes:a[7]?a[7]:void 0,id:a[8]?a[8]:void 0},Object.fromEntries(Object.entries(r).filter((([e,o])=>void 0!==o)));var r},exports.re=e,exports.rgb2hex=(e,o=0)=>{const a=t(e);return 4==a.length&&a[3]<=o?"transparent":s(a)},exports.rgba2hex=(e,o)=>{const a=t(o),r=t(e),i=4==r.length?r[3]:1;return 0==i?"transparent":s(r.map(((e,o)=>parseInt((1-i)*a[o]+i*e))))};