readline: use named constant for surrogate checks
This commit defines a named constant instead of using a mix of 2 ** 16 and 0x10000 throughout the code. PR-URL: https://github.com/nodejs/node/pull/28638 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
parent
ec5518003f
commit
5af9f15fd8
@ -8,7 +8,7 @@
|
|||||||
const ansi =
|
const ansi =
|
||||||
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
|
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
|
||||||
/* eslint-enable no-control-regex */
|
/* eslint-enable no-control-regex */
|
||||||
|
const kUTF16SurrogateThreshold = 0x10000; // 2 ** 16
|
||||||
const kEscape = '\x1b';
|
const kEscape = '\x1b';
|
||||||
|
|
||||||
let getStringWidth;
|
let getStringWidth;
|
||||||
@ -63,7 +63,7 @@ if (internalBinding('config').hasIntl) {
|
|||||||
for (var i = 0; i < str.length; i++) {
|
for (var i = 0; i < str.length; i++) {
|
||||||
const code = str.codePointAt(i);
|
const code = str.codePointAt(i);
|
||||||
|
|
||||||
if (code >= 0x10000) { // surrogates
|
if (code >= kUTF16SurrogateThreshold) { // Surrogates.
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,6 +434,7 @@ module.exports = {
|
|||||||
emitKeys,
|
emitKeys,
|
||||||
getStringWidth,
|
getStringWidth,
|
||||||
isFullWidthCodePoint,
|
isFullWidthCodePoint,
|
||||||
|
kUTF16SurrogateThreshold,
|
||||||
stripVTControlCharacters,
|
stripVTControlCharacters,
|
||||||
CSI
|
CSI
|
||||||
};
|
};
|
||||||
|
@ -41,6 +41,7 @@ const {
|
|||||||
emitKeys,
|
emitKeys,
|
||||||
getStringWidth,
|
getStringWidth,
|
||||||
isFullWidthCodePoint,
|
isFullWidthCodePoint,
|
||||||
|
kUTF16SurrogateThreshold,
|
||||||
stripVTControlCharacters
|
stripVTControlCharacters
|
||||||
} = require('internal/readline');
|
} = require('internal/readline');
|
||||||
|
|
||||||
@ -600,8 +601,8 @@ Interface.prototype._wordRight = function() {
|
|||||||
function charLengthLeft(str, i) {
|
function charLengthLeft(str, i) {
|
||||||
if (i <= 0)
|
if (i <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (i > 1 && str.codePointAt(i - 2) >= 2 ** 16 ||
|
if (i > 1 && str.codePointAt(i - 2) >= kUTF16SurrogateThreshold ||
|
||||||
str.codePointAt(i - 1) >= 2 ** 16) {
|
str.codePointAt(i - 1) >= kUTF16SurrogateThreshold) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -610,7 +611,7 @@ function charLengthLeft(str, i) {
|
|||||||
function charLengthAt(str, i) {
|
function charLengthAt(str, i) {
|
||||||
if (str.length <= i)
|
if (str.length <= i)
|
||||||
return 0;
|
return 0;
|
||||||
return str.codePointAt(i) >= 2 ** 16 ? 2 : 1;
|
return str.codePointAt(i) >= kUTF16SurrogateThreshold ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Interface.prototype._deleteLeft = function() {
|
Interface.prototype._deleteLeft = function() {
|
||||||
@ -728,7 +729,7 @@ Interface.prototype._getDisplayPos = function(str) {
|
|||||||
str = stripVTControlCharacters(str);
|
str = stripVTControlCharacters(str);
|
||||||
for (var i = 0, len = str.length; i < len; i++) {
|
for (var i = 0, len = str.length; i < len; i++) {
|
||||||
code = str.codePointAt(i);
|
code = str.codePointAt(i);
|
||||||
if (code >= 0x10000) { // surrogates
|
if (code >= kUTF16SurrogateThreshold) { // Surrogates.
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (code === 0x0a) { // new line \n
|
if (code === 0x0a) { // new line \n
|
||||||
|
Loading…
x
Reference in New Issue
Block a user