personal web client for Bluesky
typescript solidjs bluesky atcute
at trunk 760 B view raw
1const encoder = new TextEncoder(); 2 3const segmenter = new Intl.Segmenter(); 4 5export const graphemeLen = (text: string): number => { 6 var length = asciiLen(text); 7 8 if (length === undefined) { 9 return _graphemeLen(text); 10 } 11 12 return length; 13}; 14 15export const asciiLen = (str: string): number | undefined => { 16 for (var idx = 0, len = str.length; idx < len; idx++) { 17 const char = str.charCodeAt(idx); 18 19 if (char > 127) { 20 return undefined; 21 } 22 } 23 24 return len; 25}; 26 27export const getUtf8Length = (str: string): number => { 28 return encoder.encode(str).byteLength; 29}; 30 31const _graphemeLen = (text: string): number => { 32 var iterator = segmenter.segment(text)[Symbol.iterator](); 33 var count = 0; 34 35 while (!iterator.next().done) { 36 count++; 37 } 38 39 return count; 40};