44 lines
1.3 KiB
Plaintext
44 lines
1.3 KiB
Plaintext
/**
|
|
* Arabic sentence context checkers
|
|
*/
|
|
|
|
import { isArabicChar, isWhiteSpace, isTashkeelArabicChar } from '../../../char';
|
|
|
|
function arabicSentenceStartCheck(contextParams) {
|
|
const char = contextParams.current;
|
|
const prevChar = contextParams.get(-1);
|
|
return (
|
|
// ? an arabic char preceded with a non arabic char
|
|
(isArabicChar(char) || isTashkeelArabicChar(char)) &&
|
|
!isArabicChar(prevChar)
|
|
);
|
|
}
|
|
|
|
function arabicSentenceEndCheck(contextParams) {
|
|
const nextChar = contextParams.get(1);
|
|
switch (true) {
|
|
case nextChar === null:
|
|
return true;
|
|
case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)):
|
|
const nextIsWhitespace = isWhiteSpace(nextChar);
|
|
if (!nextIsWhitespace) return true;
|
|
if (nextIsWhitespace) {
|
|
let arabicCharAhead = false;
|
|
arabicCharAhead = (
|
|
contextParams.lookahead.some(
|
|
c => isArabicChar(c) || isTashkeelArabicChar(c)
|
|
)
|
|
);
|
|
if (!arabicCharAhead) return true;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export default {
|
|
startCheck: arabicSentenceStartCheck,
|
|
endCheck: arabicSentenceEndCheck
|
|
};
|