From 76cb9c2a39d477a64824a985ade40507e3bbade1 Mon Sep 17 00:00:00 2001 From: Adam Mathes Date: Fri, 13 Feb 2026 21:34:48 -0800 Subject: feat(vanilla): add testing infrastructure and tests (NK-wjnczv) --- .../bidi-js/src/util/parseCharacterMap.js | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 vanilla/node_modules/bidi-js/src/util/parseCharacterMap.js (limited to 'vanilla/node_modules/bidi-js/src/util/parseCharacterMap.js') diff --git a/vanilla/node_modules/bidi-js/src/util/parseCharacterMap.js b/vanilla/node_modules/bidi-js/src/util/parseCharacterMap.js new file mode 100644 index 0000000..86a96b8 --- /dev/null +++ b/vanilla/node_modules/bidi-js/src/util/parseCharacterMap.js @@ -0,0 +1,30 @@ +/** + * 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, reverseMap?: Map}} + */ +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 } +} -- cgit v1.2.3