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:
cjihrig 2019-07-11 09:31:30 -04:00
parent ec5518003f
commit 5af9f15fd8
No known key found for this signature in database
GPG Key ID: 7434390BDBE9B9C5
2 changed files with 8 additions and 6 deletions

View File

@ -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
}; };

View File

@ -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