Monotone-Parent: 672551e38e8a075f699074177a66d9f7f114f873

Monotone-Revision: 1f7e270223f35974083eee7059e0a42cf720ad5e

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-06-19T18:03:18
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2007-06-19 18:03:18 +00:00
parent 921ecf63cb
commit 3137eec66d
5 changed files with 321 additions and 192 deletions

View File

@ -30,8 +30,8 @@ libSOGo_HEADER_FILES = \
\
LDAPUserManager.h \
LDAPSource.h \
SOGoDateFormatter.h \
SOGoPermissions.h \
WOContext+Agenor.h \
SOGoDAVRendererTypes.h \
NSArray+Utilities.h \
NSDictionary+URL.h \
@ -55,10 +55,10 @@ libSOGo_OBJC_FILES = \
SOGoGroupFolder.m \
SOGoCustomGroupFolder.m \
\
SOGoDateFormatter.m \
SOGoPermissions.m \
LDAPUserManager.m \
LDAPSource.m \
WOContext+Agenor.m \
SOGoDAVRendererTypes.m \
AgenorUserDefaults.m \
NSArray+Utilities.m \

View File

@ -0,0 +1,68 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#ifndef __SOGoDateFormatter_H_
#define __SOGoDateFormatter_H_
#import <Foundation/NSFormatter.h>
@class NSCalendarDate;
@class NSDictionary;
@class NSString;
@interface SOGoDateFormatter : NSFormatter
{
NSDictionary *locale;
NSString *shortDateFormat;
NSString *longDateFormat;
NSString *timeFormat;
}
- (void) setLocale: (NSDictionary *) newLocale;
- (void) setShortDateFormat: (NSString *) newDateFormat;
- (void) setLongDateFormat: (NSString *) newDateFormat;
- (void) setTimeFormat: (NSString *) newDateFormat;
- (NSString *) shortFormattedDate: (NSCalendarDate *) date;
- (NSString *) formattedDate: (NSCalendarDate *) date;
- (NSString *) formattedTime: (NSCalendarDate *) date;
- (NSString *) formattedDateAndTime: (NSCalendarDate *) date;
- (NSString *) stringForObjectValue: (id) date;
// - (void) setFullWeekdayNameAndDetails;
// - (NSString *) date: (NSCalendarDate *) date
// withFormat: (unsigned int) format;
// - (NSString *) date: (NSCalendarDate *) date
// withNSFormat: (NSNumber *) format;
// - (NSString *) shortDayOfWeek: (int)_day;
// - (NSString *) fullDayOfWeek: (int)_day;
// - (NSString *) shortMonthOfYear: (int)_month;
// - (NSString *) fullMonthOfYear: (int)_month;
// - (NSString *) fullWeekdayNameAndDetailsForDate: (NSCalendarDate *)_date;
@end
#endif /* __SOGoDateFormatter_H_ */

View File

