Revision: 22459
http://sourceforge.net/p/bibdesk/svn/22459
Author: hofman
Date: 2018-07-23 17:25:19 +0000 (Mon, 23 Jul 2018)
Log Message:
-----------
dash (minus) can be escaped character
Modified Paths:
--------------
trunk/bibdesk/BDSKFormatParser.m
Modified: trunk/bibdesk/BDSKFormatParser.m
===================================================================
--- trunk/bibdesk/BDSKFormatParser.m 2018-07-23 15:41:47 UTC (rev 22458)
+++ trunk/bibdesk/BDSKFormatParser.m 2018-07-23 17:25:19 UTC (rev 22459)
@@ -72,34 +72,9 @@
static NSDictionary *textAttr = nil;
static NSDictionary *errorAttr = nil;
-static inline BOOL stringHasCharacterNotInRange(NSString *string, NSRange
range) {
- NSUInteger i, iMax = [string length];
- for (i = 0; i < iMax; i++) {
- if (NSLocationInRange([string characterAtIndex:i], range) == NO)
- return YES;
- }
- return NO;
-}
+static inline BOOL stringHasCharacterNotInRange(NSString *string, NSRange
range);
-static BOOL scanOptArg(NSScanner *scanner, NSString **result) {
- NSMutableString *tmpString = nil;
- NSString *string = nil;
- unichar escapeChar;
- while (YES) {
- if ([scanner scanUpToCharactersFromSet:optArgStopChars
intoString:&string] && tmpString != nil)
- [tmpString appendString:string];
- if ([scanner scanString:@"%" intoString:NULL] == NO || [scanner
scanCharacter:&escapeChar] == NO)
- break;
- if (tmpString == nil)
- tmpString = [NSMutableString stringWithString:string ?: @""];
- [tmpString appendFormat:@"%C", escapeChar];
- }
- if ([tmpString length] == 0 && [string length] == 0)
- return NO;
- if (result)
- *result = tmpString ?: string;
- return YES;
-}
+static BOOL scanOptArg(NSScanner *scanner, NSString **result, NSString
*defaultResult);
+ (void)initialize {
BDSKINITIALIZE;
@@ -172,16 +147,8 @@
NSString *etal = @"";
BOOL isLast = NO;
if (NO == [scanner isAtEnd]) {
- // look for [separator]
- if ([scanner scanString:@"["
intoString:NULL]) {
- if (NO ==
scanOptArg(scanner, &authSep)) authSep = @"";
- [scanner
scanString:@"]" intoString:NULL];
- // look for [etal]
- if ([scanner
scanString:@"[" intoString:NULL]) {
- if (NO ==
scanOptArg(scanner, &etal)) etal = @"";
- [scanner
scanString:@"]" intoString:NULL];
- }
- }
+ // look for [separator] and
[etal]
+ scanOptArg(scanner, &authSep, @"") &&
scanOptArg(scanner, &etal, @"");
if ([scanner
peekCharacter:&nextChar]) {
// look for #names
if (nextChar == '-') {
@@ -244,21 +211,8 @@
NSString *etal = @"";
BOOL isLast = NO;
if (NO == [scanner isAtEnd]) {
- // look for [author separator]
- if ([scanner scanString:@"["
intoString:NULL]) {
- if (NO ==
scanOptArg(scanner, &authSep)) authSep = @"";
- [scanner
scanString:@"]" intoString:NULL];
- // look for [name
separator]
- if ([scanner
scanString:@"[" intoString:NULL]) {
- if (NO ==
scanOptArg(scanner, &nameSep)) nameSep = @"";
- [scanner
scanString:@"]" intoString:NULL];
- // look for
[etal]
- if ([scanner
scanString:@"[" intoString:NULL]) {
- if (NO
== scanOptArg(scanner, &etal)) etal = @"";
-
[scanner scanString:@"]" intoString:NULL];
- }
- }
- }
+ // look for [author separator],
[name separator], and [etal]
+ scanOptArg(scanner, &authSep, @"") &&
scanOptArg(scanner, &nameSep, @"") && scanOptArg(scanner, &etal, @"");
if ([scanner
peekCharacter:&nextChar]) {
// look for #names
if (nextChar == '-') {
@@ -340,13 +294,8 @@
NSUInteger smallWordLength = 3;
NSString *numString = nil;
NSString *title = [pub title];
- if ([scanner scanString:@"[" intoString:NULL]) {
- if (scanOptArg(scanner, &numString))
- smallWordLength = (NSUInteger)[numString
integerValue];
- else
- smallWordLength = 0;
- [scanner scanString:@"]" intoString:NULL];
- }
+ if (scanOptArg(scanner, &numString, @"0"))
+ smallWordLength = (NSUInteger)[numString integerValue];
if (NO == [scanner
scanUnsignedInteger:&numWords]) numWords = 0;
if ([NSString isEmptyString:title] ==
NO) {
NSMutableArray *words =
[NSMutableArray array];
@@ -430,17 +379,10 @@
case 'k':
{
// keywords
- // look for [slash]
NSString *slash = (isLocalFile) ? @"-"
: @"/";
NSString *sep = nil;
- if ([scanner scanString:@"["
intoString:NULL]) {
- if (NO == scanOptArg(scanner,
&slash)) slash = @"";
- [scanner scanString:@"]"
intoString:NULL];
- if ([scanner scanString:@"[" intoString:NULL]) {
- if (NO == scanOptArg(scanner, &sep)) sep = @"";
- [scanner scanString:@"]" intoString:NULL];
- }
- }
+ // look for [slash] and [sep]
+ scanOptArg(scanner, &slash, @"") && scanOptArg(scanner,
&sep, @"");
NSString *keywordsString = [pub
stringValueOfField:BDSKKeywordsString];
NSUInteger i, numWords = 0;
if (NO == [scanner scanUnsignedInteger:&numWords])
numWords = 0;
@@ -531,10 +473,7 @@
{
// old file extension without period
NSString *defaultExt = @"";
- if ([scanner scanString:@"["
intoString:NULL]) {
- if (NO == scanOptArg(scanner,
&defaultExt)) defaultExt = @"";
- [scanner scanString:@"]"
intoString:NULL];
- }
+ scanOptArg(scanner, &defaultExt, @"");
NSString *filename = nil;
if (file)
filename = [[file URL] path];
@@ -572,10 +511,7 @@
[scanner scanUpToString:@"}"
intoString:&key] &&
[scanner scanString:@"}"
intoString:NULL]) {
// look for [slash]
- if ([scanner scanString:@"["
intoString:NULL]) {
- if (NO ==
scanOptArg(scanner, &slash)) slash = @"";
- [scanner
scanString:@"]" intoString:NULL];
- }
+ scanOptArg(scanner, &slash,
@"");
if (NO == [scanner
scanUnsignedInteger:&numChars]) numChars = 0;
if (NO == [fieldName
isEqualToString:BDSKCiteKeyString] &&
@@ -612,20 +548,8 @@
if ([scanner scanString:@"{" intoString:NULL] &&
[scanner scanUpToString:@"}"
intoString:&key] &&
[scanner scanString:@"}"
intoString:NULL]) {
- // look for [sep]
- if ([scanner scanString:@"[" intoString:NULL]) {
- if (NO == scanOptArg(scanner, &sepChars)) sepChars
= @" ";
- [scanner scanString:@"]" intoString:NULL];
- // look for [slash]
- if ([scanner scanString:@"[" intoString:NULL]) {
- if (NO == scanOptArg(scanner, &slash)) slash =
@"";
- [scanner scanString:@"]" intoString:NULL];
- if ([scanner scanString:@"[" intoString:NULL])
{
- if (NO == scanOptArg(scanner, &sep)) sep =
@"";
- [scanner scanString:@"]" intoString:NULL];
- }
- }
- }
+ // look for [sep chars], [slash], and [sep]
+ scanOptArg(scanner, &sepChars, @" ") &&
scanOptArg(scanner, &slash, @"") && scanOptArg(scanner, &sep, @"");
NSString *wordsString = [pub stringValueOfField:key];
NSUInteger i, numWords = 0;
if (NO == [scanner scanUnsignedInteger:&numWords])
numWords = 0;
@@ -696,21 +620,8 @@
if ([scanner scanString:@"{"
intoString:NULL] &&
[scanner scanUpToString:@"}"
intoString:&key] &&
[scanner scanString:@"}"
intoString:NULL]) {
- // look for [yes value]
- if ([scanner scanString:@"["
intoString:NULL]) {
- if (NO ==
scanOptArg(scanner, &yesValue)) yesValue = @"";
- [scanner
scanString:@"]" intoString:NULL];
- // look for [no value]
- if ([scanner scanString:@"[" intoString:NULL]) {
- if (NO == scanOptArg(scanner, &noValue))
noValue = @"";
- [scanner scanString:@"]" intoString:NULL];
- // look for [mixed value]
- if ([scanner scanString:@"[" intoString:NULL])
{
- if (NO == scanOptArg(scanner,
&mixedValue)) mixedValue = @"";
- [scanner scanString:@"]" intoString:NULL];
- }
- }
- }
+ // look for [yes value]m, [no
value], and [mixed value]
+ scanOptArg(scanner, &yesValue, @"") &&
scanOptArg(scanner, &noValue, @"") && scanOptArg(scanner, &mixedValue, @"");
if (NO == [scanner
scanUnsignedInteger:&numChars]) numChars = 0;
intValue = [pub integerValueOfField:key];
value = (intValue == 0 ? noValue : (intValue == 1 ?
yesValue : mixedValue));
@@ -809,10 +720,7 @@
uniqueSpecifier = specifier;
prefixStr = parsedStr;
parsedStr = [NSMutableString
string];
- if ([scanner scanString:@"[" intoString:NULL]) {
- scanOptArg(scanner, &uniqueSeparator);
- [scanner scanString:@"]" intoString:NULL];
- }
+ scanOptArg(scanner, &uniqueSeparator, nil);
if (NO == [scanner
scanUnsignedInteger:&uniqueNumber]) uniqueNumber = 1;
}
else {
@@ -1283,4 +1191,37 @@
return [papersFolderPath stringByExpandingTildeInPath];
}
+static inline BOOL stringHasCharacterNotInRange(NSString *string, NSRange
range) {
+ NSUInteger i, iMax = [string length];
+ for (i = 0; i < iMax; i++) {
+ if (NSLocationInRange([string characterAtIndex:i], range) == NO)
+ return YES;
+ }
+ return NO;
+}
+
+static BOOL scanOptArg(NSScanner *scanner, NSString **result, NSString
*defaultResult) {
+ if ([scanner scanString:@"[" intoString:NULL] == NO)
+ return NO;
+
+ NSMutableString *tmpString = nil;
+ NSString *string = nil;
+ unichar escapeChar;
+ while (YES) {
+ if ([scanner scanUpToCharactersFromSet:optArgStopChars
intoString:&string] && tmpString != nil)
+ [tmpString appendString:string];
+ if ([scanner scanString:@"%" intoString:NULL] == NO || [scanner
scanCharacter:&escapeChar] == NO)
+ break;
+ if (tmpString == nil)
+ tmpString = [NSMutableString stringWithString:string ?: @""];
+ [tmpString appendFormat:@"%C", escapeChar];
+ }
+ if (tmpString)
+ string = tmpString;
+ [scanner scanString:@"]" intoString:NULL];
+ if (result)
+ *result = [string length] > 0 ? string : defaultResult;
+ return YES;
+}
+
@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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit