personal web client for Bluesky
typescript
solidjs
bluesky
atcute
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};