mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
* Source/NSNumberFormatter.m ([-stringForObjectValue:]): Implement
handling of localizesFormat. Return string value of attributedStringForZero if applicable so that formatting for the common case is not short circuted for zero. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@26627 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
112dfd96cf
commit
ba368ae9e3
2 changed files with 41 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2008-06-11 David Ayers <ayers@fsfe.org>
|
||||||
|
|
||||||
|
* Source/NSNumberFormatter.m ([-stringForObjectValue:]): Implement
|
||||||
|
handling of localizesFormat.
|
||||||
|
Return string value of attributedStringForZero if applicable so that
|
||||||
|
formatting for the common case is not short circuted for zero.
|
||||||
|
|
||||||
2008-06-10 Richard Frith-Macdonald <rfm@gnu.org>
|
2008-06-10 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Tools/AGSHtml.m: if something is scheduled for removal, mark it as
|
* Tools/AGSHtml.m: if something is scheduled for removal, mark it as
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
#include "Foundation/NSUserDefaults.h"
|
#include "Foundation/NSUserDefaults.h"
|
||||||
#include "Foundation/NSCharacterSet.h"
|
#include "Foundation/NSCharacterSet.h"
|
||||||
|
|
||||||
|
#include "GNUstepBase/GSLocale.h"
|
||||||
|
|
||||||
@implementation NSNumberFormatter
|
@implementation NSNumberFormatter
|
||||||
|
|
||||||
- (BOOL) allowsFloats
|
- (BOOL) allowsFloats
|
||||||
|
@ -534,7 +536,26 @@
|
||||||
BOOL displayFractionalPart = NO;
|
BOOL displayFractionalPart = NO;
|
||||||
BOOL negativeNumber = NO;
|
BOOL negativeNumber = NO;
|
||||||
NSString *useFormat;
|
NSString *useFormat;
|
||||||
|
NSString *defaultDecimalSeparator = nil;
|
||||||
|
NSString *defaultThousandsSeparator = nil;
|
||||||
|
|
||||||
|
if (_localizesFormat)
|
||||||
|
{
|
||||||
|
NSDictionary *defaultLocale = GSDomainFromDefaultLocale();
|
||||||
|
defaultDecimalSeparator
|
||||||
|
= [defaultLocale objectForKey: NSDecimalSeparator];
|
||||||
|
defaultThousandsSeparator
|
||||||
|
= [defaultLocale objectForKey: NSThousandsSeparator];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defaultDecimalSeparator == nil)
|
||||||
|
{
|
||||||
|
defaultDecimalSeparator = @".";
|
||||||
|
}
|
||||||
|
if (defaultThousandsSeparator == nil)
|
||||||
|
{
|
||||||
|
defaultThousandsSeparator = @",";
|
||||||
|
}
|
||||||
formattingCharacters = [NSCharacterSet
|
formattingCharacters = [NSCharacterSet
|
||||||
characterSetWithCharactersInString: @"0123456789#.,_"];
|
characterSetWithCharactersInString: @"0123456789#.,_"];
|
||||||
placeHolders = [NSCharacterSet
|
placeHolders = [NSCharacterSet
|
||||||
|
@ -546,7 +567,8 @@
|
||||||
return [[self attributedStringForNotANumber] string];
|
return [[self attributedStringForNotANumber] string];
|
||||||
if ([anObject isEqual: [NSDecimalNumber notANumber]])
|
if ([anObject isEqual: [NSDecimalNumber notANumber]])
|
||||||
return [[self attributedStringForNotANumber] string];
|
return [[self attributedStringForNotANumber] string];
|
||||||
if ([anObject isEqual: [NSDecimalNumber zero]])
|
if (_attributedStringForZero
|
||||||
|
&& [anObject isEqual: [NSDecimalNumber zero]])
|
||||||
return [[self attributedStringForZero] string];
|
return [[self attributedStringForZero] string];
|
||||||
|
|
||||||
useFormat = _positiveFormat;
|
useFormat = _positiveFormat;
|
||||||
|
@ -560,7 +582,10 @@
|
||||||
// if no format specified, use the same default that Cocoa does
|
// if no format specified, use the same default that Cocoa does
|
||||||
if (nil == useFormat)
|
if (nil == useFormat)
|
||||||
{
|
{
|
||||||
useFormat = negativeNumber ? @"-#,###.##" : @"#,###.##";
|
useFormat = [NSString stringWithFormat: @"%@#%@###%@##",
|
||||||
|
negativeNumber ? @"-" : @"",
|
||||||
|
defaultThousandsSeparator,
|
||||||
|
defaultDecimalSeparator];
|
||||||
}
|
}
|
||||||
|
|
||||||
prefixRange = [useFormat rangeOfCharacterFromSet: formattingCharacters];
|
prefixRange = [useFormat rangeOfCharacterFromSet: formattingCharacters];
|
||||||
|
@ -580,15 +605,16 @@
|
||||||
//should also set NSDecimalDigits?
|
//should also set NSDecimalDigits?
|
||||||
|
|
||||||
if ([self hasThousandSeparators]
|
if ([self hasThousandSeparators]
|
||||||
&& (0 != [useFormat rangeOfString:@","].length))
|
&& (0 != [useFormat rangeOfString: defaultThousandsSeparator].length))
|
||||||
{
|
{
|
||||||
displayThousandsSeparators = YES;
|
displayThousandsSeparators = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([self allowsFloats]
|
if ([self allowsFloats]
|
||||||
&& (NSNotFound != [useFormat rangeOfString:@"." ].location))
|
&& (NSNotFound
|
||||||
|
!= [useFormat rangeOfString: defaultDecimalSeparator].location))
|
||||||
{
|
{
|
||||||
decimalPlaceRange = [useFormat rangeOfString: @"."
|
decimalPlaceRange = [useFormat rangeOfString: defaultDecimalSeparator
|
||||||
options: NSBackwardsSearch];
|
options: NSBackwardsSearch];
|
||||||
if (NSMaxRange(decimalPlaceRange) == [useFormat length])
|
if (NSMaxRange(decimalPlaceRange) == [useFormat length])
|
||||||
{
|
{
|
||||||
|
@ -636,14 +662,15 @@
|
||||||
while (([placeHolders characterIsMember:
|
while (([placeHolders characterIsMember:
|
||||||
[useFormat characterAtIndex: NSMaxRange(intPartRange)]]
|
[useFormat characterAtIndex: NSMaxRange(intPartRange)]]
|
||||||
|| [[useFormat substringFromRange:
|
|| [[useFormat substringFromRange:
|
||||||
NSMakeRange(NSMaxRange(intPartRange), 1)] isEqual: @","])
|
NSMakeRange(NSMaxRange(intPartRange), 1)] isEqual:
|
||||||
|
defaultThousandsSeparator])
|
||||||
&& NSMaxRange(intPartRange) < [useFormat length] - 1)
|
&& NSMaxRange(intPartRange) < [useFormat length] - 1)
|
||||||
{
|
{
|
||||||
intPartRange.length++;
|
intPartRange.length++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
intPad = [[useFormat substringWithRange: intPartRange] mutableCopy];
|
intPad = [[useFormat substringWithRange: intPartRange] mutableCopy];
|
||||||
[intPad replaceOccurrencesOfString: @","
|
[intPad replaceOccurrencesOfString: defaultThousandsSeparator
|
||||||
withString: @""
|
withString: @""
|
||||||
options: 0
|
options: 0
|
||||||
range: NSMakeRange(0, [intPad length])];
|
range: NSMakeRange(0, [intPad length])];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue