From 02ae3f5625ee3c5025ad071c48b6c1b5c21647fc Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Sat, 30 May 2020 03:30:30 +0200 Subject: [PATCH] util: support Combining Diacritical Marks for Symbols This adds support for the "Combining Diacritical Marks for Symbols" unicode group to calculate a zero length width even if Node.js is built without ICU. Signed-off-by: Ruben Bridgewater PR-URL: https://github.com/nodejs/node/pull/33650 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen --- lib/internal/util/inspect.js | 2 ++ test/parallel/test-readline-position.js | 21 ++++++--------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index 87bf3435f96067..d3322210c49366 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -2050,6 +2050,8 @@ if (internalBinding('config').hasIntl) { (code > 0x7F && code <= 0x9F) || // C1 control codes (code >= 0x300 && code <= 0x36F) || // Combining Diacritical Marks (code >= 0x200B && code <= 0x200F) || // Modifying Invisible Characters + // Combining Diacritical Marks for Symbols + (code >= 0x20D0 && code <= 0x20FF) || (code >= 0xFE00 && code <= 0xFE0F) || // Variation Selectors (code >= 0xFE20 && code <= 0xFE2F) || // Combining Half Marks (code >= 0xE0100 && code <= 0xE01EF); // Variation Selectors diff --git a/test/parallel/test-readline-position.js b/test/parallel/test-readline-position.js index f01786eaf19d3c..3603a42ecedc68 100644 --- a/test/parallel/test-readline-position.js +++ b/test/parallel/test-readline-position.js @@ -1,7 +1,6 @@ // Flags: --expose-internals 'use strict'; const common = require('../common'); -const { internalBinding } = require('internal/test/binding'); const { PassThrough } = require('stream'); const readline = require('readline'); const assert = require('assert'); @@ -21,22 +20,14 @@ common.skipIfDumbTerminal(); const tests = [ [1, 'a'], [2, 'ab'], - [2, '丁'] + [2, '丁'], + [0, '\u0301'], // COMBINING ACUTE ACCENT + [1, 'a\u0301'], // á + [0, '\u20DD'], // COMBINING ENCLOSING CIRCLE + [2, 'a\u20DDb'], // a⃝b + [0, '\u200E'], // LEFT-TO-RIGHT MARK ]; - // The non-ICU JS implementation of character width calculation is only aware - // of the wide/narrow distinction. Only test these more advanced cases when - // ICU is available. - if (internalBinding('config').hasIntl) { - tests.push( - [0, '\u0301'], // COMBINING ACUTE ACCENT - [1, 'a\u0301'], // á - [0, '\u20DD'], // COMBINING ENCLOSING CIRCLE - [2, 'a\u20DDb'], // a⃝b - [0, '\u200E'] // LEFT-TO-RIGHT MARK - ); - } - for (const [cursor, string] of tests) { rl.write(string); assert.strictEqual(rl.getCursorPos().cols, cursor);