Revision: 22771 http://sourceforge.net/p/bibdesk/svn/22771 Author: hofman Date: 2018-10-08 20:29:24 +0000 (Mon, 08 Oct 2018) Log Message: ----------- get indexes for generic linked file specifiers in parse format command
Modified Paths: -------------- trunk/bibdesk/BDSKParseFormatCommand.m Modified: trunk/bibdesk/BDSKParseFormatCommand.m =================================================================== --- trunk/bibdesk/BDSKParseFormatCommand.m 2018-10-08 17:06:34 UTC (rev 22770) +++ trunk/bibdesk/BDSKParseFormatCommand.m 2018-10-08 20:29:24 UTC (rev 22771) @@ -77,28 +77,20 @@ } else if ([spec isKindOfClass:[NSNameSpecifier class]] && [[spec key] isEqualToString:@"bibFields"]) { pub = [[spec containerSpecifier] objectsByEvaluatingSpecifier]; field = [(NSNameSpecifier *)spec name]; - } else if ([spec isKindOfClass:[NSIndexSpecifier class]]) { - if ([[spec key] isEqualToString:@"linkedFiles"]) - pub = [[spec containerSpecifier] objectsByEvaluatingSpecifier]; - else if ([[spec key] isEqualToString:@""] && [[[spec containerSpecifier] key] isEqualToString:@"linkedFiles"]) - pub = [[[spec containerSpecifier] containerSpecifier] objectsByEvaluatingSpecifier]; - if ([pub isKindOfClass:[BibItem class]]) { - field = BDSKLocalFileString; - i = [(NSIndexSpecifier *)spec index]; - if (i < 0) - i += [[pub localFiles] count]; - } - } else if ([[spec key] isEqualToString:@"linkedFiles"]) { + } else if (([spec isKindOfClass:[NSIndexSpecifier class]] || [spec isKindOfClass:[NSMiddleSpecifier class]] || [spec isKindOfClass:[NSRelativeSpecifier class]] || [spec isKindOfClass:[NSRandomSpecifier class]]) && [[spec key] isEqualToString:@"linkedFiles"]) { pub = [[spec containerSpecifier] objectsByEvaluatingSpecifier]; - if ([pub isKindOfClass:[BibItem class]]) { - NSInteger count = -2, *indices = [spec indicesOfObjectsByEvaluatingWithContainer:pub count:&count]; - if (count == 1) - i = indices[0]; - else if (count == -1 && [[pub localFiles] count] == 1) - i = 0; - else - pub = nil; - } + NSInteger count = -1, *indices = [spec indicesOfObjectsByEvaluatingWithContainer:pub count:&count]; + if (count == 1) + i = indices[0]; + else + pub = nil; + } else if ([spec isKindOfClass:[NSIndexSpecifier class]] && [[spec key] isEqualToString:@""] && [[[spec containerSpecifier] key] isEqualToString:@"linkedFiles"]) { + // special case, indicesOfObjectsByEvaluatingWithContainer:count: fails for 'item' specifier + pub = [[[spec containerSpecifier] containerSpecifier] objectsByEvaluatingSpecifier]; + field = BDSKLocalFileString; + i = [(NSIndexSpecifier *)spec index]; + if (i < 0 && [pub isKindOfClass:[BibItem class]]) + i += [[pub localFiles] count]; } if (pub == nil) { [self setScriptErrorNumber:NSArgumentsWrongScriptError]; @@ -159,28 +151,28 @@ if ((isFileField || isFile) && ([NSString isEmptyString:[[NSUserDefaults standardUserDefaults] stringForKey:BDSKPapersFolderPathKey]] && [NSString isEmptyString:[[[[pub owner] fileURL] path] stringByDeletingLastPathComponent]])) - return [NSNull null]; - + return nil; + for (NSString *fieldName in requiredFields) { if ([fieldName isEqualToString:BDSKCiteKeyString]) { if([pub hasEmptyOrDefaultCiteKey]) - return [NSNull null]; + return nil; } else if ([fieldName isEqualToString:BDSKLocalFileString]) { if ((isFile && [file URL] == nil) || [pub localFileURLForField:field] == nil) - return [NSNull null]; + return nil; } else if ([fieldName isEqualToString:@"Document Filename"]) { if ([NSString isEmptyString:[[[pub owner] fileURL] path]]) - return [NSNull null]; + return nil; } else if ([fieldName hasPrefix:@"Document: "]) { if ([NSString isEmptyString:[[pub owner] documentInfoForKey:[fieldName substringFromIndex:10]]]) - return [NSNull null]; + return nil; } else if ([fieldName isEqualToString:BDSKAuthorEditorString]) { if ([NSString isEmptyString:[pub valueOfField:BDSKAuthorString]] && [NSString isEmptyString:[pub valueOfField:BDSKEditorString]]) - return [NSNull null]; + return nil; } else { if ([NSString isEmptyString:[pub valueOfField:fieldName]]) - return [NSNull null]; + return nil; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Bibdesk-commit mailing list Bibdesk-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-commit