Revision: 22005 http://sourceforge.net/p/bibdesk/svn/22005 Author: hofman Date: 2018-02-22 11:02:32 +0000 (Thu, 22 Feb 2018) Log Message: ----------- better xpath for bibtex, check all text of elements
Modified Paths: -------------- trunk/bibdesk/BDSKBibTeXWebParser.m Modified: trunk/bibdesk/BDSKBibTeXWebParser.m =================================================================== --- trunk/bibdesk/BDSKBibTeXWebParser.m 2018-02-22 07:30:33 UTC (rev 22004) +++ trunk/bibdesk/BDSKBibTeXWebParser.m 2018-02-22 11:02:32 UTC (rev 22005) @@ -48,7 +48,7 @@ + (BOOL)canParseDocument:(DOMDocument *)domDocument xmlDocument:(NSXMLDocument *)xmlDocument fromURL:(NSURL *)url{ - NSString *mayContainBibtexXPath = @"./body//*[contains(text(),'@') and (contains(text(),'{') or contains(text(),'('))]"; + NSString *mayContainBibtexXPath = @"./body//*/text()[contains(.,'@')]/.."; NSError *error; NSArray *nodes = [[xmlDocument rootElement] nodesForXPath:mayContainBibtexXPath error:&error]; @@ -59,7 +59,9 @@ AGRegex *bibtexRegex = [AGRegex regexWithPattern:@"@[[:alpha:]]+[ \\t]*[{(]"]; for (NSXMLNode *node in nodes) { - if ([bibtexRegex findInString:[node stringValue]]) + // stringValue replaces <br /> with "\\n" rather than "\n" + NSString *string = [[node stringValue] stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; + if ([bibtexRegex findInString:string]) return YES; } @@ -70,7 +72,7 @@ - (void)start { NSMutableArray *items = [NSMutableArray array]; - NSString *mayContainBibtexXPath = @"./body//*[contains(text(),'@') and (contains(text(),'{') or contains(text(),'('))]"; + NSString *mayContainBibtexXPath = @"./body//*/text()[contains(.,'@')]/.."; NSError *error = nil; NSArray *nodes = [[xmlDocument rootElement] nodesForXPath:mayContainBibtexXPath error:&error]; @@ -79,8 +81,8 @@ AGRegex *bibtexRegex = [AGRegex regexWithPattern:@"@[[:alpha:]]+[ \\t]*[{(]"]; for (NSXMLNode *node in nodes) { - NSString *string = [node stringValue]; - + NSString *string = [[node stringValue] stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; + AGRegexMatch *match = [bibtexRegex findInString:string]; if (match) { 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