char-info
Version:
Unicode character information library.
218 lines (198 loc) • 5.74 kB
text/typescript
/**
* Basic ASCII character indicators and character codes.
*
* @module char-info/ascii
* @preferred
*/
/** Common ASCII character codes. */
export namespace AsciiCodes {
export const _ = "_".charCodeAt(0);
export const a = "a".charCodeAt(0);
export const f = "f".charCodeAt(0);
export const F = "F".charCodeAt(0);
export const z = "z".charCodeAt(0);
export const A = "A".charCodeAt(0);
export const Z = "Z".charCodeAt(0);
export const zero = "0".charCodeAt(0);
export const nine = "9".charCodeAt(0);
export const newline = "\n".charCodeAt(0);
export const maxAscii = 127;
export const carriageReturn = "\r".charCodeAt(0);
export const space = " ".charCodeAt(0);
export const tab = "\t".charCodeAt(0);
export const minus = "-".charCodeAt(0);
export const plus = "+".charCodeAt(0);
export const decimalPoint = ".".charCodeAt(0);
export const e = a + 4;
export const E = A + 4;
export const underscore = "_".charCodeAt(0);
}
/**
* Returns true if `code` is a hex character: `[0-9a-fA-F]`.
*
* @param code The character code.
*/
export function isHexCode(code: number) {
return (
(code >= AsciiCodes.A && code <= AsciiCodes.F) ||
(code >= AsciiCodes.a && code <= AsciiCodes.f) ||
(code >= AsciiCodes.zero && code <= AsciiCodes.nine)
);
}
/**
* Returns true if `code` is a digit in base `base`.
*
* @param code The character code.
* @param base The base.
*/
export function isDigitCode(code: number, base = 10) {
const baseDif = base - 10;
if (baseDif <= 0) {
return code >= AsciiCodes.zero && code <= AsciiCodes.nine + baseDif;
} else {
return (
(code >= AsciiCodes.zero && code <= AsciiCodes.nine) ||
(code >= AsciiCodes.a && code < AsciiCodes.a + baseDif)
);
}
}
/**
* Returns true if `code` is a latin letter, `[a-zA-Z]`.
*
* @param code The character code.
*/
export function isLetterCode(code: number) {
return (
(code >= AsciiCodes.a && code <= AsciiCodes.z) ||
(code >= AsciiCodes.A && code <= AsciiCodes.Z)
);
}
/**
* Returns true if `code` is a latin uppercase letter, `[A-Z]`.
*
* @param code The character code.
*/
export function isUpperCode(code: number) {
return code >= AsciiCodes.A && code <= AsciiCodes.Z;
}
/**
* Returns true if `code` is a latin lowercase letter, `[a-z]`.
*
* @param code The character code.
*/
export function isLowerCode(code: number) {
return code >= AsciiCodes.a && code <= AsciiCodes.z;
}
/**
* Returns true if `code` is an ASCII newline character: `[\r\n]`.
*
* @param code The character code.
*/
export function isNewlineCode(code: number) {
return code === AsciiCodes.carriageReturn || code === AsciiCodes.newline;
}
/**
* Returns true if `code` is an ASCII inline space char: `[ \t]`.
*
* @param code The character code.
*/
export function isSpaceCode(code: number) {
return code === AsciiCodes.space || code === AsciiCodes.tab;
}
/**
* Returns true if `code` is a word character, which is a digit, a letter, dash or underscore:
* `[0-9a-zA-Z_-]`.
*
* @param code The character code.
*/
export function isWordCharCode(code: number) {
return (
(code >= AsciiCodes.A && code <= AsciiCodes.Z) ||
(code >= AsciiCodes.zero && code <= AsciiCodes.nine) ||
(code >= AsciiCodes.a && code <= AsciiCodes.z) ||
code === AsciiCodes.underscore ||
code === AsciiCodes.minus
);
}
/**
* Returns true if `code` is an ASCII character code.
*
* @param code The character code. The char code.
*/
export function isAsciiCode(code: number) {
return code >= 0 && code <= AsciiCodes.maxAscii;
}
/**
* Returns true if `char` begins with a hex character: `[a-fA-F0-9]`.
*
* @param char A string representing a character.
*/
export function isHex(char: string) {
return isHexCode(char.charCodeAt(0));
}
/**
* Returns true if `char` is a digit in base `base`.
*
* @param char A string representing a character.
* @param base The base.
*/
export function isDigit(char: string, base = 10) {
return isDigitCode(char.charCodeAt(0), base);
}
/**
* Returns true if `char` begins with a latin letter: `[A-Za-z]`.
*
* @param char A string representing a character.
*/
export function isLetter(char: string) {
return isLetterCode(char.charCodeAt(0));
}
/**
* Returns true if `char` begins with an uppercase latin letter: `[A-Z]`.
*
* @param char A string representing a character.
*/
export function isUpper(char: string) {
return isUpperCode(char.charCodeAt(0));
}
/**
* Returns true if `char` begins with a lowercase latin letter: `[a-z]`.
*
* @param char A string representing a character.
*/
export function isLower(char: string) {
return isLowerCode(char.charCodeAt(0));
}
/**
* Returns true if `char` begins with a newline: `[\r\n]`.
*
* @param char A string representing a character.
*/
export function isNewline(char: string) {
return isNewlineCode(char.charCodeAt(0));
}
/**
* Returns true if `char` begins with an inline space: `[ \t]`.
*
* @param char A string representing a character.
*/
export function isSpace(char: string) {
return isSpaceCode(char.charCodeAt(0));
}
/**
* Returns true if `char` begins with a word char: a letter, digit, underscore, or dash:
* `[a-zA-Z0-9_-].
*
* @param char A string representing a character.
*/
export function isWordChar(char: string) {
return isWordCharCode(char.charCodeAt(0));
}
/**
* Returns true if `char` begins with an ASCII character.
*
* @param char A string representing a character.
*/
export function isAscii(char: string) {
return isAsciiCode(char.charCodeAt(0));
}