char-info
Version:
Unicode character information library.
100 lines (85 loc) • 3.05 kB
text/typescript
/**
* Unicode character indicators.
*
* @module char-info/unicode
* @preferred
*/ import type { CharClassIndicator } from "./indicator-type";
import { BasicCharClassIndicator } from "./indicators";
import { UnicodeCategory } from "./names";
import { lookup } from "./unicode-lookup";
function homogenizeInputStr(str: string) {
return str.toLowerCase().replace(/[_ -,]/g, "");
}
/**
* Returns an indicator for characters belonging to the Unicode category, `category`.
*
* @param category The category to test for.
*/
export function uniInCategory(category: string): CharClassIndicator {
category = homogenizeInputStr(category);
if (category.length > 3) {
category = lookup.longCategoryToCode.get(category)!;
}
const uGroup = lookup.categories.get(category);
return new BasicCharClassIndicator(uGroup!);
}
/**
* Returns an indicator for characters belonging to a Unicode script, `script`.
*
* @param script
*/
export function uniInScript(script: string) {
script = homogenizeInputStr(script);
const uGroup = lookup.scripts.get(script);
return new BasicCharClassIndicator(uGroup!);
}
/**
* Returns an indicator for characters belonging to the Unicode block, `block`.
*
* @param block
*/
export function uniInBlock(block: string) {
block = homogenizeInputStr(block);
const uGroup = lookup.blocks.get(block);
return new BasicCharClassIndicator(uGroup!);
}
/** Indicator for Unicode decimal digit characters. */
export const uniIsDecimal = uniInCategory(UnicodeCategory.NumberDecimalDigit);
/** Indicator for Unicode letters. */
export const uniIsLetter = uniInCategory(UnicodeCategory.Letter);
/** Indicator for Unicode lowercase letters. */
export const uniIsLower = uniInCategory(UnicodeCategory.LetterLowercase);
/** Indicator for Unicode uppercase letters. */
export const uniIsUpper = uniInCategory(UnicodeCategory.LetterUppercase);
/** Indicator for Unicode inline spaces. */
export const uniIsSpace = uniInCategory(UnicodeCategory.SeparatorSpace);
/** Indicator for Unicode vertical separators. */
export const uniIsNewline = uniInCategory(UnicodeCategory.Custom_SeparatorVertical);
/** Returns the Unicode categories for a character or code. */
export const uniGetCategories = {
code(code: number) {
return lookup.allCategories.search(code, code);
},
char(char: string) {
return uniGetCategories.code(char.charCodeAt(0));
}
};
/** Returns the Unicode scripts for a character or code. */
export const uniGetScripts = {
code(code: number) {
return lookup.allScripts.search(code, code);
},
char(char: string) {
return uniGetScripts.code(char.charCodeAt(0));
}
};
/** Returns the Unicode block for a character or code. */
export const uniGetBlock = {
code(code: number) {
return lookup.allBlocks.search(code, code)[0];
},
char(char: string) {
return uniGetBlock.code(char.charCodeAt(0));
}
};
export { UnicodeBlock, UnicodeCategory, UnicodeScript } from "./names";