refactor: Still trying to reorganize edit mode to be more robust
This commit is contained in:
parent
85faf502c4
commit
c5a5b26797
487 changed files with 94669 additions and 144 deletions
48
node_modules/bidi-js/src/mirroring.js
generated
vendored
Normal file
48
node_modules/bidi-js/src/mirroring.js
generated
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import data from './data/bidiMirroring.data.js'
|
||||
import { parseCharacterMap } from './util/parseCharacterMap.js'
|
||||
|
||||
let mirrorMap
|
||||
|
||||
function parse () {
|
||||
if (!mirrorMap) {
|
||||
//const start = performance.now()
|
||||
const { map, reverseMap } = parseCharacterMap(data, true)
|
||||
// Combine both maps into one
|
||||
reverseMap.forEach((value, key) => {
|
||||
map.set(key, value)
|
||||
})
|
||||
mirrorMap = map
|
||||
//console.log(`mirrored chars parsed in ${performance.now() - start}ms`)
|
||||
}
|
||||
}
|
||||
|
||||
export function getMirroredCharacter (char) {
|
||||
parse()
|
||||
return mirrorMap.get(char) || null
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a string and its resolved embedding levels, build a map of indices to replacement chars
|
||||
* for any characters in right-to-left segments that have defined mirrored characters.
|
||||
* @param string
|
||||
* @param embeddingLevels
|
||||
* @param [start]
|
||||
* @param [end]
|
||||
* @return {Map<number, string>}
|
||||
*/
|
||||
export function getMirroredCharactersMap(string, embeddingLevels, start, end) {
|
||||
let strLen = string.length
|
||||
start = Math.max(0, start == null ? 0 : +start)
|
||||
end = Math.min(strLen - 1, end == null ? strLen - 1 : +end)
|
||||
|
||||
const map = new Map()
|
||||
for (let i = start; i <= end; i++) {
|
||||
if (embeddingLevels[i] & 1) { //only odd (rtl) levels
|
||||
const mirror = getMirroredCharacter(string[i])
|
||||
if (mirror !== null) {
|
||||
map.set(i, mirror)
|
||||
}
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue