Revision: 28482
http://sourceforge.net/p/bibdesk/svn/28482
Author: hofman
Date: 2023-12-29 10:29:27 +0000 (Fri, 29 Dec 2023)
Log Message:
-----------
Just let template parser send hooks to items in a collection instead of using a
delegate
Modified Paths:
--------------
trunk/bibdesk/BDSKBibDeskProtocol.m
trunk/bibdesk/BDSKTemplateObjectProxy.h
trunk/bibdesk/BDSKTemplateObjectProxy.m
trunk/bibdesk/BDSKTemplateParser.h
trunk/bibdesk/BDSKTemplateParser.m
trunk/bibdesk/BibDocument_DataSource.m
trunk/bibdesk/BibItem.m
Modified: trunk/bibdesk/BDSKBibDeskProtocol.m
===================================================================
--- trunk/bibdesk/BDSKBibDeskProtocol.m 2023-12-28 23:56:15 UTC (rev 28481)
+++ trunk/bibdesk/BDSKBibDeskProtocol.m 2023-12-29 10:29:27 UTC (rev 28482)
@@ -148,7 +148,7 @@
- (NSData *)HTMLDataUsingTemplateFile:(NSString *)template
usingObject:(id)object {
NSString *templateStringPath = [[NSBundle mainBundle]
pathForResource:template ofType:@"html"];
NSString *templateString = [NSString
stringWithContentsOfFile:templateStringPath encoding:NSUTF8StringEncoding
error:NULL];
- NSString *string = [BDSKTemplateParser
stringByParsingTemplateString:templateString usingObject:object delegate:nil];
+ NSString *string = [BDSKTemplateParser
stringByParsingTemplateString:templateString usingObject:object];
return [string dataUsingEncoding:NSUTF8StringEncoding];
}
Modified: trunk/bibdesk/BDSKTemplateObjectProxy.h
===================================================================
--- trunk/bibdesk/BDSKTemplateObjectProxy.h 2023-12-28 23:56:15 UTC (rev
28481)
+++ trunk/bibdesk/BDSKTemplateObjectProxy.h 2023-12-29 10:29:27 UTC (rev
28482)
@@ -37,11 +37,10 @@
*/
#import <Cocoa/Cocoa.h>
-#import "BDSKTemplateParser.h"
@class BDSKTemplate;
-@interface BDSKTemplateObjectProxy : NSObject <BDSKTemplateParserDelegate> {
+@interface BDSKTemplateObjectProxy : NSObject {
id object;
NSArray *publications;
NSArray *publicationsContext;
Modified: trunk/bibdesk/BDSKTemplateObjectProxy.m
===================================================================
--- trunk/bibdesk/BDSKTemplateObjectProxy.m 2023-12-28 23:56:15 UTC (rev
28481)
+++ trunk/bibdesk/BDSKTemplateObjectProxy.m 2023-12-29 10:29:27 UTC (rev
28482)
@@ -37,6 +37,7 @@
*/
#import "BDSKTemplateObjectProxy.h"
+#import "BDSKTemplateParser.h"
#import "BDSKTemplate.h"
#import "BibItem.h"
#import "NSTask_BDSKExtensions.h"
@@ -55,7 +56,7 @@
NSString *string = [template mainPageString];
NSString *scriptPath = [template scriptPath];
BDSKTemplateObjectProxy *objectProxy = [[self alloc]
initWithObject:anObject publications:items publicationsContext:itemsContext
template:template];
- string = [BDSKTemplateParser stringByParsingTemplateString:string
usingObject:objectProxy delegate:objectProxy];
+ string = [BDSKTemplateParser stringByParsingTemplateString:string
usingObject:objectProxy];
[objectProxy release];
if(scriptPath)
string = [BDSKTask outputStringFromTaskWithLaunchPath:scriptPath
arguments:nil inputString:string];
@@ -72,7 +73,7 @@
if(scriptPath == nil){
BDSKTemplateObjectProxy *objectProxy = [[self alloc]
initWithObject:anObject publications:items publicationsContext:itemsContext
template:template];
attrString = [template
mainPageAttributedStringWithDocumentAttributes:docAttributes];
- attrString = [BDSKTemplateParser
attributedStringByParsingTemplateAttributedString:attrString
usingObject:objectProxy delegate:objectProxy];
+ attrString = [BDSKTemplateParser
attributedStringByParsingTemplateAttributedString:attrString
usingObject:objectProxy];
[objectProxy release];
}else{
NSData *data = [self dataByParsingTemplate:template
withObject:anObject publications:items publicationsContext:itemsContext];
@@ -90,7 +91,7 @@
NSString *string = [template mainPageString];
NSString *scriptPath = [template scriptPath];
BDSKTemplateObjectProxy *objectProxy = [[self alloc]
initWithObject:anObject publications:items publicationsContext:itemsContext
template:template];
- string = [BDSKTemplateParser stringByParsingTemplateString:string
usingObject:objectProxy delegate:objectProxy];
+ string = [BDSKTemplateParser stringByParsingTemplateString:string
usingObject:objectProxy];
[objectProxy release];
return [BDSKTask outputDataFromTaskWithLaunchPath:scriptPath arguments:nil
inputString:string];
}
@@ -168,7 +169,7 @@
[parsedTemplates setObject:parsedTemplate forKey:[pub
pubType]];
}
[pub prepareForTemplateParsing];
- [returnString appendString:[BDSKTemplateParser
stringFromTemplateArray:parsedTemplate usingObject:pub atIndex:++currentIndex
delegate:nil]];
+ [returnString appendString:[BDSKTemplateParser
stringFromTemplateArray:parsedTemplate usingObject:pub atIndex:++currentIndex]];
[pub cleanupAfterTemplateParsing];
[pool release];
}
@@ -192,7 +193,7 @@
[parsedTemplates setObject:parsedTemplate forKey:[pub
pubType]];
}
[pub prepareForTemplateParsing];
- [returnString appendAttributedString:[BDSKTemplateParser
attributedStringFromTemplateArray:parsedTemplate usingObject:pub
atIndex:++currentIndex delegate:nil]];
+ [returnString appendAttributedString:[BDSKTemplateParser
attributedStringFromTemplateArray:parsedTemplate usingObject:pub
atIndex:++currentIndex]];
[pub cleanupAfterTemplateParsing];
[pool release];
}
@@ -206,15 +207,4 @@
- (NSDate *)currentDate{ return [NSDate date]; }
-// BDSKTemplateParserDelegate protocol
-- (void)templateParserWillParseTemplateUsingObject:(id)anObject {
- if ([anObject respondsToSelector:@selector(prepareForTemplateParsing)])
- [(BibItem *)anObject prepareForTemplateParsing];
-}
-
-- (void)templateParserDidParseTemplateUsingObject:(id)anObject {
- if ([anObject respondsToSelector:@selector(cleanupAfterTemplateParsing)])
- [(BibItem *)anObject cleanupAfterTemplateParsing];
-}
-
@end
Modified: trunk/bibdesk/BDSKTemplateParser.h
===================================================================
--- trunk/bibdesk/BDSKTemplateParser.h 2023-12-28 23:56:15 UTC (rev 28481)
+++ trunk/bibdesk/BDSKTemplateParser.h 2023-12-29 10:29:27 UTC (rev 28482)
@@ -39,14 +39,6 @@
#import <Cocoa/Cocoa.h>
-@protocol BDSKTemplateParserDelegate
-
-- (void)templateParserWillParseTemplateUsingObject:(id)object;
-- (void)templateParserDidParseTemplateUsingObject:(id)object;
-
-@end
-
-
/*!
@class BDSKTemplateParser
@abstract A parser class for parsing string and attributed string templates
@@ -58,18 +50,17 @@
where the value obtained using KVC should be a collection, i.e. respond to
objectEnumerator.
The content of the tag ("item template") is parsed for each item in the
collection.
Spaces up to a line break before and after a start or end tag are ignored, as
well as the line break after it.
-The delegate is send a message before and after an item in a collection is
used for parsing.
-The keys should be valid key paths (i.e. only letters and dots) and spaces are
not allowed in the tags.
+The keys should be valid key paths (i.e. only letters and dots) and spaces are
not allowed in the tags.
*/
@interface BDSKTemplateParser : NSObject
-+ (NSString *)stringByParsingTemplateString:(NSString *)templateString
usingObject:(id)object delegate:(id <BDSKTemplateParserDelegate>)delegate;
++ (NSString *)stringByParsingTemplateString:(NSString *)templateString
usingObject:(id)object;
+ (NSArray *)arrayByParsingTemplateString:(NSString *)templateString
isSubtemplate:(BOOL)isSubtemplate;
-+ (NSString *)stringFromTemplateArray:(NSArray *)templateArray
usingObject:(id)object atIndex:(NSInteger)anIndex delegate:(id
<BDSKTemplateParserDelegate>)delegate;
++ (NSString *)stringFromTemplateArray:(NSArray *)templateArray
usingObject:(id)object atIndex:(NSInteger)anIndex;
-+ (NSAttributedString
*)attributedStringByParsingTemplateAttributedString:(NSAttributedString
*)templateAttrString usingObject:(id)object delegate:(id
<BDSKTemplateParserDelegate>)delegate;
++ (NSAttributedString
*)attributedStringByParsingTemplateAttributedString:(NSAttributedString
*)templateAttrString usingObject:(id)object;
+ (NSArray *)arrayByParsingTemplateAttributedString:(NSAttributedString
*)templateAttrString isSubtemplate:(BOOL)isSubtemplate;
-+ (NSAttributedString *)attributedStringFromTemplateArray:(NSArray
*)templateArray usingObject:(id)object atIndex:(NSInteger)anIndex delegate:(id
<BDSKTemplateParserDelegate>)delegate;
++ (NSAttributedString *)attributedStringFromTemplateArray:(NSArray
*)templateArray usingObject:(id)object atIndex:(NSInteger)anIndex;
@end
@@ -82,3 +73,11 @@
- (NSAttributedString
*)templateAttributedStringValueWithAttributes:(NSDictionary *)attributes;
@end
+
+// these messages are send to items in a collection before and after an item
template is parsed when implemented
+@interface NSObject (BDSKTemplateParserOptional)
+
+- (void)prepareForTemplateParsing;
+- (void)cleanupAfterTemplateParsing;
+
+@end
Modified: trunk/bibdesk/BDSKTemplateParser.m
===================================================================
--- trunk/bibdesk/BDSKTemplateParser.m 2023-12-28 23:56:15 UTC (rev 28481)
+++ trunk/bibdesk/BDSKTemplateParser.m 2023-12-29 10:29:27 UTC (rev 28482)
@@ -322,8 +322,8 @@
#pragma mark Parsing string templates
-+ (NSString *)stringByParsingTemplateString:(NSString *)template
usingObject:(id)object delegate:(id <BDSKTemplateParserDelegate>)delegate {
- return [self stringFromTemplateArray:[self
arrayByParsingTemplateString:template isSubtemplate:NO] usingObject:object
atIndex:0 delegate:delegate];
++ (NSString *)stringByParsingTemplateString:(NSString *)template
usingObject:(id)object {
+ return [self stringFromTemplateArray:[self
arrayByParsingTemplateString:template isSubtemplate:NO] usingObject:object
atIndex:0];
}
+ (NSArray *)arrayByParsingTemplateString:(NSString *)template
isSubtemplate:(BOOL)isSubtemplate {
@@ -474,7 +474,7 @@
return [result autorelease];
}
-+ (NSString *)stringFromTemplateArray:(NSArray *)template
usingObject:(id)object atIndex:(NSInteger)anIndex delegate:(id
<BDSKTemplateParserDelegate>)delegate {
++ (NSString *)stringFromTemplateArray:(NSArray *)template
usingObject:(id)object atIndex:(NSInteger)anIndex {
NSMutableString *result = [[NSMutableString alloc] init];
for (id tag in template) {
@@ -505,9 +505,11 @@
if (prevItem) {
if (itemTemplate == nil)
itemTemplate = [[tag itemTemplate]
arrayByAddingObjectsFromArray:[tag separatorTemplate]];
- [delegate
templateParserWillParseTemplateUsingObject:prevItem];
- keyValue = [self
stringFromTemplateArray:itemTemplate usingObject:prevItem atIndex:idx++
delegate:delegate];
- [delegate
templateParserDidParseTemplateUsingObject:prevItem];
+ if ([prevItem
respondsToSelector:@selector(prepareForTemplateParsing)])
+ [prevItem prepareForTemplateParsing];
+ keyValue = [self
stringFromTemplateArray:itemTemplate usingObject:prevItem atIndex:idx++];
+ if ([prevItem
respondsToSelector:@selector(cleanupAfterTemplateParsing)])
+ [prevItem cleanupAfterTemplateParsing];
if (keyValue != nil)
[result appendString:keyValue];
}
@@ -519,9 +521,11 @@
}
if (prevItem) {
itemTemplate = [tag itemTemplate];
- [delegate
templateParserWillParseTemplateUsingObject:prevItem];
- keyValue = [self stringFromTemplateArray:itemTemplate
usingObject:prevItem atIndex:idx delegate:delegate];
- [delegate
templateParserDidParseTemplateUsingObject:prevItem];
+ if ([prevItem
respondsToSelector:@selector(prepareForTemplateParsing)])
+ [prevItem prepareForTemplateParsing];
+ keyValue = [self stringFromTemplateArray:itemTemplate
usingObject:prevItem atIndex:idx];
+ if ([prevItem
respondsToSelector:@selector(cleanupAfterTemplateParsing)])
+ [prevItem cleanupAfterTemplateParsing];
if (keyValue != nil)
[result appendString:keyValue];
}
@@ -545,7 +549,7 @@
if (subtemplate == nil && [tag countOfSubtemplates] > count)
subtemplate = [tag objectInSubtemplatesAtIndex:count];
if (subtemplate != nil) {
- if ((keyValue = [self stringFromTemplateArray:subtemplate
usingObject:object atIndex:anIndex delegate:delegate]))
+ if ((keyValue = [self stringFromTemplateArray:subtemplate
usingObject:object atIndex:anIndex]))
[result appendString:keyValue];
}
@@ -559,8 +563,8 @@
#pragma mark Parsing attributed string templates
-+ (NSAttributedString
*)attributedStringByParsingTemplateAttributedString:(NSAttributedString
*)template usingObject:(id)object delegate:(id
<BDSKTemplateParserDelegate>)delegate {
- return [self attributedStringFromTemplateArray:[self
arrayByParsingTemplateAttributedString:template isSubtemplate:NO]
usingObject:object atIndex:0 delegate:delegate];
++ (NSAttributedString
*)attributedStringByParsingTemplateAttributedString:(NSAttributedString
*)template usingObject:(id)object {
+ return [self attributedStringFromTemplateArray:[self
arrayByParsingTemplateAttributedString:template isSubtemplate:NO]
usingObject:object atIndex:0];
}
+ (NSArray *)arrayByParsingTemplateAttributedString:(NSAttributedString
*)template isSubtemplate:(BOOL)isSubtemplate {
@@ -726,7 +730,7 @@
return [result autorelease];
}
-+ (NSAttributedString *)attributedStringFromTemplateArray:(NSArray *)template
usingObject:(id)object atIndex:(NSInteger)anIndex delegate:(id
<BDSKTemplateParserDelegate>)delegate {
++ (NSAttributedString *)attributedStringFromTemplateArray:(NSArray *)template
usingObject:(id)object atIndex:(NSInteger)anIndex {
NSMutableAttributedString *result = [[NSMutableAttributedString alloc]
init];
for (id tag in template) {
@@ -741,7 +745,7 @@
NSMutableAttributedString *tmpMutAttrStr = [tmpAttrStr
mutableCopy];
for (BDSKAttributeTemplate *linkTemplate in linkTemplates) {
NSRange range = [linkTemplate range];
- id aLink = [self stringFromTemplateArray:[linkTemplate
template] usingObject:object atIndex:anIndex delegate:delegate];
+ id aLink = [self stringFromTemplateArray:[linkTemplate
template] usingObject:object atIndex:anIndex];
if ([[linkTemplate attributeClass]
isSubclassOfClass:[NSURL class]])
aLink = [NSURL
URLWithStringByNormalizingPercentEscapes:aLink];
if (aLink)
@@ -768,7 +772,7 @@
BDSKAttributeTemplate *linkTemplate =
[(BDSKRichValueTemplateTag *)tag linkTemplate];
if (linkTemplate) {
NSMutableDictionary *tmpAttrs = [attrs mutableCopy];
- id aLink = [self stringFromTemplateArray:[linkTemplate
template] usingObject:object atIndex:anIndex delegate:delegate];
+ id aLink = [self stringFromTemplateArray:[linkTemplate
template] usingObject:object atIndex:anIndex];
if ([[linkTemplate attributeClass]
isSubclassOfClass:[NSURL class]])
aLink = [NSURL
URLWithStringByNormalizingPercentEscapes:aLink];
[tmpAttrs setValue:aLink forKey:NSLinkAttributeName];
@@ -793,9 +797,11 @@
if (prevItem) {
if (itemTemplate == nil)
itemTemplate = [[tag itemTemplate]
arrayByAddingObjectsFromArray:[tag separatorTemplate]];
- [delegate
templateParserWillParseTemplateUsingObject:prevItem];
- tmpAttrStr = [self
attributedStringFromTemplateArray:itemTemplate usingObject:prevItem
atIndex:idx++ delegate:delegate];
- [delegate
templateParserDidParseTemplateUsingObject:prevItem];
+ if ([prevItem
respondsToSelector:@selector(prepareForTemplateParsing)])
+ [prevItem prepareForTemplateParsing];
+ tmpAttrStr = [self
attributedStringFromTemplateArray:itemTemplate usingObject:prevItem
atIndex:idx++];
+ if ([prevItem
respondsToSelector:@selector(cleanupAfterTemplateParsing)])
+ [prevItem cleanupAfterTemplateParsing];
if (tmpAttrStr != nil)
[result appendAttributedString:tmpAttrStr];
}
@@ -807,9 +813,11 @@
}
if (prevItem) {
itemTemplate = [tag itemTemplate];
- [delegate
templateParserWillParseTemplateUsingObject:prevItem];
- tmpAttrStr = [self
attributedStringFromTemplateArray:itemTemplate usingObject:prevItem atIndex:idx
delegate:delegate];
- [delegate
templateParserDidParseTemplateUsingObject:prevItem];
+ if ([prevItem
respondsToSelector:@selector(prepareForTemplateParsing)])
+ [prevItem prepareForTemplateParsing];
+ tmpAttrStr = [self
attributedStringFromTemplateArray:itemTemplate usingObject:prevItem
atIndex:idx];
+ if ([prevItem
respondsToSelector:@selector(cleanupAfterTemplateParsing)])
+ [prevItem cleanupAfterTemplateParsing];
if (tmpAttrStr != nil)
[result appendAttributedString:tmpAttrStr];
}
@@ -835,7 +843,7 @@
subtemplate = [tag objectInSubtemplatesAtIndex:count];
}
if (subtemplate != nil) {
- NSAttributedString *tmpAttrStr = [self
attributedStringFromTemplateArray:subtemplate usingObject:object
atIndex:anIndex delegate:delegate];
+ NSAttributedString *tmpAttrStr = [self
attributedStringFromTemplateArray:subtemplate usingObject:object
atIndex:anIndex];
if (tmpAttrStr != nil)
[result appendAttributedString:tmpAttrStr];
}
Modified: trunk/bibdesk/BibDocument_DataSource.m
===================================================================
--- trunk/bibdesk/BibDocument_DataSource.m 2023-12-28 23:56:15 UTC (rev
28481)
+++ trunk/bibdesk/BibDocument_DataSource.m 2023-12-29 10:29:27 UTC (rev
28482)
@@ -58,6 +58,7 @@
#import "NSSet_BDSKExtensions.h"
#import "BDSKEditor.h"
#import "NSGeometry_BDSKExtensions.h"
+#import "BDSKTemplateParser.h"
#import "BDSKTemplate.h"
#import "BDSKTemplateObjectProxy.h"
#import "BDSKTypeSelectHelper.h"
Modified: trunk/bibdesk/BibItem.m
===================================================================
--- trunk/bibdesk/BibItem.m 2023-12-28 23:56:15 UTC (rev 28481)
+++ trunk/bibdesk/BibItem.m 2023-12-29 10:29:27 UTC (rev 28482)
@@ -2506,7 +2506,7 @@
NSParameterAssert(nil != template);
NSString *string = nil;
[self prepareForTemplateParsing];
- string = [BDSKTemplateParser stringByParsingTemplateString:[template
stringForType:[self pubType]] usingObject:self delegate:nil];
+ string = [BDSKTemplateParser stringByParsingTemplateString:[template
stringForType:[self pubType]] usingObject:self];
[self cleanupAfterTemplateParsing];
return string;
}
@@ -2515,7 +2515,7 @@
NSParameterAssert(nil != template);
NSAttributedString *string = nil;
[self prepareForTemplateParsing];
- string = [BDSKTemplateParser
attributedStringByParsingTemplateAttributedString:[template
attributedStringForType:[self pubType]] usingObject:self delegate:nil];
+ string = [BDSKTemplateParser
attributedStringByParsingTemplateAttributedString:[template
attributedStringForType:[self pubType]] usingObject:self];
[self cleanupAfterTemplateParsing];
return string;
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit