Disable word snapping on CJK languages

This commit is contained in:
Jackson Harper 2022-09-26 14:42:19 +08:00
parent cc05f4dac7
commit 3ccb3c6c84

View file

@ -1,9 +1,10 @@
export function extendRangeToWordBoundaries(range: Range): void {
const { nodeValue: startValue } = range.startContainer
const { nodeValue: endValue } = range.endContainer
const noWordSnap = disableWordSnap(range.toString())
const startOffset = findNextWord(range.startOffset, false, startValue)
const endOffset = findNextWord(range.endOffset, true, endValue)
const startOffset = noWordSnap ? range.startOffset : findNextWord(range.startOffset, false, startValue)
const endOffset = noWordSnap ? range.endOffset : findNextWord(range.endOffset, true, endValue)
try {
range.setStart(range.startContainer, startOffset)
@ -13,7 +14,17 @@ export function extendRangeToWordBoundaries(range: Range): void {
}
}
const isWhitespace = (c?: string): boolean => !!c && /\s/.test(c)
function disableWordSnap(str: String): boolean {
// For CJK languages we don't attempt word snapping
if (str.match(/[\u3131-\uD79D]/ugi)) {
return true
}
return false
}
const isWhitespace = (c?: string): boolean => {
return !!c && /\u2014|\u2013|\s/.test(c)
}
function findNextWord(
start: number,