From: <ho...@us...> - 2008-08-04 17:47:00
|
Revision: 13570 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=13570&view=rev Author: hofman Date: 2008-08-04 17:46:46 +0000 (Mon, 04 Aug 2008) Log Message: ----------- Rename tag classes to include template in their name. typedef names for type enums. Modified Paths: -------------- trunk/bibdesk/BDSKTemplateDocument.m trunk/bibdesk/BDSKTemplateParser.h trunk/bibdesk/BDSKTemplateParser.m trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj Added Paths: ----------- trunk/bibdesk/BDSKTemplateTag.h trunk/bibdesk/BDSKTemplateTag.m Removed Paths: ------------- trunk/bibdesk/BDSKTag.h trunk/bibdesk/BDSKTag.m Deleted: trunk/bibdesk/BDSKTag.h =================================================================== --- trunk/bibdesk/BDSKTag.h 2008-08-04 13:04:39 UTC (rev 13569) +++ trunk/bibdesk/BDSKTag.h 2008-08-04 17:46:46 UTC (rev 13570) @@ -1,155 +0,0 @@ -// -// BDSKTag.h -// BibDesk -// -// Created by Christiaan Hofman on 10/12/07. -/* - This software is Copyright (c) 2007-2008 - Christiaan Hofman. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of Christiaan Hofman nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Cocoa/Cocoa.h> - -enum { - BDSKValueTagType, - BDSKCollectionTagType, - BDSKConditionTagType, - BDSKTextTagType -}; - -@interface BDSKTag : NSObject { -} -- (int)type; -@end - -#pragma mark - - -@interface BDSKValueTag : BDSKTag { - NSString *keyPath; -} - -- (id)initWithKeyPath:(NSString *)aKeyPath; - -- (NSString *)keyPath; - -@end - -#pragma mark - - -@interface BDSKRichValueTag : BDSKValueTag { - NSDictionary *attributes; -} - -- (id)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary *)anAttributes; - -- (NSDictionary *)attributes; - -@end - -#pragma mark - - -@interface BDSKCollectionTag : BDSKValueTag { - NSString *itemTemplateString; - NSString *separatorTemplateString; - NSMutableArray *itemTemplate; - NSMutableArray *separatorTemplate; -} - -- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateString:(NSString *)anItemTemplateString separatorTemplateString:(NSString *)aSeparatorTemplateString; - -- (NSArray *)itemTemplate; -- (NSArray *)separatorTemplate; - -@end - -#pragma mark - - -@interface BDSKRichCollectionTag : BDSKValueTag { - NSAttributedString *itemTemplateAttributedString; - NSAttributedString *separatorTemplateAttributedString; - NSMutableArray *itemTemplate; - NSMutableArray *separatorTemplate; -} - -- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateAttributedString:(NSAttributedString *)anItemTemplateString separatorTemplateAttributedString:(NSAttributedString *)aSeparatorTemplateString; - -- (NSArray *)itemTemplate; -- (NSArray *)separatorTemplate; - -@end - -#pragma mark - - -@interface BDSKConditionTag : BDSKValueTag { - int matchType; - NSMutableArray *subtemplates; - NSArray *matchStrings; -} - -- (id)initWithKeyPath:(NSString *)aKeyPath matchType:(int)aMatchType matchStrings:(NSArray *)aMatchStrings subtemplates:(NSArray *)aSubtemplates; - -- (int)matchType; -- (NSArray *)matchStrings; -- (NSArray *)subtemplates; -- (NSArray *)subtemplateAtIndex:(unsigned)idx; - -@end - -#pragma mark - - -@interface BDSKRichConditionTag : BDSKConditionTag -@end - -#pragma mark - - -@interface BDSKTextTag : BDSKTag { - NSString *text; -} - -- (id)initWithText:(NSString *)aText; - -- (NSString *)text; -- (void)setText:(NSString *)newText; - -@end - -#pragma mark - - -@interface BDSKRichTextTag : BDSKTag { - NSAttributedString *attributedText; -} - -- (id)initWithAttributedText:(NSAttributedString *)anAttributedText; - -- (NSAttributedString *)attributedText; -- (void)setAttributedText:(NSAttributedString *)newAttributedText; - -@end Deleted: trunk/bibdesk/BDSKTag.m =================================================================== --- trunk/bibdesk/BDSKTag.m 2008-08-04 13:04:39 UTC (rev 13569) +++ trunk/bibdesk/BDSKTag.m 2008-08-04 17:46:46 UTC (rev 13570) @@ -1,287 +0,0 @@ -// -// BDSKTag.m -// BibDesk -// -// Created by Christiaan Hofman on 10/12/07. -/* - This software is Copyright (c) 2007-2008 - Christiaan Hofman. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of Christiaan Hofman nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "BDSKTag.h" -#import "BDSKTemplateParser.h" - - -@implementation BDSKTag -- (int)type { return -1; } -@end - -#pragma mark - - -@implementation BDSKValueTag - -- (id)initWithKeyPath:(NSString *)aKeyPath { - if (self = [super init]) - keyPath = [aKeyPath copy]; - return self; -} - -- (void)dealloc { - [keyPath release]; - [super dealloc]; -} - -- (int)type { return BDSKValueTagType; } - -- (NSString *)keyPath { - return keyPath; -} - -@end - -#pragma mark - - -@implementation BDSKRichValueTag - -- (id)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary *)anAttributes { - if (self = [super initWithKeyPath:aKeyPath]) { - attributes = [anAttributes copy]; - } - return self; -} - -- (void)dealloc { - [attributes release]; - [super dealloc]; -} - -- (NSDictionary *)attributes { - return attributes; -} - -@end - -#pragma mark - - -@implementation BDSKCollectionTag - -- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateString:(NSString *)anItemTemplateString separatorTemplateString:(NSString *)aSeparatorTemplateString { - if (self = [super initWithKeyPath:aKeyPath]) { - itemTemplateString = [anItemTemplateString retain]; - separatorTemplateString = [aSeparatorTemplateString retain]; - itemTemplate = nil; - separatorTemplate = nil; - } - return self; -} - -- (void)dealloc { - [itemTemplateString release]; - [separatorTemplateString release]; - [itemTemplate release]; - [separatorTemplate release]; - [super dealloc]; -} - -- (int)type { return BDSKCollectionTagType; } - -- (NSArray *)itemTemplate { - if (itemTemplate == nil && itemTemplateString) - itemTemplate = [[BDSKTemplateParser arrayByParsingTemplateString:itemTemplateString] retain]; - return itemTemplate; -} - -- (NSArray *)separatorTemplate { - if (separatorTemplate == nil && separatorTemplateString) - separatorTemplate = [[BDSKTemplateParser arrayByParsingTemplateString:separatorTemplateString] retain]; - return separatorTemplate; -} - -@end - -#pragma mark - - -@implementation BDSKRichCollectionTag - -- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateAttributedString:(NSAttributedString *)anItemTemplateString separatorTemplateAttributedString:(NSAttributedString *)aSeparatorTemplateString { - if (self = [super initWithKeyPath:aKeyPath]) { - itemTemplateAttributedString = [anItemTemplateString retain]; - separatorTemplateAttributedString = [aSeparatorTemplateString retain]; - itemTemplate = nil; - separatorTemplate = nil; - } - return self; -} - -- (void)dealloc { - [itemTemplateAttributedString release]; - [separatorTemplateAttributedString release]; - [itemTemplate release]; - [separatorTemplate release]; - [super dealloc]; -} - -- (int)type { return BDSKCollectionTagType; } - -- (NSArray *)itemTemplate { - if (itemTemplate == nil && itemTemplateAttributedString) - itemTemplate = [[BDSKTemplateParser arrayByParsingTemplateAttributedString:itemTemplateAttributedString] retain]; - return itemTemplate; -} - -- (NSArray *)separatorTemplate { - if (separatorTemplate == nil && separatorTemplateAttributedString) - separatorTemplate = [[BDSKTemplateParser arrayByParsingTemplateAttributedString:separatorTemplateAttributedString] retain]; - return separatorTemplate; -} - -@end - -#pragma mark - - -@implementation BDSKConditionTag - -- (id)initWithKeyPath:(NSString *)aKeyPath matchType:(int)aMatchType matchStrings:(NSArray *)aMatchStrings subtemplates:(NSArray *)aSubtemplates { - if (self = [super initWithKeyPath:aKeyPath]) { - matchType = aMatchType; - matchStrings = [aMatchStrings copy]; - subtemplates = [aSubtemplates mutableCopy]; - } - return self; -} - -- (void)dealloc { - [subtemplates release]; - [matchStrings release]; - [super dealloc]; -} - -- (int)type { return BDSKConditionTagType; } - -- (int)matchType { - return matchType; -} - -- (NSArray *)subtemplates { - return subtemplates; -} - -- (NSArray *)matchStrings { - return matchStrings; -} - -- (NSArray *)subtemplateAtIndex:(unsigned)idx { - id subtemplate = [subtemplates objectAtIndex:idx]; - if ([subtemplate isKindOfClass:[NSArray class]] == NO) { - subtemplate = [[BDSKTemplateParser arrayByParsingTemplateString:subtemplate] retain]; - [subtemplates replaceObjectAtIndex:idx withObject:subtemplate]; - } - return subtemplate; -} - -@end - -#pragma mark - - -@implementation BDSKRichConditionTag - -- (NSArray *)subtemplateAtIndex:(unsigned)idx { - id subtemplate = [subtemplates objectAtIndex:idx]; - if ([subtemplate isKindOfClass:[NSArray class]] == NO) { - subtemplate = [[BDSKTemplateParser arrayByParsingTemplateAttributedString:subtemplate] retain]; - [subtemplates replaceObjectAtIndex:idx withObject:subtemplate]; - } - return subtemplate; -} - -@end - -#pragma mark - - -@implementation BDSKTextTag - -- (id)initWithText:(NSString *)aText { - if (self = [super init]) { - text = [aText retain]; - } - return self; -} - -- (void)dealloc { - [text release]; - [super dealloc]; -} - -- (int)type { return BDSKTextTagType; } - -- (NSString *)text { - return text; -} - -- (void)setText:(NSString *)newText { - if (text != newText) { - [text release]; - text = [newText retain]; - } -} - -@end - -#pragma mark - - -@implementation BDSKRichTextTag - -- (id)initWithAttributedText:(NSAttributedString *)anAttributedText { - if (self = [super init]) { - attributedText = [anAttributedText retain]; - } - return self; -} - -- (void)dealloc { - [attributedText release]; - [super dealloc]; -} - -- (int)type { return BDSKTextTagType; } - -- (NSAttributedString *)attributedText { - return attributedText; -} - -- (void)setAttributedText:(NSAttributedString *)newAttributedText { - if (attributedText != newAttributedText) { - [attributedText release]; - attributedText = [newAttributedText retain]; - } -} - -@end Modified: trunk/bibdesk/BDSKTemplateDocument.m =================================================================== --- trunk/bibdesk/BDSKTemplateDocument.m 2008-08-04 13:04:39 UTC (rev 13569) +++ trunk/bibdesk/BDSKTemplateDocument.m 2008-08-04 17:46:46 UTC (rev 13570) @@ -45,7 +45,7 @@ #import "BDSKFieldSheetController.h" #import "NSWindowController_BDSKExtensions.h" #import "BDSKTemplateParser.h" -#import "BDSKTag.h" +#import "BDSKTemplateTag.h" #import "NSString_BDSKExtensions.h" #import <OmniBase/OBUtilities.h> @@ -82,9 +82,9 @@ - (void)handleTemplateDidChangeNotification:(NSNotification *)notification; - (NSDictionary *)convertPubTemplate:(NSArray *)templateArray defaultFont:(NSFont *)defaultFont; - (NSArray *)convertItemTemplate:(NSArray *)templateArray defaultFont:(NSFont *)defaultFont; -- (NSArray *)tokensForTextTag:(BDSKTag *)tag allowText:(BOOL)allowText defaultFont:(NSFont *)defaultFont; -- (id)tokenForConditionTag:(BDSKConditionTag *)tag defaultFont:(NSFont *)defaultFont; -- (id)tokenForValueTag:(BDSKValueTag *)tag defaultFont:(NSFont *)defaultFont; +- (NSArray *)tokensForTextTag:(BDSKTemplateTag *)tag allowText:(BOOL)allowText defaultFont:(NSFont *)defaultFont; +- (id)tokenForConditionTag:(BDSKConditionTemplateTag *)tag defaultFont:(NSFont *)defaultFont; +- (id)tokenForValueTag:(BDSKValueTemplateTag *)tag defaultFont:(NSFont *)defaultFont; - (NSString *)propertyForKey:(NSString *)key tokenType:(int)type; - (void)setFont:(NSFont *)font ofToken:(BDSKToken *)token defaultFont:(NSFont *)defaultFont; @end @@ -1213,17 +1213,17 @@ - (NSDictionary *)convertPubTemplate:(NSArray *)templateArray defaultFont:(NSFont *)defaultFont { NSMutableDictionary *result = [NSMutableDictionary dictionary]; NSArray *itemTemplate; - BDSKTag *tag = [templateArray count] ? [templateArray objectAtIndex:0] : nil; + BDSKTemplateTag *tag = [templateArray count] ? [templateArray objectAtIndex:0] : nil; - if ([tag type] == BDSKConditionTagType && [[(BDSKConditionTag *)tag keyPath] isEqualToString:@"pubType"]) { - if ([(BDSKConditionTag *)tag matchType] != BDSKConditionTagMatchEqual) + if ([tag type] == BDSKConditionTemplateTagType && [[(BDSKConditionTemplateTag *)tag keyPath] isEqualToString:@"pubType"]) { + if ([(BDSKConditionTemplateTag *)tag matchType] != BDSKTemplateTagMatchEqual) return nil; - NSArray *matchStrings = [(BDSKConditionTag *)tag matchStrings]; - unsigned int i = 0, keyCount = [matchStrings count], count = [[(BDSKConditionTag *)tag subtemplates] count]; + NSArray *matchStrings = [(BDSKConditionTemplateTag *)tag matchStrings]; + unsigned int i = 0, keyCount = [matchStrings count], count = [[(BDSKConditionTemplateTag *)tag subtemplates] count]; for (i = 0; i < count; i++) { - if (itemTemplate = [self convertItemTemplate:[(BDSKConditionTag *)tag subtemplateAtIndex:i] defaultFont:defaultFont]) + if (itemTemplate = [self convertItemTemplate:[(BDSKConditionTemplateTag *)tag subtemplateAtIndex:i] defaultFont:defaultFont]) [result setObject:itemTemplate forKey:i < keyCount ? [matchStrings objectAtIndex:i] : @""]; else return nil; } @@ -1239,23 +1239,23 @@ - (NSArray *)convertItemTemplate:(NSArray *)templateArray defaultFont:(NSFont *)defaultFont { NSMutableArray *result = [NSMutableArray array]; NSEnumerator *tagEnum = [templateArray objectEnumerator]; - BDSKTag *tag; + BDSKTemplateTag *tag; id token; while (tag = [tagEnum nextObject]) { - switch ([(BDSKTag *)tag type]) { - case BDSKTextTagType: + switch ([(BDSKTemplateTag *)tag type]) { + case BDSKTextTemplateTagType: if (token = [self tokensForTextTag:tag allowText:YES defaultFont:defaultFont]) [result addObjectsFromArray:token]; else return nil; break; - case BDSKValueTagType: - if (token = [self tokenForValueTag:(BDSKValueTag *)tag defaultFont:defaultFont]) + case BDSKValueTemplateTagType: + if (token = [self tokenForValueTag:(BDSKValueTemplateTag *)tag defaultFont:defaultFont]) [result addObject:token]; else return nil; break; - case BDSKConditionTagType: - if (token = [self tokenForConditionTag:(BDSKConditionTag *)tag defaultFont:defaultFont]) + case BDSKConditionTemplateTagType: + if (token = [self tokenForConditionTag:(BDSKConditionTemplateTag *)tag defaultFont:defaultFont]) [result addObject:token]; else return nil; break; @@ -1267,10 +1267,10 @@ return result; } -- (NSArray *)tokensForTextTag:(BDSKTag *)tag allowText:(BOOL)allowText defaultFont:(NSFont *)defaultFont { +- (NSArray *)tokensForTextTag:(BDSKTemplateTag *)tag allowText:(BOOL)allowText defaultFont:(NSFont *)defaultFont { NSMutableArray *tokens = [NSMutableArray array]; if (defaultFont) { - NSAttributedString *text = [(BDSKRichTextTag *)tag attributedText]; + NSAttributedString *text = [(BDSKRichTextTemplateTag *)tag attributedText]; unsigned int length = [text length]; NSRange range = NSMakeRange(0, 0); @@ -1278,7 +1278,7 @@ id token; NSFont *font = [text attribute:NSFontAttributeName atIndex:range.location longestEffectiveRange:&range inRange:NSMakeRange(range.location, length - range.location)]; if (allowText && [font isEqual:defaultFont]) { - token = [[(BDSKRichTextTag *)tag attributedText] string]; + token = [[(BDSKRichTextTemplateTag *)tag attributedText] string]; } else { token = [[[BDSKTextToken alloc] initWithTitle:[text string]] autorelease]; [self setFont:font ofToken:token defaultFont:defaultFont]; @@ -1286,23 +1286,23 @@ [tokens addObject:token]; } } else if (allowText) { - [tokens addObject:[(BDSKTextTag *)tag text]]; + [tokens addObject:[(BDSKTextTemplateTag *)tag text]]; } else { - [tokens addObject:[[[BDSKTextToken alloc] initWithTitle:[(BDSKTextTag *)tag text]] autorelease]]; + [tokens addObject:[[[BDSKTextToken alloc] initWithTitle:[(BDSKTextTemplateTag *)tag text]] autorelease]]; } return tokens; } -- (id)tokenForConditionTag:(BDSKConditionTag *)tag defaultFont:(NSFont *)defaultFont { +- (id)tokenForConditionTag:(BDSKConditionTemplateTag *)tag defaultFont:(NSFont *)defaultFont { int count = [[tag subtemplates] count]; - if ([(BDSKConditionTag *)tag matchType] != BDSKConditionTagMatchNotEmpty || count > 2) + if ([(BDSKConditionTemplateTag *)tag matchType] != BDSKTemplateTagMatchOther || count > 2) return nil; NSArray *nonemptyTemplate = [tag subtemplateAtIndex:0]; NSArray *emptyTemplate = count > 1 ? [tag subtemplateAtIndex:1] : nil; id token = nil; - if ([nonemptyTemplate count] == 1 && [(BDSKTag *)[nonemptyTemplate lastObject] type] == BDSKTextTagType) { + if ([nonemptyTemplate count] == 1 && [(BDSKTemplateTag *)[nonemptyTemplate lastObject] type] == BDSKTextTemplateTagType) { NSArray *keys = [[tag keyPath] componentsSeparatedByString:@"."]; NSArray *tokens; if ([keys count] != 2 || [[keys objectAtIndex:0] isEqualToString:@"fields"] == NO) @@ -1313,29 +1313,29 @@ [token setField:[keys lastObject]]; if ([emptyTemplate count]) { id textTag = [emptyTemplate lastObject]; - if ([(BDSKTag *)textTag type] != BDSKTextTagType) + if ([(BDSKTemplateTag *)textTag type] != BDSKTextTemplateTagType) return nil; - [token setAltText:defaultFont ? [[(BDSKRichTextTag *)textTag attributedText] string] : [(BDSKTextTag *)textTag text]]; + [token setAltText:defaultFont ? [[(BDSKRichTextTemplateTag *)textTag attributedText] string] : [(BDSKTextTemplateTag *)textTag text]]; } } else return nil; } else return nil; } else if ([emptyTemplate count] == 0 && [nonemptyTemplate count] < 4) { int i = 0; - BDSKTag *subtag = [nonemptyTemplate objectAtIndex:i]; + BDSKTemplateTag *subtag = [nonemptyTemplate objectAtIndex:i]; NSString *prefix = nil, *suffix = nil; count = [nonemptyTemplate count]; - if ([subtag type] == BDSKTextTagType) { - prefix = defaultFont ? [[(BDSKRichTextTag *)subtag attributedText] string] : [(BDSKTextTag *)subtag text]; + if ([subtag type] == BDSKTextTemplateTagType) { + prefix = defaultFont ? [[(BDSKRichTextTemplateTag *)subtag attributedText] string] : [(BDSKTextTemplateTag *)subtag text]; subtag = ++i < count ? [nonemptyTemplate objectAtIndex:i] : nil; } - if ([subtag type] == BDSKValueTagType && [[(BDSKValueTag *)subtag keyPath] isEqualToString:[tag keyPath]]) { - token = [self tokenForValueTag:(BDSKValueTag *)subtag defaultFont:defaultFont]; + if ([subtag type] == BDSKValueTemplateTagType && [[(BDSKValueTemplateTag *)subtag keyPath] isEqualToString:[tag keyPath]]) { + token = [self tokenForValueTag:(BDSKValueTemplateTag *)subtag defaultFont:defaultFont]; subtag = ++i < count ? [nonemptyTemplate objectAtIndex:i] : nil; } else return nil; if (subtag) { - if ([subtag type] == BDSKTextTagType) { - suffix = defaultFont ? [[(BDSKRichTextTag *)subtag attributedText] string] : [(BDSKTextTag *)subtag text]; + if ([subtag type] == BDSKTextTemplateTagType) { + suffix = defaultFont ? [[(BDSKRichTextTemplateTag *)subtag attributedText] string] : [(BDSKTextTemplateTag *)subtag text]; } else return nil; } if (prefix) @@ -1347,7 +1347,7 @@ return token; } -- (id)tokenForValueTag:(BDSKValueTag *)tag defaultFont:(NSFont *)defaultFont { +- (id)tokenForValueTag:(BDSKValueTemplateTag *)tag defaultFont:(NSFont *)defaultFont { NSArray *keys = [[tag keyPath] componentsSeparatedByString:@"."]; NSString *key = [keys count] ? [keys objectAtIndex:0] : nil; BDSKToken *token = nil; @@ -1392,7 +1392,7 @@ } if (defaultFont) { - NSFont *font = [[(BDSKRichValueTag *)tag attributes] objectForKey:NSFontAttributeName]; + NSFont *font = [[(BDSKRichValueTemplateTag *)tag attributes] objectForKey:NSFontAttributeName]; [self setFont:font ofToken:token defaultFont:defaultFont]; } Modified: trunk/bibdesk/BDSKTemplateParser.h =================================================================== --- trunk/bibdesk/BDSKTemplateParser.h 2008-08-04 13:04:39 UTC (rev 13569) +++ trunk/bibdesk/BDSKTemplateParser.h 2008-08-04 17:46:46 UTC (rev 13570) @@ -39,14 +39,6 @@ #import <Cocoa/Cocoa.h> -enum { - BDSKConditionTagMatchNotEmpty, - BDSKConditionTagMatchEqual, - BDSKConditionTagMatchContain, - BDSKConditionTagMatchSmaller, - BDSKConditionTagMatchSmallerOrEqual, -}; - @protocol BDSKTemplateParserDelegate - (void)templateParserWillParseTemplate:(id)template usingObject:(id)object isAttributed:(BOOL)flag; Modified: trunk/bibdesk/BDSKTemplateParser.m =================================================================== --- trunk/bibdesk/BDSKTemplateParser.m 2008-08-04 13:04:39 UTC (rev 13569) +++ trunk/bibdesk/BDSKTemplateParser.m 2008-08-04 17:46:46 UTC (rev 13570) @@ -37,7 +37,7 @@ */ #import "BDSKTemplateParser.h" -#import "BDSKTag.h" +#import "BDSKTemplateTag.h" #import "NSString_BDSKExtensions.h" #import "NSAttributedString_BDSKExtensions.h" #import "NSArray_BDSKExtensions.h" @@ -140,14 +140,14 @@ return altTag; } -static inline NSString *compareConditionTagWithTag(NSString *tag, int matchType){ +static inline NSString *compareConditionTagWithTag(NSString *tag, BDSKTemplateTagMatchType matchType){ static NSMutableDictionary *equalConditionDict = nil; static NSMutableDictionary *containConditionDict = nil; static NSMutableDictionary *smallerConditionDict = nil; static NSMutableDictionary *smallerOrEqualConditionDict = nil; NSString *altTag = nil; switch (matchType) { - case BDSKConditionTagMatchEqual: + case BDSKTemplateTagMatchEqual: if(nil == equalConditionDict) equalConditionDict = [[NSMutableDictionary alloc] init]; altTag = [equalConditionDict objectForKey:tag]; @@ -156,7 +156,7 @@ [equalConditionDict setObject:altTag forKey:tag]; } break; - case BDSKConditionTagMatchContain: + case BDSKTemplateTagMatchContain: if(nil == containConditionDict) containConditionDict = [[NSMutableDictionary alloc] init]; altTag = [containConditionDict objectForKey:tag]; @@ -165,7 +165,7 @@ [containConditionDict setObject:altTag forKey:tag]; } break; - case BDSKConditionTagMatchSmaller: + case BDSKTemplateTagMatchSmaller: if(nil == smallerConditionDict) smallerConditionDict = [[NSMutableDictionary alloc] init]; altTag = [smallerConditionDict objectForKey:tag]; @@ -174,7 +174,7 @@ [smallerConditionDict setObject:altTag forKey:tag]; } break; - case BDSKConditionTagMatchSmallerOrEqual: + case BDSKTemplateTagMatchSmallerOrEqual: if(nil == smallerOrEqualConditionDict) smallerOrEqualConditionDict = [[NSMutableDictionary alloc] init]; altTag = [smallerOrEqualConditionDict objectForKey:tag]; @@ -235,10 +235,10 @@ int start; if ([scanner scanUpToString:START_TAG_OPEN_DELIM intoString:&beforeText]) { - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - [(BDSKTextTag *)currentTag setText:[[(BDSKTextTag *)currentTag text] stringByAppendingString:beforeText]]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + [(BDSKTextTemplateTag *)currentTag setText:[[(BDSKTextTemplateTag *)currentTag text] stringByAppendingString:beforeText]]; } else { - currentTag = [[BDSKTextTag alloc] initWithText:beforeText]; + currentTag = [[BDSKTextTemplateTag alloc] initWithText:beforeText]; [result addObject:currentTag]; [currentTag release]; } @@ -255,7 +255,7 @@ if ([scanner scanString:VALUE_TAG_CLOSE_DELIM intoString:nil]) { // simple template currentTag - currentTag = [[BDSKValueTag alloc] initWithKeyPath:tag]; + currentTag = [[BDSKValueTemplateTag alloc] initWithKeyPath:tag]; [result addObject:currentTag]; [currentTag release]; @@ -267,14 +267,14 @@ // collection template tag // ignore whitespace before the tag. Should we also remove a newline? - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - wsRange = [[(BDSKTextTag *)currentTag text] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + wsRange = [[(BDSKTextTemplateTag *)currentTag text] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; if (wsRange.location != NSNotFound) { - if (wsRange.length == [[(BDSKTextTag *)currentTag text] length]) { + if (wsRange.length == [[(BDSKTextTemplateTag *)currentTag text] length]) { [result removeLastObject]; currentTag = [result lastObject]; } else { - [(BDSKTextTag *)currentTag setText:[[(BDSKTextTag *)currentTag text] substringToIndex:wsRange.location]]; + [(BDSKTextTemplateTag *)currentTag setText:[[(BDSKTextTemplateTag *)currentTag text] substringToIndex:wsRange.location]]; } } } @@ -296,7 +296,7 @@ itemTemplate = [itemTemplate substringToIndex:sepTagRange.location]; } - currentTag = [[BDSKCollectionTag alloc] initWithKeyPath:tag itemTemplateString:itemTemplate separatorTemplateString:separatorTemplate]; + currentTag = [[BDSKCollectionTemplateTag alloc] initWithKeyPath:tag itemTemplateString:itemTemplate separatorTemplateString:separatorTemplate]; [result addObject:currentTag]; [currentTag release]; @@ -308,24 +308,24 @@ } else { NSString *matchString = nil; - int matchType = BDSKConditionTagMatchNotEmpty; + BDSKTemplateTagMatchType matchType = BDSKTemplateTagMatchOther; if ([scanner scanString:CONDITION_TAG_EQUAL intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchEqual; + matchType = BDSKTemplateTagMatchEqual; } else if ([scanner scanString:CONDITION_TAG_CONTAIN intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchContain; + matchType = BDSKTemplateTagMatchContain; } else if ([scanner scanString:CONDITION_TAG_SMALLER_OR_EQUAL intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchSmallerOrEqual; + matchType = BDSKTemplateTagMatchSmallerOrEqual; } else if ([scanner scanString:CONDITION_TAG_SMALLER intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchSmaller; + matchType = BDSKTemplateTagMatchSmaller; } if ([scanner scanString:CONDITION_TAG_CLOSE_DELIM intoString:nil]) { @@ -337,14 +337,14 @@ // condition template tag // ignore whitespace before the tag. Should we also remove a newline? - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - wsRange = [[(BDSKTextTag *)currentTag text] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + wsRange = [[(BDSKTextTemplateTag *)currentTag text] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; if (wsRange.location != NSNotFound) { - if (wsRange.length == [[(BDSKTextTag *)currentTag text] length]) { + if (wsRange.length == [[(BDSKTextTemplateTag *)currentTag text] length]) { [result removeLastObject]; currentTag = [result lastObject]; } else { - [(BDSKTextTag *)currentTag setText:[[(BDSKTextTag *)currentTag text] substringToIndex:wsRange.location]]; + [(BDSKTextTemplateTag *)currentTag setText:[[(BDSKTextTemplateTag *)currentTag text] substringToIndex:wsRange.location]]; } } } @@ -363,7 +363,7 @@ subTemplates = [[NSMutableArray alloc] init]; matchStrings = [[NSMutableArray alloc] initWithObjects:matchString ? matchString : @"", nil]; - if (matchType != BDSKConditionTagMatchNotEmpty) { + if (matchType != BDSKTemplateTagMatchOther) { altTag = compareConditionTagWithTag(tag, matchType); altTagRange = altTemplateTagRange(subTemplate, altTag, CONDITION_TAG_CLOSE_DELIM, &matchString); while (altTagRange.location != NSNotFound) { @@ -381,7 +381,7 @@ } [subTemplates addObject:subTemplate]; - currentTag = [[BDSKConditionTag alloc] initWithKeyPath:tag matchType:matchType matchStrings:matchStrings subtemplates:subTemplates]; + currentTag = [[BDSKConditionTemplateTag alloc] initWithKeyPath:tag matchType:matchType matchStrings:matchStrings subtemplates:subTemplates]; [result addObject:currentTag]; [currentTag release]; @@ -395,10 +395,10 @@ } else { // an open delimiter without a close delimiter, so no template tag. Rewind - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - [(BDSKTextTag *)currentTag setText:[[(BDSKTextTag *)currentTag text] stringByAppendingString:START_TAG_OPEN_DELIM]]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + [(BDSKTextTemplateTag *)currentTag setText:[[(BDSKTextTemplateTag *)currentTag text] stringByAppendingString:START_TAG_OPEN_DELIM]]; } else { - currentTag = [[BDSKTextTag alloc] initWithText:START_TAG_OPEN_DELIM]; + currentTag = [[BDSKTextTemplateTag alloc] initWithText:START_TAG_OPEN_DELIM]; [result addObject:currentTag]; [currentTag release]; } @@ -422,11 +422,11 @@ NSMutableString *result = [[NSMutableString alloc] init]; while (tag = [tagEnum nextObject]) { - int type = [(BDSKTag *)tag type]; + BDSKTemplateTagType type = [(BDSKTemplateTag *)tag type]; - if (type == BDSKTextTagType) { + if (type == BDSKTextTemplateTagType) { - [result appendString:[(BDSKTextTag *)tag text]]; + [result appendString:[(BDSKTextTemplateTag *)tag text]]; } else { @@ -441,12 +441,12 @@ keyValue = [object templateValueForKeyPath:keyPath]; } - if (type == BDSKValueTagType) { + if (type == BDSKValueTemplateTagType) { if (keyValue) [result appendString:[keyValue templateStringValue]]; - } else if (type == BDSKCollectionTagType) { + } else if (type == BDSKCollectionTemplateTagType) { if ([keyValue respondsToSelector:@selector(objectEnumerator)]) { NSEnumerator *itemE = [keyValue objectEnumerator]; @@ -482,16 +482,16 @@ matchString = @""; } switch ([tag matchType]) { - case BDSKConditionTagMatchEqual: + case BDSKTemplateTagMatchEqual: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] caseInsensitiveCompare:matchString] == NSOrderedSame; break; - case BDSKConditionTagMatchContain: + case BDSKTemplateTagMatchContain: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] rangeOfString:matchString options:NSCaseInsensitiveSearch].location != NSNotFound; break; - case BDSKConditionTagMatchSmaller: + case BDSKTemplateTagMatchSmaller: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] localizedCaseInsensitiveNumericCompare:matchString] == NSOrderedAscending; break; - case BDSKConditionTagMatchSmallerOrEqual: + case BDSKTemplateTagMatchSmallerOrEqual: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] localizedCaseInsensitiveNumericCompare:matchString] != NSOrderedDescending; break; default: @@ -547,14 +547,14 @@ start = [scanner scanLocation]; if ([scanner scanUpToString:START_TAG_OPEN_DELIM intoString:&beforeText]) { - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - tmpAttrStr = [[(BDSKRichTextTag *)currentTag attributedText] mutableCopy]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + tmpAttrStr = [[(BDSKRichTextTemplateTag *)currentTag attributedText] mutableCopy]; [tmpAttrStr appendAttributedString:[template attributedSubstringFromRange:NSMakeRange(start, [beforeText length])]]; [tmpAttrStr fixAttributesInRange:NSMakeRange(0, [tmpAttrStr length])]; - [(BDSKRichTextTag *)currentTag setAttributedText:tmpAttrStr]; + [(BDSKRichTextTemplateTag *)currentTag setAttributedText:tmpAttrStr]; [tmpAttrStr release]; } else { - currentTag = [[BDSKRichTextTag alloc] initWithAttributedText:[template attributedSubstringFromRange:NSMakeRange(start, [beforeText length])]]; + currentTag = [[BDSKRichTextTemplateTag alloc] initWithAttributedText:[template attributedSubstringFromRange:NSMakeRange(start, [beforeText length])]]; [result addObject:currentTag]; [currentTag release]; } @@ -572,7 +572,7 @@ if ([scanner scanString:VALUE_TAG_CLOSE_DELIM intoString:nil]) { // simple template tag - currentTag = [[BDSKRichValueTag alloc] initWithKeyPath:tag attributes:attr]; + currentTag = [[BDSKRichValueTemplateTag alloc] initWithKeyPath:tag attributes:attr]; [result addObject:currentTag]; [currentTag release]; @@ -585,14 +585,14 @@ // collection template tag // ignore whitespace before the tag. Should we also remove a newline? - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - wsRange = [[[(BDSKRichTextTag *)currentTag attributedText] string] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + wsRange = [[[(BDSKRichTextTemplateTag *)currentTag attributedText] string] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; if (wsRange.location != NSNotFound) { - if (wsRange.length == [[(BDSKRichTextTag *)currentTag attributedText] length]) { + if (wsRange.length == [[(BDSKRichTextTemplateTag *)currentTag attributedText] length]) { [result removeLastObject]; currentTag = [result lastObject]; } else { - [(BDSKRichTextTag *)currentTag setAttributedText:[[currentTag attributedText] attributedSubstringFromRange:NSMakeRange(0, wsRange.location)]]; + [(BDSKRichTextTemplateTag *)currentTag setAttributedText:[[currentTag attributedText] attributedSubstringFromRange:NSMakeRange(0, wsRange.location)]]; } } } @@ -614,7 +614,7 @@ itemTemplate = [itemTemplate attributedSubstringFromRange:NSMakeRange(0, sepTagRange.location)]; } - currentTag = [[BDSKRichCollectionTag alloc] initWithKeyPath:tag itemTemplateAttributedString:itemTemplate separatorTemplateAttributedString:separatorTemplate]; + currentTag = [[BDSKRichCollectionTemplateTag alloc] initWithKeyPath:tag itemTemplateAttributedString:itemTemplate separatorTemplateAttributedString:separatorTemplate]; [result addObject:currentTag]; [currentTag release]; @@ -626,24 +626,24 @@ } else { NSString *matchString = nil; - int matchType = BDSKConditionTagMatchNotEmpty; + BDSKTemplateTagMatchType matchType = BDSKTemplateTagMatchOther; if ([scanner scanString:CONDITION_TAG_EQUAL intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchEqual; + matchType = BDSKTemplateTagMatchEqual; } else if ([scanner scanString:CONDITION_TAG_CONTAIN intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchContain; + matchType = BDSKTemplateTagMatchContain; } else if ([scanner scanString:CONDITION_TAG_SMALLER_OR_EQUAL intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchSmallerOrEqual; + matchType = BDSKTemplateTagMatchSmallerOrEqual; } else if ([scanner scanString:CONDITION_TAG_SMALLER intoString:nil]) { if([scanner scanUpToString:CONDITION_TAG_CLOSE_DELIM intoString:&matchString] == NO) matchString = @""; - matchType = BDSKConditionTagMatchSmaller; + matchType = BDSKTemplateTagMatchSmaller; } if ([scanner scanString:CONDITION_TAG_CLOSE_DELIM intoString:nil]) { @@ -656,14 +656,14 @@ // condition template tag // ignore whitespace before the tag. Should we also remove a newline? - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - wsRange = [[[(BDSKRichTextTag *)currentTag attributedText] string] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + wsRange = [[[(BDSKRichTextTemplateTag *)currentTag attributedText] string] rangeOfTrailingEmptyLineRequiringNewline:[result count] != 1]; if (wsRange.location != NSNotFound) { - if (wsRange.length == [[(BDSKRichTextTag *)currentTag attributedText] length]) { + if (wsRange.length == [[(BDSKRichTextTemplateTag *)currentTag attributedText] length]) { [result removeLastObject]; currentTag = [result lastObject]; } else { - [(BDSKRichTextTag *)currentTag setAttributedText:[[(BDSKRichTextTag *)currentTag attributedText] attributedSubstringFromRange:NSMakeRange(0, wsRange.location)]]; + [(BDSKRichTextTemplateTag *)currentTag setAttributedText:[[(BDSKRichTextTemplateTag *)currentTag attributedText] attributedSubstringFromRange:NSMakeRange(0, wsRange.location)]]; } } } @@ -683,7 +683,7 @@ subTemplates = [[NSMutableArray alloc] init]; matchStrings = [[NSMutableArray alloc] initWithObjects:matchString ? matchString : @"", nil]; - if (matchType != BDSKConditionTagMatchNotEmpty) { + if (matchType != BDSKTemplateTagMatchOther) { altTag = compareConditionTagWithTag(tag, matchType); altTagRange = altTemplateTagRange([subTemplate string], altTag, CONDITION_TAG_CLOSE_DELIM, &matchString); while (altTagRange.location != NSNotFound) { @@ -701,7 +701,7 @@ } [subTemplates addObject:subTemplate]; - currentTag = [[BDSKRichConditionTag alloc] initWithKeyPath:tag matchType:matchType matchStrings:matchStrings subtemplates:subTemplates]; + currentTag = [[BDSKRichConditionTemplateTag alloc] initWithKeyPath:tag matchType:matchType matchStrings:matchStrings subtemplates:subTemplates]; [result addObject:currentTag]; [currentTag release]; @@ -715,14 +715,14 @@ } else { // a START_TAG_OPEN_DELIM without COLLECTION_TAG_CLOSE_DELIM, so no template tag. Rewind - if (currentTag && [(BDSKTag *)currentTag type] == BDSKTextTagType) { - tmpAttrStr = [[(BDSKRichTextTag *)currentTag attributedText] mutableCopy]; + if (currentTag && [(BDSKTemplateTag *)currentTag type] == BDSKTextTemplateTagType) { + tmpAttrStr = [[(BDSKRichTextTemplateTag *)currentTag attributedText] mutableCopy]; [tmpAttrStr appendAttributedString:[template attributedSubstringFromRange:NSMakeRange(start - [START_TAG_OPEN_DELIM length], [START_TAG_OPEN_DELIM length])]]; [tmpAttrStr fixAttributesInRange:NSMakeRange(0, [tmpAttrStr length])]; - [(BDSKRichTextTag *)currentTag setAttributedText:tmpAttrStr]; + [(BDSKRichTextTemplateTag *)currentTag setAttributedText:tmpAttrStr]; [tmpAttrStr release]; } else { - currentTag = [[BDSKRichTextTag alloc] initWithAttributedText:[template attributedSubstringFromRange:NSMakeRange(start - [START_TAG_OPEN_DELIM length], [START_TAG_OPEN_DELIM length])]]; + currentTag = [[BDSKRichTextTemplateTag alloc] initWithAttributedText:[template attributedSubstringFromRange:NSMakeRange(start - [START_TAG_OPEN_DELIM length], [START_TAG_OPEN_DELIM length])]]; [result addObject:currentTag]; [currentTag release]; } @@ -748,12 +748,12 @@ NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init]; while (tag = [tagEnum nextObject]) { - int type = [(BDSKTag *)tag type]; + BDSKTemplateTagType type = [(BDSKTemplateTag *)tag type]; NSAttributedString *tmpAttrStr = nil; - if (type == BDSKTextTagType) { + if (type == BDSKTextTemplateTagType) { - [result appendAttributedString:[(BDSKRichTextTag *)tag attributedText]]; + [result appendAttributedString:[(BDSKRichTextTemplateTag *)tag attributedText]]; } else { @@ -768,12 +768,12 @@ keyValue = [object templateValueForKeyPath:keyPath]; } - if (type == BDSKValueTagType) { + if (type == BDSKValueTemplateTagType) { if (keyValue) - [result appendAttributedString:[keyValue templateAttributedStringValueWithAttributes:[(BDSKRichValueTag *)tag attributes]]]; + [result appendAttributedString:[keyValue templateAttributedStringValueWithAttributes:[(BDSKRichValueTemplateTag *)tag attributes]]]; - } else if (type == BDSKCollectionTagType) { + } else if (type == BDSKCollectionTemplateTagType) { if ([keyValue respondsToSelector:@selector(objectEnumerator)]) { NSEnumerator *itemE = [keyValue objectEnumerator]; @@ -811,16 +811,16 @@ matchString = @""; } switch ([tag matchType]) { - case BDSKConditionTagMatchEqual: + case BDSKTemplateTagMatchEqual: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] caseInsensitiveCompare:matchString] == NSOrderedSame; break; - case BDSKConditionTagMatchContain: + case BDSKTemplateTagMatchContain: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] rangeOfString:matchString options:NSCaseInsensitiveSearch].location != NSNotFound; break; - case BDSKConditionTagMatchSmaller: + case BDSKTemplateTagMatchSmaller: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] localizedCaseInsensitiveNumericCompare:matchString] == NSOrderedAscending; break; - case BDSKConditionTagMatchSmallerOrEqual: + case BDSKTemplateTagMatchSmallerOrEqual: isMatch = [matchString isEqualToString:@""] ? NO == [keyValue isNotEmpty] : [[keyValue templateStringValue] localizedCaseInsensitiveNumericCompare:matchString] != NSOrderedDescending; break; default: Copied: trunk/bibdesk/BDSKTemplateTag.h (from rev 13553, trunk/bibdesk/BDSKTag.h) =================================================================== --- trunk/bibdesk/BDSKTemplateTag.h (rev 0) +++ trunk/bibdesk/BDSKTemplateTag.h 2008-08-04 17:46:46 UTC (rev 13570) @@ -0,0 +1,166 @@ +// +// BDSKTemplateTag.h +// BibDesk +// +// Created by Christiaan Hofman on 10/12/07. +/* + This software is Copyright (c) 2007-2008 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import <Cocoa/Cocoa.h> + +enum { + BDSKValueTemplateTagType, + BDSKCollectionTemplateTagType, + BDSKConditionTemplateTagType, + BDSKTextTemplateTagType +}; +typedef NSInteger BDSKTemplateTagType; + +enum { + BDSKTemplateTagMatchOther, + BDSKTemplateTagMatchEqual, + BDSKTemplateTagMatchContain, + BDSKTemplateTagMatchSmaller, + BDSKTemplateTagMatchSmallerOrEqual, +}; +typedef NSInteger BDSKTemplateTagMatchType; + + +@interface BDSKTemplateTag : NSObject { +} +- (BDSKTemplateTagType)type; +@end + +#pragma mark - + +@interface BDSKValueTemplateTag : BDSKTemplateTag { + NSString *keyPath; +} + +- (id)initWithKeyPath:(NSString *)aKeyPath; + +- (NSString *)keyPath; + +@end + +#pragma mark - + +@interface BDSKRichValueTemplateTag : BDSKValueTemplateTag { + NSDictionary *attributes; +} + +- (id)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary *)anAttributes; + +- (NSDictionary *)attributes; + +@end + +#pragma mark - + +@interface BDSKCollectionTemplateTag : BDSKValueTemplateTag { + NSString *itemTemplateString; + NSString *separatorTemplateString; + NSMutableArray *itemTemplate; + NSMutableArray *separatorTemplate; +} + +- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateString:(NSString *)anItemTemplateString separatorTemplateString:(NSString *)aSeparatorTemplateString; + +- (NSArray *)itemTemplate; +- (NSArray *)separatorTemplate; + +@end + +#pragma mark - + +@interface BDSKRichCollectionTemplateTag : BDSKValueTemplateTag { + NSAttributedString *itemTemplateAttributedString; + NSAttributedString *separatorTemplateAttributedString; + NSMutableArray *itemTemplate; + NSMutableArray *separatorTemplate; +} + +- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateAttributedString:(NSAttributedString *)anItemTemplateString separatorTemplateAttributedString:(NSAttributedString *)aSeparatorTemplateString; + +- (NSArray *)itemTemplate; +- (NSArray *)separatorTemplate; + +@end + +#pragma mark - + +@interface BDSKConditionTemplateTag : BDSKValueTemplateTag { + BDSKTemplateTagMatchType matchType; + NSMutableArray *subtemplates; + NSArray *matchStrings; +} + +- (id)initWithKeyPath:(NSString *)aKeyPath matchType:(BDSKTemplateTagMatchType)aMatchType matchStrings:(NSArray *)aMatchStrings subtemplates:(NSArray *)aSubtemplates; + +- (BDSKTemplateTagMatchType)matchType; +- (NSArray *)matchStrings; +- (NSArray *)subtemplates; +- (NSArray *)subtemplateAtIndex:(unsigned)idx; + +@end + +#pragma mark - + +@interface BDSKRichConditionTemplateTag : BDSKConditionTemplateTag +@end + +#pragma mark - + +@interface BDSKTextTemplateTag : BDSKTemplateTag { + NSString *text; +} + +- (id)initWithText:(NSString *)aText; + +- (NSString *)text; +- (void)setText:(NSString *)newText; + +@end + +#pragma mark - + +@interface BDSKRichTextTemplateTag : BDSKTemplateTag { + NSAttributedString *attributedText; +} + +- (id)initWithAttributedText:(NSAttributedString *)anAttributedText; + +- (NSAttributedString *)attributedText; +- (void)setAttributedText:(NSAttributedString *)newAttributedText; + +@end Copied: trunk/bibdesk/BDSKTemplateTag.m (from rev 13553, trunk/bibdesk/BDSKTag.m) =================================================================== --- trunk/bibdesk/BDSKTemplateTag.m (rev 0) +++ trunk/bibdesk/BDSKTemplateTag.m 2008-08-04 17:46:46 UTC (rev 13570) @@ -0,0 +1,287 @@ +// +// BDSKTemplateTag.m +// BibDesk +// +// Created by Christiaan Hofman on 10/12/07. +/* + This software is Copyright (c) 2007-2008 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "BDSKTemplateTag.h" +#import "BDSKTemplateParser.h" + + +@implementation BDSKTemplateTag +- (BDSKTemplateTagType)type { return -1; } +@end + +#pragma mark - + +@implementation BDSKValueTemplateTag + +- (id)initWithKeyPath:(NSString *)aKeyPath { + if (self = [super init]) + keyPath = [aKeyPath copy]; + return self; +} + +- (void)dealloc { + [keyPath release]; + [super dealloc]; +} + +- (BDSKTemplateTagType)type { return BDSKValueTemplateTagType; } + +- (NSString *)keyPath { + return keyPath; +} + +@end + +#pragma mark - + +@implementation BDSKRichValueTemplateTag + +- (id)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary *)anAttributes { + if (self = [super initWithKeyPath:aKeyPath]) { + attributes = [anAttributes copy]; + } + return self; +} + +- (void)dealloc { + [attributes release]; + [super dealloc]; +} + +- (NSDictionary *)attributes { + return attributes; +} + +@end + +#pragma mark - + +@implementation BDSKCollectionTemplateTag + +- (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateString:(NSString *)anItem... [truncated message content] |