From 4ea16407af43e526b3852113103aa290a6884083 Mon Sep 17 00:00:00 2001 From: Adam Fedor Date: Tue, 21 Dec 2004 23:20:32 +0000 Subject: [PATCH] * Source/NSTimeZone (NSInternalAbbrevDict): Remove class (+abbreviationDictionary): Implement from new one-to-one plist. * NStimeZones/NSTimeZone.tar: Added abbreviations.plist. Regenerated. * Testing/nstimezone.m: New tests. * Source/Additions/GNUmakefile: Remove duplicate Unicode.m. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20476 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 13 ++- NSTimeZones/NSTimeZones.tar | Bin 849920 -> 829440 bytes Source/Additions/GNUmakefile | 2 - Source/NSTimeZone.m | 171 +++++++++++------------------------ Testing/nstimezone.m | 14 ++- 5 files changed, 75 insertions(+), 125 deletions(-) diff --git a/ChangeLog b/ChangeLog index 459477b46..abb28ffe3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,16 @@ +2004-12-21 Adam Fedor + + * Source/NSTimeZone (NSInternalAbbrevDict): Remove class + (+abbreviationDictionary): Implement from new one-to-one plist. + * NStimeZones/NSTimeZone.tar: Added abbreviations.plist. Regenerated. + * Testing/nstimezone.m: New tests. + + * Source/Additions/GNUmakefile: Remove duplicate Unicode.m. + 2004-12-21 David Wetzel - * Source/Additions/GNUmakefile - added Additions_OBJC_FILES += Unicode.m on apple + * Source/Additions/GNUmakefile: + Added Additions_OBJC_FILES += Unicode.m on apple 2004-12-18 David Wetzel diff --git a/NSTimeZones/NSTimeZones.tar b/NSTimeZones/NSTimeZones.tar index b90269c56dfb0675ff245ecc9202b654bd28a17d..08e430c611acdbb11a829ab100cc188a972a18b0 100644 GIT binary patch delta 53182 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 Hf93xJXETkc delta 68129 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�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 Q;ZI}tKl^XMr)bvy57W|)bpQYW diff --git a/Source/Additions/GNUmakefile b/Source/Additions/GNUmakefile index 9c08cba11..e50adffc3 100644 --- a/Source/Additions/GNUmakefile +++ b/Source/Additions/GNUmakefile @@ -45,8 +45,6 @@ Additions_OBJC_FILES += GSNextRuntime.m endif ifneq ($(FOUNDATION_LIB), gnu) Additions_OBJC_FILES += GSCompatibility.m -else -Additions_OBJC_FILES += Unicode.m endif Additions_OBJC_FILES += Unicode.m diff --git a/Source/NSTimeZone.m b/Source/NSTimeZone.m index 12aa2a676..2880ce35c 100644 --- a/Source/NSTimeZone.m +++ b/Source/NSTimeZone.m @@ -122,11 +122,14 @@ Expected in Resources directory for library bundle. */ #define TIME_ZONE_DIR @"NSTimeZones" -/* Location of time zone abbreviation dictionary. It is a text file +/* Name of time zone abbreviation (plist) dictionary. */ +#define ABBREV_DICT @"abbreviations" + +/* Name of time zone abbreviation map. It is a text file with each line comprised of the abbreviation, a whitespace, and the name. Neither the abbreviation nor the name can contain whitespace, and each line must not be longer than 80 characters. */ -#define ABBREV_DICT @"abbreviations" +#define ABBREV_MAP @"abbreviations" /* File holding regions grouped by latitude. It is a text file with each line comprised of the latitude region, whitespace, and the @@ -218,8 +221,10 @@ static NSTimeZone *systemTimeZone = nil; name. */ static NSMutableDictionary *zoneDictionary; -/* Fake one-to-one abbreviation to time zone name dictionary. */ -static NSDictionary *fake_abbrev_dict; +/* one-to-one abbreviation to time zone name dictionary. */ +static NSMutableDictionary *abbreviationDictionary = nil; +/* one-to-many abbreviation to time zone name dictionary. */ +static NSMutableDictionary *abbreviationMap = nil; /* Lock for creating time zones. */ static NSRecursiveLock *zone_mutex = nil; @@ -253,30 +258,17 @@ decode (const void *ptr) } /* Return path to a TimeZone directory file */ -static NSString *_time_zone_path(NSString *subpath) +static NSString *_time_zone_path(NSString *subpath, NSString *type) { NSBundle *gbundle; + if (type == nil) + type = @""; gbundle = [NSBundle bundleForLibrary: @"gnustep-base"]; return [gbundle pathForResource: subpath - ofType: @"" + ofType: type inDirectory: TIME_ZONE_DIR]; } -/* Object enumerator for NSInternalAbbrevDict. */ -@interface NSInternalAbbrevDictObjectEnumerator : NSEnumerator -{ - NSEnumerator *dict_enum; -} - -- (id) initWithDict: (NSDictionary*)aDict; -@end - - -/* Front end that actually uses [NSTimeZone abbrebiationMap]. */ -@interface NSInternalAbbrevDict : NSDictionary -@end - - @interface GSPlaceholderTimeZone : NSTimeZone @end @@ -318,74 +310,9 @@ static NSString *_time_zone_path(NSString *subpath) /* Private methods for obtaining resource file names. */ @interface NSTimeZone (Private) -+ (NSString*) getAbbreviationFile; -+ (NSString*) getRegionsFile; + (NSString*) getTimeZoneFile: (NSString*)name; @end - -@implementation NSInternalAbbrevDictObjectEnumerator - -- (void) dealloc -{ - RELEASE(dict_enum); -} - -- (id) initWithDict: (NSDictionary*)aDict -{ - dict_enum = RETAIN([aDict objectEnumerator]); - return self; -} - -- (id) nextObject -{ - id object; - - object = [dict_enum nextObject]; - if (object != nil) - return [object objectAtIndex: 0]; - else - return nil; -} - -@end - - -@implementation NSInternalAbbrevDict - -+ (id) allocWithZone: (NSZone*)zone -{ - return NSAllocateObject(self, 0, zone); -} - -- (id) init -{ - return self; -} - -- (unsigned) count -{ - return [[NSTimeZone abbreviationMap] count]; -} - -- (NSEnumerator*) keyEnumerator -{ - return [[NSTimeZone abbreviationMap] keyEnumerator]; -} - -- (NSEnumerator*) objectEnumerator -{ - return AUTORELEASE([[NSInternalAbbrevDictObjectEnumerator alloc] - initWithDict: [NSTimeZone abbreviationMap]]); -} - -- (id) objectForKey: (NSString*)key -{ - return [[[NSTimeZone abbreviationMap] objectForKey: key] objectAtIndex: 0]; -} - -@end - @implementation GSPlaceholderTimeZone @@ -937,53 +864,71 @@ static NSMapTable *absolutes = 0; @implementation NSTimeZone /** - * DEPRECATED. + * Returns a dictionary containing time zone abbreviations and their + * corresponding time zone names. More than one time zone may be associated + * with a single abbreviation. In this case, the dictionary contains only + * one (usually the most common) time zone name for the abbreviation. */ + (NSDictionary*) abbreviationDictionary { - return fake_abbrev_dict; + NSString *path; + if (abbreviationDictionary != nil) + return abbreviationDictionary; + + path = _time_zone_path (ABBREV_DICT, @"plist"); + if (path == NULL) + { + [NSException + raise: NSInternalInconsistencyException + format: @"Failed to open time zone abbreviation dictionary."]; + } + abbreviationDictionary = + [[NSString stringWithContentsOfFile: path] propertyList]; + abbreviationDictionary = + [abbreviationDictionary makeImmutableCopyOnFail: NO]; + return abbreviationDictionary; } /** - * Returns an abbreviation to time zone map which is quite large. + * Returns a dictionary that maps abbreviations to the array + * containing all the time zone names that use the abbreviation. */ + (NSDictionary*) abbreviationMap { - static NSMutableDictionary *abbreviationDictionary = nil; FILE *file; // For the file containing the abbreviation dictionary char abbrev[80], name[80]; - NSString *fileName; + NSString *path; /* Instead of creating the abbreviation dictionary when the class is initialized, we create it when we first need it, since the dictionary can be potentially very large, considering that it's almost never used. */ - if (abbreviationDictionary != nil) - return abbreviationDictionary; + if (abbreviationMap != nil) + return abbreviationMap; /* Read dictionary from file. */ - abbreviationDictionary = [[NSMutableDictionary alloc] init]; - fileName = [NSTimeZone getAbbreviationFile]; + abbreviationMap = [[NSMutableDictionary alloc] init]; + path = _time_zone_path (ABBREV_MAP, nil); #if defined(__WIN32__) - file = fopen([fileName fileSystemRepresentation], "rb"); + file = fopen([path fileSystemRepresentation], "rb"); #else - file = fopen([fileName fileSystemRepresentation], "r"); + file = fopen([path fileSystemRepresentation], "r"); #endif if (file == NULL) [NSException raise: NSInternalInconsistencyException - format: @"Failed to open time zone abbreviation dictionary."]; + format: @"Failed to open time zone abbreviation map."]; while (fscanf(file, "%79s %79s", abbrev, name) == 2) { id a, the_name, the_abbrev; the_name = [NSString stringWithCString: name]; the_abbrev = [NSString stringWithCString: abbrev]; - a = [abbreviationDictionary objectForKey: the_abbrev]; + a = [abbreviationMap objectForKey: the_abbrev]; if (a == nil) { a = AUTORELEASE([NSMutableArray new]); - [abbreviationDictionary setObject: a forKey: the_abbrev]; + [abbreviationMap setObject: a forKey: the_abbrev]; } [a addObject: the_name]; } @@ -993,17 +938,17 @@ static NSMapTable *absolutes = 0; { id array; id the_abbrev = [systemTimeZone abbreviation]; - array = [abbreviationDictionary objectForKey: the_abbrev]; + array = [abbreviationMap objectForKey: the_abbrev]; if (array == nil) { array = AUTORELEASE([NSMutableArray new]); - [abbreviationDictionary setObject: array forKey: the_abbrev]; + [abbreviationMap setObject: array forKey: the_abbrev]; } if ([array containsObject: [systemTimeZone timeZoneName]] == NO) [array addObject: [systemTimeZone timeZoneName]]; } - return abbreviationDictionary; + return abbreviationMap; } /** @@ -1137,7 +1082,6 @@ static NSMapTable *absolutes = 0; localTimeZone = [[NSLocalTimeZone alloc] init]; - fake_abbrev_dict = [[NSInternalAbbrevDict alloc] init]; zone_mutex = [GSLazyRecursiveLock new]; } } @@ -1233,7 +1177,7 @@ static NSMapTable *absolutes = 0; */ if (localZoneString == nil) { - NSString *f = _time_zone_path(LOCAL_TIME_FILE); + NSString *f = _time_zone_path(LOCAL_TIME_FILE, nil); if (f != nil) { localZoneString = [NSString stringWithContentsOfFile: f]; @@ -1384,7 +1328,7 @@ static NSMapTable *absolutes = 0; for (i = 0; i < 24; i++) temp_array[i] = [NSMutableArray array]; - fileName = [NSTimeZoneClass getRegionsFile]; + fileName = _time_zone_path (REGIONS_FILE, nil); #if defined(__WIN32__) file = fopen([fileName fileSystemRepresentation], "rb"); #else @@ -1711,19 +1655,6 @@ static NSMapTable *absolutes = 0; @implementation NSTimeZone (Private) -+ (NSString*) getAbbreviationFile -{ - return _time_zone_path (ABBREV_DICT); -} - -/** - * Returns the path to the Regions file. - */ -+ (NSString*) getRegionsFile -{ - return _time_zone_path (REGIONS_FILE); -} - /** * Returns the path to the named zone info file. */ @@ -1737,7 +1668,7 @@ static NSMapTable *absolutes = 0; [tzdir stringByAppendingPathComponent: name]] == NO) dir = nil; if (dir == nil) - dir= _time_zone_path (ZONES_DIR); + dir= _time_zone_path (ZONES_DIR, nil); return [dir stringByAppendingPathComponent: name]; } diff --git a/Testing/nstimezone.m b/Testing/nstimezone.m index 16fa8dfbf..6748140ec 100644 --- a/Testing/nstimezone.m +++ b/Testing/nstimezone.m @@ -6,11 +6,14 @@ #include #include #include +#include int main () { NSTimeZone *system; + NSTimeZone *other; + NSCalendarDate *date; CREATE_AUTORELEASE_POOL(pool); GSPrintf(stdout, @"System time zone\n"); @@ -20,9 +23,18 @@ main () GSPrintf(stdout, @"Local time zone:\n %@\n\n", [[NSTimeZone localTimeZone] description]); - GSPrintf(stdout, @"Time zones for PST:\n %@\n", + GSPrintf(stdout, @"Time zone for PST (from dict):\n %@\n", + [[NSTimeZone abbreviationDictionary] objectForKey: @"PST"]); + GSPrintf(stdout, @"Time zones for PST (from map):\n %@\n", [[[NSTimeZone abbreviationMap] objectForKey: @"PST"] description]); + other = [NSTimeZone timeZoneWithAbbreviation: @"CEST"]; + GSPrintf(stdout, @"Time zone for CEST:\n %@\n", other); + + date = [[NSCalendarDate alloc] initWithString:@"09/04/2003 17:58:45 CEST" + calendarFormat:@"%m/%d/%Y %H:%M:%S %Z"]; + GSPrintf(stdout, @"Date in CEST:\n %@\n", date); + RELEASE(pool); return 0;