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

Reply via email to