From: <ho...@us...> - 2008-10-08 17:09:46
|
Revision: 13706 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=13706&view=rev Author: hofman Date: 2008-10-08 17:09:37 +0000 (Wed, 08 Oct 2008) Log Message: ----------- Return an error for complex string parsing error rather than raising an exception. Modified Paths: -------------- trunk/bibdesk/BDSKBibTeXParser.m trunk/bibdesk/BDSKComplexString.h trunk/bibdesk/BDSKComplexString.m trunk/bibdesk/BDSKComplexStringFormatter.m trunk/bibdesk/BDSKField.m trunk/bibdesk/BDSKFindController.m trunk/bibdesk/BDSKMacro.m trunk/bibdesk/BDSKMacroResolver.m trunk/bibdesk/BDSKMacroWindowController.m trunk/bibdesk/BDSKStringConstants.h trunk/bibdesk/BDSKStringConstants.m trunk/bibdesk/NSError_BDSKExtensions.h Modified: trunk/bibdesk/BDSKBibTeXParser.m =================================================================== --- trunk/bibdesk/BDSKBibTeXParser.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKBibTeXParser.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -358,6 +358,8 @@ int nesting; unichar ch; + NSError *error= nil; + static NSCharacterSet *bracesQuotesAndCommaCharSet = nil; if (bracesQuotesAndCommaCharSet == nil) { bracesQuotesAndCommaCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"{}\","] retain]; @@ -421,19 +423,10 @@ CFStringTrimWhitespace((CFMutableStringRef)value); key = [key stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - @try{ - value = [NSString stringWithBibTeXString:value macroResolver:[aDocument macroResolver]]; + if (value = [NSString stringWithBibTeXString:value macroResolver:[aDocument macroResolver] error:&error]) [macros setObject:value forKey:key]; - } - @catch(NSException *exception){ - if([[exception name] isEqual:BDSKComplexStringException]) - NSLog(@"Ignoring invalid complex macro: %@", exception); - else - NSLog(@"Ignoring exception while parsing macro: %@", exception); - } - @catch(id exception){ - NSLog(@"Ignoring exception while parsing macro: %@", exception); - } + else + NSLog(@"Ignoring invalid complex macro: %@", [error localizedDescription]); } @@ -457,6 +450,8 @@ int nesting; unichar ch; + NSError *error = nil; + static NSCharacterSet *bracesAndQuotesCharSet = nil; if (bracesAndQuotesCharSet == nil) { bracesAndQuotesCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"{}\""] retain]; @@ -514,16 +509,10 @@ CFStringTrimWhitespace((CFMutableStringRef)value); key = [key stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - @try{ - value = [NSString stringWithBibTeXString:value macroResolver:[aDocument macroResolver]]; + if (value = [NSString stringWithBibTeXString:value macroResolver:[aDocument macroResolver] error:&error]) [macros setObject:value forKey:key]; - } - @catch(id exception){ - if([exception respondsToSelector:@selector(name)] && [[exception name] isEqual:BDSKComplexStringException]) - NSLog(@"Ignoring invalid complex macro: %@", exception); - else - NSLog(@"Ignoring exception while parsing macro: %@", exception); - } + else + NSLog(@"Ignoring invalid complex macro: %@", [error localizedDescription]); } Modified: trunk/bibdesk/BDSKComplexString.h =================================================================== --- trunk/bibdesk/BDSKComplexString.h 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKComplexString.h 2008-10-08 17:09:37 UTC (rev 13706) @@ -95,14 +95,15 @@ + (id)stringWithNodes:(NSArray *)nodesArray macroResolver:(BDSKMacroResolver *)macroResolver; /*! - @method stringWithBibTeXString:macroResolver: + @method stringWithBibTeXString:macroResolver:error: @abstract Returns a newly allocated and initialized complex or simple string build from the BibTeX string value. @discussion - @param btstring A BibTeX string value @param macroResolver The macro resolver used to resolve macros in the complex string. + @param outError When failing, will be set to the parsing error. @result - */ -+ (id)stringWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver; ++ (id)stringWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver error:(NSError **)outError; /*! @method stringWithInheritedValue: @@ -125,14 +126,15 @@ - (id)initWithNodes:(NSArray *)nodesArray macroResolver:(BDSKMacroResolver *)theMacroResolver; /*! - @method initWithBibTeXString:macroResolver: + @method initWithBibTeXString:macroResolver:error: @abstract Initializes a complex string from a BibTeX string representation and a macroresolver. @discussion Returns a non-complex string when the bibtex string is a single quotd string. @param btstring A BibTeX string @param macroResolver The macro resolver used to resolve macros in the complex string. + @param outError When failing, will be set to the parsing error. @result - */ -- (id)initWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver; +- (id)initWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver error:(NSError **)outError; /*! @method initWithInheritedValue: Modified: trunk/bibdesk/BDSKComplexString.m =================================================================== --- trunk/bibdesk/BDSKComplexString.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKComplexString.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -39,6 +39,7 @@ #import <OmniFoundation/OmniFoundation.h> #import "BDSKStringNode.h" #import "BDSKMacroResolver.h" +#import "NSError_BDSKExtensions.h" #pragma mark - #pragma mark Private complex string expansion @@ -516,13 +517,14 @@ return self; } -- (id)initWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver{ +- (id)initWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver error:(NSError **)outError { btstring = [btstring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // used for correct zoning NSZone *theZone = [self zone]; // we will return another object [[self init] release]; + self = nil; if([btstring length] == 0){ // if the string was whitespace only, it becomes empty. @@ -537,11 +539,12 @@ NSString *s = nil; int nesting; unichar ch; + NSError *error = nil; NSCharacterSet *bracesCharSet = [NSCharacterSet curlyBraceCharacterSet]; [BDSKComplexString class]; // make sure the class is initialized - while (![sc isAtEnd]) { + while (error == nil && NO == [sc isAtEnd]) { ch = [btstring characterAtIndex:[sc scanLocation]]; if (ch == '{') { // a brace-quoted string, we look for the corresponding closing brace @@ -566,15 +569,12 @@ [sc setScanLocation:[sc scanLocation] + 1]; } if (nesting > 0) { - [returnNodes release]; - [sc release]; - [nodeStr autorelease]; - [NSException raise:BDSKComplexStringException - format:@"Unbalanced string: [%@]", nodeStr]; + error = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:[NSString stringWithFormat:NSLocalizedString(@"Unbalanced string: [%@]", @"error description"), nodeStr]]; + } else { + node = [[BDSKStringNode alloc] initWithQuotedString:nodeStr]; + [returnNodes addObject:node]; + [node release]; } - node = [[BDSKStringNode alloc] initWithQuotedString:nodeStr]; - [returnNodes addObject:node]; - [node release]; [nodeStr release]; } else if (ch == '"') { @@ -596,15 +596,12 @@ // we don't accept unbalanced braces, as we always quote with braces // do we want to be more permissive and try to use "-quoted fields? if (nesting > 0 || ![nodeStr isStringTeXQuotingBalancedWithBraces:YES connected:NO]) { - [returnNodes release]; - [sc release]; - [nodeStr autorelease]; - [NSException raise:BDSKComplexStringException - format:@"Unbalanced string: [%@]", nodeStr]; + error = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:[NSString stringWithFormat:NSLocalizedString(@"Unbalanced string: [%@]", @"error description"), nodeStr]]; + } else { + node = [[BDSKStringNode alloc] initWithQuotedString:nodeStr]; + [returnNodes addObject:node]; + [node release]; } - node = [[BDSKStringNode alloc] initWithQuotedString:nodeStr]; - [returnNodes addObject:node]; - [node release]; [nodeStr release]; } else if ([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:ch]) { @@ -624,47 +621,40 @@ } else if (ch == '#') { // we found 2 # or a # at the beginning - [returnNodes release]; - [sc release]; - [NSException raise:BDSKComplexStringException - format:@"Missing component"]; + error = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:NSLocalizedString(@"Invalid first character in component", @"error description")]; } else { - [returnNodes release]; - [sc release]; - [NSException raise:BDSKComplexStringException - format:@"Invalid first character in component"]; + error = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:NSLocalizedString(@"Invalid first character in component", @"error description")]; } - // look for the next #-character, removing spaces around it - [sc scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:NULL]; - if (![sc isAtEnd]) { - if (![sc scanString:@"#" intoString:NULL]) { - [returnNodes release]; - [sc release]; - [NSException raise:BDSKComplexStringException - format:@"Missing # character"]; - } + if (error == nil) { + // look for the next #-character, removing spaces around it [sc scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:NULL]; - if ([sc isAtEnd]) { - // we found a # at the end - [returnNodes release]; - [sc release]; - [NSException raise:BDSKComplexStringException - format:@"Empty component"]; + if (![sc isAtEnd]) { + if (![sc scanString:@"#" intoString:NULL]) { + error = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:NSLocalizedString(@"Missing # character", @"error description")]; + } else { + [sc scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:NULL]; + if ([sc isAtEnd]) { + // we found a # at the end + error = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:NSLocalizedString(@"Empty component", @"error description")]; + } + } } } } - - self = [[BDSKComplexString allocWithZone:theZone] initWithNodes:returnNodes macroResolver:theMacroResolver]; + if (error == nil) + self = [[BDSKComplexString allocWithZone:theZone] initWithNodes:returnNodes macroResolver:theMacroResolver]; + else if (outError != NULL) + *outError = error; [sc release]; [returnNodes release]; return self; } -+ (id)stringWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver{ - return [[[self alloc] initWithBibTeXString:btstring macroResolver:theMacroResolver] autorelease]; ++ (id)stringWithBibTeXString:(NSString *)btstring macroResolver:(BDSKMacroResolver *)theMacroResolver error:(NSError **)outError{ + return [[[self alloc] initWithBibTeXString:btstring macroResolver:theMacroResolver error:outError] autorelease]; } + (id)stringWithNodes:(NSArray *)nodesArray macroResolver:(BDSKMacroResolver *)theMacroResolver{ Modified: trunk/bibdesk/BDSKComplexStringFormatter.m =================================================================== --- trunk/bibdesk/BDSKComplexStringFormatter.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKComplexStringFormatter.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -37,6 +37,7 @@ #import "BDSKComplexStringFormatter.h" #import "BDSKComplexString.h" #import "NSString_BDSKExtensions.h" +#import "NSError_BDSKExtensions.h" #import "BDSKMacroResolver.h" @implementation BDSKComplexStringFormatter @@ -137,29 +138,22 @@ string = [string stringByReplacingCharactersInSet:[NSCharacterSet controlCharacterSet] withString:@""]; string = [string stringByReplacingCharactersInSet:[NSCharacterSet illegalCharacterSet] withString:@""]; - @try{ - if (editAsComplexString) { - [self setParsedString:[NSString stringWithBibTeXString:string macroResolver:macroResolver]]; - } else { - // not complex, but we check for balanced braces anyway - [self setParsedString:string]; - if([string isStringTeXQuotingBalancedWithBraces:YES connected:NO] == NO) - // not really a complex string exception, but we'll handle it the same way - @throw [NSException exceptionWithName:BDSKComplexStringException reason:NSLocalizedString(@"Unbalanced braces", @"Exception description") userInfo:nil]; - } - + NSError *complexError = nil; + + if (editAsComplexString) { + NSString *complexString = [NSString stringWithBibTeXString:string macroResolver:macroResolver error:&complexError]; + if (complexString) + [self setParsedString:complexString]; + } else if ([string isStringTeXQuotingBalancedWithBraces:YES connected:NO] == NO) { + // not really a complex string exception, but we'll handle it the same way + complexError = [NSError mutableLocalErrorWithCode:kBDSKComplexStringError localizedDescription:NSLocalizedString(@"Unbalanced braces", @"error description")]; + } else { + [self setParsedString:string]; } - @catch(NSException *anException){ - if([[anException name] isEqualToString:BDSKComplexStringException]) - [self setParseError:[anException reason]]; - else - @throw; - } - @catch(id anException){ - @throw; - } + + if (complexError) + [self setParseError:[complexError localizedDescription]]; - // if we use @finally here, this gets executed even if it wasn't our exception if(error) *error = [self parseError]; if(obj) Modified: trunk/bibdesk/BDSKField.m =================================================================== --- trunk/bibdesk/BDSKField.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKField.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -109,12 +109,11 @@ - (void)setBibTeXString:(NSString *)newValue { if ([[bibItem owner] isDocument]) { - @try { - NSString *value = [NSString stringWithBibTeXString:newValue macroResolver:[[bibItem owner] macroResolver]]; + NSString *value = [NSString stringWithBibTeXString:newValue macroResolver:[[bibItem owner] macroResolver] error:NULL]; + if (value) { [bibItem setField:name toValue:value]; [[bibItem undoManager] setActionName:NSLocalizedString(@"AppleScript",@"Undo action name for AppleScript")]; - } - @catch (id exception) { + } else { NSBeep(); } } else { Modified: trunk/bibdesk/BDSKFindController.m =================================================================== --- trunk/bibdesk/BDSKFindController.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKFindController.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -548,28 +548,17 @@ } - (BOOL)stringIsValidAsComplexString:(NSString *)btstring errorMessage:(NSString **)errString{ - BOOL valid = YES; - volatile BDSKComplexString *compStr; - NSString *reason = nil; + volatile NSString *compStr; + NSError *error = nil; - NS_DURING - compStr = [NSString stringWithBibTeXString:btstring macroResolver:nil]; - NS_HANDLER - if([[localException name] isEqualToString:BDSKComplexStringException]){ - valid = NO; - reason = [localException reason]; - } else { - [localException raise]; - } - NS_ENDHANDLER - - if(!valid && errString != nil){ - if(reason == nil) - reason = @"Complex string is invalid for unknown reason"; // shouldn't happen - - *errString = reason; + compStr = [NSString stringWithBibTeXString:btstring macroResolver:nil error:&error]; + if (compStr == nil) { + *errString = [error localizedDescription]; + if(*errString == nil) + *errString = @"Complex string is invalid for unknown reason"; // shouldn't happen + return NO; } - return valid; + return YES; } - (BOOL)validateMenuItem:(NSMenuItem *)menuItem{ @@ -837,7 +826,7 @@ } if(findAsMacro) - findStr = [NSString stringWithBibTeXString:findStr macroResolver:[theDocument macroResolver]]; + findStr = [NSString stringWithBibTeXString:findStr macroResolver:[theDocument macroResolver] error:NULL]; // loop through the pubs to replace NSMutableArray *arrayOfItems = [NSMutableArray array]; @@ -968,9 +957,9 @@ } if(findAsMacro) - findStr = [NSString stringWithBibTeXString:findStr macroResolver:[theDocument macroResolver]]; + findStr = [NSString stringWithBibTeXString:findStr macroResolver:[theDocument macroResolver] error:NULL]; if(replaceAsMacro) - replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver]]; + replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver] error:NULL]; // loop through the pubs to replace NSEnumerator *pubE = [arrayOfPubs objectEnumerator]; // an enumerator of BibItems @@ -1054,6 +1043,7 @@ BibItem *bibItem; NSString *origStr; NSString *complexStr; + NSError *error = nil; unsigned number = 0; while(bibItem = [pubE nextObject]){ @@ -1094,16 +1084,10 @@ if([theRegex findInString:origStr]){ origStr = [theRegex replaceWithString:replStr inString:origStr]; if(replaceAsMacro || findAsMacro){ - @try { - complexStr = [NSString stringWithBibTeXString:origStr macroResolver:[theDocument macroResolver]]; + if (complexStr = [NSString stringWithBibTeXString:origStr macroResolver:[theDocument macroResolver] error:NULL]) { [bibItem setField:field toValue:complexStr]; number++; } - @catch (NSException *exception) { - if([[exception name] isEqualToString:BDSKComplexStringException] == NO) - [exception raise]; - } - @catch (id exception) {} } else { [bibItem setField:field toValue:origStr]; number++; @@ -1124,7 +1108,7 @@ NSString *field = [self field]; if(replaceAsMacro) - replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver]]; + replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver] error:NULL]; // loop through the pubs to replace NSEnumerator *pubE = [arrayOfPubs objectEnumerator]; // an enumerator of BibItems @@ -1184,7 +1168,7 @@ return 0; if(replaceAsMacro) - replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver]]; + replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver] error:NULL]; // loop through the pubs to replace NSEnumerator *pubE = [arrayOfPubs objectEnumerator]; // an enumerator of BibItems @@ -1243,7 +1227,7 @@ return 0; if(replaceAsMacro) - replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver]]; + replStr = [NSString stringWithBibTeXString:replStr macroResolver:[theDocument macroResolver] error:NULL]; // loop through the pubs to replace NSEnumerator *pubE = [arrayOfPubs objectEnumerator]; // an enumerator of BibItems Modified: trunk/bibdesk/BDSKMacro.m =================================================================== --- trunk/bibdesk/BDSKMacro.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKMacro.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -135,12 +135,11 @@ - (void)setBibTeXString:(NSString *)newValue { if ([macroResolver owner] && [[macroResolver owner] isDocument]) { - @try{ - NSString *value = [NSString stringWithBibTeXString:newValue macroResolver:macroResolver]; + NSString *value = [NSString stringWithBibTeXString:newValue macroResolver:macroResolver error:NULL]; + if (value) { [macroResolver setMacroDefinition:value forMacro:name]; [[macroResolver undoManager] setActionName:NSLocalizedString(@"AppleScript",@"Undo action name for AppleScript")]; - } - @catch(id exception) { + } else { NSBeep(); } } else { Modified: trunk/bibdesk/BDSKMacroResolver.m =================================================================== --- trunk/bibdesk/BDSKMacroResolver.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKMacroResolver.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -364,11 +364,15 @@ NSDictionary *macros = [pw dictionaryForKey:BDSKGlobalMacroDefinitionsKey]; NSEnumerator *keyEnum = [macros keyEnumerator]; NSString *key; + NSString *value; + NSError *error = nil; while (key = [keyEnum nextObject]) { // we don't check for circular macros, there shouldn't be any. Or do we want to be paranoid? - [macroDefinitions setObject:[NSString stringWithBibTeXString:[macros objectForKey:key] macroResolver:self] - forKey:key]; + if (value = [NSString stringWithBibTeXString:[macros objectForKey:key] macroResolver:self error:&error]) + [macroDefinitions setObject:value forKey:key]; + else + NSLog(@"Ignoring invalid complex macro: %@", [error localizedDescription]); } if ([oldMacros count]) { // we remove the old style prefs, as they are now merged with the new ones Modified: trunk/bibdesk/BDSKMacroWindowController.m =================================================================== --- trunk/bibdesk/BDSKMacroWindowController.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKMacroWindowController.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -648,8 +648,8 @@ } - (void)replaceEveryOccurrenceOfMacroKey:(NSString *)oldKey withKey:(NSString *)newKey{ - NSString *findStr = [NSString stringWithBibTeXString:oldKey macroResolver:macroResolver]; - NSString *replStr = [NSString stringWithBibTeXString:newKey macroResolver:macroResolver]; + NSString *findStr = [NSString stringWithBibTeXString:oldKey macroResolver:macroResolver error:NULL]; + NSString *replStr = [NSString stringWithBibTeXString:newKey macroResolver:macroResolver error:NULL]; NSArray *docs = [macroResolver isEqual:[BDSKMacroResolver defaultMacroResolver]] ? [NSApp orderedDocuments] : [NSArray arrayWithObjects:[macroResolver owner], nil]; NSEnumerator *docEnum = [docs objectEnumerator]; BibDocument *doc; Modified: trunk/bibdesk/BDSKStringConstants.h =================================================================== --- trunk/bibdesk/BDSKStringConstants.h 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKStringConstants.h 2008-10-08 17:09:37 UTC (rev 13706) @@ -314,7 +314,6 @@ extern NSString *BDSKTemporaryFileMigrationNotification; #pragma mark Exception name strings -extern NSString *BDSKComplexStringException; extern NSString *BDSKUnimplementedException; Modified: trunk/bibdesk/BDSKStringConstants.m =================================================================== --- trunk/bibdesk/BDSKStringConstants.m 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/BDSKStringConstants.m 2008-10-08 17:09:37 UTC (rev 13706) @@ -335,7 +335,6 @@ #pragma mark Exception name strings -NSString *BDSKComplexStringException = @"BDSKComplexStringException"; NSString *BDSKUnimplementedException = @"BDSKUnimplementedException"; /* Modified: trunk/bibdesk/NSError_BDSKExtensions.h =================================================================== --- trunk/bibdesk/NSError_BDSKExtensions.h 2008-10-08 05:45:40 UTC (rev 13705) +++ trunk/bibdesk/NSError_BDSKExtensions.h 2008-10-08 17:09:37 UTC (rev 13706) @@ -55,7 +55,8 @@ kBDSKParserIgnoredFrontMatter, /* BDSKBibTeXParser ignored front matter */ kBDSKParserFailed, /* Some parser failed for some reason */ kBDSKFileOperationFailed, /* Generic file operation failure */ - kBDSKURLOperationFailed, /* Generic URL operation failure */ + kBDSKURLOperationFailed, /* Generic URL operation failure */ + kBDSKComplexStringError, /* Complex string parsing failed */ }; extern NSString *BDSKUnderlyingItemErrorKey; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |