From: <ho...@us...> - 2008-12-28 00:52:33
|
Revision: 13937 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=13937&view=rev Author: hofman Date: 2008-12-28 00:52:28 +0000 (Sun, 28 Dec 2008) Log Message: ----------- add template methods to support index ranges Modified Paths: -------------- trunk/bibdesk/English.lproj/BibDesk Help/bibdesk.texi trunk/bibdesk/NSArray_BDSKExtensions.h trunk/bibdesk/NSArray_BDSKExtensions.m Modified: trunk/bibdesk/English.lproj/BibDesk Help/bibdesk.texi =================================================================== --- trunk/bibdesk/English.lproj/BibDesk Help/bibdesk.texi 2008-12-27 18:16:43 UTC (rev 13936) +++ trunk/bibdesk/English.lproj/BibDesk Help/bibdesk.texi 2008-12-28 00:52:28 UTC (rev 13937) @@ -4037,12 +4037,6 @@ <$collectionKey.@@collectionValueKey/> @end example -Collection value keys can only appear at the end of the key path. Also most collection modifier keys -can only appear at the end of the key path. However four collection modifer keys -(@code{@@unionOfObjects}, @code{@@distinctUnionOfObjects}, @code{@@unionOfArrays}, and @code{@@distinctUnionOfArrays}) -require a property key path for the items of the collection to the right of it. -Moreover, there can be only a single modifier key starting with @code{@@} in a key path. - @subheading Condition tags Another template tag is used to include part of a template depending on whether a value is empty or not. @@ -4142,6 +4136,16 @@ Here are lists of value keys that could be used in BibDesk export templates. +@subheading General + +@multitable {self} {} +@headitem Key @tab Description +@item self +@tab +@item description +@tab +@end multitable + @subheading Document @multitable {publicationsUsingTemplate} {} @@ -4508,6 +4512,8 @@ @tab @item @@lastOneObjects @tab +@item @@self +@tab @end multitable @@ -4586,6 +4592,10 @@ @tab @item @@arraySortedByTitle @tab +@item @@indexRanges +@tab +@item @@indexRangeStrings +@tab @end multitable Modified: trunk/bibdesk/NSArray_BDSKExtensions.h =================================================================== --- trunk/bibdesk/NSArray_BDSKExtensions.h 2008-12-27 18:16:43 UTC (rev 13936) +++ trunk/bibdesk/NSArray_BDSKExtensions.h 2008-12-28 00:52:28 UTC (rev 13937) @@ -82,6 +82,9 @@ - (NSString *)componentsJoinedByCommaAndAmpersandWithSingleEtAlAfterFive; - (NSString *)componentsJoinedByCommaAndAmpersandWithEtAlAfterSix; +- (NSArray *)indexRanges; +- (NSArray *)indexRangeStrings; + - (NSIndexSet *)indexesOfObjects:(NSArray *)objects; - (NSIndexSet *)indexesOfObjectsIdenticalTo:(NSArray *)objects; - (NSArray *)objectsAtIndexSpecifiers:(NSArray *)indexes; Modified: trunk/bibdesk/NSArray_BDSKExtensions.m =================================================================== --- trunk/bibdesk/NSArray_BDSKExtensions.m 2008-12-27 18:16:43 UTC (rev 13936) +++ trunk/bibdesk/NSArray_BDSKExtensions.m 2008-12-28 00:52:28 UTC (rev 13937) @@ -238,6 +238,62 @@ return [self count] > 6 ? [[[self firstSixObjects] componentsJoinedByComma] stringByAppendingString:@", et al."] : [self componentsJoinedByCommaAndAmpersand]; } +- (NSArray *)indexRanges { + NSEnumerator *itemEnum = [[self sortedArrayUsingSelector:@selector(compare:)] objectEnumerator]; + id item; + NSMutableArray *array = [NSMutableArray array]; + int start = INT_MIN, end = INT_MIN; + + while (item = [itemEnum nextObject]) { + if ([item respondsToSelector:@selector(intValue)] == NO) continue; + int value = [item intValue]; + if (value != end + 1) { + if (start != INT_MIN) { + NSArray *range = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:start], start == end ? nil : [NSNumber numberWithInt:end], nil]; + [array addObject:range]; + [range release]; + } + start = value; + } + end = value; + } + if (start != INT_MIN) { + NSArray *range = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:start], start == end ? nil : [NSNumber numberWithInt:end], nil]; + [array addObject:range]; + [range release]; + } + + return array; +} + +- (NSArray *)indexRangeStrings { + NSEnumerator *itemEnum = [[self sortedArrayUsingSelector:@selector(compare:)] objectEnumerator]; + id item; + NSMutableArray *array = [NSMutableArray array]; + int start = INT_MIN, end = INT_MIN; + + while (item = [itemEnum nextObject]) { + if ([item respondsToSelector:@selector(intValue)] == NO) continue; + int value = [item intValue]; + if (value != end + 1) { + if (start != INT_MIN) { + NSString *string = [[NSString alloc] initWithFormat:(start == end ? @"%i" : @"%i-%i"), start, end]; + [array addObject:string]; + [string release]; + } + start = value; + } + end = value; + } + if (start != INT_MIN) { + NSString *string = [[NSString alloc] initWithFormat:(start == end ? @"%i" : @"%i-%i"), start, end]; + [array addObject:string]; + [string release]; + } + + return array; +} + - (NSArray *)objectsAtIndexSpecifiers:(NSArray *)indexes; { NSMutableArray *array = [NSMutableArray array]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |