unicode-shaper 0.3.0

Shape unicode text so that renderers like WebGL and WebGPU can properly display the glyphs.
Documentation
const UBIDI_MIRROR_INDEX_SHIFT = 21

let mirrors = [
    0x2000ab,0xbb,0x4202215,0x4e0221f,0x3e02220,0x3a02221,0x3c02222,0x4c02224,0x2202243,0x1402245,0x120224c,0x4002298,0x44022a6,0x48022a8,0x46022a9,0x4a022ab,
    0x38022b8,0x10022cd,0x2e022f2,0x30022f3,0x32022f4,0x34022f6,0x36022f7,0x24022fa,0x26022fb,0x28022fc,0x2a022fd,0x2c022fe,0x20027dc,0xa0299b,0xc029a0,0x8029a3,
    0x16029b8,0x4029f5,0x1802ade,0x1c02ae3,0x1a02ae4,0x1e02ae5,0xe02aee,0x602bfe
]
let matches = mirrors.map(findInverse)
mirrors = mirrors.map(toCharDecimal);

function toCharDecimal (c) {
    return c & 0x1fffff
}

function findInverse (c) {
    return toCharDecimal(mirrors[getMirror(c)]);
}

function getMirror (c) {
    return c >> UBIDI_MIRROR_INDEX_SHIFT
}

console.log(mirrors)
console.log(matches)
const blend = mirrors.map((n, i) => {
    return [n, matches[i]]
})
console.log(blend)

console.log(mirrors.map((n) => String.fromCharCode(n)))
console.log(matches.map((n) => String.fromCharCode(n)))