Revision: 22460
http://sourceforge.net/p/bibdesk/svn/22460
Author: hofman
Date: 2018-07-23 17:43:11 +0000 (Mon, 23 Jul 2018)
Log Message:
-----------
Dash (minus) is an escaped character for format. Convenience functions for
scanning optional arguments in format.
Modified Paths:
--------------
trunk/bibdesk/BDSKFormatParser.m
trunk/bibdesk/BibDesk.help/Contents/Resources/English.lproj/bibdesk.texi
Modified: trunk/bibdesk/BDSKFormatParser.m
===================================================================
--- trunk/bibdesk/BDSKFormatParser.m 2018-07-23 17:25:19 UTC (rev 22459)
+++ trunk/bibdesk/BDSKFormatParser.m 2018-07-23 17:43:11 UTC (rev 22460)
@@ -75,6 +75,7 @@
static inline BOOL stringHasCharacterNotInRange(NSString *string, NSRange
range);
static BOOL scanOptArg(NSScanner *scanner, NSString **result, NSString
*defaultResult);
+static BOOL scanSignedDigit(NSScanner *scanner, NSUInteger *resultDigit, BOOL
*resultSign);
+ (void)initialize {
BDSKINITIALIZE;
@@ -83,7 +84,7 @@
validParamSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"aApPtTkfwciuUn"] retain];
validUniqueSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"uUn"] retain];
validLocalFileSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"lLeE"] retain];
- validEscapeSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"0123456789%[]"] retain];
+ validEscapeSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"0123456789%[]-"] retain];
validArgSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"fwcsi"] retain];
validOptArgSpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"aApPTEkfwsuUn"] retain];
validOptArg3SpecifierChars = [[NSCharacterSet
characterSetWithCharactersInString:@"APws"] retain];
@@ -149,24 +150,9 @@
if (NO == [scanner isAtEnd]) {
// look for [separator] and
[etal]
scanOptArg(scanner, &authSep, @"") &&
scanOptArg(scanner, &etal, @"");
- if ([scanner
peekCharacter:&nextChar]) {
- // look for #names
- if (nextChar == '-') {
- [scanner setScanLocation:[scanner
scanLocation]+1];
- if ([scanner peekCharacter:&nextChar] &&
[[NSCharacterSet decimalDigitCharacterSet] characterIsMember:nextChar]) {
- isLast = YES;
- } else {
- [scanner setScanLocation:[scanner
scanLocation]-1];
- nextChar = '-';
- }
- }
- if ([[NSCharacterSet decimalDigitCharacterSet]
characterIsMember:nextChar]) {
- [scanner
setScanLocation:[scanner scanLocation]+1];
- numAuth =
(NSUInteger)(nextChar - '0');
- // scan for
#chars per name
- if (NO ==
[scanner scanUnsignedInteger:&numChars]) numChars = 0;
- }
- }
+ // look for #names and #chars per name
+ if (scanSignedDigit(scanner, &numAuth, &isLast))
+ if (NO == [scanner scanUnsignedInteger:&numChars])
numChars = 0;
}
NSArray *authArray = [pub
peopleArrayForField:BDSKAuthorString];
if ([authArray count] == 0 && specifier
== 'p') {
@@ -213,22 +199,8 @@
if (NO == [scanner isAtEnd]) {
// 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 == '-') {
- [scanner setScanLocation:[scanner
scanLocation]+1];
- if ([scanner peekCharacter:&nextChar] &&
[[NSCharacterSet decimalDigitCharacterSet] characterIsMember:nextChar]) {
- isLast = YES;
- } else {
- [scanner setScanLocation:[scanner
scanLocation]-1];
- nextChar = '-';
- }
- }
- if ([[NSCharacterSet
decimalDigitCharacterSet] characterIsMember:nextChar]) {
- [scanner
setScanLocation:[scanner scanLocation]+1];
- numAuth =
(NSUInteger)(nextChar - '0');
- }
- }
+ // look for #names
+ scanSignedDigit(scanner, &numAuth, &isLast);
}
NSArray *authArray = [pub
peopleArrayForField:BDSKAuthorString];
if ([authArray count] == 0 && specifier
== 'P') {
@@ -1224,4 +1196,27 @@
return YES;
}
+static BOOL scanSignedDigit(NSScanner *scanner, NSUInteger *resultDigit, BOOL
*resultSign) {
+ unichar nextChar;
+ BOOL isNeg = NO;
+ if ([scanner peekCharacter:&nextChar]) {
+ if (nextChar == '-') {
+ [scanner setScanLocation:[scanner scanLocation]+1];
+ if ([scanner peekCharacter:&nextChar] && [[NSCharacterSet
decimalDigitCharacterSet] characterIsMember:nextChar]) {
+ isNeg = YES;
+ } else {
+ [scanner setScanLocation:[scanner scanLocation]-1];
+ nextChar = '-';
+ }
+ }
+ if ([[NSCharacterSet decimalDigitCharacterSet]
characterIsMember:nextChar]) {
+ [scanner setScanLocation:[scanner scanLocation]+1];
+ if (resultDigit) *resultDigit = (NSUInteger)(nextChar - '0');
+ if (resultSign) *resultSign = isNeg;
+ return YES;
+ }
+ }
+ return NO;
+}
+
@end
Modified:
trunk/bibdesk/BibDesk.help/Contents/Resources/English.lproj/bibdesk.texi
===================================================================
--- trunk/bibdesk/BibDesk.help/Contents/Resources/English.lproj/bibdesk.texi
2018-07-23 17:25:19 UTC (rev 22459)
+++ trunk/bibdesk/BibDesk.help/Contents/Resources/English.lproj/bibdesk.texi
2018-07-23 17:43:11 UTC (rev 22460)
@@ -3817,6 +3817,8 @@
@tab Escaped square bracket (if allowed)
@item @spec{%]}
@tab Escaped square bracket (if allowed)
+@item @spec{%-}
+@tab Escaped dash (if allowed)
@end multitable
@noindent
In the table above, @value{paramdescr} characters after the specifiers
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