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

Reply via email to