From: <ho...@us...> - 2007-10-29 17:37:53
|
Revision: 11406 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=11406&view=rev Author: hofman Date: 2007-10-29 10:37:47 -0700 (Mon, 29 Oct 2007) Log Message: ----------- Add template key for medicine journal style author names: abbreviated normalized without punctuation. Modified Paths: -------------- trunk/bibdesk/BibAuthor.h trunk/bibdesk/BibAuthor.m trunk/bibdesk/English.lproj/TemplateOptions.strings trunk/bibdesk/French.lproj/TemplateOptions.strings trunk/bibdesk/TemplateOptions.plist Modified: trunk/bibdesk/BibAuthor.h =================================================================== --- trunk/bibdesk/BibAuthor.h 2007-10-29 12:42:25 UTC (rev 11405) +++ trunk/bibdesk/BibAuthor.h 2007-10-29 17:37:47 UTC (rev 11406) @@ -75,6 +75,7 @@ NSString *sortableName; NSString *abbreviatedName; NSString *abbreviatedNormalizedName; + NSString *unpunctuatedAbbreviatedNormalizedName; BDSKPersonController *personController; // unretained BibItem *publication; unsigned hash; @@ -124,6 +125,7 @@ - (NSString *)jrPart; - (NSString *)abbreviatedName; - (NSString *)abbreviatedNormalizedName; +- (NSString *)unpunctuatedAbbreviatedNormalizedName; - (NSArray *)firstNames; - (NSString *)MODSStringWithRole:(NSString *)rel; Modified: trunk/bibdesk/BibAuthor.m =================================================================== --- trunk/bibdesk/BibAuthor.m 2007-10-29 12:42:25 UTC (rev 11405) +++ trunk/bibdesk/BibAuthor.m 2007-10-29 17:37:47 UTC (rev 11406) @@ -132,6 +132,7 @@ [sortableName release]; [abbreviatedName release]; [abbreviatedNormalizedName release]; + [unpunctuatedAbbreviatedNormalizedName release]; [firstNames release]; [fuzzyName release]; [super dealloc]; @@ -343,6 +344,13 @@ return abbreviatedNormalizedName; } +// Given a normalized name of "von Last, Jr, First Middle", this will return "von Last FM Jr" +- (NSString *)unpunctuatedAbbreviatedNormalizedName{ + if(unpunctuatedAbbreviatedNormalizedName == nil) + [self setupAbbreviatedNames]; + return unpunctuatedAbbreviatedNormalizedName; +} + - (NSString *)MODSStringWithRole:(NSString *)role{ NSMutableString *s = [NSMutableString stringWithString:@"<name type=\"personal\">"]; @@ -685,6 +693,13 @@ } } +- (void)setUnpunctuatedAbbreviatedNormalizedName:(NSString *)aName{ + if(aName != unpunctuatedAbbreviatedNormalizedName){ + [unpunctuatedAbbreviatedNormalizedName release]; + unpunctuatedAbbreviatedNormalizedName = [aName copy]; + } +} + // 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 CFStringRef copyFirstLetterCharacterString(CFAllocatorRef alloc, CFStringRef string) { @@ -707,11 +722,13 @@ // use fixed-size mutable strings; allow for extra ". " CFMutableStringRef abbrevName = CFStringCreateMutable(alloc, nameLength + firstNameMaxLength); CFMutableStringRef abbrevFirstName = NULL; + CFMutableStringRef shortAbbrevFirstName = NULL; if(flags.hasFirst){ // allow for ". " around each character abbrevFirstName = CFStringCreateMutable(alloc, firstNameMaxLength); + shortAbbrevFirstName = CFStringCreateMutable(alloc, firstNameMaxLength); // loop through the first name parts (which includes middle names) CFIndex lastIdx = firstNameCount - 1; @@ -721,6 +738,7 @@ if (firstLetter != nil) { CFStringAppend(abbrevFirstName, firstLetter); CFStringAppend(abbrevFirstName, (idx < lastIdx ? CFSTR(". ") : CFSTR(".")) ); + CFStringAppend(shortAbbrevFirstName, firstLetter); CFRelease(firstLetter); } } @@ -748,6 +766,31 @@ } [self setAbbreviatedNormalizedName:(NSString *)abbrevName]; + + // now for the unpunctuated normalized abbreviated form + CFStringReplaceAll(abbrevName, CFSTR("")); + + if(flags.hasVon){ + CFStringAppend(abbrevName, (CFStringRef)vonPart); + CFStringAppend(abbrevName, CFSTR(" ")); + } + + CFStringAppend(abbrevName, (CFStringRef)lastName); + + if(flags.hasFirst){ + CFStringAppend(abbrevName, CFSTR(" ")); + CFStringAppend(abbrevName, shortAbbrevFirstName); + + // first name was non-NULL, and we're done with it + CFRelease(shortAbbrevFirstName); + } + + if(flags.hasJr){ + CFStringAppend(abbrevName, CFSTR(" ")); + CFStringAppend(abbrevName, (CFStringRef)jrPart); + } + + [self setUnpunctuatedAbbreviatedNormalizedName:(NSString *)abbrevName]; CFRelease(abbrevName); } Modified: trunk/bibdesk/English.lproj/TemplateOptions.strings =================================================================== --- trunk/bibdesk/English.lproj/TemplateOptions.strings 2007-10-29 12:42:25 UTC (rev 11405) +++ trunk/bibdesk/English.lproj/TemplateOptions.strings 2007-10-29 17:37:47 UTC (rev 11406) @@ -49,8 +49,9 @@ |