From: <ho...@us...> - 2006-02-27 11:56:43
|
Revision: 5677 Author: hofman Date: 2006-02-27 03:56:36 -0800 (Mon, 27 Feb 2006) ViewCVS: http://svn.sourceforge.net/bibdesk/?rev=5677&view=rev Log Message: ----------- Remove newlines and collapse whitespaces before parsing the name, as this can give problems. Also check whether a first character has been found before adding it, as it can give range exceptions otherwise. Modified Paths: -------------- branches/BR_1x/bibdesk/BibAuthor.m Modified: branches/BR_1x/bibdesk/BibAuthor.m =================================================================== --- branches/BR_1x/bibdesk/BibAuthor.m 2006-02-27 11:55:06 UTC (rev 5676) +++ branches/BR_1x/bibdesk/BibAuthor.m 2006-02-27 11:56:36 UTC (rev 5677) @@ -275,7 +275,8 @@ // Bug #1436631 indicates that "Pomies, M.-P." was displayed as "M. -. Pomies", so we'll grab the first letter character instead of substringToIndex:1. The technically correct solution may be to use "M. Pomies" in this case, but we split the first name at "." boundaries to generate the firstNames array. static inline NSString *firstLetterCharacterString(NSString *string) { - return [string substringWithRange:[string rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]]]; + NSRange range = [string rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]]; + return (range.location != NSNotFound) ? [string substringWithRange:range] : nil; } // Given a normalized name of "von Last, Jr, First Middle", this will return "F. M. von Last, Jr" @@ -283,9 +284,13 @@ NSMutableString *abbrevName = [NSMutableString stringWithCapacity:[name length]]; NSEnumerator *e = [[self firstNames] objectEnumerator]; NSString *fragment = nil; + NSString *firstLetter = nil; while(fragment = [e nextObject]){ - [abbrevName appendString:firstLetterCharacterString(fragment)]; - [abbrevName appendString:@". "]; + firstLetter = firstLetterCharacterString(fragment); + if (firstLetter != nil) { + [abbrevName appendString:firstLetter]; + [abbrevName appendString:@". "]; + } } // abbrevName should be empty or have a single trailing space @@ -409,6 +414,9 @@ NSMutableString *mutableString = [[NSMutableString alloc] initWithCapacity:14]; NSString *tmpStr = nil; + // we need to remove newlines and collapse whitespace before using bt_split_name + newName = [newName fastStringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; + // pass the name as a UTF8 string, since btparse doesn't work with UniChars theName = bt_split_name((char *)[newName UTF8String],(char *)[newName UTF8String],0,0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |