UNPKG

lesetid

Version:

A dead simple read time estimation

74 lines (73 loc) 2.24 kB
//#region src/utils.ts /** * Checks if a character code falls within a specified range (inclusive). * * @param {number} code - The character code to check. * @param {number} start - The start of the range (inclusive). * @param {number} end - The end of the range (inclusive). * @returns {boolean} - true if the character code is within the range, false otherwise. */ function isCharCodeIntersected(code, start, end) { return code >= start && code <= end; } const CJK_CODE_RANGES = [ [12352, 12447], [19968, 40959], [44032, 55203], [131072, 191456] ]; /** * Checks if a character is a CJK character. * * NOTE: That the ranges are maybe not complete. * You can see the full list of code ranges in `CJK_CODE_RANGES` export. * * @param {string | undefined} char - the character to check. * @returns {boolean} - true if the character is a CJK character, false otherwise. */ const isCJK = (char) => { if (!char) return false; const charCode = char.charCodeAt(0); for (const [start, end] of CJK_CODE_RANGES) { if (!start || !end) return false; if (isCharCodeIntersected(charCode, start, end)) return true; } return false; }; const PUNCTATION_CODE_RANGES = [ [33, 47], [58, 64], [91, 96], [123, 126], [12288, 12351], [65280, 65519] ]; /** * Checks if a character is a punctuation character. * * NOTE: That the ranges are maybe not complete. * You can see the full list of code ranges in `PUNCTATION_CODE_RANGES` export. * * @param {string | undefined} char - the character to check. * @returns {boolean} - true if the character is a punctuation character, false otherwise. */ const isPunctuation = (char) => { if (!char) return false; const charCode = char.charCodeAt(0); for (const [start, end] of PUNCTATION_CODE_RANGES) { if (!start || !end) return false; if (isCharCodeIntersected(charCode, start, end)) return true; } return false; }; /** * Checks if a character is a ansi character. * @param {string | undefined} char - the character to check. * @returns {boolean} - true if the character is a word character, false otherwise. */ const isAnsi = (char) => { if (!char) return false; return " \n\r ".includes(char); }; //#endregion export { CJK_CODE_RANGES, PUNCTATION_CODE_RANGES, isAnsi, isCJK, isPunctuation };