Revision: 28826
http://sourceforge.net/p/bibdesk/svn/28826
Author: hofman
Date: 2024-03-04 19:05:27 +0000 (Mon, 04 Mar 2024)
Log Message:
-----------
add support for exporting refer format
Modified Paths:
--------------
trunk/bibdesk/BDSKTypeManager.h
trunk/bibdesk/BDSKTypeManager.m
trunk/bibdesk/BibDocument+Scripting.m
trunk/bibdesk/BibDocument.h
trunk/bibdesk/BibDocument.m
trunk/bibdesk/BibItem.h
trunk/bibdesk/BibItem.m
trunk/bibdesk/Info.plist
trunk/bibdesk/TypeInfo.plist
Modified: trunk/bibdesk/BDSKTypeManager.h
===================================================================
--- trunk/bibdesk/BDSKTypeManager.h 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/BDSKTypeManager.h 2024-03-04 19:05:27 UTC (rev 28826)
@@ -59,7 +59,9 @@
NSDictionary *bibTeXTypeForDublinCoreTypeDict;
NSDictionary *fieldNameForDublinCoreTermDict;
NSDictionary *fieldNameForReferTagDict;
+ NSDictionary *referTagForFieldNameDict;
NSDictionary *bibTeXTypeForReferTypeDict;
+ NSDictionary *referTypeForBibTeXTypeDict;
NSDictionary *bibTeXTypeForHCiteTypeDict;
NSDictionary *MODSGenresForBibTeXTypeDict;
NSDictionary *defaultFieldsForTypes;
@@ -150,6 +152,8 @@
// Refer
- (NSString *)fieldNameForReferTag:(NSString *)tag;
- (NSString *)bibTeXTypeForReferType:(NSString *)type;
+- (NSString *)referTagForBibTeXFieldName:(NSString *)name;
+- (NSString *)referTypeForBibTeXType:(NSString *)type;
// MARC
- (NSDictionary *)fieldNamesForMARCTag:(NSString *)name;
Modified: trunk/bibdesk/BDSKTypeManager.m
===================================================================
--- trunk/bibdesk/BDSKTypeManager.m 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/BDSKTypeManager.m 2024-03-04 19:05:27 UTC (rev 28826)
@@ -67,7 +67,9 @@
#define BIBTEX_TYPES_FOR_DC_TYPES_KEY @"BibTeXTypesForDublinCoreTypes"
#define BIBTEX_FIELDS_FOR_DC_TERMS_KEY
@"BibTeXFieldNamesForDublinCoreTerms"
#define BIBTEX_FIELDS_FOR_REFER_TAGS_KEY @"BibTeXFieldNamesForReferTags"
+#define REFER_TAGS_FOR_BIBTEX_FIELDS_KEY @"ReferTagsForBibTeXFieldNames"
#define BIBTEX_TYPES_FOR_REFER_TYPES_KEY @"BibTeXTypesForReferTypes"
+#define REFER_TYPES_FOR_BIBTEX_TYPES_KEY @"ReferTypesForBibTeXTypes"
#define BIBTEX_TYPES_FOR_HCITE_TYPES_KEY @"BibTeXTypesForHCiteTypes"
@@ -145,7 +147,9 @@
bibTeXTypeForDublinCoreTypeDict = [[typeInfoDict
objectForKey:BIBTEX_TYPES_FOR_DC_TYPES_KEY] copy];
fieldNameForDublinCoreTermDict = [[typeInfoDict
objectForKey:BIBTEX_FIELDS_FOR_DC_TERMS_KEY] copy];
fieldNameForReferTagDict = [[typeInfoDict
objectForKey:BIBTEX_FIELDS_FOR_REFER_TAGS_KEY] copy];
+ referTagForFieldNameDict = [[typeInfoDict
objectForKey:REFER_TAGS_FOR_BIBTEX_FIELDS_KEY] copy];
bibTeXTypeForReferTypeDict = [[typeInfoDict
objectForKey:BIBTEX_TYPES_FOR_REFER_TYPES_KEY] copy];
+ referTypeForBibTeXTypeDict = [[typeInfoDict
objectForKey:REFER_TYPES_FOR_BIBTEX_TYPES_KEY] copy];
bibTeXTypeForHCiteTypeDict = [[typeInfoDict
objectForKey:BIBTEX_TYPES_FOR_HCITE_TYPES_KEY] copy];
noteFieldsSet = [[NSSet alloc] initWithObjects:BDSKAnnoteString,
BDSKAbstractString, BDSKRssDescriptionString, nil];
@@ -405,6 +409,15 @@
return [bibTeXTypeForReferTypeDict objectForKey:type] ?: BDSKMiscString;
}
+- (NSString *)referTagForBibTeXFieldName:(NSString *)name {
+ NSString *tag = [referTagForFieldNameDict objectForKey:name];
+ return tag;
+}
+
+- (NSString *)referTypeForBibTeXType:(NSString *)type{
+ return [referTypeForBibTeXTypeDict objectForKey:type] ?: @"Generic";
+}
+
// MARC
- (NSDictionary *)fieldNamesForMARCTag:(NSString *)tag{
Modified: trunk/bibdesk/BibDocument+Scripting.m
===================================================================
--- trunk/bibdesk/BibDocument+Scripting.m 2024-02-26 09:58:34 UTC (rev
28825)
+++ trunk/bibdesk/BibDocument+Scripting.m 2024-03-04 19:05:27 UTC (rev
28826)
@@ -99,6 +99,8 @@
normalizedFileType = BDSKMinimalBibTeXDocumentType;
else if ([fileType isEqualToString:@"RIS"])
normalizedFileType = BDSKRISDocumentType;
+ else if ([fileType isEqualToString:@"Refer"])
+ normalizedFileType = BDSKReferDocumentType;
if (normalizedFileType) {
NSMutableDictionary *arguments = [[command arguments] mutableCopy];
[arguments setObject:normalizedFileType forKey:@"FileType"];
Modified: trunk/bibdesk/BibDocument.h
===================================================================
--- trunk/bibdesk/BibDocument.h 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/BibDocument.h 2024-03-04 19:05:27 UTC (rev 28826)
@@ -98,6 +98,7 @@
// our main document types
extern NSString *BDSKBibTeXDocumentType;
extern NSString *BDSKRISDocumentType;
+extern NSString *BDSKReferDocumentType;
extern NSString *BDSKMinimalBibTeXDocumentType;
extern NSString *BDSKLTBDocumentType;
extern NSString *BDSKEndNoteDocumentType;
@@ -345,6 +346,7 @@
@property (nonatomic, readonly) NSData *wordXMLData;
- (NSData *)bibTeXDataDroppingInternal:(BOOL)drop relativeToPath:(NSString
*)basePath error:(NSError **)outError;
- (NSData *)RISDataAndReturnError:(NSError **)error;
+- (NSData *)referDataAndReturnError:(NSError **)error;
- (NSData *)LTBDataAndReturnError:(NSError **)error;
- (BOOL)readFromBibTeXData:(NSData *)data string:(NSString *)string
fromURL:(NSURL *)absoluteURL encoding:(NSStringEncoding)encoding error:(NSError
**)outError;
@@ -356,6 +358,7 @@
- (NSString *)previewBibTeXStringForPublications:(NSArray *)items;
- (NSString *)RISStringForPublications:(NSArray *)items;
+- (NSString *)referStringForPublications:(NSArray *)items;
- (NSString *)citeStringForPublications:(NSArray *)items citeString:(NSString
*)citeString;
@property (nonatomic, readonly) BDSKPublicationsArray *publications;
Modified: trunk/bibdesk/BibDocument.m
===================================================================
--- trunk/bibdesk/BibDocument.m 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/BibDocument.m 2024-03-04 19:05:27 UTC (rev 28826)
@@ -131,6 +131,7 @@
// these are the same as in Info.plist
NSString *BDSKBibTeXDocumentType = @"BibTeX Database";
NSString *BDSKRISDocumentType = @"RIS/Medline File";
+NSString *BDSKReferDocumentType = @"Refer";
NSString *BDSKMinimalBibTeXDocumentType = @"Minimal BibTeX Database";
NSString *BDSKLTBDocumentType = @"Amsrefs LTB";
NSString *BDSKEndNoteDocumentType = @"EndNote XML";
@@ -1311,6 +1312,8 @@
data = [self bibTeXDataDroppingInternal:drop
relativeToPath:theBasePath error:&error];
}else if ([aType isEqualToString:BDSKRISDocumentType]){
data = [self RISDataAndReturnError:&error];
+ }else if ([aType isEqualToString:BDSKReferDocumentType]){
+ data = [self referDataAndReturnError:&error];
}else if ([aType isEqualToString:BDSKLTBDocumentType]){
data = [self LTBDataAndReturnError:&error];
}else if ([aType isEqualToString:BDSKEndNoteDocumentType]){
@@ -1548,9 +1551,20 @@
*error = [NSError mutableLocalErrorWithCode:kBDSKStringEncodingError
localizedDescription:[NSString stringWithFormat:NSLocalizedString(@"Unable to
convert the bibliography to encoding %@", @"Error description"), [NSString
localizedNameOfStringEncoding:encoding]]];
[*error setValue:[NSNumber numberWithUnsignedInteger:encoding]
forKey:NSStringEncodingErrorKey];
}
- return data;
+ return data;
}
+- (NSData *)referDataAndReturnError:(NSError **)error{
+ NSString *referString = [self referStringForPublications:[self
publicationsForSaving]];
+ NSStringEncoding encoding = [self encodingForSaving];
+ NSData *data = [referString dataUsingEncoding:encoding
allowLossyConversion:NO];
+ if (nil == data && error) {
+ *error = [NSError mutableLocalErrorWithCode:kBDSKStringEncodingError
localizedDescription:[NSString stringWithFormat:NSLocalizedString(@"Unable to
convert the bibliography to encoding %@", @"Error description"), [NSString
localizedNameOfStringEncoding:encoding]]];
+ [*error setValue:[NSNumber numberWithUnsignedInteger:encoding]
forKey:NSStringEncodingErrorKey];
+ }
+ return data;
+}
+
- (NSData *)LTBDataAndReturnError:(NSError **)error{
NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
[self writePublications:[self publicationsForSaving]
forDragCopyType:BDSKDragCopyLTB toPasteboard:pboard];
@@ -2063,6 +2077,10 @@
return [[items valueForKey:@"RISStringValue"]
componentsJoinedByString:@"\n\n"];
}
+- (NSString *)referStringForPublications:(NSArray *)items{
+ return [[items valueForKey:@"referStringValue"]
componentsJoinedByString:@"\n\n"];
+}
+
- (NSString *)citeStringForPublications:(NSArray *)items citeString:(NSString
*)citeString{
NSUserDefaults*sud = [NSUserDefaults standardUserDefaults];
Modified: trunk/bibdesk/BibItem.h
===================================================================
--- trunk/bibdesk/BibItem.h 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/BibItem.h 2024-03-04 19:05:27 UTC (rev 28826)
@@ -688,6 +688,7 @@
- (NSData *)bibTeXDataWithOptions:(BDSKBibTeXOption)options
relativeToPath:(NSString *)basePath encoding:(NSStringEncoding)encoding
error:(NSError **)outError;
@property (nonatomic, readonly) NSString *RISStringValue;
+@property (nonatomic, readonly) NSString *referStringValue;
@property (nonatomic, readonly) NSXMLElement *MODSXMLValue;
@property (nonatomic, readonly) NSXMLElement *endNoteXMLValue;
Modified: trunk/bibdesk/BibItem.m
===================================================================
--- trunk/bibdesk/BibItem.m 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/BibItem.m 2024-03-04 19:05:27 UTC (rev 28826)
@@ -1988,6 +1988,60 @@
return s;
}
+- (NSString *)referStringValue {
+ BDSKTypeManager *btm = [BDSKTypeManager sharedManager];
+ BOOL useURLField = [[NSUserDefaults standardUserDefaults]
boolForKey:BDSKUseLocalUrlAndUrlKey];
+ NSString *type = [self pubType];
+ NSMutableString *s = [[NSMutableString alloc] init];
+ NSMutableArray *keys = [[NSMutableArray alloc] init];
+ [keys addObjectsFromArray:[btm requiredFieldsForType:type]];
+ [keys addObjectsFromArray:[btm optionalFieldsForType:type]];
+ [keys addNonDuplicateObjectsFromArray:[self allFieldNames]];
+ [keys removeObject:BDSKDateAddedString];
+ [keys removeObject:BDSKDateModifiedString];
+ [keys removeObject:BDSKLocalUrlString];
+ [keys sortUsingSelector:@selector(caseInsensitiveNumericCompare:)];
+
+ NSString *referType = [btm referTypeForBibTeXType:type];
+
+ [s appendFormat:@"%%0 %@\n", referType];
+
+ // enumerate the remaining keys
+ NSString *tag;
+ NSString *v;
+ NSArray *a;
+
+ for (NSString *k in keys) {
+ tag = [btm referTagForBibTeXFieldName:k];
+ // ignore fields that have no RIS tag, we should not contruct invalid
or wrong RIS
+ if (tag == nil) continue;
+
+ v = [self valueOfField:k];
+
+ if ([NSString isEmptyString:v]) continue;
+
+ if ([k isPersonField]) {
+ a = [[self peopleArrayForField:k] valueForKey:@"normalizedName"];
+ for (v in a)
+ [s appendFormat:@"%%%@ %@\n", k, v];
+ } else if ([k isEqualToString:BDSKKeywordsString]) {
+ a = [self groupArrayForField:k];
+ for (v in a)
+ [s appendFormat:@"%%%@ %@\n", k, v];
+ } else if (useURLField || [k isEqualToString:BDSKUrlString] == NO) {
+ [s appendFormat:@"%%%@ %@\n", k, [v stringByRemovingTeX]];
+ }
+ }
+
+ if (useURLField == NO) {
+ a = [[self remoteURLs] valueForKeyPath:@"URL.absoluteString"];
+ for (v in a)
+ [s appendFormat:@"%%U %@\n", v];
+ }
+
+ return s;
+}
+
#define AddXMLNodeForField(e, t, f) value = [self valueOfField:f]; if
([NSString isEmptyString:value] == NO) [e addChild:[NSXMLNode elementWithName:t
stringValue:[value stringByRemovingCurlyBraces]]]
- (NSXMLElement *)MODSXMLValue {
Modified: trunk/bibdesk/Info.plist
===================================================================
--- trunk/bibdesk/Info.plist 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/Info.plist 2024-03-04 19:05:27 UTC (rev 28826)
@@ -61,6 +61,7 @@
<array>
<string>Minimal BibTeX Database</string>
<string>RIS/Medline File</string>
+ <string>Refer</string>
<string>Amsrefs LTB</string>
<string>EndNote XML</string>
<string>MODS XML</string>
@@ -116,6 +117,7 @@
<array>
<string>Minimal BibTeX Database</string>
<string>RIS/Medline File</string>
+ <string>Refer</string>
<string>Amsrefs LTB</string>
<string>EndNote XML</string>
<string>MODS XML</string>
@@ -650,6 +652,27 @@
<string>public.plain-text</string>
</array>
<key>UTTypeDescription</key>
+ <string>Refer File</string>
+ <key>UTTypeIdentifier</key>
+ <string>net.sourceforge.bibdesk.refe</string>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>public.filename-extension</key>
+ <array>
+ <string>refer</string>
+ </array>
+ <key>public.mime-type</key>
+ <array>
+
<string>application/x-endnote-refer</string>
+ </array>
+ </dict>
+ </dict>
+ <dict>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>public.plain-text</string>
+ </array>
+ <key>UTTypeDescription</key>
<string>Web of Science File</string>
<key>UTTypeIdentifier</key>
<string>net.sourceforge.bibdesk.webofscience</string>
Modified: trunk/bibdesk/TypeInfo.plist
===================================================================
--- trunk/bibdesk/TypeInfo.plist 2024-02-26 09:58:34 UTC (rev 28825)
+++ trunk/bibdesk/TypeInfo.plist 2024-03-04 19:05:27 UTC (rev 28826)
@@ -1489,6 +1489,64 @@
<key>unpublished</key>
<string>UNPB</string>
</dict>
+ <key>ReferTagsForBibTeXFieldNames</key>
+ <dict>
+ <key>Abstract</key>
+ <string>X</string>
+ <key>Address</key>
+ <string>C</string>
+ <key>Annote</key>
+ <string>O</string>
+ <key>Author</key>
+ <string>A</string>
+ <key>Booktitle</key>
+ <string>B</string>
+ <key>Caption</key>
+ <string>F</string>
+ <key>Date</key>
+ <string>D</string>
+ <key>Doi</key>
+ <string>3</string>
+ <key>Edition</key>
+ <string>7</string>
+ <key>Editor</key>
+ <string>E</string>
+ <key>Journal</key>
+ <string>J</string>
+ <key>Keywords</key>
+ <string>K</string>
+ <key>Number</key>
+ <string>N</string>
+ <key>Pages</key>
+ <string>P</string>
+ <key>Publisher</key>
+ <string>I</string>
+ <key>Title</key>
+ <string>T</string>
+ <key>Type</key>
+ <string>R</string>
+ <key>Url</key>
+ <string>U</string>
+ <key>Volume</key>
+ <string>V</string>
+ </dict>
+ <key>ReferTypesForBibTeXTypes</key>
+ <dict>
+ <key>article</key>
+ <string>Journal Article</string>
+ <key>book</key>
+ <string>Book</string>
+ <key>inbook</key>
+ <string>Book Section</string>
+ <key>misc</key>
+ <string>Generic</string>
+ <key>proceedings</key>
+ <string>Conference Proceedings</string>
+ <key>techreport</key>
+ <string>Report</string>
+ <key>thesis</key>
+ <string>Thesis</string>
+ </dict>
<key>StandardTypesForFileType</key>
<dict>
<key>BibTeX</key>
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