diff options
author | Minteck <contact@minteck.org> | 2021-12-21 16:52:28 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2021-12-21 16:52:28 +0100 |
commit | 46e43f4bde4a35785b4997b81e86cd19f046b69b (patch) | |
tree | c53c2f826f777f9d6b2d249dab556feb72a6c3a6 /src/node_modules/es-abstract/2017/AdvanceStringIndex.js | |
download | langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.tar.gz langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.tar.bz2 langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.zip |
Commit
Diffstat (limited to 'src/node_modules/es-abstract/2017/AdvanceStringIndex.js')
-rw-r--r-- | src/node_modules/es-abstract/2017/AdvanceStringIndex.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/node_modules/es-abstract/2017/AdvanceStringIndex.js b/src/node_modules/es-abstract/2017/AdvanceStringIndex.js new file mode 100644 index 0000000..69dae1b --- /dev/null +++ b/src/node_modules/es-abstract/2017/AdvanceStringIndex.js @@ -0,0 +1,47 @@ +'use strict'; + +var GetIntrinsic = require('../GetIntrinsic'); + +var IsInteger = require('./IsInteger'); +var Type = require('./Type'); + +var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); +var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); +var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); + +var $TypeError = GetIntrinsic('%TypeError%'); + +var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt'); + +// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex + +module.exports = function AdvanceStringIndex(S, index, unicode) { + if (Type(S) !== 'String') { + throw new $TypeError('Assertion failed: `S` must be a String'); + } + if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { + throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); + } + if (Type(unicode) !== 'Boolean') { + throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); + } + if (!unicode) { + return index + 1; + } + var length = S.length; + if ((index + 1) >= length) { + return index + 1; + } + + var first = $charCodeAt(S, index); + if (!isLeadingSurrogate(first)) { + return index + 1; + } + + var second = $charCodeAt(S, index + 1); + if (!isTrailingSurrogate(second)) { + return index + 1; + } + + return index + 2; +}; |