Files
markitect-main/node_modules/bidi-js/src/util/parseCharacterMap.js
tegwick c5a5b26797
Some checks failed
Test Suite / code-quality (push) Has been cancelled
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
refactor: Still trying to reorganize edit mode to be more robust
2025-11-04 21:59:22 +01:00

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 }
}