From ce2e4501496f0e0939e124dadd1056ee423ec3b8 Mon Sep 17 00:00:00 2001 From: olenkabilonizhka Date: Tue, 2 Apr 2024 21:16:27 +0300 Subject: [PATCH 1/3] fix: Bug with skin tone emojis when using prevGraphemeClusterBreak package --- .../@stdlib/string/prev-grapheme-cluster-break/lib/main.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js index 5395038e6e4c..ec90f6e5f518 100644 --- a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js +++ b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js @@ -71,6 +71,11 @@ function prevGraphemeClusterBreak( str, fromIndex ) { var cp; var i; + const regexEmoji = /\p{Extended_Pictographic}/ug; + if (regexEmoji.test(str) && str.match(regexEmoji).length === 1) { + str = str.match(regexEmoji)?.[0]; + } + if ( !isString( str ) ) { throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', str ) ); } From 291f312fc8332f4e746ddf1d0c2a197891b0aa1a Mon Sep 17 00:00:00 2001 From: olenkabilonizhka Date: Tue, 9 Apr 2024 20:01:32 +0300 Subject: [PATCH 2/3] improvements after comments --- .../string/prev-grapheme-cluster-break/lib/main.js | 7 ++++--- .../string/prev-grapheme-cluster-break/test/test.js | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js index ec90f6e5f518..81beff152925 100644 --- a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js +++ b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js @@ -71,9 +71,10 @@ function prevGraphemeClusterBreak( str, fromIndex ) { var cp; var i; - const regexEmoji = /\p{Extended_Pictographic}/ug; - if (regexEmoji.test(str) && str.match(regexEmoji).length === 1) { - str = str.match(regexEmoji)?.[0]; + var regexEmoji = new RegExp("\\p{Extended_Pictographic}", "ug"); + var regexEmojiMatching = str.match(regexEmoji) + if (regexEmoji.test(str) && regexEmojiMatching && regexEmojiMatching.length === 1) { + str = regexEmojiMatching[0]; } if ( !isString( str ) ) { diff --git a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/test/test.js b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/test/test.js index e0811d476245..b4cdd800a3ca 100644 --- a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/test/test.js +++ b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/test/test.js @@ -245,3 +245,12 @@ tape( 'the function returns -1 if provided an empty string', function test( t ) t.end(); }); + +tape( 'the function returns -1 if provided a skin tone emoji', function test( t ) { + var out; + + out = prevGraphemeClusterBreak( '👉🏿' ); + t.strictEqual( out, -1, 'returns expected value' ); + + t.end(); +}); From 793c7bb467aa3fa5b7f4e15b81e92f7df6e1c6db Mon Sep 17 00:00:00 2001 From: olenkabilonizhka Date: Thu, 2 May 2024 11:35:58 +0300 Subject: [PATCH 3/3] improvements after comments --- .../prev-grapheme-cluster-break/lib/main.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js index 81beff152925..4f556eb4512f 100644 --- a/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js +++ b/lib/node_modules/@stdlib/string/prev-grapheme-cluster-break/lib/main.js @@ -63,6 +63,8 @@ var emojiProperty = grapheme.emojiProperty; * // returns -1 */ function prevGraphemeClusterBreak( str, fromIndex ) { + var regexEmojiMatching; + var regexEmoji; var breaks; var emoji; var ans; @@ -71,15 +73,20 @@ function prevGraphemeClusterBreak( str, fromIndex ) { var cp; var i; - var regexEmoji = new RegExp("\\p{Extended_Pictographic}", "ug"); - var regexEmojiMatching = str.match(regexEmoji) - if (regexEmoji.test(str) && regexEmojiMatching && regexEmojiMatching.length === 1) { - str = regexEmojiMatching[0]; - } - if ( !isString( str ) ) { throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', str ) ); } + + regexEmoji = /\p{Extended_Pictographic}/u; + regexEmojiMatching = str.match(regexEmoji); + if ( + regexEmoji.test(str) && + regexEmojiMatching && + regexEmojiMatching.length === 1 + ) { + str = regexEmojiMatching[0]; + } + len = str.length; if ( arguments.length > 1 ) { if ( !isInteger( fromIndex ) ) {