Revision: 28367
http://sourceforge.net/p/bibdesk/svn/28367
Author: hofman
Date: 2023-09-22 15:28:12 +0000 (Fri, 22 Sep 2023)
Log Message:
-----------
separate parsing month from string
Modified Paths:
--------------
trunk/bibdesk/BDSKFormatParser.m
trunk/bibdesk/NSDate_BDSKExtensions.h
trunk/bibdesk/NSDate_BDSKExtensions.m
Modified: trunk/bibdesk/BDSKFormatParser.m
===================================================================
--- trunk/bibdesk/BDSKFormatParser.m 2023-09-22 14:58:53 UTC (rev 28366)
+++ trunk/bibdesk/BDSKFormatParser.m 2023-09-22 15:28:12 UTC (rev 28367)
@@ -373,17 +373,7 @@
// month
NSString *monthString = [pub
stringValueOfField:BDSKMonthString];
if ([NSString isEmptyString:monthString] == NO) {
- if([monthString isComplex]) {
- NSArray *nodes = [monthString nodes];
- if ([nodes count] > 1 && [(BDSKStringNode *)[nodes
objectAtIndex:1] type] == BDSKStringNodeMacro)
- monthString = [(BDSKStringNode *)[nodes
objectAtIndex:1] value];
- else if ([nodes count] > 2 && [(BDSKStringNode
*)[nodes objectAtIndex:2] type] == BDSKStringNodeMacro)
- monthString = [(BDSKStringNode *)[nodes
objectAtIndex:2] value];
- else
- monthString = [(BDSKStringNode *)[nodes
objectAtIndex:0] value];
- }
- NSDate *date = [NSDate dateWithMonthString:monthString
yearString:@"2000"];
- NSInteger m = [[[[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar] autorelease]
component:NSCalendarUnitMonth fromDate:date];
+ NSInteger m = [NSDate monthFromString:monthString] ?:
1;
monthString = [NSString
stringWithFormat:@"%.2ld", m];
[parsedStr
appendString:monthString];
}
Modified: trunk/bibdesk/NSDate_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSDate_BDSKExtensions.h 2023-09-22 14:58:53 UTC (rev
28366)
+++ trunk/bibdesk/NSDate_BDSKExtensions.h 2023-09-22 15:28:12 UTC (rev
28367)
@@ -48,6 +48,7 @@
@interface NSDate (BDSKExtensions)
++ (NSInteger)monthFromString:(NSString *)monthString;
+ (NSDate *)dateWithMonthString:(NSString *)monthString yearString:(NSString
*)yearString;
- (NSString *)dateDescription;
Modified: trunk/bibdesk/NSDate_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSDate_BDSKExtensions.m 2023-09-22 14:58:53 UTC (rev
28366)
+++ trunk/bibdesk/NSDate_BDSKExtensions.m 2023-09-22 15:28:12 UTC (rev
28367)
@@ -45,11 +45,16 @@
@implementation NSDate (BDSKExtensions)
-+ (NSDate *)dateWithMonthString:(NSString *)monthString yearString:(NSString
*)yearString {
- if([yearString isComplex])
- yearString = [(BDSKStringNode *)[[yearString nodes] objectAtIndex:0]
value];
- if ([NSString isEmptyString:yearString])
- return nil;
+static NSCalendar *gregorianCalendar() {
+ static NSCalendar *gregorianCalendar = nil;
+ if (gregorianCalendar == nil) {
+ gregorianCalendar = [[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
+ [gregorianCalendar setLocale:[NSLocale
localeWithLocaleIdentifier:@"en_US_POSIX"]];
+ }
+ return gregorianCalendar;
+}
+
++ (NSInteger)monthFromString:(NSString *)monthString {
if([monthString isComplex]) {
BDSKStringNode *node = nil;
NSArray *nodes = [monthString nodes];
@@ -81,37 +86,37 @@
if (start > 0 || end < [monthString length])
monthString = [monthString substringWithRange:NSMakeRange(start,
end - start)];
}
- static NSCalendar *calendar = nil;
- if (calendar == nil) {
- calendar = [[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
- [calendar setLocale:[NSLocale
localeWithLocaleIdentifier:@"en_US_POSIX"]];
- }
- if ([NSString isEmptyString:monthString])
- monthString = @"1";
- NSInteger year = [yearString integerValue];
- if ([yearString length] <= 2) {
- year += 2000;
- if (year > [calendar component:NSCalendarUnitYear fromDate:[NSDate
date]])
- year -= 100;
- }
- NSInteger month = 1;
+ NSInteger month = 0;
if ([monthString length] < 3 && [[NSCharacterSet decimalDigitCharacterSet]
characterIsMember:[monthString characterAtIndex:0]]) {
month = [monthString integerValue];
} else {
monthString = [monthString lowercaseString];
- NSUInteger i = [[[calendar shortMonthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
+ NSUInteger i = [[[gregorianCalendar() shortMonthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
if (i == NSNotFound) {
- i = [[[calendar monthSymbols] valueForKey:@"lowercaseString"]
indexOfObject:monthString];
+ i = [[[gregorianCalendar() monthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
if (i == NSNotFound && [[[NSLocale currentLocale]
localeIdentifier] hasPrefix:@"en"] == NO) {
- [calendar setLocale:[NSLocale currentLocale]];
- i = [[[calendar shortMonthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
+ [gregorianCalendar() setLocale:[NSLocale currentLocale]];
+ i = [[[gregorianCalendar() shortMonthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
if (i == NSNotFound)
- i = [[[calendar monthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
- [calendar setLocale:[NSLocale
localeWithLocaleIdentifier:@"en_US_POSIX"]];
+ i = [[[gregorianCalendar() monthSymbols]
valueForKey:@"lowercaseString"] indexOfObject:monthString];
+ [gregorianCalendar() setLocale:[NSLocale
localeWithLocaleIdentifier:@"en_US_POSIX"]];
}
}
- month = i == NSNotFound ? 1 : i + 1;
+ if (i != NSNotFound)
+ month = i + 1;
}
+ return month;
+}
+
++ (NSDate *)dateWithMonthString:(NSString *)monthString yearString:(NSString
*)yearString {
+ if([yearString isComplex])
+ yearString = [(BDSKStringNode *)[[yearString nodes] objectAtIndex:0]
value];
+ if ([NSString isEmptyString:yearString])
+ return nil;
+ NSInteger year = [yearString integerValue];
+ if ([yearString length] <= 2)
+ year += year < 50 ? 2000 : 1900;
+ NSInteger month = [self monthFromString:monthString] ?: 1;
NSDateComponents *components = [[[NSDateComponents alloc] init]
autorelease];
[components setYear:year];
[components setMonth:month];
@@ -119,7 +124,7 @@
[components setHour:12];
[components setMonth:0];
[components setSecond:0];
- return [calendar dateFromComponents:components];
+ return [gregorianCalendar() dateFromComponents:components];
}
- (NSString *)dateDescription{
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit