Files
crypto_trader/frontend/node_modules/bidi-js/src/util/parseCharacterMap.js

31 lines
1.1 KiB
JavaScript

/**
* Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or
* mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object
* holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.
* @param {string} encodedString
* @param {boolean} includeReverse - true if you want reverseMap in the output
* @return {{map: Map<number, number>, reverseMap?: Map<number, number>}}
*/
export function parseCharacterMap (encodedString, includeReverse) {
const radix = 36
let lastCode = 0
const map = new Map()
const reverseMap = includeReverse && new Map()
let prevPair
encodedString.split(',').forEach(function visit(entry) {
if (entry.indexOf('+') !== -1) {
for (let i = +entry; i--;) {
visit(prevPair)
}
} else {
prevPair = entry
let [a, b] = entry.split('>')
a = String.fromCodePoint(lastCode += parseInt(a, radix))
b = String.fromCodePoint(lastCode += parseInt(b, radix))
map.set(a, b)
includeReverse && reverseMap.set(b, a)
}
})
return { map, reverseMap }
}