Merge pull request #1236 from omnivore-app/fix/cjk-highlighting

Disable word snapping on CJK languages
This commit is contained in:
Jackson Harper
2022-09-26 16:42:40 +08:00
committed by GitHub

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,