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.44 kB
/* Sutton SignWriting Core Module v2.0.0 (https://github.com/sutton-signwriting/core), author: Steve Slevinski (https://SteveSlevinski.me), license: MIT */ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o(((e="undefined"!=typeof globalThis?globalThis:e||self).ssw=e.ssw||{},e.ssw.style={}))}(this,(function(e){"use strict";let 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 t=e=>(new RegExp(`^${o.colorhex}$`).test(e)?"#":"")+e,s=e=>"string"!=typeof e?[0,0,0]:e.replace(/rgba?\((.+?)\)/gi,((e,o)=>o)).split(",").map(Number),a=e=>e.slice(0,3).map((e=>e.toString(16).padStart(2,"0"))).join("");e.compose=e=>{if("object"!=typeof e||null===e)return;let t="-";t+=e.colorize?"C":"";const s=parseInt(e.padding);t+=!s||s<=0||s>99?"":"P"+(s>9?s:"0"+s);const a=e.background&&"string"==typeof e.background?e.background.match(o.colorbase)[0]:void 0;t+=a?"G_"+a+"_":"";const i=e.detail&&e.detail[0]&&"string"==typeof e.detail[0]?e.detail[0].match(o.colorbase)[0]:void 0,l=e.detail&&e.detail[1]&&"string"==typeof e.detail[1]?e.detail[1].match(o.colorbase)[0]:void 0;i&&(t+="D_"+i,l&&(t+=","+l),t+="_");const r="x"===e.zoom?"x":parseFloat(e.zoom);t+=!r||r<=0?"":"Z"+r;let c="";const n=e.detailsym&&Array.isArray(e.detailsym)?e.detailsym.map((e=>{const t=parseInt(e.index);if(!t||t<=0||t>99)return"";let s="D"+(t>9?t:"0"+t);const a=e.detail&&e.detail[0]?e.detail[0].match(o.colorbase)[0]:void 0,i=e.detail&&e.detail[1]?e.detail[1].match(o.colorbase)[0]:void 0;return a&&(s+="_"+a,i&&(s+=","+i),s+="_"),s})):[];c+=n.join("");let d="";const p=e.classes&&"string"==typeof e.classes?e.classes.match(o.classes)[0]:void 0;d+=p||"";const m=e.id&&"string"==typeof e.id?e.id.match(o.id)[0]:void 0;return d+=p||m?"!":"",d+=m?m+"!":"",t+(c||d?"-"+c:"")+(d?"-"+d:"")},e.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}},e.parse=e=>{const s=`^${o.full}`,a=("string"==typeof e?e.match(new RegExp(s)):[])||[];return i={colorize:a[1]?!!a[1]:void 0,padding:a[2]?parseInt(a[2].slice(1)):void 0,background:a[3]?t(a[3].slice(2,-1)):void 0,detail:a[4]?a[4].slice(2,-1).split(",").map(t):void 0,zoom:a[5]?"Zx"===a[5]?"x":parseFloat(a[5].slice(1)):void 0,detailsym:a[6]?a[6].match(new RegExp(o.detailsym,"g")).map((e=>{const o=e.split("_"),s=o[1].split(",").map(t);return{index:parseInt(o[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(i).filter((([e,o])=>void 0!==o)));var i},e.re=o,e.rgb2hex=(e,o=0)=>{const t=s(e);return 4==t.length&&t[3]<=o?"transparent":a(t)},e.rgba2hex=(e,o)=>{const t=s(o),i=s(e),l=4==i.length?i[3]:1;return 0==l?"transparent":a(i.map(((e,o)=>parseInt((1-l)*t[o]+l*e))))},Object.defineProperty(e,"__esModule",{value:!0})}));