Revision: 21903
          http://sourceforge.net/p/bibdesk/svn/21903
Author:   hofman
Date:     2018-02-12 18:17:46 +0000 (Mon, 12 Feb 2018)
Log Message:
-----------
Option to post process the returned bibtex string in web parser. Allow getting 
the bibtex string directly from the node. Make Spires, CiteULike, and ACMDL 
parsers subclasses from linked bibtex parser

Modified Paths:
--------------
    trunk/bibdesk/BDSKACMDLParser.h
    trunk/bibdesk/BDSKACMDLParser.m
    trunk/bibdesk/BDSKCiteULikeParser.h
    trunk/bibdesk/BDSKCiteULikeParser.m
    trunk/bibdesk/BDSKLinkedBibTeXParser.h
    trunk/bibdesk/BDSKLinkedBibTeXParser.m
    trunk/bibdesk/BDSKSpiresParser.h
    trunk/bibdesk/BDSKSpiresParser.m

Modified: trunk/bibdesk/BDSKACMDLParser.h
===================================================================
--- trunk/bibdesk/BDSKACMDLParser.h     2018-02-12 16:16:48 UTC (rev 21902)
+++ trunk/bibdesk/BDSKACMDLParser.h     2018-02-12 18:17:46 UTC (rev 21903)
@@ -36,12 +36,10 @@
  */
 
 #import <Cocoa/Cocoa.h>
-#import "BDSKWebParser.h"
-#import "BDSKBibTeXParser.h"
-#import "NSXMLNode_BDSKExtensions.h"
+#import "BDSKLinkedBibTeXParser.h"
 
 
-@interface BDSKACMDLParser: NSObject <BDSKWebParser>
+@interface BDSKACMDLParser : BDSKLinkedBibTeXParser
 @end
 
 

Modified: trunk/bibdesk/BDSKACMDLParser.m
===================================================================
--- trunk/bibdesk/BDSKACMDLParser.m     2018-02-12 16:16:48 UTC (rev 21902)
+++ trunk/bibdesk/BDSKACMDLParser.m     2018-02-12 18:17:46 UTC (rev 21903)
@@ -37,9 +37,6 @@
  */
 
 #import "BDSKACMDLParser.h"
-#import "BDSKBibTeXParser.h"
-#import "BibItem.h"
-#import "NSError_BDSKExtensions.h"
 #import "NSXMLNode_BDSKExtensions.h"
 #import <AGRegex/AGRegex.h>
 
@@ -46,77 +43,55 @@
 
 @implementation BDSKACMDLParser
 