@ -0,0 +1,251 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSUserDefaults.h>
#import "SOGoDateFormatter.h"
@implementation SOGoDateFormatter
- (id) init
{
if ((self = [super init]))
{
locale = nil;
// locale = [_locale retain];
// if ([[locale objectForKey:@"NSLocaleCode"] isEqualToString: @"fr"])
// shortDateFormat = SOGoDateDMYFormat;
// else
// shortDateFormat = SOGoDateISOFormat;
shortDateFormat = nil;
longDateFormat = nil;
timeFormat = nil;
}
return self;
}
- (void) dealloc
{
[longDateFormat release];
[shortDateFormat release];
[timeFormat release];
[locale release];
[super dealloc];
}
/* accessors */
- (void) setLocale: (NSDictionary *) newLocale
{
ASSIGN (locale, newLocale);
ASSIGN (shortDateFormat, [locale objectForKey: NSShortDateFormatString]);
ASSIGN (longDateFormat, [locale objectForKey: NSDateFormatString]);
ASSIGN (timeFormat, [locale objectForKey: NSTimeFormatString]);
}
- (void) setShortDateFormat: (NSString *) newFormat
{
ASSIGN (shortDateFormat, newFormat);
}
- (void) setLongDateFormat: (NSString *) newFormat
{
ASSIGN (longDateFormat, newFormat);
}
- (void) setTimeFormat: (NSString *) newFormat
{
ASSIGN (timeFormat, newFormat);
}
// - (void) setFullWeekdayNameAndDetails
// {
// auxFormatAction = formatAction;
// formatAction = @selector(fullWeekdayNameAndDetailsForDate:);
// }
/* operation */
- (NSString *) _date: (NSCalendarDate *) date
withFormat: (NSString *) format
{
NSString *formattedDate;
if (format && locale)
formattedDate
= [date descriptionWithCalendarFormat: format locale: locale];
else
formattedDate = nil;
return formattedDate;
}
- (NSString *) shortFormattedDate: (NSCalendarDate *) date
{
return [self _date: date withFormat: shortDateFormat];
}
- (NSString *) formattedDate: (NSCalendarDate *) date
{
return [self _date: date withFormat: longDateFormat];
}
- (NSString *) formattedTime: (NSCalendarDate *) date
{
return [self _date: date withFormat: timeFormat];
}
- (NSString *) formattedDateAndTime: (NSCalendarDate *) date
{
NSString *format;
format = [NSString stringWithFormat: @"%@ %@ %%Z",
longDateFormat, timeFormat];
return [self _date: date withFormat: format];
}
- (NSString *) stringForObjectValue: (id) object
{
NSString *formattedString;
if ([object isKindOfClass: [NSCalendarDate class]])
formattedString = [self formattedDateAndTime: object];
else
formattedString = nil;
return formattedString;
}
// /* Helpers */
// - (NSString *)shortDayOfWeek:(int)_day {
// return [[locale objectForKey:@"NSShortWeekDayNameArray"]
// objectAtIndex:_day];
// }
// - (NSString *)fullDayOfWeek:(int)_day {
// return [[locale objectForKey:@"NSWeekDayNameArray"]
// objectAtIndex:_day];
// }
// - (NSString *)shortMonthOfYear:(int)_month {
// return [[locale objectForKey:@"NSShortMonthNameArray"]
// objectAtIndex:_month - 1];
// }
// - (NSString *)fullMonthOfYear:(int)_month {
// return [[locale objectForKey:@"NSMonthNameArray"]
// objectAtIndex:_month - 1];
// }
/* Private API */
// - (NSString *) fullWeekdayNameAndDetailsForDate: (NSCalendarDate *) _date
// {
// NSMutableString *desc;
// if (_date)
// {
// desc = [NSMutableString stringWithCapacity:24];
// [desc appendString:[self fullDayOfWeek:[_date dayOfWeek]]];
// [desc appendString:@", "];
// [desc appendString:[self performSelector:auxFormatAction
// withObject:_date]];
// [desc appendString:@" "];
// [desc appendFormat:@"%02d:%02d ", [_date hourOfDay], [_date minuteOfHour]];
// [desc appendString:[[_date timeZone] abbreviation]];
// }
// else
// desc = nil;
// return desc;
// }
// - (NSString *) _separatorForFormat: (unsigned int) format
// {
// NSString *separator;
// switch (format & (3))
// {
// case SOGoDateDotFormat:
// separator = @".";
// break;
// case SOGoDateDashFormat:
// separator = @".";
// break;
// default:
// separator = @"/";
// }
// return separator;
// }
// - (NSString *) _dateFormatForDate: (NSCalendarDate *) date
// withFormat: (unsigned int) format
// andSeparator: (NSString *) separator
// {
// NSString *day, *month, *year;
// NSString *formattedDate;
// day = [NSString stringWithFormat: @"%.2d", [date dayOfMonth]];
// month = [NSString stringWithFormat: @"%.2d", [date monthOfYear]];
// if (format & SOGoDateTwoDigitsYearFormat)
// year = [NSString stringWithFormat: @"%.2d", [date yearOfCommonEra] % 100];
// else
// year = [NSString stringWithFormat: @"%.4d", [date yearOfCommonEra]];
// if (format & SOGoDateDMYFormat)
// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
// day, separator, month, separator, year];
// else if (format & SOGoDateMDYFormat)
// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
// month, separator, day, separator, year];
// else
// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
// year, separator, month, separator, day];
// return formattedDate;
// }
// - (NSString *) date: (NSCalendarDate *) date
// withFormat: (unsigned int) format
// {
// NSString *separator;
// separator = [self _separatorForFormat: format];
// return [self _dateFormatForDate: date
// withFormat: format
// andSeparator: separator];
// }
// - (NSString *) date: (NSCalendarDate *) date
// withNSFormat: (NSNumber *) format
// {
// return [self date: date withFormat: [format unsignedIntValue]];
// }
@end /* SOGoDateFormatter */

View File

