diff options
| author | Priyansh <[email protected]> | 2020-12-22 17:49:59 +0530 |
|---|---|---|
| committer | Priyansh <[email protected]> | 2020-12-22 17:49:59 +0530 |
| commit | e93da8b04da86773247aadb1cbb1912e4f4526b2 (patch) | |
| tree | eb4ef3203a92ed3dbd2252ddb1ea23bd2d670c98 /node_modules/utf8-byte-length/browser.js | |
| parent | a5743c293dcb435e4b159a4df791f8955a4110ec (diff) | |
| download | styx-e93da8b04da86773247aadb1cbb1912e4f4526b2.tar.xz styx-e93da8b04da86773247aadb1cbb1912e4f4526b2.zip | |
Rewriting Project
Diffstat (limited to 'node_modules/utf8-byte-length/browser.js')
| -rw-r--r-- | node_modules/utf8-byte-length/browser.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/node_modules/utf8-byte-length/browser.js b/node_modules/utf8-byte-length/browser.js new file mode 100644 index 0000000..a093731 --- /dev/null +++ b/node_modules/utf8-byte-length/browser.js @@ -0,0 +1,47 @@ +'use strict'; + +function isHighSurrogate(codePoint) { + return codePoint >= 0xd800 && codePoint <= 0xdbff; +} + +function isLowSurrogate(codePoint) { + return codePoint >= 0xdc00 && codePoint <= 0xdfff; +} + +// Truncate string by size in bytes +module.exports = function getByteLength(string) { + if (typeof string !== "string") { + throw new Error("Input must be string"); + } + + var charLength = string.length; + var byteLength = 0; + var codePoint = null; + var prevCodePoint = null; + for (var i = 0; i < charLength; i++) { + codePoint = string.charCodeAt(i); + // handle 4-byte non-BMP chars + // low surrogate + if (isLowSurrogate(codePoint)) { + // when parsing previous hi-surrogate, 3 is added to byteLength + if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) { + byteLength += 1; + } + else { + byteLength += 3; + } + } + else if (codePoint <= 0x7f ) { + byteLength += 1; + } + else if (codePoint >= 0x80 && codePoint <= 0x7ff) { + byteLength += 2; + } + else if (codePoint >= 0x800 && codePoint <= 0xffff) { + byteLength += 3; + } + prevCodePoint = codePoint; + } + + return byteLength; +}; |
