diff options
Diffstat (limited to 'vanilla/node_modules/bidi-js/src/util')
| -rw-r--r-- | vanilla/node_modules/bidi-js/src/util/parseCharacterMap.js | 30 |
1 files changed, 30 insertions, 0 deletions
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<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 } +} |
