summaryrefslogtreecommitdiff
path: root/ext/lib/ucs2length.js
blob: 120a64d453e7bb7d34ba1365f3103e01624c5124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export default function ucs2length(str) {
    const len = str.length;
    let length = 0;
    let pos = 0;
    let value;
    while (pos < len) {
        length++;
        value = str.charCodeAt(pos++);
        if (value >= 0xd800 && value <= 0xdbff && pos < len) {
            // high surrogate, and there is a next character
            value = str.charCodeAt(pos);
            if ((value & 0xfc00) === 0xdc00) pos++; // low surrogate
        }
    }
    return length;
}