Revision: 27224
http://sourceforge.net/p/bibdesk/svn/27224
Author: hofman
Date: 2022-01-16 16:10:06 +0000 (Sun, 16 Jan 2022)
Log Message:
-----------
Always set teh receiver specifier of the auto file command to the publication
Modified Paths:
--------------
trunk/bibdesk/BDSKAutoFileCommand.h
trunk/bibdesk/BDSKAutoFileCommand.m
Modified: trunk/bibdesk/BDSKAutoFileCommand.h
===================================================================
--- trunk/bibdesk/BDSKAutoFileCommand.h 2022-01-09 16:11:25 UTC (rev 27223)
+++ trunk/bibdesk/BDSKAutoFileCommand.h 2022-01-16 16:10:06 UTC (rev 27224)
@@ -40,7 +40,7 @@
@interface BDSKAutoFileCommand : NSScriptCommand {
-
+ NSScriptObjectSpecifier *keySpecifier;
}
-
+@property (nonatomic, readonly) NSScriptObjectSpecifier *keySpecifier;
@end
Modified: trunk/bibdesk/BDSKAutoFileCommand.m
===================================================================
--- trunk/bibdesk/BDSKAutoFileCommand.m 2022-01-09 16:11:25 UTC (rev 27223)
+++ trunk/bibdesk/BDSKAutoFileCommand.m 2022-01-16 16:10:06 UTC (rev 27224)
@@ -48,9 +48,25 @@
@implementation BDSKAutoFileCommand
+@synthesize keySpecifier;
+
+- (void)dealloc {
+ BDSKDESTROY(keySpecifier);
+ [super dealloc];
+}
+
+- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversSpecifier {
+ if ([[[receiversSpecifier keyClassDescription] className]
isEqualToString:@"publication"]) {
+ [super setReceiversSpecifier:receiversSpecifier];
+ } else {
+ [super setReceiversSpecifier:[receiversSpecifier containerSpecifier]];
+ keySpecifier = [receiversSpecifier retain];
+ }
+}
+
- (id)performDefaultImplementation {
- NSScriptObjectSpecifier *receiverSpec = [self receiversSpecifier];
- NSString *receiverClass = [[receiverSpec keyClassDescription] className];
+ NSScriptObjectSpecifier *keySpec = [self keySpecifier];
+ NSString *keyClass = [[keySpec keyClassDescription] className];
NSDictionary *params = [self evaluatedArguments];
NSNumber *indexNumber = [params objectForKey:@"index"];
NSString *location = [params objectForKey:@"to"];
@@ -57,7 +73,7 @@
NSString *field = [params objectForKey:@"for"];
NSNumber *checkNumber = [params objectForKey:@"check"];
BOOL check = checkNumber ? [checkNumber boolValue] : YES;
- BibItem *pub = nil;
+ BibItem *pub = [self evaluatedReceivers];
BibDocument *doc = nil;
NSInteger start = 0, end = 0;
NSMutableIndexSet *indexes = nil;
@@ -72,8 +88,18 @@
return nil;
}
- if ([receiverClass isEqualToString:@"publication"]) {
- pub = [self evaluatedReceivers];
+ if (pub == nil) {
+ [self setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
+ [self setScriptErrorString:@"Could not find a publication to auto
file."];
+ return nil;
+ }
+ if ([pub isKindOfClass:[BibItem class]] == NO) {
+ [self setScriptErrorNumber:NSArgumentsWrongScriptError];
+ [self setScriptErrorString:@"Receiver is not a publication."];
+ return nil;
+ }
+
+ if (keySpec == nil) {
if (indexNumber) {
if (field && [field isEqualToString:BDSKLocalFileString] == NO) {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
@@ -90,7 +116,7 @@
} else {
field = [field fieldName] ?: BDSKLocalUrlString;
}
- } else if ([receiverClass isEqualToString:@"field"]) {
+ } else if ([keyClass isEqualToString:@"field"]) {
if (field) {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
[self setScriptErrorString:@"Cannot pass both a field and a field
name."];
@@ -101,14 +127,13 @@
[self setScriptErrorString:@"Cannot pass both a field and an
index."];
return nil;
}
- if ([receiverSpec isKindOfClass:[NSNameSpecifier class]] == NO) {
+ if ([keySpec isKindOfClass:[NSNameSpecifier class]] == NO) {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
[self setScriptErrorString:@"Invalid field specifier."];
return nil;
}
- pub = [[receiverSpec containerSpecifier] objectsByEvaluatingSpecifier];
- field = [[(NSNameSpecifier *)receiverSpec name] fieldName];
- } else if ([receiverClass isEqualToString:@"linked file"]) {
+ field = [[(NSNameSpecifier *)keySpec name] fieldName];
+ } else if ([keyClass isEqualToString:@"linked file"]) {
if (field) {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
[self setScriptErrorString:@"Cannot pass both a linked file and a
field name."];
@@ -120,22 +145,20 @@
return nil;
}
field = BDSKLocalFileString;
- if ([[receiverSpec key] isEqualToString:@""]) {
+ if ([[keySpec key] isEqualToString:@""]) {
// this is an 'item i of linked files' specifier
// -indicesOfObjectsByEvaluatingWithContainer:count: does not work
here
- if ([receiverSpec isKindOfClass:[NSIndexSpecifier class]] == NO ||
- [[receiverSpec containerSpecifier]
isKindOfClass:[NSPropertySpecifier class]] == NO) {
+ if ([keySpec isKindOfClass:[NSIndexSpecifier class]] == NO ||
+ [[keySpec containerSpecifier]
isKindOfClass:[NSPropertySpecifier class]] == NO) {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
[self setScriptErrorString:@"Do not understand linked file
specifier."];
return nil;
}
- pub = [[[receiverSpec containerSpecifier] containerSpecifier]
objectsByEvaluatingSpecifier];
- end = start = [(NSIndexSpecifier *)receiverSpec index];
+ end = start = [(NSIndexSpecifier *)keySpec index];
} else {
- pub = [[receiverSpec containerSpecifier]
objectsByEvaluatingSpecifier];
// NSPropertySpecifier, NSIndexSpecifier, NSRangeSpecifier,
NSMiddleSpecifier, NSWhoseSpecifier
NSInteger i, count = -2;
- NSInteger *indices = [receiverSpec
indicesOfObjectsByEvaluatingWithContainer:pub count:&count];
+ NSInteger *indices = [keySpec
indicesOfObjectsByEvaluatingWithContainer:pub count:&count];
if (count < -1) {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
[self setScriptErrorString:@"Do not understand linked file
specifier."];
@@ -163,21 +186,10 @@
} else {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
[self setScriptErrorString:@"Receiver should be a publication, field,
or linked file(s)."];
- [self setScriptErrorOffendingObjectDescriptor:[receiverSpec
descriptor]];
+ [self setScriptErrorOffendingObjectDescriptor:[keySpec descriptor]];
return nil;
}
- if (pub == nil) {
- [self setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
- [self setScriptErrorString:@"Could not find a publication to auto
file."];
- return nil;
- }
- if ([pub isKindOfClass:[BibItem class]] == NO) {
- [self setScriptErrorNumber:NSArgumentsWrongScriptError];
- [self setScriptErrorString:@"Receiver is not a publication."];
- return nil;
- }
-
doc = (BibDocument *)[pub owner];
if ([doc isDocument] == NO) {
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