From 0b114517534034211411d010092d7b943685a684 Mon Sep 17 00:00:00 2001 From: David Rae Date: Thu, 5 Mar 2020 03:35:07 -0800 Subject: [PATCH] =?UTF-8?q?Revert=20"I18N=20=E2=80=93=20Add=20support=20fo?= =?UTF-8?q?r=20french"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WordToNumber.php | 129 +++------------------------------ tests/src/WordToNumberTest.php | 94 +++++++----------------- 2 files changed, 40 insertions(+), 183 deletions(-) diff --git a/src/WordToNumber.php b/src/WordToNumber.php index 0b9fb9b..8b04630 100644 --- a/src/WordToNumber.php +++ b/src/WordToNumber.php @@ -65,7 +65,6 @@ class WordToNumber { "eighty" => '80', "ninety" => '90' ], - "hundred" => "hundred", "large" => [ "hundred" => 3, "thousand" => 4, @@ -75,17 +74,17 @@ class WordToNumber { "quadrillion" => 16, "quintillion" => 19, "sextillion" => 22, - "septillion" => 25, + "septillion" => 23, "octillion" => 28, "nonillion" => 31, "decillion" => 34, "undecillion" => 37, "duodecillion" => 40, - "tredecillion" => 43, + "tredecillion" => 41, "quattuordecillion" => 46, "quindecillion" => 49, "sexdecillion" => 52, - "septendecillion" => 55, + "septendecillion" => 53, "octodecillion" => 58, "novemdecillion" => 61, "vigintillion" => 64, @@ -104,7 +103,7 @@ class WordToNumber { "googol" => 101, "trestrigintillion" => 103, "quattuortrigintillion" => 106, - "quinquatrigintillion" => 109, + "quinquatrigintillion" => 110, "sestrigintillion" => 112, "septentrigintillion" => 115, "octotrigintillion" => 118, @@ -140,100 +139,7 @@ class WordToNumber { "nongentillion" => 2704, "millinillion" => 3004 ] - ], - - "french" => [ - "single" => [ - "zero" => '0', - "zéro" => '0', - "un" => '1', - "deux" => '2', - "trois" => '3', - "quatre" => '4', - "cinq" => '5', - "six" => '6', - "sept" => '7', - "huit" => '8', - "neuf" => '9' - ], - "tens" => [ - "dix" => '10', - "onze" => '11', - "douze" => '12', - "treize" => '13', - "quatorze" => '14', - "quinze" => '15', - "seize" => '16', - "dix-sept" => '17', - "dix-huit" => '18', - "dix-neuf" => '19', - "vingt" => '20', - "trente" => '30', - "quarante" => '40', - "cinquante" => '50', - "soixante" => '60', - "soixante-dix" => '70', - "soixante dix" => '70', - "quatre-vingt" => '80', - "quatre vingt" => '80', - "quatre-vingts" => '80', - "quatre vingts" => '80', - "quatre-vingt-dix" => '90', - "quatre-vingt dix" => '90', - "quatre vingt-dix" => '90', - "quatre vingt dix" => '90', - "quatre-vingts-dix" => '90', - "quatre-vingts dix" => '90', - "quatre vingts-dix" => '90', - "quatre vingts dix" => '90', - ], - "hundred" => "cent", - "large" => [ - "cent" => 3, - "mille" => 4, - "milles" => 4, - "million" => 7, - "millions" => 7, - "milliard" => 10, - "milliards" => 10, - "billion" => 13, - "billions" => 13, - "billard" => 16, - "billards" => 16, - "trillion" => 19, - "trillions" => 19, - "trillard" => 22, - "trillards" => 22, - "quadrillion" => 25, - "quadrillions" => 25, - "quadrillard" => 28, - "quadrillards" => 28, - "quintillion" => 31, - "quintillions" => 31, - "quintillard" => 34, - "quintillards" => 34, - "sextillion" => 37, - "sextillions" => 37, - "sextilliard" => 40, - "sextilliards" => 40, - "septillion" => 43, - "septillions" => 43, - "septilliard" => 46, - "septilliards" => 46, - "octillion" => 49, - "octillions" => 49, - "octilliard" => 52, - "octilliards" => 52, - "nonillion" => 55, - "nonillions" => 55, - "nonilliard" => 58, - "nonilliards" => 58, - "decillion" => 61, - "decillions" => 61, - "decilliard" => 64, - "decilliards" => 64, - ] - ] + ] ]; /* @@ -379,12 +285,10 @@ private function parsePreNumber( $text, $do_check = TRUE ) { $pre_number = FALSE; $post_number = $text; - $hundred = $this->languages[ $this->language ]["hundred"]; - if ( $do_check ) { $check = FALSE; $check_array = array_merge( - [$hundred => 1], + ["hundred" => 1], $this->languages[ $this->language ]["single"], $this->languages[ $this->language ]["tens"] ); @@ -398,14 +302,11 @@ private function parsePreNumber( $text, $do_check = TRUE ) { return FALSE; } - if ( strpos( $text, $hundred ) !== FALSE ) { + if ( strpos( $text, "hundred" ) !== FALSE ) { - $matches = $this->trimArray( explode( $hundred, $text ) ); - if ( strlen( $matches[0] ) ) { + $matches = $this->trimArray( explode( "hundred", $text ) ); + if ( strlen( $matches[0] ) ) $pre_number = $this->parseSingle( $matches[0] ); - } else { - $pre_number = 1; - } $number = $this->createNumber( $pre_number, 3 ); $post_number = $this->trimSeparators( $matches[1] ); @@ -460,17 +361,14 @@ private function parseSingle( $text ) { private function parseTens( $text ) { $number = FALSE; - foreach ( array_reverse($this->languages[ $this->language ]["tens"]) as $word => $val ) { + foreach ( $this->languages[ $this->language ]["tens"] as $word => $val ) { $match = explode( $word, $text ); if ( $match && isset( $match[1] ) ) { $number = $val; $single = ( ! empty( $match[1] ) ) ? $this->parseSingle( $match[1] ) : FALSE ; - if ( FALSE === $single ) { - $single = ( ! empty( $match[1] ) ) ? $this->parseTens( $match[1] ) : FALSE ; - } - return ( $single ) ? (string)(intval($number)+intval($single)) : $number ; + return ( $single ) ? substr( $number, 0, 1 ) . $single : $number ; } } @@ -493,7 +391,7 @@ public function parse( $text ){ $text = strtolower( $text ); - // loop through all our "large numbers" longest to shortest + // loop thorugh all our "large numbers" longest to shortest $number = FALSE; foreach ( array_reverse( $this->languages[ $this->language ]["large"] ) as $word => $val ) { @@ -507,9 +405,6 @@ public function parse( $text ){ $pre_number_parsed = ( $this->parsePreNumber( $this->trimSeparators( $pre_number ), ( $number !== FALSE ) ) ) ?: '' ; - if ( empty($pre_number_parsed) ) - $pre_number_parsed = 1; - if ( $number == FALSE ) $number = $this->createNumber( $pre_number_parsed, $val ); else diff --git a/tests/src/WordToNumberTest.php b/tests/src/WordToNumberTest.php index e8cd878..78f2903 100644 --- a/tests/src/WordToNumberTest.php +++ b/tests/src/WordToNumberTest.php @@ -3,72 +3,34 @@ use daraeman\WordToNumber; class WordToNumberTest extends \PHPUnit_Framework_TestCase { + + public function testParseNumberNormal() { - public function testParseNumberNormal() { - - $wordToNumber = new WordToNumber(); - - $checks = [ - "one" => "1", - "seventy three" => "73", - "one hundred" => "100", - "one hundred seven" => "107", - "one hundred seventy" => "170", - "one hundred seventy three" => "173", - "one hundred seventy-three" => "173", - "one hundred and seventy-three" => "173", - "one hundred and seventy-three thousand" => "173000", - "two hundred, seventy-three thousand" => "273000", - "one hundred and seventy-three million" => "173000000", - "one hundred and seventy-three million two thousand" => "173002000", - "one hundred,,,,,and,,,,,seventy-three million two thousand and two" => "173002002", - "one hundred and - --seventy-three billion" => "173000000000", - "one hundred.- .,and seventy-three trillion five million sixty seven thousand one hundred and eighty two" => "173000005067182", - "just some extra text here one hundred and seventy-three some more text at the end" => "173", - ]; - - foreach ( $checks as $check => $expected ) { - $result = $wordToNumber->parse( $check ); - if ( $expected !== $result ) { - $this->fail( "'$check' yielded '$result' instead of expected '$expected'." ); - } - } - } - - public function testParseNumberInFrench() { - - $wordToNumber = new WordToNumber(); - $wordToNumber->setLanguage( 'french' ); - - $checks = [ - "zéro" => "0", - "zero" => "0", - "un" => "1", - "quarante-deux" => "42", - "soixante-treize" => "73", - "soixante treize" => "73", - "quatre-vingts" => "80", - "quatre vingt treize" => "93", - "cent" => "100", - "six cent" => "600", - "cent sept" => "107", - "cent soixante-dix" => "170", - "cent soixante treize" => "173", - "deux cent soixante treize mille" => "273000", - "cent soixante treize mille" => "173000", - "cent soixante treize million" => "173000000", - "cent soixante treize millions" => "173000000", - "cent soixante seize million deux mille" => "176002000", - "neuf cent vingt-deux millions deux mille trois cent dix-huit" => "922002318", - ]; - - foreach ( $checks as $check => $expected ) { - $result = $wordToNumber->parse( $check ); - if ( $expected !== $result ) { - $this->fail( "'$check' yielded '$result' instead of expected '$expected'." ); - } - } - } + $wordToNumber = new WordToNumber(); + + $checks = [ + "one" => "1", + "seventy three" => "73", + "one hundred" => "100", + "one hundred seven" => "107", + "one hundred seventy" => "170", + "one hundred seventy three" => "173", + "one hundred seventy-three" => "173", + "one hundred and seventy-three" => "173", + "one hundred and seventy-three thousand" => "173000", + "one hundred and seventy-three million" => "173000000", + "one hundred and seventy-three million two thousand" => "173002000", + "one hundred,,,,,and,,,,,seventy-three million two thousand and two" => "173002002", + "one hundred and - --seventy-three billion" => "173000000000", + "one hundred.- .,and seventy-three trillion five million sixty seven thousand one hundred and eighty two" => "173000005067182", + "just some extra text here one hundred and seventy-three some more text at the end" => "173", + ]; + + foreach ( $checks as $check => $expected ) { + $result = $wordToNumber->parse( $check ); + $this->assertEquals( $expected, $result ); + } + } public function testParseNumberOddlyFormatted() { @@ -83,7 +45,7 @@ public function testListLanguages() { $wordToNumber = new WordToNumber(); $result = $wordToNumber->listLanguages(); - $this->assertEquals( [ "english", 'french' ], $result ); + $this->assertEquals( [ "english" ], $result ); } public function testSetLanguageExists() {