32 lines
814 B
JavaScript
32 lines
814 B
JavaScript
|
import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';
|
||
|
|
||
|
function validate(codePoint) {
|
||
|
if (!Number.isSafeInteger(codePoint)) {
|
||
|
throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function eastAsianWidthType(codePoint) {
|
||
|
validate(codePoint);
|
||
|
|
||
|
return getCategory(codePoint);
|
||
|
}
|
||
|
|
||
|
export function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {
|
||
|
validate(codePoint);
|
||
|
|
||
|
if (
|
||
|
isFullWidth(codePoint)
|
||
|
|| isWide(codePoint)
|
||
|
|| (ambiguousAsWide && isAmbiguous(codePoint))
|
||
|
) {
|
||
|
return 2;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// For Prettier. This doesn't count "ambiguous" characters or check for valid input.
|
||
|
// https://github.com/sindresorhus/get-east-asian-width/pull/6
|
||
|
export const _isNarrowWidth = codePoint => !(isFullWidth(codePoint) || isWide(codePoint));
|