From 568d7ffd618b0a160dab72f48430386d18d4c02c Mon Sep 17 00:00:00 2001 From: faissaloux Date: Thu, 16 May 2024 12:49:19 +0100 Subject: [PATCH 1/5] fix apa on accented words --- src/Illuminate/Support/Str.php | 9 +++++---- tests/Support/SupportStrTest.php | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Illuminate/Support/Str.php b/src/Illuminate/Support/Str.php index ed1f1b5d6834..f5b14bd958d1 100644 --- a/src/Illuminate/Support/Str.php +++ b/src/Illuminate/Support/Str.php @@ -1305,14 +1305,13 @@ public static function apa($value) $minorWords = [ 'and', 'as', 'but', 'for', 'if', 'nor', 'or', 'so', 'yet', 'a', 'an', 'the', 'at', 'by', 'for', 'in', 'of', 'off', 'on', 'per', 'to', 'up', 'via', + 'et', 'ou', 'un', 'une', 'la', 'le', 'les', 'de', 'du', 'des', 'par', 'à', ]; $endPunctuation = ['.', '!', '?', ':', '—', ',']; $words = preg_split('/\s+/', $value, -1, PREG_SPLIT_NO_EMPTY); - $words[0] = ucfirst(mb_strtolower($words[0])); - for ($i = 0; $i < count($words); $i++) { $lowercaseWord = mb_strtolower($words[$i]); @@ -1320,7 +1319,9 @@ public static function apa($value) $hyphenatedWords = explode('-', $lowercaseWord); $hyphenatedWords = array_map(function ($part) use ($minorWords) { - return (in_array($part, $minorWords) && mb_strlen($part) <= 3) ? $part : ucfirst($part); + return (in_array($part, $minorWords) && mb_strlen($part) <= 3) + ? $part + : mb_strtoupper( mb_substr( $part, 0, 1 )) . mb_substr( $part, 1 ); }, $hyphenatedWords); $words[$i] = implode('-', $hyphenatedWords); @@ -1330,7 +1331,7 @@ public static function apa($value) ! ($i === 0 || in_array(mb_substr($words[$i - 1], -1), $endPunctuation))) { $words[$i] = $lowercaseWord; } else { - $words[$i] = ucfirst($lowercaseWord); + $words[$i] = mb_strtoupper( mb_substr( $lowercaseWord, 0, 1 )) . mb_substr( $lowercaseWord, 1 ); } } } diff --git a/tests/Support/SupportStrTest.php b/tests/Support/SupportStrTest.php index e61ae5e4e249..481157edd4fa 100755 --- a/tests/Support/SupportStrTest.php +++ b/tests/Support/SupportStrTest.php @@ -97,6 +97,14 @@ public function testStringApa() $this->assertSame('To Kill a Mockingbird', Str::apa('TO KILL A MOCKINGBIRD')); $this->assertSame('To Kill a Mockingbird', Str::apa('To Kill A Mockingbird')); + $this->assertSame('Être Écrivain Commence par Être un Lecteur.', Str::apa('Être écrivain commence par être un lecteur.')); + $this->assertSame('Être Écrivain Commence par Être un Lecteur.', Str::apa('Être Écrivain Commence par Être un Lecteur.')); + $this->assertSame('Être Écrivain Commence par Être un Lecteur.', Str::apa('ÊTRE ÉCRIVAIN COMMENCE PAR ÊTRE UN LECTEUR.')); + + $this->assertSame("C'est-à-Dire.", Str::apa("c'est-à-dire.")); + $this->assertSame("C'est-à-Dire.", Str::apa("C'est-à-Dire.")); + $this->assertSame("C'est-à-Dire.", Str::apa("C'EsT-À-DIRE.")); + $this->assertSame('', Str::apa('')); $this->assertSame(' ', Str::apa(' ')); } From 97485e795477aeb8d5bf3cda6e3b28582eccaa64 Mon Sep 17 00:00:00 2001 From: faissaloux Date: Thu, 16 May 2024 12:54:10 +0100 Subject: [PATCH 2/5] fix code style --- src/Illuminate/Support/Str.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Support/Str.php b/src/Illuminate/Support/Str.php index f5b14bd958d1..6217bb33ef82 100644 --- a/src/Illuminate/Support/Str.php +++ b/src/Illuminate/Support/Str.php @@ -1321,7 +1321,7 @@ public static function apa($value) $hyphenatedWords = array_map(function ($part) use ($minorWords) { return (in_array($part, $minorWords) && mb_strlen($part) <= 3) ? $part - : mb_strtoupper( mb_substr( $part, 0, 1 )) . mb_substr( $part, 1 ); + : mb_strtoupper(mb_substr($part, 0, 1)).mb_substr($part, 1); }, $hyphenatedWords); $words[$i] = implode('-', $hyphenatedWords); @@ -1331,7 +1331,7 @@ public static function apa($value) ! ($i === 0 || in_array(mb_substr($words[$i - 1], -1), $endPunctuation))) { $words[$i] = $lowercaseWord; } else { - $words[$i] = mb_strtoupper( mb_substr( $lowercaseWord, 0, 1 )) . mb_substr( $lowercaseWord, 1 ); + $words[$i] = mb_strtoupper(mb_substr($lowercaseWord, 0, 1)).mb_substr($lowercaseWord, 1); } } } From 2b2593f9b0a91f02e732d3d14ed1f46b5c8c3aed Mon Sep 17 00:00:00 2001 From: faissaloux Date: Thu, 16 May 2024 14:00:33 +0100 Subject: [PATCH 3/5] add more tests to apa with more characters --- tests/Support/SupportStrTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/Support/SupportStrTest.php b/tests/Support/SupportStrTest.php index 481157edd4fa..9c5e25ce74e6 100755 --- a/tests/Support/SupportStrTest.php +++ b/tests/Support/SupportStrTest.php @@ -104,6 +104,10 @@ public function testStringApa() $this->assertSame("C'est-à-Dire.", Str::apa("c'est-à-dire.")); $this->assertSame("C'est-à-Dire.", Str::apa("C'est-à-Dire.")); $this->assertSame("C'est-à-Dire.", Str::apa("C'EsT-À-DIRE.")); + + $this->assertSame("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.", Str::apa("устное слово – не воробей. как только он вылетит, его не поймаешь.")); + $this->assertSame("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.", Str::apa("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.")); + $this->assertSame("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.", Str::apa("УСТНОЕ СЛОВО – НЕ ВОРОБЕЙ. КАК ТОЛЬКО ОН ВЫЛЕТИТ, ЕГО НЕ ПОЙМАЕШЬ.")); $this->assertSame('', Str::apa('')); $this->assertSame(' ', Str::apa(' ')); From 410991f0959d48e5d3460619c821eb4b7484992f Mon Sep 17 00:00:00 2001 From: faissaloux Date: Thu, 16 May 2024 14:15:40 +0100 Subject: [PATCH 4/5] fix code style --- tests/Support/SupportStrTest.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Support/SupportStrTest.php b/tests/Support/SupportStrTest.php index 9c5e25ce74e6..bc9e17c13456 100755 --- a/tests/Support/SupportStrTest.php +++ b/tests/Support/SupportStrTest.php @@ -104,10 +104,11 @@ public function testStringApa() $this->assertSame("C'est-à-Dire.", Str::apa("c'est-à-dire.")); $this->assertSame("C'est-à-Dire.", Str::apa("C'est-à-Dire.")); $this->assertSame("C'est-à-Dire.", Str::apa("C'EsT-À-DIRE.")); + + $this->assertSame('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.', Str::apa('устное слово – не воробей. как только он вылетит, его не поймаешь.')); + $this->assertSame('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.', Str::apa('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.')); + $this->assertSame('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.', Str::apa('УСТНОЕ СЛОВО – НЕ ВОРОБЕЙ. КАК ТОЛЬКО ОН ВЫЛЕТИТ, ЕГО НЕ ПОЙМАЕШЬ.')); - $this->assertSame("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.", Str::apa("устное слово – не воробей. как только он вылетит, его не поймаешь.")); - $this->assertSame("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.", Str::apa("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.")); - $this->assertSame("Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.", Str::apa("УСТНОЕ СЛОВО – НЕ ВОРОБЕЙ. КАК ТОЛЬКО ОН ВЫЛЕТИТ, ЕГО НЕ ПОЙМАЕШЬ.")); $this->assertSame('', Str::apa('')); $this->assertSame(' ', Str::apa(' ')); From 38079de97a567bc4ae1988084d12fa5a3426a10b Mon Sep 17 00:00:00 2001 From: faissaloux Date: Thu, 16 May 2024 14:17:24 +0100 Subject: [PATCH 5/5] remove empty line --- tests/Support/SupportStrTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Support/SupportStrTest.php b/tests/Support/SupportStrTest.php index bc9e17c13456..9b996e470544 100755 --- a/tests/Support/SupportStrTest.php +++ b/tests/Support/SupportStrTest.php @@ -108,7 +108,6 @@ public function testStringApa() $this->assertSame('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.', Str::apa('устное слово – не воробей. как только он вылетит, его не поймаешь.')); $this->assertSame('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.', Str::apa('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.')); $this->assertSame('Устное Слово – Не Воробей. Как Только Он Вылетит, Его Не Поймаешь.', Str::apa('УСТНОЕ СЛОВО – НЕ ВОРОБЕЙ. КАК ТОЛЬКО ОН ВЫЛЕТИТ, ЕГО НЕ ПОЙМАЕШЬ.')); - $this->assertSame('', Str::apa('')); $this->assertSame(' ', Str::apa(' '));