@ -1,56 +0,0 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#ifndef __SOGoDateFormatter_H_
#define __SOGoDateFormatter_H_
#import <Foundation/NSFormatter.h>
@class NSString, NSCalendarDate, NSDictionary;
@interface SOGoDateFormatter : NSFormatter
{
NSDictionary *locale;
SEL formatAction;
SEL auxFormatAction;
}
- (id)initWithLocale:(NSDictionary *)_locale;
- (void)setISODateFormat;
- (void)setFrenchDateFormat;
- (void)setFullWeekdayNameAndDetails;
- (NSString *)stringForObjectValue:(id)_obj;
- (NSString *) stringForSecondsSinceThe70s: (unsigned int) seconds;
- (NSString *)shortDayOfWeek:(int)_day;
- (NSString *)fullDayOfWeek:(int)_day;
- (NSString *)shortMonthOfYear:(int)_month;
- (NSString *)fullMonthOfYear:(int)_month;
- (NSString *)isoDateFormatForDate:(NSCalendarDate *)_date;
- (NSString *)fullWeekdayNameAndDetailsForDate:(NSCalendarDate *)_date;
@end
#endif /* __SOGoDateFormatter_H_ */

View File

@ -1,134 +0,0 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "SOGoDateFormatter.h"
#include "common.h"
@implementation SOGoDateFormatter
- (id)initWithLocale:(NSDictionary *)_locale {
if ((self = [super init])) {
self->locale = [_locale retain];
if ([[self->locale objectForKey:@"NSLocaleCode"] isEqualToString:@"fr"])
[self setFrenchDateFormat];
else
[self setISODateFormat];
}
return self;
}
- (void)dealloc {
[self->locale release];
[super dealloc];
}
/* accessors */
- (void)setISODateFormat {
self->formatAction = @selector(isoDateFormatForDate:);
}
- (void)setFrenchDateFormat {
self->formatAction = @selector(frenchDateFormatForDate:);
}
- (void)setFullWeekdayNameAndDetails {
self->auxFormatAction = self->formatAction;
self->formatAction = @selector(fullWeekdayNameAndDetailsForDate:);
}
/* operation */
- (NSString *) stringForObjectValue: (id) _obj
{
return [self performSelector:self->formatAction
withObject:_obj];
}
- (NSString *) stringForSecondsSinceThe70s: (unsigned int) seconds
{
return [self stringForObjectValue:
[NSCalendarDate dateWithTimeIntervalSince1970: seconds]];
}
/* Helpers */
- (NSString *)shortDayOfWeek:(int)_day {
return [[self->locale objectForKey:@"NSShortWeekDayNameArray"]
objectAtIndex:_day];
}
- (NSString *)fullDayOfWeek:(int)_day {
return [[self->locale objectForKey:@"NSWeekDayNameArray"]
objectAtIndex:_day];
}
- (NSString *)shortMonthOfYear:(int)_month {
return [[self->locale objectForKey:@"NSShortMonthNameArray"]
objectAtIndex:_month - 1];
}
- (NSString *)fullMonthOfYear:(int)_month {
return [[self->locale objectForKey:@"NSMonthNameArray"]
objectAtIndex:_month - 1];
}
/* Private API */
- (NSString *)isoDateFormatForDate:(NSCalendarDate *)_date {
char buf[16];
if (_date == nil) return nil;
snprintf(buf, sizeof(buf),
"%04d-%02d-%02d",
[_date yearOfCommonEra], [_date monthOfYear], [_date dayOfMonth]);
return [NSString stringWithCString:buf];
}
- (NSString *)frenchDateFormatForDate:(NSCalendarDate *)_date {
char buf[16];
if (_date == nil) return nil;
snprintf(buf, sizeof(buf),
"%02d/%02d/%04d",
[_date dayOfMonth], [_date monthOfYear], [_date yearOfCommonEra]);
return [NSString stringWithCString:buf];
}
- (NSString *)fullWeekdayNameAndDetailsForDate:(NSCalendarDate *)_date {
NSMutableString *desc;
if (_date == nil) return nil;
desc = [NSMutableString stringWithCapacity:24];
[desc appendString:[self fullDayOfWeek:[_date dayOfWeek]]];
[desc appendString:@", "];
[desc appendString:[self performSelector:self->auxFormatAction
withObject:_date]];
[desc appendString:@" "];
[desc appendFormat:@"%02d:%02d ", [_date hourOfDay], [_date minuteOfHour]];
[desc appendString:[[_date timeZone] abbreviation]];
return desc;
}
@end /* SOGoDateFormatter */