From 8ab196ce6c2d5de323bdd8ebcc11a73814c0cdca Mon Sep 17 00:00:00 2001 From: xue <> Date: Wed, 26 Apr 2006 21:18:01 +0000 Subject: Merge from 3.0 branch till 971. --- framework/I18N/TDateFormat.php | 11 +++++------ framework/I18N/core/DateFormat.php | 12 +++++++++--- framework/I18N/core/NumberFormat.php | 7 ++++++- framework/I18N/core/NumberFormatInfo.php | 18 ++++++++++++++++++ 4 files changed, 38 insertions(+), 10 deletions(-) (limited to 'framework/I18N') diff --git a/framework/I18N/TDateFormat.php b/framework/I18N/TDateFormat.php index 8ebbce5e..0f5507ab 100644 --- a/framework/I18N/TDateFormat.php +++ b/framework/I18N/TDateFormat.php @@ -48,10 +48,9 @@ Prado::using('System.I18N.TI18NControl'); * if the Value property is not specified. * - Pattern, string, *
Gets or sets the formatting pattern. The predefined patterns are - * 'full date', 'long date', 'medium date', 'short date', 'full time', - * 'long time', 'medium time', and 'short time'. Custom patterns can - * specified when the Pattern property does not match the predefined - * patterns. + * 'fulldate', 'longdate', 'mediumdate', 'shortdate', 'fulltime', + * 'longtime', 'mediumtime', and 'shorttime'. Custom patterns can specified + * when the Pattern property does not match the predefined patterns. * * @author Xiang Wei Zhuo * @version v1.0, last update on Sat Dec 11 15:25:11 EST 2004 @@ -69,7 +68,7 @@ class TDateFormat extends TI18NControl * A set of pattern presets and their respective formatting shorthand. * @var array */ - protected $patternPresets = array( + static private $_patternPresets = array( 'fulldate'=>'P','full'=>'P', 'longdate'=>'D','long'=>'d', 'mediumdate'=>'p','medium'=>'p', @@ -132,7 +131,7 @@ class TDateFormat extends TI18NControl protected function getPreset($string) { $string = strtolower($string); - foreach($this->patternPresets as $pattern => $preset) + foreach(self::$_patternPresets as $pattern => $preset) { if($string == $pattern) return $preset; diff --git a/framework/I18N/core/DateFormat.php b/framework/I18N/core/DateFormat.php index 9caca03b..142926f4 100644 --- a/framework/I18N/core/DateFormat.php +++ b/framework/I18N/core/DateFormat.php @@ -128,7 +128,12 @@ class DateFormat if($pattern{0} == "'" && $pattern{strlen($pattern)-1} == "'") { - $tokens[$i] = preg_replace('/(^\')|(\'$)/','',$pattern); + $sub = preg_replace('/(^\')|(\'$)/','',$pattern); + $tokens[$i] = str_replace('``````','\'',$sub); + } + else if($pattern == '``````') + { + $tokens[$i] = '\''; } else { @@ -145,7 +150,7 @@ class DateFormat throw new Exception('function '.$function.' not found.'); } - } + } } return I18N_toEncoding(implode('',$tokens), $charset); @@ -269,6 +274,7 @@ class DateFormat $token = null; $text = false; + $pattern = preg_replace("/''/", '``````', $pattern); for($i = 0; $i < strlen($pattern); $i++) { @@ -278,7 +284,7 @@ class DateFormat } else { - $tokens[] = str_replace("''","'",$token); + $tokens[] = str_replace("","'",$token); $token = $pattern{$i}; } diff --git a/framework/I18N/core/NumberFormat.php b/framework/I18N/core/NumberFormat.php index bde87e65..d1184f86 100644 --- a/framework/I18N/core/NumberFormat.php +++ b/framework/I18N/core/NumberFormat.php @@ -63,7 +63,7 @@ require_once(dirname(__FILE__).'/util.php'); * $ja = new NumberFormat('ja_JP'); * * //Japanese currency pattern, and using Japanese Yen symbol - * $ja->format(123.14,'c','JPY'); //�123 (Yen 123) + * $ja->format(123.14,'c','JPY'); //�?123 (Yen 123) * * For each culture, the symbol for each currency may be different. * @@ -166,12 +166,17 @@ class NumberFormat $string = substr($string, 0, $dp); $integer = ''; + + $digitSize = $this->formatInfo->getDigitSize(); + + $string = str_pad($string, $digitSize, '0',STR_PAD_LEFT); $len = strlen($string); $groupSeparator = $this->formatInfo->GroupSeparator; $groupSize = $this->formatInfo->GroupSizes; + $firstGroup = true; $multiGroup = is_int($groupSize[1]); $count = 0; diff --git a/framework/I18N/core/NumberFormatInfo.php b/framework/I18N/core/NumberFormatInfo.php index 15b9ee5d..3531cc7f 100644 --- a/framework/I18N/core/NumberFormatInfo.php +++ b/framework/I18N/core/NumberFormatInfo.php @@ -324,6 +324,13 @@ class NumberFormatInfo } } } + + if(is_int($decimalPos)) + $digitPattern = substr($pattern,0,$decimalPos); + else + $digitPattern = $pattern; + + $digitPattern = preg_replace('/[^0]/','',$digitPattern); $info['groupPos1'] = $groupPos1; $info['groupSize1'] = $groupSize1; @@ -331,6 +338,7 @@ class NumberFormatInfo $info['groupSize2'] = $groupSize2; $info['decimalPos'] = $decimalPos; $info['decimalPoints'] = $decimalPoints; + $info['digitSize'] = strlen($digitPattern); return $info; } @@ -365,6 +373,16 @@ class NumberFormatInfo return $this->pattern['decimalPoints'] = $value; } + function getDigitSize() + { + return $this->pattern['digitSize']; + } + + function setDigitSize($value) + { + $this->pattern['digitSize'] = $value; + } + /** * Gets the string to use as the decimal separator. * @return string decimal separator. -- cgit v1.2.3