-+ (BOOL)canParseDocument:(DOMDocument *)domDocument xmlDocument:(NSXMLDocument 
*)xmlDocument fromURL:(NSURL *)url{
++ (NSString *)host { return @"dl.acm.org"; }
+
++ (NSString *)linkedBibTeXNodeXPath { return 
@".//meta[@name='citation_abstract_html_url']/@content"; }
+
++ (NSString *)linkedBibTeXURLStringFromNode:(NSXMLNode *)node {
+    NSString *nodeString = [node stringValue];
+
+    AGRegex *doiRegex = [AGRegex 
regexWithPattern:@"^https?://dl\\.acm\\.org/citation\\.cfm\\?id=([0-9]*)\\.([0-9]*)$"];
+    AGRegexMatch *match = [doiRegex findInString:nodeString];
     
-    if (nil == [url host] || NO == [[url host] 
isCaseInsensitiveEqual:@"dl.acm.org"]){
-        return NO;
-    }
+    if ([match count] != 3)
+        return nil;
     
-    NSError *error;
-    NSArray *nodes = [xmlDocument 
nodesForXPath:@".//meta[@name='citation_abstract_html_url']/@content" 
error:&error];
-    if ([nodes count] == 0) return NO;
-    NSString *node = [[nodes objectAtIndex:0] stringValue];
+    NSString *parentNumber = [match groupAtIndex:1];
+    NSString *articleNumber = [match groupAtIndex:2];
     
-    AGRegex *doiRegex = [AGRegex 
regexWithPattern:@"^https?://dl\\.acm\\.org/citation\\.cfm\\?id=[0-9]*\\.[0-9]*$"];
-       return ([doiRegex findInString:node] != nil);
-       
+    return [NSString 
stringWithFormat:@"http://dl.acm.org/downformats.cfm?id=%@&parent_id=%@&expformat=bibtex";,
 articleNumber, parentNumber];
 }
 
-+ (NSArray *)itemsFromDocument:(DOMDocument *)domDocument 
xmlDocument:(NSXMLDocument *)xmlDocument fromURL:(NSURL *)url error:(NSError 
**)outError{
-       
-    NSMutableArray *items = [NSMutableArray arrayWithCapacity:1];
-       
-       NSError *error = nil;
-       NSStringEncoding encoding = NSASCIIStringEncoding;
-       
-       // extract article number and parent number
-    NSArray *nodes = [xmlDocument 
nodesForXPath:@".//meta[@name='citation_abstract_html_url']/@content" 
error:&error];
-    if ([nodes count] == 0) return items;
-    NSString *node = [[nodes objectAtIndex:0] stringValue];
-
-    AGRegex *doiRegex = [AGRegex 
regexWithPattern:@"^https?://dl\\.acm\\.org/citation\\.cfm\\?id=([0-9]*)\\.([0-9]*)$"];
-       AGRegexMatch *match = [doiRegex findInString:node];
-       if ([match count] != 3) {
-               return items;
-       }
-       NSString *parentNumber = [match groupAtIndex:1];
-       NSString *articleNumber = [match groupAtIndex:2];
-       
-       // download BibTeX data
-       NSString *bibtexURLString = [NSString 
stringWithFormat:@"http://dl.acm.org/downformats.cfm?id=%@&parent_id=%@&expformat=bibtex";,
 articleNumber, parentNumber];
-       NSURL *bibtexURL = [NSURL URLWithString:bibtexURLString];
-       NSString *bibtexData = [NSString stringWithContentsOfURL:bibtexURL 
usedEncoding:&encoding error:&error];
-       if (bibtexData == nil) {
-               return items;
-       }
-       
-       // remove characters before the first @ symbol
-       NSRange range = [bibtexData rangeOfString:@"@"];
-       if (range.location == NSNotFound) {
-               return items;
-       }
-       bibtexData = [bibtexData substringFromIndex:range.location];
++ (NSString *)linkedBibTeXStringFromReturnedString:(NSString *)string {
+    // remove characters before the first @ symbol
+    NSRange range = [string rangeOfString:@"@"];
+    if (range.location == NSNotFound)
+        return nil;
     
+    string = [string substringFromIndex:range.location];
+    
     // remove spaces in cite key (for some reason, ACM will use author names 
with spaces in the cite key
     // but btparse chokes on these)
-       range = [bibtexData rangeOfString:@","];
-       if (range.location == NSNotFound) {
-               return items;
-       }
-    NSRange newrange;
-    newrange.length = range.location;
-    newrange.location = 0;
-    bibtexData = [bibtexData stringByReplacingOccurrencesOfString:@" " 
withString:@"" options:0 range:newrange];
+    range = [string rangeOfString:@","];
+    if (range.location == NSNotFound)
+        return nil;
     
-       // parse BibTeX data
-       NSArray *parsedItems = [BDSKBibTeXParser itemsFromString:bibtexData 
owner:nil error:outError];
-       if (parsedItems) {
-               [items addObjectsFromArray:parsedItems];
-       }
-       
-       return items;  
+    return [string stringByReplacingOccurrencesOfString:@" " withString:@"" 
options:0 range:NSMakeRange(0, range.location)];
 }
 
++ (BOOL)canParseDocument:(DOMDocument *)domDocument xmlDocument:(NSXMLDocument 
*)xmlDocument fromURL:(NSURL *)url{
+    if ([url host] == nil || [[[url host] lowercaseString] 
isEqualToString:[self host]] == NO)
+        return NO;
+    
+    NSError *error;
+    NSArray *nodes = [xmlDocument nodesForXPath:[self linkedBibTeXNodeXPath] 
error:&error];
+    
+    if ([nodes count] == 0)
+        return NO;
+    
+    return [self linkedBibTeXURLStringFromNode:[nodes firstObject]] != nil;
+}
+
 + (NSDictionary *)parserInfo {
        return [BDSKWebParser parserInfoWithName:@"ACM" 
address:@"https://dl.acm.org/"; description:nil feature:BDSKParserFeaturePublic];
 }

Modified: trunk/bibdesk/BDSKCiteULikeParser.h
===================================================================
--- trunk/bibdesk/BDSKCiteULikeParser.h 2018-02-12 16:16:48 UTC (rev 21902)
+++ trunk/bibdesk/BDSKCiteULikeParser.h 2018-02-12 18:17:46 UTC (rev 21903)
@@ -36,10 +36,9 @@
  */
 
 #import <Cocoa/Cocoa.h>
-#import "BDSKWebParser.h"
-#import "BDSKBibTeXParser.h"
+#import "BDSKLinkedBibTeXParser.h"
 
-@interface BDSKCiteULikeParser: NSObject <BDSKWebParser>
+@interface BDSKCiteULikeParser : BDSKLinkedBibTeXParser
 @end
 
 

Modified: trunk/bibdesk/BDSKCiteULikeParser.m
===================================================================
--- trunk/bibdesk/BDSKCiteULikeParser.m 2018-02-12 16:16:48 UTC (rev 21902)
+++ trunk/bibdesk/BDSKCiteULikeParser.m 2018-02-12 18:17:46 UTC (rev 21903)
@@ -36,67 +36,16 @@
  */
 
 #import "BDSKCiteULikeParser.h"
-#import <WebKit/WebKit.h>
-#import "BibItem.h"
-#import "BDSKBibTeXParser.h"
 #import "NSString_BDSKExtensions.h"
 
 @implementation BDSKCiteULikeParser
 
-+ (BOOL)canParseDocument:(DOMDocument *)domDocument xmlDocument:(NSXMLDocument 
*)xmlDocument fromURL:(NSURL *)url{
-    
-    if ([url host] == nil || [[url host] 
isCaseInsensitiveEqual:@"www.citeulike.org"] == NO){
-        return NO;
-    }
-    
-    
-    NSString *containsBibtexNode = @".//textarea[@id='bibtex-body']";
-   
-    NSError *error = nil;    
++ (NSString *)host { return @"www.citeulike.org"; }
 
-    bool nodecountisok =  [[[xmlDocument rootElement] 
nodesForXPath:containsBibtexNode error:&error] count] > 0;
++ (NSString *)linkedBibTeXNodeXPath { return 
@".//textarea[@id='bibtex-body']"; }
 
-    return nodecountisok;
-}
++ (NSString *)linkedBibTeXURLStringFromNode:(NSXMLNode *)node { return nil; }
 
-+ (NSArray *)itemsFromDocument:(DOMDocument *)domDocument 
xmlDocument:(NSXMLDocument *)xmlDocument fromURL:(NSURL *)url error:(NSError 
**)outError{
-
-    NSMutableArray *items = [NSMutableArray arrayWithCapacity:0];
-    
-    
-    NSString *bibtexPath = @".//textarea[@id='bibtex-body']";
-    
-    NSError *error = nil;    
-
-    NSArray *bibtexNodes = [[xmlDocument rootElement] nodesForXPath:bibtexPath
-                                                    error:&error];
-    
-    if ([bibtexNodes count] < 1) {
-        if (outError) *outError = error;
-        return nil;
-    }
-    
-    NSString *preString = [[bibtexNodes objectAtIndex:0] stringValue];
-    
-    NSArray* bibtexItems = [BDSKBibTeXParser itemsFromString:preString 
owner:nil error:&error];
-    if ([bibtexItems count] == 0){
-        // display a fake item in the table rather than the annoying modal 
failure alert
-        NSString *errMsg = NSLocalizedString(@"Unable to parse as BibTeX", 
@"google scholar error");
-        NSDictionary *pubFields = [NSDictionary 
dictionaryWithObjectsAndKeys:errMsg, BDSKTitleString, nil];
-        BibItem *errorItem = [[BibItem alloc] initWithType:BDSKMiscString 
citeKey:nil pubFields:pubFields isNew:YES];
-        [items addObject:errorItem];
-        [errorItem release];
-    }
-    else {
-    [items addObjectsFromArray:bibtexItems];
-    }
-
-    return items;  
-    
-}
-
-
-
 + (NSDictionary *)parserInfo {
        return [BDSKWebParser parserInfoWithName:@"CiteULike" 
address:@"https://www.citeulike.org/"; description:nil 
feature:BDSKParserFeaturePublic];
 }

Modified: trunk/bibdesk/BDSKLinkedBibTeXParser.h
===================================================================
--- trunk/bibdesk/BDSKLinkedBibTeXParser.h      2018-02-12 16:16:48 UTC (rev 
21902)
+++ trunk/bibdesk/BDSKLinkedBibTeXParser.h      2018-02-12 18:17:46 UTC (rev 
21903)
@@ -57,6 +57,10 @@
 // By default returns the href attribute of the node
 + (NSString *)linkedBibTeXURLStringFromNode:(NSXMLNode *)node;
 
+// Allows subclasses to further process the string returned from the link to 
get bibtex data
+// By default returns the string
++ (NSString *)linkedBibTeXStringFromReturnedString:(NSString *)string;
+
 // Allows subclasses to post process a bibTeX item
 + (void)postProcessItem:(BibItem *)item;
 

Modified: trunk/bibdesk/BDSKLinkedBibTeXParser.m
===================================================================
--- trunk/bibdesk/BDSKLinkedBibTeXParser.m      2018-02-12 16:16:48 UTC (rev 
21902)
+++ trunk/bibdesk/BDSKLinkedBibTeXParser.m      2018-02-12 18:17:46 UTC (rev 
21903)
@@ -53,6 +53,8 @@
     return [node stringValueOfAttribute:@"href"];
 }
 
++ (NSString *)linkedBibTeXStringFromReturnedString:(NSString *)string { return 
string; }
+
 + (void)postProcessItem:(BibItem *)item {}
 
 + (BOOL)canParseDocument:(DOMDocument *)domDocument xmlDocument:(NSXMLDocument 
*)xmlDocument fromURL:(NSURL *)url {
@@ -87,31 +89,40 @@
     }
     
     for (NSXMLNode *searchResult in searchResults) {
+        NSArray *bibtexItems = nil;
+        NSString *bibTeXString = nil;
+        NSURL *btURL = nil;
         NSString *btURLString = [self 
linkedBibTeXURLStringFromNode:searchResult];
         
-        if ([btURLString hasPrefix:@"//"]) {
-            btURLString = [NSString stringWithFormat:@"%@:%@", [url scheme], 
btURLString];
-        } else if ([btURLString hasPrefix:@"/"]) {
-            btURLString = [NSString stringWithFormat:@"%@://%@%@", [url 
scheme], [url host], btURLString];
-        } else if ([btURLString containsString:@"://"] == NO) {
-            NSString *path = [url path];
-            if ([path hasSuffix:@"/"] == NO) {
-                path = [path stringByDeletingLastPathComponent];
-                if ([path hasSuffix:@"/"] == NO)
-                    path = [path stringByAppendingString:@"/"];
+        if (btURLString == nil) {
+            bibTeXString = [searchResult stringValue];
+        } else {
+            if ([btURLString hasPrefix:@"//"]) {
+                btURLString = [NSString stringWithFormat:@"%@:%@", [url 
scheme], btURLString];
+            } else if ([btURLString hasPrefix:@"/"]) {
+                btURLString = [NSString stringWithFormat:@"%@://%@%@", [url 
scheme], [url host], btURLString];
+            } else if ([btURLString containsString:@"://"] == NO) {
+                NSString *path = [url path];
+                if ([path hasSuffix:@"/"] == NO) {
+                    path = [path stringByDeletingLastPathComponent];
+                    if ([path hasSuffix:@"/"] == NO)
+                        path = [path stringByAppendingString:@"/"];
+                }
+                btURLString = [NSString stringWithFormat:@"%@://%@%@%@", [url 
scheme], [url host], [path 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], btURLString];
             }
-            btURLString = [NSString stringWithFormat:@"%@://%@%@%@", [url 
scheme], [url host], [path 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], btURLString];
+            
+            btURL = [NSURL URLWithString:btURLString];
+            
+            NSStringEncoding encoding = NSUTF8StringEncoding;
+            bibTeXString = [NSString stringWithContentsOfURL:btURL 
usedEncoding:&encoding error:&error];
         }
         
-        NSURL *btURL = [NSURL URLWithString:btURLString];
+        if (bibTeXString) {
+            bibTeXString = [self 
linkedBibTeXStringFromReturnedString:bibTeXString];
+            if (bibTeXString)
+                bibtexItems = [BDSKBibTeXParser itemsFromString:bibTeXString 
owner:nil error:&error];
+        }
         
-        NSStringEncoding encoding = NSUTF8StringEncoding;
-        NSString *bibTeXString = [NSString stringWithContentsOfURL:btURL 
usedEncoding:&encoding error:&error];
-        NSArray *bibtexItems = nil;
-        
-        if (nil != bibTeXString)
-            bibtexItems = [BDSKBibTeXParser itemsFromString:bibTeXString 
owner:nil error:&error];
-        
         if ([bibtexItems count] && [error 
isLocalErrorWithCode:kBDSKBibTeXParserFailed] == NO) {
             BibItem *bibtexItem = [bibtexItems objectAtIndex:0];
             [self postProcessItem:bibtexItem];

Modified: trunk/bibdesk/BDSKSpiresParser.h
===================================================================
--- trunk/bibdesk/BDSKSpiresParser.h    2018-02-12 16:16:48 UTC (rev 21902)
+++ trunk/bibdesk/BDSKSpiresParser.h    2018-02-12 18:17:46 UTC (rev 21903)
@@ -37,8 +37,8 @@
  */
 
 #import <Cocoa/Cocoa.h>
-#import "BDSKWebParser.h"
+#import "BDSKLinkedBibTeXParser.h"
 
 
-@interface BDSKSpiresParser: NSObject <BDSKWebParser>
+@interface BDSKSpiresParser : BDSKLinkedBibTeXParser
 @end

Modified: trunk/bibdesk/BDSKSpiresParser.m
===================================================================
--- trunk/bibdesk/BDSKSpiresParser.m    2018-02-12 16:16:48 UTC (rev 21902)
+++ trunk/bibdesk/BDSKSpiresParser.m    2018-02-12 18:17:46 UTC (rev 21903)
@@ -37,123 +37,46 @@
  */
 
 #import "BDSKSpiresParser.h"
-#import <WebKit/WebKit.h>
-#import "BibItem.h"
-#import "BDSKBibTeXParser.h"
-#import "NSError_BDSKExtensions.h"
 #import "NSXMLNode_BDSKExtensions.h"
 
 
 @implementation BDSKSpiresParser
 
++ (NSString *)host { return @"inspirehep.net"; }
+
++ (NSString *)linkedBibTeXNodeXPath { return 
@"//a[contains(text(),'BibTeX')]"; }
+
++ (NSString *)linkedBibTeXStringFromReturnedString:(NSString *)string {
+    NSString *bibtexString = nil;
+    NSError *error = nil;
+    NSXMLDocument *btXMLDoc = [[NSXMLDocument alloc] initWithXMLString:string 
options:NSXMLDocumentTidyXML error:&error];
+    
+    if (btXMLDoc) {
+        NSArray *preNodes = [[btXMLDoc rootElement] 
nodesForXPath:@"//pre[contains(text(),'@')]" error:&error];
+        bibtexString = [[[[preNodes firstObject] stringValue] retain] 
autorelease];
+        [btXMLDoc release];
+    }
+    return bibtexString;
+}
+
 + (BOOL)canParseDocument:(DOMDocument *)domDocument xmlDocument:(NSXMLDocument 
*)xmlDocument fromURL:(NSURL *)url{
-    
     static NSArray *spiresHosts = nil;
     if (spiresHosts == nil)
         spiresHosts = [[NSArray alloc] 
initWithObjects:@"www.slac.stanford.edu", @"www-library.desy.de", 
@"www-spires.fnal.gov", @"usparc.ihep.su", @"www-spires.dur.ac.uk", 
@"www.yukawa.kyoto-u.ac.jp", @"www.spires.lipi.go.id", nil];
     
     NSString *host = [[url host] lowercaseString];
-    
-    if ([host isEqualToString:@"inspirehep.net"] == NO && ([spiresHosts 
containsObject:host] == NO || [[url path] hasCaseInsensitivePrefix:@"/spires"] 
== NO))
+    if ([host isEqualToString:[self host]] == NO && ([spiresHosts 
containsObject:host] == NO || [[url path] hasCaseInsensitivePrefix:@"/spires"] 
== NO))
         return NO;
     
-    NSString *containsBibTexLinkNode = @"//a[contains(text(),'BibTeX')]"; 
-    
-    NSError *error = nil;    
+    NSError *error = nil;
+    NSInteger nodecount = [[[xmlDocument rootElement] nodesForXPath:[self 
linkedBibTeXNodeXPath] error:&error] count];
 
-    NSInteger nodecount = [[[xmlDocument rootElement] 
nodesForXPath:containsBibTexLinkNode error:&error] count];
-
     return nodecount > 0;
 }
 
-
-// Despite the name, this method assumes there's only one bibitem to be had 
from the document. 
-// A potential enhancement would be to recognize documents that are index 
lists of citations
-// and follow links two levels deep to get bibitems from each citation in the 
list.
-
-+ (NSArray *)itemsFromDocument:(DOMDocument *)domDocument 
xmlDocument:(NSXMLDocument *)xmlDocument fromURL:(NSURL *)url error:(NSError 
**)outError{
-
-    NSMutableArray *items = [NSMutableArray arrayWithCapacity:0];
-    
-    
-    NSString *BibTexLinkNodePath = @"//a[contains(text(),'BibTeX')]";
-    
-    NSError *error = nil;    
-
-    NSArray *BibTeXLinkNodes = [[xmlDocument rootElement] 
nodesForXPath:BibTexLinkNodePath
-                                                    error:&error];
-        
-    // bail out with an XML error if the Xpath query fails
-    if (nil == BibTeXLinkNodes) {
-        if (outError) *outError = error;
-        return nil;
-    }
-    
-    NSUInteger i, iMax = [BibTeXLinkNodes count];
-    
-    // check the number of nodes first
-    if (0 == iMax) {
-        error = [NSError mutableLocalErrorWithCode:kBDSKWebParserFailed 
localizedDescription:NSLocalizedString(@"No BibTeX links found", @"Spires 
error")];
-        [error setValue:NSLocalizedString(@"Unable to parse this page.  Please 
report this to BibDesk's developers and provide the URL.", @"Spires error") 
forKey:NSLocalizedRecoverySuggestionErrorKey];
-        if (outError) *outError = error;
-        return nil;
-    }
-    
-    for(i=0; i < iMax; i++){
-        
-        NSXMLNode *btlinknode = [BibTeXLinkNodes objectAtIndex:i];
-        
-        NSString *hrefValue = [btlinknode stringValueOfAttribute:@"href"];
-        
-        if ([hrefValue hasCaseInsensitivePrefix:@"http://";] == NO && 
[hrefValue hasCaseInsensitivePrefix:@"https://";] == NO)
-            hrefValue = [NSString stringWithFormat:@"http://%@%@";, [url host], 
hrefValue];
-        
-        NSURL *btURL = [NSURL URLWithString:hrefValue];
-        
-        NSXMLDocument *btXMLDoc = [[NSXMLDocument alloc] 
initWithContentsOfURL:btURL options:NSXMLDocumentTidyHTML error:&error];
-        
-        if (btXMLDoc) {
-            
-            NSArray *preNodes = [[btXMLDoc rootElement] 
nodesForXPath:@"//pre[contains(text(),'@')]" error:&error];
-            NSString *bibTeXString = nil;
-            
-            if ([preNodes count])
-                bibTeXString = [[preNodes objectAtIndex:0] stringValue];
-            
-            NSArray* bibtexItems = nil;
-            
-            if (nil != bibTeXString)
-                bibtexItems = [BDSKBibTeXParser itemsFromString:bibTeXString 
owner:nil error:&error];
-            
-            if ([bibtexItems count] && [error 
isLocalErrorWithCode:kBDSKBibTeXParserFailed] == NO) {
-                BibItem *bibtexItem = [bibtexItems objectAtIndex:0]; 
-                
-                [items addObject:bibtexItem];
-            }
-            
-            [btXMLDoc release];
-        }
-
-    }
-        
-    if (0 == [items count]) {
-        // signal an error condition; this page had BibTeX links, but we were 
unable to parse anything
-        // the BibTeX parser /should/ have set the NSError
-        items = nil;
-        if (outError)
-            *outError = error;
-    }
-    
-    return items;  
-    
-}
-
-
-
 + (NSDictionary *)parserInfo {
        NSString * parserDescription = NSLocalizedString(@"INSPIRE database of 
literature on particle physics.", @"Description for INSPIRE site");
        return [BDSKWebParser parserInfoWithName:@"INSPIRE" 
address:@"https://inspirehep.net/";  description:parserDescription 
feature:BDSKParserFeaturePublic];
 }
 
-
 @end 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to