From: <ho...@us...> - 2008-10-26 13:06:59
|
Revision: 13763 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=13763&view=rev Author: hofman Date: 2008-10-26 13:06:45 +0000 (Sun, 26 Oct 2008) Log Message: ----------- Implement singletons as strict singletons, following an improved version of the docs Modified Paths: -------------- trunk/bibdesk/BDSKBookmarkController.m trunk/bibdesk/BDSKCharacterConversion.m trunk/bibdesk/BDSKCompletionManager.m trunk/bibdesk/BDSKConverter.m trunk/bibdesk/BDSKErrorObjectController.m trunk/bibdesk/BDSKFiler.m trunk/bibdesk/BDSKOrphanedFilesFinder.m trunk/bibdesk/BDSKScriptHookManager.m trunk/bibdesk/BDSKSearchBookmarkController.m trunk/bibdesk/BDSKSharingBrowser.m trunk/bibdesk/BDSKStringEncodingManager.m trunk/bibdesk/BDSKTypeInfoEditor.m trunk/bibdesk/BDSKTypeManager.m trunk/bibdesk/BDSKUpdateChecker.m Modified: trunk/bibdesk/BDSKBookmarkController.m =================================================================== --- trunk/bibdesk/BDSKBookmarkController.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKBookmarkController.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -68,16 +68,20 @@ @implementation BDSKBookmarkController +static id sharedBookmarkController = nil; + + (id)sharedBookmarkController { - static id sharedBookmarkController = nil; - if (sharedBookmarkController == nil) { - sharedBookmarkController = [[self alloc] init]; - } + if (sharedBookmarkController == nil) + [[self alloc] init]; return sharedBookmarkController; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedBookmarkController ?: [super allocWithZone:zone]; +} + - (id)init { - if (self = [super init]) { + if (sharedBookmarkController == nil && (sharedBookmarkController = self = [super initWithWindowNibName:@"BookmarksWindow"])) { undoManager = nil; NSMutableArray *bookmarks = [NSMutableArray array]; @@ -99,18 +103,17 @@ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationWillTerminateNotification:) name:NSApplicationWillTerminateNotification object:nil]; } - return self; + return sharedBookmarkController; } -- (void)dealloc { - [self stopObservingBookmarks:[NSArray arrayWithObject:bookmarkRoot]]; - [bookmarkRoot release]; - [undoManager release]; - [super dealloc]; -} +- (id)retain { return self; } -- (NSString *)windowNibName { return @"BookmarksWindow"; } +- (id)autorelease { return self; } +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)windowDidLoad { [self setupToolbar]; [self setWindowFrameAutosaveName:@"BDSKBookmarksWindow"]; Modified: trunk/bibdesk/BDSKCharacterConversion.m =================================================================== --- trunk/bibdesk/BDSKCharacterConversion.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKCharacterConversion.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -41,20 +41,24 @@ #import "NSFileManager_BDSKExtensions.h" #import "BDSKAlert.h" -static BDSKCharacterConversion *sharedConversionEditor; @implementation BDSKCharacterConversion +static BDSKCharacterConversion *sharedConversionEditor; + + (BDSKCharacterConversion *)sharedConversionEditor{ - if (!sharedConversionEditor) { - sharedConversionEditor = [[BDSKCharacterConversion alloc] init]; - } + if (sharedConversionEditor == nil) + [[BDSKCharacterConversion alloc] init]; return sharedConversionEditor; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedConversionEditor ?: [super allocWithZone:zone]; +} + - (id)init { - if (self = [super initWithWindowNibName:@"BDSKCharacterConversion"]) { + if ((sharedConversionEditor == nil) && (sharedConversionEditor = self = [super initWithWindowNibName:@"BDSKCharacterConversion"])) { oneWayDict = [[NSMutableDictionary alloc] initWithCapacity:1]; twoWayDict = [[NSMutableDictionary alloc] initWithCapacity:1]; @@ -68,21 +72,17 @@ [self updateDicts]; } - return self; + return sharedConversionEditor; } -- (void)dealloc -{ - [oneWayDict release]; - [twoWayDict release]; - [currentArray release]; - [texFormatter release]; - [defaultOneWayRomanSet release]; - [romanSet release]; - [texSet release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)awakeFromNib { texFormatter = [[BDSKTeXFormatter alloc] init]; NSTableColumn *tc = [tableView tableColumnWithIdentifier:@"roman"]; Modified: trunk/bibdesk/BDSKCompletionManager.m =================================================================== --- trunk/bibdesk/BDSKCompletionManager.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKCompletionManager.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -44,25 +44,33 @@ @implementation BDSKCompletionManager +static id sharedManager = nil; + + (id)sharedManager { - static id sharedManager = nil; if (sharedManager == nil) - sharedManager = [[self alloc] init]; + [[self alloc] init]; return sharedManager; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedManager ?: [super allocWithZone:zone]; +} + - (id)init { - if(self = [super init]){ + if((sharedManager == nil) && (sharedManager = self = [super init])) { autoCompletionDict = [[NSMutableDictionary alloc] initWithCapacity:15]; // arbitrary } - return self; + return sharedManager; } -- (void)dealloc { - [autoCompletionDict release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)addNamesForCompletion:(NSArray *)names { NSMutableSet *nameSet = [autoCompletionDict objectForKey:BDSKAuthorString]; if (nil == nameSet) { Modified: trunk/bibdesk/BDSKConverter.m =================================================================== --- trunk/bibdesk/BDSKConverter.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKConverter.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -57,33 +57,33 @@ @implementation BDSKConverter +static BDSKConverter *sharedConverter = nil; + + (BDSKConverter *)sharedConverter{ - static BDSKConverter *theConverter = nil; - if(!theConverter){ - theConverter = [[BDSKConverter alloc] init]; - } - return theConverter; + if (sharedConverter == nil) + [[self alloc] init]; + return sharedConverter; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedConverter ?: [super allocWithZone:zone]; +} + - (id)init{ - if(self = [super init]){ - [self loadDict]; + if ((sharedConverter == nil) && (sharedConverter = self = [super init])) { + [self loadDict]; } - return self; + return sharedConverter; } -- (void)dealloc{ - [finalCharSet release]; - [accentCharSet release]; - [texifyConversions release]; - [detexifyConversions release]; - [texifyAccents release]; - [detexifyAccents release]; - [baseCharacterSetForTeX release]; - [super dealloc]; -} - +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)loadDict{ NSDictionary *wholeDict = [NSDictionary dictionaryWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:CHARACTER_CONVERSION_FILENAME]]; Modified: trunk/bibdesk/BDSKErrorObjectController.m =================================================================== --- trunk/bibdesk/BDSKErrorObjectController.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKErrorObjectController.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -69,58 +69,50 @@ + (BDSKErrorObjectController *)sharedErrorObjectController; { - if(!sharedErrorObjectController) - sharedErrorObjectController = [[BDSKErrorObjectController alloc] init]; + if(sharedErrorObjectController == nil) + [[BDSKErrorObjectController alloc] init]; return sharedErrorObjectController; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedErrorObjectController ?: [super allocWithZone:zone]; +} + - (id)init; { - if(self = [super initWithWindowNibName:[self windowNibName]]){ - if(sharedErrorObjectController){ - [self release]; - self = sharedErrorObjectController; - } else { - errors = [[NSMutableArray alloc] initWithCapacity:10]; - managers = [[NSMutableArray alloc] initWithCapacity:4]; - lastIndex = 0; - handledNonIgnorableError = NO; - - [managers addObject:[BDSKErrorManager allItemsErrorManager]]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleErrorNotification:) - name:BDSKParserErrorNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleRemoveDocumentNotification:) - name:BDSKDocumentControllerRemoveDocumentNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleRemovePublicationNotification:) - name:BDSKDocDelItemNotification - object:nil]; - } + if((sharedErrorObjectController == nil) && (sharedErrorObjectController = self = [super initWithWindowNibName:@"BDSKErrorPanel"])){ + errors = [[NSMutableArray alloc] initWithCapacity:10]; + managers = [[NSMutableArray alloc] initWithCapacity:4]; + lastIndex = 0; + handledNonIgnorableError = NO; + + [managers addObject:[BDSKErrorManager allItemsErrorManager]]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleErrorNotification:) + name:BDSKParserErrorNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleRemoveDocumentNotification:) + name:BDSKDocumentControllerRemoveDocumentNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleRemovePublicationNotification:) + name:BDSKDocDelItemNotification + object:nil]; } - return self; + return sharedErrorObjectController; } -- (NSString *)windowNibName; -{ - return @"BDSKErrorPanel"; -} +- (id)retain { return self; } +- (id)autorelease { return self; } -- (void)dealloc; -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [errors release]; - [managers release]; - [currentErrors release]; - [super dealloc]; -} +- (void)release {} +- (unsigned)retainCount { return UINT_MAX; } + - (void)awakeFromNib; { [errorTableView setDoubleAction:@selector(gotoError:)]; Modified: trunk/bibdesk/BDSKFiler.m =================================================================== --- trunk/bibdesk/BDSKFiler.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKFiler.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -68,27 +68,33 @@ forName:@"BDSKNewPathColorTransformer"]; } +static BDSKFiler *sharedFiler = nil; + + (BDSKFiler *)sharedFiler{ - static BDSKFiler *sharedFiler = nil; - if(!sharedFiler){ - sharedFiler = [[BDSKFiler alloc] init]; - } + if (sharedFiler == nil) + [[BDSKFiler alloc] init]; return sharedFiler; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedFiler ?: [super allocWithZone:zone]; +} + - (id)init{ - if(self = [super init]){ + if((sharedFiler == nil) && (sharedFiler = self = [super init])){ errorInfoDicts = [[NSMutableArray alloc] initWithCapacity:10]; } - return self; + return sharedFiler; } -- (void)dealloc{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [errorInfoDicts release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + #pragma mark Auto file methods - (void)filePapers:(NSArray *)papers fromDocument:(BibDocument *)doc check:(BOOL)check{ Modified: trunk/bibdesk/BDSKOrphanedFilesFinder.m =================================================================== --- trunk/bibdesk/BDSKOrphanedFilesFinder.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKOrphanedFilesFinder.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -69,25 +69,30 @@ + (id)sharedFinder { if (sharedFinder == nil) - sharedFinder = [[[self class] alloc] init]; + [[[self class] alloc] init]; return sharedFinder; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedFinder ?: [super allocWithZone:zone]; +} + - (id)init { - if (self = [super init]) { + if ((sharedFinder == nil) && (sharedFinder = self = [super init])) { orphanedFiles = [[NSMutableArray alloc] init]; wasLaunched = NO; } - return self; + return sharedFinder; } -- (void)dealloc { - [server stopDOServer]; - [server release]; - [orphanedFiles release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)awakeFromNib{ [tableView setDoubleAction:@selector(showFile:)]; [progressIndicator setUsesThreadedAnimation:YES]; Modified: trunk/bibdesk/BDSKScriptHookManager.m =================================================================== --- trunk/bibdesk/BDSKScriptHookManager.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKScriptHookManager.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -60,12 +60,15 @@ @implementation BDSKScriptHookManager + (BDSKScriptHookManager *)sharedManager { - if (sharedManager == nil) { - sharedManager = [[BDSKScriptHookManager alloc] init]; - } + if (sharedManager == nil) + [[self alloc] init]; return sharedManager; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedManager ?: [super allocWithZone:zone]; +} + + (NSArray *)scriptHookNames { if (scriptHookNames == nil) { scriptHookNames = [[NSArray alloc] initWithObjects:BDSKChangeFieldScriptHookName, @@ -83,20 +86,20 @@ } - (id)init { - if (sharedManager != nil) - [NSException raise:NSInternalInconsistencyException format:@"attempt to instantiate a second %@", [self class]]; - - if (self = [super init]) { + if ((sharedManager == nil) && (sharedManager = self = [super init])) { scriptHooks = [[NSMutableDictionary alloc] initWithCapacity:3]; } - return self; + return sharedManager; } -- (void)dealloc { - [scriptHooks release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (BDSKScriptHook *)scriptHookWithUniqueID:(NSNumber *)uniqueID { return [scriptHooks objectForKey:uniqueID]; } Modified: trunk/bibdesk/BDSKSearchBookmarkController.m =================================================================== --- trunk/bibdesk/BDSKSearchBookmarkController.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKSearchBookmarkController.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -64,15 +64,20 @@ @implementation BDSKSearchBookmarkController +static BDSKSearchBookmarkController *sharedBookmarkController = nil; + + (id)sharedBookmarkController { - static BDSKSearchBookmarkController *sharedBookmarkController = nil; if (sharedBookmarkController == nil) - sharedBookmarkController = [[self alloc] init]; + [[self alloc] init]; return sharedBookmarkController; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedBookmarkController ?: [super allocWithZone:zone]; +} + - (id)init { - if (self = [super init]) { + if ((sharedBookmarkController == nil) && (sharedBookmarkController = self = [super initWithWindowNibName:@"SearchBookmarksWindow"])) { NSEnumerator *dictEnum = [[[OFPreferenceWrapper sharedPreferenceWrapper] arrayForKey:BDSKSearchGroupBookmarksKey] objectEnumerator]; NSDictionary *dict; @@ -86,18 +91,17 @@ bookmarkRoot = [[BDSKSearchBookmark alloc] initFolderWithChildren:bookmarks label:nil]; [self startObservingBookmarks:[NSArray arrayWithObject:bookmarkRoot]]; } - return self; + return sharedBookmarkController; } -- (void)dealloc { - [self stopObservingBookmarks:[NSArray arrayWithObject:bookmarkRoot]]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [bookmarkRoot release]; - [super dealloc]; -} +- (id)retain { return self; } -- (NSString *)windowNibName { return @"SearchBookmarksWindow"; } +- (id)autorelease { return self; } +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)windowDidLoad { [self setupToolbar]; [self setWindowFrameAutosaveName:@"BDSKSearchBookmarksWindow"]; Modified: trunk/bibdesk/BDSKSharingBrowser.m =================================================================== --- trunk/bibdesk/BDSKSharingBrowser.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKSharingBrowser.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -60,22 +60,27 @@ return sharedBrowser; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedBrowser ?: [super allocWithZone:zone]; +} + - (id)init{ - if (self = [super init]){ + if ((sharedBrowser == nil) && (sharedBrowser = self = [super init])) { sharingClients = nil; browser = nil; unresolvedNetServices = nil; } - return self; + return sharedBrowser; } -- (void)dealloc{ - [sharingClients release]; - [browser release]; - [unresolvedNetServices release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (NSSet *)sharingClients{ return sharingClients; } Modified: trunk/bibdesk/BDSKStringEncodingManager.m =================================================================== --- trunk/bibdesk/BDSKStringEncodingManager.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKStringEncodingManager.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -128,9 +128,8 @@ static BDSKStringEncodingManager *sharedEncodingManager = nil; + (BDSKStringEncodingManager *)sharedEncodingManager{ - if(!sharedEncodingManager){ - sharedEncodingManager = [[BDSKStringEncodingManager alloc] init]; - } + if (sharedEncodingManager == nil) + [[self alloc] init]; return sharedEncodingManager; } @@ -139,20 +138,24 @@ return [[OFPreferenceWrapper sharedPreferenceWrapper] integerForKey:BDSKDefaultStringEncodingKey]; } --(id)init{ - if(sharedEncodingManager != nil){ - [self release]; - self = sharedEncodingManager; - } else - self = [super init]; - return self; ++ (id)allocWithZone:(NSZone *)zone { + return sharedEncodingManager ?: [super allocWithZone:zone]; } -- (void)dealloc{ - if(self != sharedEncodingManager) - [super dealloc]; +- (id)init{ + if (sharedEncodingManager == nil) + sharedEncodingManager = [super init]; + return sharedEncodingManager; } +- (id)retain { return self; } + +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + #pragma mark - // Improve grouping as for some encodings CFStringGetMostCompatibleMacStringEncoding returns kCFStringEncodingInvalidId Modified: trunk/bibdesk/BDSKTypeInfoEditor.m =================================================================== --- trunk/bibdesk/BDSKTypeInfoEditor.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKTypeInfoEditor.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -52,15 +52,18 @@ @implementation BDSKTypeInfoEditor + (BDSKTypeInfoEditor *)sharedTypeInfoEditor{ - if (!sharedTypeInfoEditor) { - sharedTypeInfoEditor = [[BDSKTypeInfoEditor alloc] init]; - } + if (sharedTypeInfoEditor == nil) + [[BDSKTypeInfoEditor alloc] init]; return sharedTypeInfoEditor; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedTypeInfoEditor ?: [super allocWithZone:zone]; +} + - (id)init { - if (self = [super initWithWindowNibName:@"BDSKTypeInfoEditor"]) { + if ((sharedTypeInfoEditor == nil) && (sharedTypeInfoEditor = self = [super initWithWindowNibName:@"BDSKTypeInfoEditor"])) { // we keep a copy to the bundles TypeInfo list to see which items we shouldn't edit NSDictionary *tmpDict = [NSDictionary dictionaryWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TypeInfo.plist"]]; // we are only interested in this dictionary @@ -73,19 +76,17 @@ types = [[NSMutableArray alloc] initWithCapacity:[defaultFieldsForTypesDict count]]; [self revertTypes]; // this loads the current typeInfo from BDSKTypeManager } - return self; + return sharedTypeInfoEditor; } -- (void)dealloc -{ - [fieldsForTypesDict release]; - [types release]; - [defaultFieldsForTypesDict release]; - [defaultTypes release]; - [currentType release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)awakeFromNib { // we want to be able to reorder the items Modified: trunk/bibdesk/BDSKTypeManager.m =================================================================== --- trunk/bibdesk/BDSKTypeManager.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKTypeManager.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -45,145 +45,113 @@ static BDSKTypeManager *sharedInstance = nil; @implementation BDSKTypeManager -+ (BDSKTypeManager *)sharedManager{ - return sharedInstance; -} + (void)initialize { OBINITIALIZE; - if(sharedInstance == nil) - sharedInstance = [[self alloc] init]; + [self sharedManager]; } ++ (BDSKTypeManager *)sharedManager{ + if (sharedInstance == nil) + [[self alloc] init]; + return sharedInstance; +} + ++ (id)allocWithZone:(NSZone *)zone { + return sharedInstance ?: [super allocWithZone:zone]; +} + - (id)init{ - self = [super init]; - - if(!self) - return nil; - - [self reloadTypeInfo]; - - NSMutableCharacterSet *tmpSet; - // this set is used for warning the user on manual entry of a citekey; allows ASCII characters and some math symbols - // arm: up through 1.3.12 we allowed non-ASCII characters in here, but btparse chokes on them and so does BibTeX. TLC 2nd ed. says that cite keys are TeX commands, and subject to the same restrictions as such [a-zA-Z0-9], but this is generally relaxed in the case of BibTeX to include some punctuation. - tmpSet = [[NSCharacterSet characterSetWithRange:NSMakeRange(21, 126 - 21)] mutableCopy]; - [tmpSet removeCharactersInString:@" '\"@,\\#}{~%()"]; - [tmpSet invert]; - invalidCiteKeyCharSet = [tmpSet copy]; - [tmpSet release]; - - fragileCiteKeyCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"&$^"] copy]; - - tmpSet = [[NSCharacterSet characterSetWithRange:NSMakeRange( (unsigned int)'a', 26)] mutableCopy]; - [tmpSet addCharactersInRange:NSMakeRange( (unsigned int)'A', 26)]; - [tmpSet addCharactersInRange:NSMakeRange( (unsigned int)'-', 15)]; // -./0123456789:; - - // this is used for generated cite keys, very strict! - strictInvalidCiteKeyCharSet = [[tmpSet invertedSet] copy]; // don't release this - [tmpSet release]; + if ((sharedInstance == nil) && (sharedInstance = self = [super init])) { + + [self reloadTypeInfo]; + + NSMutableCharacterSet *tmpSet; + // this set is used for warning the user on manual entry of a citekey; allows ASCII characters and some math symbols + // arm: up through 1.3.12 we allowed non-ASCII characters in here, but btparse chokes on them and so does BibTeX. TLC 2nd ed. says that cite keys are TeX commands, and subject to the same restrictions as such [a-zA-Z0-9], but this is generally relaxed in the case of BibTeX to include some punctuation. + tmpSet = [[NSCharacterSet characterSetWithRange:NSMakeRange(21, 126 - 21)] mutableCopy]; + [tmpSet removeCharactersInString:@" '\"@,\\#}{~%()"]; + [tmpSet invert]; + invalidCiteKeyCharSet = [tmpSet copy]; + [tmpSet release]; + + fragileCiteKeyCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"&$^"] copy]; + + tmpSet = [[NSCharacterSet characterSetWithRange:NSMakeRange( (unsigned int)'a', 26)] mutableCopy]; + [tmpSet addCharactersInRange:NSMakeRange( (unsigned int)'A', 26)]; + [tmpSet addCharactersInRange:NSMakeRange( (unsigned int)'-', 15)]; // -./0123456789:; + + // this is used for generated cite keys, very strict! + strictInvalidCiteKeyCharSet = [[tmpSet invertedSet] copy]; // don't release this + [tmpSet release]; - // this set is used for warning the user on manual entry of a local-url; allows non-ASCII characters and some math symbols - invalidLocalUrlCharSet = [[NSCharacterSet characterSetWithCharactersInString:@":"] copy]; - - // this is used for generated local urls - strictInvalidLocalUrlCharSet = [invalidLocalUrlCharSet copy]; // don't release this + // this set is used for warning the user on manual entry of a local-url; allows non-ASCII characters and some math symbols + invalidLocalUrlCharSet = [[NSCharacterSet characterSetWithCharactersInString:@":"] copy]; + + // this is used for generated local urls + strictInvalidLocalUrlCharSet = [invalidLocalUrlCharSet copy]; // don't release this - - tmpSet = [[NSCharacterSet characterSetWithRange:NSMakeRange(1,31)] mutableCopy]; - [tmpSet addCharactersInString:@"/?<>\\:*|\""]; - - // this is used for generated local urls, stricted for use of windoze-compatible file names - veryStrictInvalidLocalUrlCharSet = [tmpSet copy]; - [tmpSet release]; - - // see the URI specifications for the valid characters - NSMutableCharacterSet *validSet = [[NSCharacterSet characterSetWithRange:NSMakeRange( (unsigned int)'a', 26)] mutableCopy]; - [validSet addCharactersInRange:NSMakeRange( (unsigned int)'A', 26)]; - [validSet addCharactersInString:@"-._~:/?#[]@!$&'()*+,;="]; - - // this set is used for warning the user on manual entry of a remote url - invalidRemoteUrlCharSet = [[validSet invertedSet] copy]; - [validSet release]; - - // this is used for generated remote urls - strictInvalidRemoteUrlCharSet = [invalidRemoteUrlCharSet copy]; // don't release this - - invalidGeneralCharSet = [[NSCharacterSet alloc] init]; - - strictInvalidGeneralCharSet = [[NSCharacterSet alloc] init]; - - separatorCharSet = [[NSCharacterSet characterSetWithCharactersInString:[[OFPreferenceWrapper sharedPreferenceWrapper] stringForKey:BDSKGroupFieldSeparatorCharactersKey]] copy]; - separatorOFCharSet = [[OFCharacterSet alloc] initWithString:[[OFPreferenceWrapper sharedPreferenceWrapper] stringForKey:BDSKGroupFieldSeparatorCharactersKey]]; - - localFileFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; - remoteURLFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; - allURLFieldsSet = [[NSMutableSet alloc] initWithCapacity:10]; - [self reloadURLFields]; - - ratingFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; - triStateFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; - booleanFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; - citationFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; - personFieldsSet = [[NSMutableSet alloc] initWithCapacity:2]; - [self reloadSpecialFields]; - - singleValuedGroupFieldsSet = [[NSMutableSet alloc] initWithCapacity:10]; - invalidGroupFieldsSet = [[NSMutableSet alloc] initWithCapacity:10]; - [self reloadGroupFields]; - - // observe the pref changes for custom fields - NSEnumerator *prefKeyEnum = [[NSSet setWithObjects:BDSKDefaultFieldsKey, BDSKLocalFileFieldsKey, BDSKRemoteURLFieldsKey, BDSKRatingFieldsKey, BDSKBooleanFieldsKey, BDSKTriStateFieldsKey, BDSKCitationFieldsKey, BDSKPersonFieldsKey, nil] objectEnumerator]; - NSString *prefKey; - while (prefKey = [prefKeyEnum nextObject]) - [OFPreference addObserver:self selector:@selector(customFieldsDidChange:) forPreference:[OFPreference preferenceForKey:prefKey]]; - - return self; + + tmpSet = [[NSCharacterSet characterSetWithRange:NSMakeRange(1,31)] mutableCopy]; + [tmpSet addCharactersInString:@"/?<>\\:*|\""]; + + // this is used for generated local urls, stricted for use of windoze-compatible file names + veryStrictInvalidLocalUrlCharSet = [tmpSet copy]; + [tmpSet release]; + + // see the URI specifications for the valid characters + NSMutableCharacterSet *validSet = [[NSCharacterSet characterSetWithRange:NSMakeRange( (unsigned int)'a', 26)] mutableCopy]; + [validSet addCharactersInRange:NSMakeRange( (unsigned int)'A', 26)]; + [validSet addCharactersInString:@"-._~:/?#[]@!$&'()*+,;="]; + + // this set is used for warning the user on manual entry of a remote url + invalidRemoteUrlCharSet = [[validSet invertedSet] copy]; + [validSet release]; + + // this is used for generated remote urls + strictInvalidRemoteUrlCharSet = [invalidRemoteUrlCharSet copy]; // don't release this + + invalidGeneralCharSet = [[NSCharacterSet alloc] init]; + + strictInvalidGeneralCharSet = [[NSCharacterSet alloc] init]; + + separatorCharSet = [[NSCharacterSet characterSetWithCharactersInString:[[OFPreferenceWrapper sharedPreferenceWrapper] stringForKey:BDSKGroupFieldSeparatorCharactersKey]] copy]; + separatorOFCharSet = [[OFCharacterSet alloc] initWithString:[[OFPreferenceWrapper sharedPreferenceWrapper] stringForKey:BDSKGroupFieldSeparatorCharactersKey]]; + + localFileFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; + remoteURLFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; + allURLFieldsSet = [[NSMutableSet alloc] initWithCapacity:10]; + [self reloadURLFields]; + + ratingFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; + triStateFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; + booleanFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; + citationFieldsSet = [[NSMutableSet alloc] initWithCapacity:5]; + personFieldsSet = [[NSMutableSet alloc] initWithCapacity:2]; + [self reloadSpecialFields]; + + singleValuedGroupFieldsSet = [[NSMutableSet alloc] initWithCapacity:10]; + invalidGroupFieldsSet = [[NSMutableSet alloc] initWithCapacity:10]; + [self reloadGroupFields]; + + // observe the pref changes for custom fields + NSEnumerator *prefKeyEnum = [[NSSet setWithObjects:BDSKDefaultFieldsKey, BDSKLocalFileFieldsKey, BDSKRemoteURLFieldsKey, BDSKRatingFieldsKey, BDSKBooleanFieldsKey, BDSKTriStateFieldsKey, BDSKCitationFieldsKey, BDSKPersonFieldsKey, nil] objectEnumerator]; + NSString *prefKey; + while (prefKey = [prefKeyEnum nextObject]) + [OFPreference addObserver:self selector:@selector(customFieldsDidChange:) forPreference:[OFPreference preferenceForKey:prefKey]]; + } + return sharedInstance; } -- (void)dealloc{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [fileTypesDict release]; - [fieldsForTypesDict release]; - [typesForFileTypeDict release]; - [fieldNameForPubMedTagDict release]; - [pubMedTagForFieldNameDict release]; - [bibtexTypeForPubMedTypeDict release]; - [fieldNamesForMARCTagDict release]; - [fieldNamesForUNIMARCTagDict release]; - [fieldNameForJSTORTagDict release]; - [fieldDescriptionForJSTORTagDict release]; - [fieldNameForWebOfScienceTagDict release]; - [fieldDescriptionForWebOfScienceTagDict release]; - [bibtexTypeForWebOfScienceTypeDict release]; - [fieldNameForReferTagDict release]; - [bibtexTypeForReferTypeDict release]; - [bibtexTypeForHCiteTypeDict release]; - [bibtexTypeForDublinCoreTypeDict release]; - [fieldNameForDublinCoreTermDict release]; - [MODSGenresForBibTeXTypeDict release]; - [allFieldNames release]; - [invalidCiteKeyCharSet release]; - [strictInvalidCiteKeyCharSet release]; - [invalidLocalUrlCharSet release]; - [strictInvalidLocalUrlCharSet release]; - [invalidRemoteUrlCharSet release]; - [strictInvalidRemoteUrlCharSet release]; - [invalidGeneralCharSet release]; - [strictInvalidGeneralCharSet release]; - [localFileFieldsSet release]; - [remoteURLFieldsSet release]; - [allURLFieldsSet release]; - [ratingFieldsSet release]; - [triStateFieldsSet release]; - [booleanFieldsSet release]; - [citationFieldsSet release]; - [personFieldsSet release]; - [singleValuedGroupFieldsSet release]; - [invalidGroupFieldsSet release]; - [super dealloc]; -} +- (id)retain { return self; } +- (id)autorelease { return self; } + +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)reloadTypeInfo{ // Load the TypeInfo plists NSDictionary *typeInfoDict = [NSDictionary dictionaryWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:TYPE_INFO_FILENAME]]; Modified: trunk/bibdesk/BDSKUpdateChecker.m =================================================================== --- trunk/bibdesk/BDSKUpdateChecker.m 2008-10-26 10:38:26 UTC (rev 13762) +++ trunk/bibdesk/BDSKUpdateChecker.m 2008-10-26 13:06:45 UTC (rev 13763) @@ -75,17 +75,22 @@ @implementation BDSKUpdateChecker +static id sharedInstance = nil; + + (id)sharedChecker; { - static id sharedInstance = nil; if (nil == sharedInstance) - sharedInstance = [[self alloc] init]; + [[self alloc] init]; return sharedInstance; } ++ (id)allocWithZone:(NSZone *)zone { + return sharedInstance ?: [super allocWithZone:zone]; +} + - (id)init { - if (self = [super init]) { + if ((sharedInstance == nil) && (sharedInstance = self = [super init])) { plistLock = [[NSLock alloc] init]; propertyListFromServer = nil; keyForCurrentMajorVersion = nil; @@ -99,34 +104,17 @@ selector:@selector(handleUpdateIntervalChanged:) forPreference:[OFPreference preferenceForKey:BDSKUpdateCheckIntervalKey]]; } - return self; + return sharedInstance; } -- (void)dealloc -{ - [OFPreference removeObserver:self forPreference:nil]; - - // these objects are only accessed from the main thread - [releaseNotesWindowController release]; - [self setUpdateTimer:nil]; +- (id)retain { return self; } - // propertyListFromServer is currently the only object shared between threads - [plistLock lock]; - [propertyListFromServer release]; - propertyListFromServer = nil; - [plistLock unlock]; - [plistLock release]; - plistLock = nil; - - // ...well, also these, but they don't change and dealloc is never called anyway - [localVersionNumber release]; - localVersionNumber = nil; - [keyForCurrentMajorVersion release]; - keyForCurrentMajorVersion = nil; - - [super dealloc]; -} +- (id)autorelease { return self; } +- (void)release {} + +- (unsigned)retainCount { return UINT_MAX; } + - (void)scheduleUpdateCheckIfNeeded; { // unschedule any current timers This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |