Revision: 24447 http://sourceforge.net/p/bibdesk/svn/24447 Author: hofman Date: 2019-12-10 22:31:48 +0000 (Tue, 10 Dec 2019) Log Message: ----------- Look for both prism and dc namespace
Modified Paths: -------------- trunk/bibdesk/BDSKPRISMParser.m Modified: trunk/bibdesk/BDSKPRISMParser.m =================================================================== --- trunk/bibdesk/BDSKPRISMParser.m 2019-12-10 21:43:42 UTC (rev 24446) +++ trunk/bibdesk/BDSKPRISMParser.m 2019-12-10 22:31:48 UTC (rev 24447) @@ -45,7 +45,10 @@ @implementation BDSKPRISMParser + (BOOL)canParseString:(NSString *)string { - AGRegex *regex = [AGRegex regexWithPattern:@"<rdf:RDF [^>]*xmlns:prism=\"http://(prismstandard\\.org/namespaces/basic|purl\\.org/dc/elements)/[0-9.]+/?\""]; + AGRegex *regex = [AGRegex regexWithPattern:@"<rdf:RDF [^>]*xmlns:prism=\"http://prismstandard\\.org/namespaces/basic/[0-9.]+/?\""]; + if (nil == [regex findInString:string]) + return NO; + regex = [AGRegex regexWithPattern:@"<rdf:RDF [^>]*xmlns:dc=\"http://purl\\.org/dc/elements/[0-9.]+/?\""]; return nil != [regex findInString:string]; } @@ -59,6 +62,12 @@ return array; } +static NSString *cleanCDATA(NSString *string) { + if ([string hasPrefix:@"<![CDATA["] && [string hasSuffix:@"]]"]) + return [string substringWithRange:NSMakeRange(9, [string length] - 11)]; + return string; +} + + (NSArray *)itemsFromString:(NSString *)xmlString error:(NSError **)outError { if (nil == xmlString) return [NSArray array]; @@ -70,15 +79,13 @@ NSMutableArray *pubs = [NSMutableArray array]; - NSString *separator = [[NSUserDefaults standardUserDefaults] stringForKey:BDSKDefaultGroupFieldSeparatorKey]; - NSArray *items = [[doc rootElement] nodesForXPath:@"./item" error:NULL]; for (NSXMLNode *node in items) { NSMutableDictionary *pubDict = [[NSMutableDictionary alloc] initWithCapacity:5]; + NSArray *array; + NSMutableArray *authors = [NSMutableArray array]; - NSArray *array; - [authors addObjectsFromArray:getProperties(node, @"dc:creator")]; [authors addObjectsFromArray:getProperties(node, @"dc:contributor")]; if ([authors count] == 0) @@ -89,23 +96,23 @@ if ((array = getProperties(node, @"dc:title")) || (array = getProperties(node, @"title")) || (array = getProperties(node, @"prism:publicationName"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKTitleString]; + [pubDict setObject:cleanCDATA([array firstObject]) forKey:BDSKTitleString]; if ((array = getProperties(node, @"prism:keyword")) || (array = getProperties(node, @"dc:subject"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKKeywordsString]; + [pubDict setObject:[array componentsJoinedByString:[[NSUserDefaults standardUserDefaults] stringForKey:BDSKDefaultGroupFieldSeparatorKey]] forKey:BDSKKeywordsString]; if ((array = getProperties(node, @"dc:publisher"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKPublisherString]; + [pubDict setObject:[array firstObject] forKey:BDSKPublisherString]; if ((array = getProperties(node, @"dc:location"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:@"Location"]; + [pubDict setObject:[array firstObject] forKey:@"Location"]; if ((array = getProperties(node, @"prism:coverDate")) || (array = getProperties(node, @"dc:date")) || (array = getProperties(node, @"prism:publicationDate")) || (array = getProperties(node, @"pubDate"))) { - NSString *dateString = [array componentsJoinedByString:separator]; + NSString *dateString = [array firstObject]; [pubDict setObject:dateString forKey:BDSKDateString]; array = [dateString componentsSeparatedByString:@"-"]; if ([array count] > 0) @@ -117,8 +124,8 @@ if ((array = getProperties(node, @"dc:description")) || (array = getProperties(node, @"description")) || (array = getProperties(node, @"content:endoded"))) { - NSString *cleanString = [array componentsJoinedByString:separator]; - cleanString = [cleanString stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; + NSString *cleanString = [array firstObject]; + cleanString = cleanCDATA([cleanString stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]); if (cleanString) [pubDict setObject:cleanString forKey:BDSKAbstractString]; } @@ -127,22 +134,27 @@ (array = getProperties(node, @"url")) || (array = getProperties(node, @"link")) || (array = getProperties(node, @"dc:relation"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKUrlString]; + [pubDict setObject:[array firstObject] forKey:BDSKUrlString]; - if ((array = getProperties(node, @"dc:source")) || - (array = getProperties(node, @"prism:publicationName"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKJournalString]; + NSString *journal = nil; + if ((array = getProperties(node, @"dc:source"))) + journal = [array firstObject]; + if ((array = getProperties(node, @"prism:publicationName")) && + (journal == nil || [journal hasPrefix:[array firstObject]])) + journal = [array firstObject]; + if (journal) + [pubDict setObject:journal forKey:BDSKJournalString]; if ((array = getProperties(node, @"prism:volume"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKVolumeString]; + [pubDict setObject:[array firstObject] forKey:BDSKVolumeString]; if ((array = getProperties(node, @"prism:number"))) - [pubDict setObject:[array componentsJoinedByString:separator] forKey:BDSKNumberString]; + [pubDict setObject:[array firstObject] forKey:BDSKNumberString]; if ((array = getProperties(node, @"prism:doi")) || (array = getProperties(node, @"dc:identifier")) || (array = getProperties(node, @"guid"))) { - NSString *doi = [array componentsJoinedByString:separator]; + NSString *doi = [array firstObject]; if ([doi hasCaseInsensitivePrefix:@"doi:"]) doi = [doi substringFromIndex:4]; [pubDict setObject:doi forKey:BDSKDoiString]; @@ -150,16 +162,16 @@ NSString *pages = nil; if ((array = getProperties(node, @"prism:startingPage"))) { - pages = [array componentsJoinedByString:separator]; + pages = [array firstObject]; if ((array = getProperties(node, @"prism:endingPage"))) - pages = [NSString stringWithFormat:@"%@-%@", pages, [array componentsJoinedByString:separator]]; + pages = [NSString stringWithFormat:@"%@-%@", pages, [array firstObject]]; else if ((array = getProperties(node, @"prism:pageCount"))) - pages = [NSString stringWithFormat:@"%@-%ld", pages, (unsigned long)([pages integerValue] + [[array componentsJoinedByString:separator] integerValue])]; + pages = [NSString stringWithFormat:@"%@-%ld", pages, (unsigned long)([pages integerValue] + [[array firstObject] integerValue])]; else pages = nil; } if (pages == nil && (array = getProperties(node, @"prism:pageRange"))) - pages = [array componentsJoinedByString:separator]; + pages = [array firstObject]; if (pages) [pubDict setObject:pages forKey:BDSKPagesString]; 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