On Tue, 19 Mar 2013 14:16:18 +0100, Luboš Doležel wrote:
Hi,

the attached patch updates "FIXMEs" in NSCalendar.h now that we know
when the new features were really introduced.

It also adds -[NSDateComponents date]. While this method isn't
documented very well, this code should match the behavior of Apple's
Foundation.

Regards,

There have been some other additions that have impact on NSCalendar too.

This patch contains the previous patch + extra NSCalendar features.
Now it should be all.

--
Luboš Doležel
--- gnustep-base-1.24.3/Headers/Foundation/NSCalendar.h.orig	2013-03-19 13:58:09.155292011 +0100
+++ gnustep-base-1.24.3/Headers/Foundation/NSCalendar.h	2013-03-19 16:13:55.160003921 +0100
@@ -56,7 +56,12 @@
   NSWeekdayCalendarUnit = (1UL << 9),
   NSWeekdayOrdinalCalendarUnit = (1UL << 10),
 #if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
-  NSQuarterCalendarUnit = (1UL << 11)
+  NSQuarterCalendarUnit = (1UL << 11),
+#endif
+#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST)
+  NSWeekOfMonthCalendarUnit = (1UL << 12),
+  NSWeekOfYearCalendarUnit = (1UL << 13),
+  NSYearForWeekOfYearCalendarUnit = (1UL << 14),
 #endif
 };
 
@@ -85,11 +90,11 @@
   NSInteger _weekday;
   NSInteger _weekdayOrdinal;
   NSInteger _quarter;
-// FIXME: In reality these are only available on iOS > 4.  Will probably show
-// up in OS X 10.7.
-#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
+#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST)
   NSCalendar *_cal;
   NSTimeZone *_tz;
+  NSInteger _weekOfMonth;
+  NSInteger _yearForWeekOfYear;
 #endif
 }
 
@@ -120,13 +125,22 @@
 - (void) setQuarter: (NSInteger) v;
 #endif
 
-// FIXME: In reality these are only available on iOS > 4.
-#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
+#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST)
 - (NSCalendar *) calendar;
 - (NSTimeZone *) timeZone;
 - (void) setCalendar: (NSCalendar *) cal;
 - (void) setTimeZone: (NSTimeZone *) tz;
+- (NSDate *) date;
+
+- (NSInteger) weekOfMonth;
+- (NSInteger) weekOfYear;
+- (NSInteger) yearForWeekOfYear;
+
+- (void) setWeekOfMonth: (NSInteger) v;
+- (void) setWeekOfYear: (NSInteger) v;
+- (void) setYearForWeekOfYear: (NSInteger) v;
 #endif
+
 @end
 
 
--- gnustep-base-1.24.3/Source/NSCalendar.m.orig	2013-01-24 10:15:53.000000000 +0100
+++ gnustep-base-1.24.3/Source/NSCalendar.m	2013-03-19 16:24:01.948820574 +0100
@@ -300,7 +300,11 @@
   if (unitFlags & NSWeekdayCalendarUnit)
     [comps setWeekday: ucal_get (_cal, UCAL_DAY_OF_WEEK, &err)];
   if (unitFlags & NSWeekdayOrdinalCalendarUnit)
-    [comps setWeekdayOrdinal: ucal_get (_cal, UCAL_WEEK_OF_MONTH, &err)];
+    [comps setWeekdayOrdinal: ucal_get (_cal, UCAL_DAY_OF_WEEK_IN_MONTH, &err)];
+  if (unitFlags & NSWeekOfMonthCalendarUnit)
+    [comps setWeekOfMonth: ucal_get (_cal, UCAL_WEEK_OF_MONTH, &err)];
+  if (unitFlags & NSYearForWeekOfYearCalendarUnit)
+    [comps setYearForWeekOfYear: ucal_get (_cal, UCAL_YEAR_WOY, &err)];
   
   return AUTORELEASE(comps);
 #else
@@ -370,6 +374,14 @@
     {
       _ADD_COMPONENT(UCAL_DAY_OF_WEEK, amount);
     }
+  if ((amount = (int32_t)[comps weekOfMonth]) != NSUndefinedDateComponent)
+    {
+      _ADD_COMPONENT(UCAL_WEEK_OF_MONTH, amount);
+    }
+  if ((amount = (int32_t)[comps yearForWeekOfYear]) != NSUndefinedDateComponent)
+    {
+      _ADD_COMPONENT(UCAL_YEAR_WOY, amount);
+    }
 #undef _ADD_COMPONENT
   
   udate = ucal_getMillis (_cal, &err);
@@ -428,6 +440,14 @@
     {
       ucal_set (_cal, UCAL_DAY_OF_WEEK, amount);
     }
+  if ((amount = (int32_t)[comps weekOfMonth]) != NSUndefinedDateComponent)
+    {
+      ucal_set (_cal, UCAL_WEEK_OF_MONTH, amount);
+    }
+  if ((amount = (int32_t)[comps yearForWeekOfYear]) != NSUndefinedDateComponent)
+    {
+      ucal_set (_cal, UCAL_YEAR_WOY, amount);
+    }
   
   udate = ucal_getMillis (_cal, &err);
   if (U_FAILURE(err))
@@ -672,6 +692,10 @@
   _weekday = NSUndefinedDateComponent;
   _weekdayOrdinal = NSUndefinedDateComponent;
   _quarter = NSUndefinedDateComponent;
+  _weekOfMonth = NSUndefinedDateComponent;
+  _yearForWeekOfYear = NSUndefinedDateComponent;
+  _cal = NULL;
+  _tz = NULL;
   
   return self;
 }
@@ -731,6 +755,21 @@
   return _year;
 }
 
+- (NSInteger) weekOfMonth
+{
+  return _weekOfMonth;
+}
+
+- (NSInteger) weekOfYear
+{
+  return _week;
+}
+
+- (NSInteger) yearForWeekOfYear
+{
+  return _yearForWeekOfYear;
+}
+
 - (NSCalendar *) calendar
 {
   return _cal;
@@ -741,6 +780,16 @@
   return _tz;
 }
 
+- (NSDate *) date
+{
+  NSCalendar* cal = [self calendar];
+  NSTimeZone* zone = [self timeZone];
+
+  if (zone != NULL)
+    [cal setTimeZone: zone];
+
+  return [cal dateFromComponents: self];
+}
 
 
 - (void) setDay: (NSInteger) v
@@ -798,6 +847,21 @@
   _year = v;
 }
 
+- (void) setWeekOfYear: (NSInteger) v
+{
+  _week = v;
+}
+
+- (void) setWeekOfMonth: (NSInteger) v
+{
+  _weekOfMonth = v;
+}
+
+- (void) setYearForWeekOfYear: (NSInteger) v
+{
+  _yearForWeekOfYear = v;
+}
+
 - (void) setCalendar: (NSCalendar *) cal
 {
   if (_cal)
_______________________________________________
Gnustep-dev mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to