gitea push
This commit is contained in:
+36
-96
@@ -1,28 +1,35 @@
|
||||
/* IMPORT */
|
||||
import { isAmbiguous, isFullWidth, isWide } from './utils.js';
|
||||
import { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji } from './utils.js';
|
||||
/* HELPERS */
|
||||
const ANSI_RE = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y;
|
||||
const ANSI_RE = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y;
|
||||
const CONTROL_RE = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y;
|
||||
const CJKT_WIDE_RE = /(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu;
|
||||
const TAB_RE = /\t{1,1000}/y;
|
||||
const EMOJI_RE = /[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu;
|
||||
const LATIN_RE = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y;
|
||||
const MODIFIER_RE = /\p{M}+/gu;
|
||||
const NO_TRUNCATION = { limit: Infinity, ellipsis: '' };
|
||||
/* MAIN */
|
||||
//TODO: Optimize matching non-latin letters
|
||||
const getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {}) => {
|
||||
/* CONSTANTS */
|
||||
const LIMIT = truncationOptions.limit ?? Infinity;
|
||||
const ELLIPSIS = truncationOptions.ellipsis ?? '';
|
||||
const ELLIPSIS_WIDTH = truncationOptions?.ellipsisWidth ?? (ELLIPSIS ? getStringTruncatedWidth(ELLIPSIS, NO_TRUNCATION, widthOptions).width : 0);
|
||||
const ANSI_WIDTH = widthOptions.ansiWidth ?? 0;
|
||||
const ANSI_WIDTH = 0;
|
||||
const CONTROL_WIDTH = widthOptions.controlWidth ?? 0;
|
||||
const TAB_WIDTH = widthOptions.tabWidth ?? 8;
|
||||
const AMBIGUOUS_WIDTH = widthOptions.ambiguousWidth ?? 1;
|
||||
const EMOJI_WIDTH = widthOptions.emojiWidth ?? 2;
|
||||
const FULL_WIDTH_WIDTH = widthOptions.fullWidthWidth ?? 2;
|
||||
const FULL_WIDTH_WIDTH = 2;
|
||||
const REGULAR_WIDTH = widthOptions.regularWidth ?? 1;
|
||||
const WIDE_WIDTH = widthOptions.wideWidth ?? 2;
|
||||
const WIDE_WIDTH = widthOptions.wideWidth ?? FULL_WIDTH_WIDTH;
|
||||
const PARSE_BLOCKS = [
|
||||
[LATIN_RE, REGULAR_WIDTH],
|
||||
[ANSI_RE, ANSI_WIDTH],
|
||||
[CONTROL_RE, CONTROL_WIDTH],
|
||||
[TAB_RE, TAB_WIDTH],
|
||||
[EMOJI_RE, EMOJI_WIDTH],
|
||||
[CJKT_WIDE_RE, WIDE_WIDTH],
|
||||
];
|
||||
/* STATE */
|
||||
let indexPrev = 0;
|
||||
let index = 0;
|
||||
@@ -46,12 +53,9 @@ const getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {
|
||||
if (isFullWidth(codePoint)) {
|
||||
widthExtra = FULL_WIDTH_WIDTH;
|
||||
}
|
||||
else if (isWide(codePoint)) {
|
||||
else if (isWideNotCJKTNotEmoji(codePoint)) {
|
||||
widthExtra = WIDE_WIDTH;
|
||||
}
|
||||
else if (AMBIGUOUS_WIDTH !== REGULAR_WIDTH && isAmbiguous(codePoint)) {
|
||||
widthExtra = AMBIGUOUS_WIDTH;
|
||||
}
|
||||
else {
|
||||
widthExtra = REGULAR_WIDTH;
|
||||
}
|
||||
@@ -68,93 +72,29 @@ const getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {
|
||||
unmatchedStart = unmatchedEnd = 0;
|
||||
}
|
||||
/* EXITING */
|
||||
if (index >= length)
|
||||
break;
|
||||
/* LATIN */
|
||||
LATIN_RE.lastIndex = index;
|
||||
if (LATIN_RE.test(input)) {
|
||||
lengthExtra = LATIN_RE.lastIndex - index;
|
||||
widthExtra = lengthExtra * REGULAR_WIDTH;
|
||||
if ((width + widthExtra) > truncationLimit) {
|
||||
truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / REGULAR_WIDTH));
|
||||
}
|
||||
if ((width + widthExtra) > LIMIT) {
|
||||
truncationEnabled = true;
|
||||
break;
|
||||
}
|
||||
width += widthExtra;
|
||||
unmatchedStart = indexPrev;
|
||||
unmatchedEnd = index;
|
||||
index = indexPrev = LATIN_RE.lastIndex;
|
||||
continue;
|
||||
if (index >= length) {
|
||||
break outer;
|
||||
}
|
||||
/* ANSI */
|
||||
ANSI_RE.lastIndex = index;
|
||||
if (ANSI_RE.test(input)) {
|
||||
if ((width + ANSI_WIDTH) > truncationLimit) {
|
||||
truncationIndex = Math.min(truncationIndex, index);
|
||||
/* PARSE BLOCKS */
|
||||
for (let i = 0, l = PARSE_BLOCKS.length; i < l; i++) {
|
||||
const [BLOCK_RE, BLOCK_WIDTH] = PARSE_BLOCKS[i];
|
||||
BLOCK_RE.lastIndex = index;
|
||||
if (BLOCK_RE.test(input)) {
|
||||
lengthExtra = BLOCK_RE === CJKT_WIDE_RE ? getCodePointsLength(input.slice(index, BLOCK_RE.lastIndex)) : BLOCK_RE === EMOJI_RE ? 1 : BLOCK_RE.lastIndex - index;
|
||||
widthExtra = lengthExtra * BLOCK_WIDTH;
|
||||
if ((width + widthExtra) > truncationLimit) {
|
||||
truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / BLOCK_WIDTH));
|
||||
}
|
||||
if ((width + widthExtra) > LIMIT) {
|
||||
truncationEnabled = true;
|
||||
break outer;
|
||||
}
|
||||
width += widthExtra;
|
||||
unmatchedStart = indexPrev;
|
||||
unmatchedEnd = index;
|
||||
index = indexPrev = BLOCK_RE.lastIndex;
|
||||
continue outer;
|
||||
}
|
||||
if ((width + ANSI_WIDTH) > LIMIT) {
|
||||
truncationEnabled = true;
|
||||
break;
|
||||
}
|
||||
width += ANSI_WIDTH;
|
||||
unmatchedStart = indexPrev;
|
||||
unmatchedEnd = index;
|
||||
index = indexPrev = ANSI_RE.lastIndex;
|
||||
continue;
|
||||
}
|
||||
/* CONTROL */
|
||||
CONTROL_RE.lastIndex = index;
|
||||
if (CONTROL_RE.test(input)) {
|
||||
lengthExtra = CONTROL_RE.lastIndex - index;
|
||||
widthExtra = lengthExtra * CONTROL_WIDTH;
|
||||
if ((width + widthExtra) > truncationLimit) {
|
||||
truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / CONTROL_WIDTH));
|
||||
}
|
||||
if ((width + widthExtra) > LIMIT) {
|
||||
truncationEnabled = true;
|
||||
break;
|
||||
}
|
||||
width += widthExtra;
|
||||
unmatchedStart = indexPrev;
|
||||
unmatchedEnd = index;
|
||||
index = indexPrev = CONTROL_RE.lastIndex;
|
||||
continue;
|
||||
}
|
||||
/* TAB */
|
||||
TAB_RE.lastIndex = index;
|
||||
if (TAB_RE.test(input)) {
|
||||
lengthExtra = TAB_RE.lastIndex - index;
|
||||
widthExtra = lengthExtra * TAB_WIDTH;
|
||||
if ((width + widthExtra) > truncationLimit) {
|
||||
truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / TAB_WIDTH));
|
||||
}
|
||||
if ((width + widthExtra) > LIMIT) {
|
||||
truncationEnabled = true;
|
||||
break;
|
||||
}
|
||||
width += widthExtra;
|
||||
unmatchedStart = indexPrev;
|
||||
unmatchedEnd = index;
|
||||
index = indexPrev = TAB_RE.lastIndex;
|
||||
continue;
|
||||
}
|
||||
/* EMOJI */
|
||||
EMOJI_RE.lastIndex = index;
|
||||
if (EMOJI_RE.test(input)) {
|
||||
if ((width + EMOJI_WIDTH) > truncationLimit) {
|
||||
truncationIndex = Math.min(truncationIndex, index);
|
||||
}
|
||||
if ((width + EMOJI_WIDTH) > LIMIT) {
|
||||
truncationEnabled = true;
|
||||
break;
|
||||
}
|
||||
width += EMOJI_WIDTH;
|
||||
unmatchedStart = indexPrev;
|
||||
unmatchedEnd = index;
|
||||
index = indexPrev = EMOJI_RE.lastIndex;
|
||||
continue;
|
||||
}
|
||||
/* UNMATCHED INDEX */
|
||||
index += 1;
|
||||
|
||||
-3
@@ -4,12 +4,9 @@ type TruncationOptions = {
|
||||
ellipsisWidth?: number;
|
||||
};
|
||||
type WidthOptions = {
|
||||
ansiWidth?: number;
|
||||
controlWidth?: number;
|
||||
tabWidth?: number;
|
||||
ambiguousWidth?: number;
|
||||
emojiWidth?: number;
|
||||
fullWidthWidth?: number;
|
||||
regularWidth?: number;
|
||||
wideWidth?: number;
|
||||
};
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
declare const isAmbiguous: (x: number) => boolean;
|
||||
declare const getCodePointsLength: (input: string) => number;
|
||||
declare const isFullWidth: (x: number) => boolean;
|
||||
declare const isWide: (x: number) => boolean;
|
||||
export { isAmbiguous, isFullWidth, isWide };
|
||||
declare const isWideNotCJKTNotEmoji: (x: number) => boolean;
|
||||
export { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji };
|
||||
|
||||
+14
-9
@@ -1,15 +1,20 @@
|
||||
/* MAIN */
|
||||
//URL: https://github.com/sindresorhus/get-east-asian-width/blob/main/lookup.js
|
||||
//LICENSE: https://github.com/sindresorhus/get-east-asian-width/blob/main/license
|
||||
//TODO: Replace these with some unicode property classes, if the ones we need exist
|
||||
const isAmbiguous = (x) => {
|
||||
return x === 0xA1 || x === 0xA4 || x === 0xA7 || x === 0xA8 || x === 0xAA || x === 0xAD || x === 0xAE || x >= 0xB0 && x <= 0xB4 || x >= 0xB6 && x <= 0xBA || x >= 0xBC && x <= 0xBF || x === 0xC6 || x === 0xD0 || x === 0xD7 || x === 0xD8 || x >= 0xDE && x <= 0xE1 || x === 0xE6 || x >= 0xE8 && x <= 0xEA || x === 0xEC || x === 0xED || x === 0xF0 || x === 0xF2 || x === 0xF3 || x >= 0xF7 && x <= 0xFA || x === 0xFC || x === 0xFE || x === 0x101 || x === 0x111 || x === 0x113 || x === 0x11B || x === 0x126 || x === 0x127 || x === 0x12B || x >= 0x131 && x <= 0x133 || x === 0x138 || x >= 0x13F && x <= 0x142 || x === 0x144 || x >= 0x148 && x <= 0x14B || x === 0x14D || x === 0x152 || x === 0x153 || x === 0x166 || x === 0x167 || x === 0x16B || x === 0x1CE || x === 0x1D0 || x === 0x1D2 || x === 0x1D4 || x === 0x1D6 || x === 0x1D8 || x === 0x1DA || x === 0x1DC || x === 0x251 || x === 0x261 || x === 0x2C4 || x === 0x2C7 || x >= 0x2C9 && x <= 0x2CB || x === 0x2CD || x === 0x2D0 || x >= 0x2D8 && x <= 0x2DB || x === 0x2DD || x === 0x2DF || x >= 0x300 && x <= 0x36F || x >= 0x391 && x <= 0x3A1 || x >= 0x3A3 && x <= 0x3A9 || x >= 0x3B1 && x <= 0x3C1 || x >= 0x3C3 && x <= 0x3C9 || x === 0x401 || x >= 0x410 && x <= 0x44F || x === 0x451 || x === 0x2010 || x >= 0x2013 && x <= 0x2016 || x === 0x2018 || x === 0x2019 || x === 0x201C || x === 0x201D || x >= 0x2020 && x <= 0x2022 || x >= 0x2024 && x <= 0x2027 || x === 0x2030 || x === 0x2032 || x === 0x2033 || x === 0x2035 || x === 0x203B || x === 0x203E || x === 0x2074 || x === 0x207F || x >= 0x2081 && x <= 0x2084 || x === 0x20AC || x === 0x2103 || x === 0x2105 || x === 0x2109 || x === 0x2113 || x === 0x2116 || x === 0x2121 || x === 0x2122 || x === 0x2126 || x === 0x212B || x === 0x2153 || x === 0x2154 || x >= 0x215B && x <= 0x215E || x >= 0x2160 && x <= 0x216B || x >= 0x2170 && x <= 0x2179 || x === 0x2189 || x >= 0x2190 && x <= 0x2199 || x === 0x21B8 || x === 0x21B9 || x === 0x21D2 || x === 0x21D4 || x === 0x21E7 || x === 0x2200 || x === 0x2202 || x === 0x2203 || x === 0x2207 || x === 0x2208 || x === 0x220B || x === 0x220F || x === 0x2211 || x === 0x2215 || x === 0x221A || x >= 0x221D && x <= 0x2220 || x === 0x2223 || x === 0x2225 || x >= 0x2227 && x <= 0x222C || x === 0x222E || x >= 0x2234 && x <= 0x2237 || x === 0x223C || x === 0x223D || x === 0x2248 || x === 0x224C || x === 0x2252 || x === 0x2260 || x === 0x2261 || x >= 0x2264 && x <= 0x2267 || x === 0x226A || x === 0x226B || x === 0x226E || x === 0x226F || x === 0x2282 || x === 0x2283 || x === 0x2286 || x === 0x2287 || x === 0x2295 || x === 0x2299 || x === 0x22A5 || x === 0x22BF || x === 0x2312 || x >= 0x2460 && x <= 0x24E9 || x >= 0x24EB && x <= 0x254B || x >= 0x2550 && x <= 0x2573 || x >= 0x2580 && x <= 0x258F || x >= 0x2592 && x <= 0x2595 || x === 0x25A0 || x === 0x25A1 || x >= 0x25A3 && x <= 0x25A9 || x === 0x25B2 || x === 0x25B3 || x === 0x25B6 || x === 0x25B7 || x === 0x25BC || x === 0x25BD || x === 0x25C0 || x === 0x25C1 || x >= 0x25C6 && x <= 0x25C8 || x === 0x25CB || x >= 0x25CE && x <= 0x25D1 || x >= 0x25E2 && x <= 0x25E5 || x === 0x25EF || x === 0x2605 || x === 0x2606 || x === 0x2609 || x === 0x260E || x === 0x260F || x === 0x261C || x === 0x261E || x === 0x2640 || x === 0x2642 || x === 0x2660 || x === 0x2661 || x >= 0x2663 && x <= 0x2665 || x >= 0x2667 && x <= 0x266A || x === 0x266C || x === 0x266D || x === 0x266F || x === 0x269E || x === 0x269F || x === 0x26BF || x >= 0x26C6 && x <= 0x26CD || x >= 0x26CF && x <= 0x26D3 || x >= 0x26D5 && x <= 0x26E1 || x === 0x26E3 || x === 0x26E8 || x === 0x26E9 || x >= 0x26EB && x <= 0x26F1 || x === 0x26F4 || x >= 0x26F6 && x <= 0x26F9 || x === 0x26FB || x === 0x26FC || x === 0x26FE || x === 0x26FF || x === 0x273D || x >= 0x2776 && x <= 0x277F || x >= 0x2B56 && x <= 0x2B59 || x >= 0x3248 && x <= 0x324F || x >= 0xE000 && x <= 0xF8FF || x >= 0xFE00 && x <= 0xFE0F || x === 0xFFFD || x >= 0x1F100 && x <= 0x1F10A || x >= 0x1F110 && x <= 0x1F12D || x >= 0x1F130 && x <= 0x1F169 || x >= 0x1F170 && x <= 0x1F18D || x === 0x1F18F || x === 0x1F190 || x >= 0x1F19B && x <= 0x1F1AC || x >= 0xE0100 && x <= 0xE01EF || x >= 0xF0000 && x <= 0xFFFFD || x >= 0x100000 && x <= 0x10FFFD;
|
||||
};
|
||||
const getCodePointsLength = (() => {
|
||||
const SURROGATE_PAIR_RE = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
||||
return (input) => {
|
||||
let surrogatePairsNr = 0;
|
||||
SURROGATE_PAIR_RE.lastIndex = 0;
|
||||
while (SURROGATE_PAIR_RE.test(input)) {
|
||||
surrogatePairsNr += 1;
|
||||
}
|
||||
return input.length - surrogatePairsNr;
|
||||
};
|
||||
})();
|
||||
const isFullWidth = (x) => {
|
||||
return x === 0x3000 || x >= 0xFF01 && x <= 0xFF60 || x >= 0xFFE0 && x <= 0xFFE6;
|
||||
};
|
||||
const isWide = (x) => {
|
||||
return x >= 0x1100 && x <= 0x115F || x === 0x231A || x === 0x231B || x === 0x2329 || x === 0x232A || x >= 0x23E9 && x <= 0x23EC || x === 0x23F0 || x === 0x23F3 || x === 0x25FD || x === 0x25FE || x === 0x2614 || x === 0x2615 || x >= 0x2648 && x <= 0x2653 || x === 0x267F || x === 0x2693 || x === 0x26A1 || x === 0x26AA || x === 0x26AB || x === 0x26BD || x === 0x26BE || x === 0x26C4 || x === 0x26C5 || x === 0x26CE || x === 0x26D4 || x === 0x26EA || x === 0x26F2 || x === 0x26F3 || x === 0x26F5 || x === 0x26FA || x === 0x26FD || x === 0x2705 || x === 0x270A || x === 0x270B || x === 0x2728 || x === 0x274C || x === 0x274E || x >= 0x2753 && x <= 0x2755 || x === 0x2757 || x >= 0x2795 && x <= 0x2797 || x === 0x27B0 || x === 0x27BF || x === 0x2B1B || x === 0x2B1C || x === 0x2B50 || x === 0x2B55 || x >= 0x2E80 && x <= 0x2E99 || x >= 0x2E9B && x <= 0x2EF3 || x >= 0x2F00 && x <= 0x2FD5 || x >= 0x2FF0 && x <= 0x2FFF || x >= 0x3001 && x <= 0x303E || x >= 0x3041 && x <= 0x3096 || x >= 0x3099 && x <= 0x30FF || x >= 0x3105 && x <= 0x312F || x >= 0x3131 && x <= 0x318E || x >= 0x3190 && x <= 0x31E3 || x >= 0x31EF && x <= 0x321E || x >= 0x3220 && x <= 0x3247 || x >= 0x3250 && x <= 0x4DBF || x >= 0x4E00 && x <= 0xA48C || x >= 0xA490 && x <= 0xA4C6 || x >= 0xA960 && x <= 0xA97C || x >= 0xAC00 && x <= 0xD7A3 || x >= 0xF900 && x <= 0xFAFF || x >= 0xFE10 && x <= 0xFE19 || x >= 0xFE30 && x <= 0xFE52 || x >= 0xFE54 && x <= 0xFE66 || x >= 0xFE68 && x <= 0xFE6B || x >= 0x16FE0 && x <= 0x16FE4 || x === 0x16FF0 || x === 0x16FF1 || x >= 0x17000 && x <= 0x187F7 || x >= 0x18800 && x <= 0x18CD5 || x >= 0x18D00 && x <= 0x18D08 || x >= 0x1AFF0 && x <= 0x1AFF3 || x >= 0x1AFF5 && x <= 0x1AFFB || x === 0x1AFFD || x === 0x1AFFE || x >= 0x1B000 && x <= 0x1B122 || x === 0x1B132 || x >= 0x1B150 && x <= 0x1B152 || x === 0x1B155 || x >= 0x1B164 && x <= 0x1B167 || x >= 0x1B170 && x <= 0x1B2FB || x === 0x1F004 || x === 0x1F0CF || x === 0x1F18E || x >= 0x1F191 && x <= 0x1F19A || x >= 0x1F200 && x <= 0x1F202 || x >= 0x1F210 && x <= 0x1F23B || x >= 0x1F240 && x <= 0x1F248 || x === 0x1F250 || x === 0x1F251 || x >= 0x1F260 && x <= 0x1F265 || x >= 0x1F300 && x <= 0x1F320 || x >= 0x1F32D && x <= 0x1F335 || x >= 0x1F337 && x <= 0x1F37C || x >= 0x1F37E && x <= 0x1F393 || x >= 0x1F3A0 && x <= 0x1F3CA || x >= 0x1F3CF && x <= 0x1F3D3 || x >= 0x1F3E0 && x <= 0x1F3F0 || x === 0x1F3F4 || x >= 0x1F3F8 && x <= 0x1F43E || x === 0x1F440 || x >= 0x1F442 && x <= 0x1F4FC || x >= 0x1F4FF && x <= 0x1F53D || x >= 0x1F54B && x <= 0x1F54E || x >= 0x1F550 && x <= 0x1F567 || x === 0x1F57A || x === 0x1F595 || x === 0x1F596 || x === 0x1F5A4 || x >= 0x1F5FB && x <= 0x1F64F || x >= 0x1F680 && x <= 0x1F6C5 || x === 0x1F6CC || x >= 0x1F6D0 && x <= 0x1F6D2 || x >= 0x1F6D5 && x <= 0x1F6D7 || x >= 0x1F6DC && x <= 0x1F6DF || x === 0x1F6EB || x === 0x1F6EC || x >= 0x1F6F4 && x <= 0x1F6FC || x >= 0x1F7E0 && x <= 0x1F7EB || x === 0x1F7F0 || x >= 0x1F90C && x <= 0x1F93A || x >= 0x1F93C && x <= 0x1F945 || x >= 0x1F947 && x <= 0x1F9FF || x >= 0x1FA70 && x <= 0x1FA7C || x >= 0x1FA80 && x <= 0x1FA88 || x >= 0x1FA90 && x <= 0x1FABD || x >= 0x1FABF && x <= 0x1FAC5 || x >= 0x1FACE && x <= 0x1FADB || x >= 0x1FAE0 && x <= 0x1FAE8 || x >= 0x1FAF0 && x <= 0x1FAF8 || x >= 0x20000 && x <= 0x2FFFD || x >= 0x30000 && x <= 0x3FFFD;
|
||||
const isWideNotCJKTNotEmoji = (x) => {
|
||||
return x === 0x231B || x === 0x2329 || x >= 0x2FF0 && x <= 0x2FFF || x >= 0x3001 && x <= 0x303E || x >= 0x3099 && x <= 0x30FF || x >= 0x3105 && x <= 0x312F || x >= 0x3131 && x <= 0x318E || x >= 0x3190 && x <= 0x31E3 || x >= 0x31EF && x <= 0x321E || x >= 0x3220 && x <= 0x3247 || x >= 0x3250 && x <= 0x4DBF || x >= 0xFE10 && x <= 0xFE19 || x >= 0xFE30 && x <= 0xFE52 || x >= 0xFE54 && x <= 0xFE66 || x >= 0xFE68 && x <= 0xFE6B || x >= 0x1F200 && x <= 0x1F202 || x >= 0x1F210 && x <= 0x1F23B || x >= 0x1F240 && x <= 0x1F248 || x >= 0x20000 && x <= 0x2FFFD || x >= 0x30000 && x <= 0x3FFFD;
|
||||
};
|
||||
/* EXPORT */
|
||||
export { isAmbiguous, isFullWidth, isWide };
|
||||
export { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji };
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
"repository": "github:fabiospampinato/fast-string-truncated-width",
|
||||
"description": "A fast function for calculating where a string should be truncated, given an optional width limit and an ellipsis string.",
|
||||
"license": "MIT",
|
||||
"version": "1.2.1",
|
||||
"version": "3.0.3",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"exports": "./dist/index.js",
|
||||
|
||||
+2
-3
@@ -4,6 +4,8 @@ A fast function for calculating where a string should be truncated, given a widt
|
||||
|
||||
This is a low-level function that basically calculates the visual width of a string and the index at which it should be truncated once printed to the terminal, but taking into account an optional width limit and an optional ellipsis string, so that the string doesn't have to be processed multiple times to be truncated, and how long the part after the truncation point is doesn't cost us anything because we can just ignore it.
|
||||
|
||||
Note that codepoints considered "ambiguous" in Unicode will always use "regularWidth" as their width, if you need to customize this you should use [`string-width`](https://www.npmjs.com/package/string-width) instead.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
@@ -18,12 +20,9 @@ import fastStringTruncatedWidth from 'fast-string-truncated-width';
|
||||
// The width of various classes of characters is configurable
|
||||
|
||||
const widthOptions = {
|
||||
ansiWidth: 0,
|
||||
controlWidth: 0,
|
||||
tabWidth: 8,
|
||||
ambiguousWidth: 1,
|
||||
emojiWidth: 2,
|
||||
fullWidthWidth: 2,
|
||||
regularWidth: 1,
|
||||
wideWidth: 2
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user