1 /* 2 ******************************************************************************* 3 * Copyright (C) 2003 - 2008, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 */ 7 8 #ifndef COPTCCAL_H 9 #define COPTCCAL_H 10 11 #include "unicode/utypes.h" 12 13 #if !UCONFIG_NO_FORMATTING 14 15 #include "unicode/calendar.h" 16 #include "cecal.h" 17 18 U_NAMESPACE_BEGIN 19 20 /** 21 * Implement the Coptic calendar system. 22 * @internal 23 */ 24 class CopticCalendar : public CECalendar { 25 26 public: 27 /** 28 * Useful constants for CopticCalendar. 29 * @internal 30 */ 31 enum EMonths { 32 /** 33 * Constant for ωογτ/تﻮﺗ, 34 * the 1st month of the Coptic year. 35 */ 36 TOUT, 37 38 /** 39 * Constant for Παοπι/ﻪﺑﺎﺑ, 40 * the 2nd month of the Coptic year. 41 */ 42 BABA, 43 44 /** 45 * Constant for Αθορ/رﻮﺗﺎﻫ, 46 * the 3rd month of the Coptic year. 47 */ 48 HATOR, 49 50 /** 51 * Constant for Χοιακ/ﻚﻬﻴﻛ, 52 * the 4th month of the Coptic year. 53 */ 54 KIAHK, 55 56 /** 57 * Constant for Τωβι/طﻮﺒﻫ, 58 * the 5th month of the Coptic year. 59 */ 60 TOBA, 61 62 /** 63 * Constant for Μεϣιρ/ﺮﻴﺸﻣأ, 64 * the 6th month of the Coptic year. 65 */ 66 AMSHIR, 67 68 /** 69 * Constant for Παρεμϩατ/تﺎﻬﻣﺮﺑ, 70 * the 7th month of the Coptic year. 71 */ 72 BARAMHAT, 73 74 /** 75 * Constant for Φαρμοθι/هدﻮﻣﺮﺑ, 76 * the 8th month of the Coptic year. 77 */ 78 BARAMOUDA, 79 80 /** 81 * Constant for Παϣαν/ﺲﻨﺸﺑ, 82 * the 9th month of the Coptic year. 83 */ 84 BASHANS, 85 86 /** 87 * Constant for Παωνι/ﻪﻧؤﻮﺑ, 88 * the 10th month of the Coptic year. 89 */ 90 PAONA, 91 92 /** 93 * Constant for Επηπ/ﺐﻴﺑأ, 94 * the 11th month of the Coptic year. 95 */ 96 EPEP, 97 98 /** 99 * Constant for Μεϲωρη/ىﺮﺴﻣ, 100 * the 12th month of the Coptic year. 101 */ 102 MESRA, 103 104 /** 105 * Constant for Πικογϫι 106 * μαβοτ/ﺮﻴﻐﺼﻟا 107 * ﺮﻬﺸﻟا, 108 * the 13th month of the Coptic year. 109 */ 110 NASIE 111 }; 112 113 enum EEras { 114 BCE, // Before the epoch 115 CE // After the epoch 116 }; 117 118 /** 119 * Constructs a CopticCalendar based on the current time in the default time zone 120 * with the given locale. 121 * 122 * @param aLocale The given locale. 123 * @param success Indicates the status of CopticCalendar object construction. 124 * Returns U_ZERO_ERROR if constructed successfully. 125 * @internal 126 */ 127 CopticCalendar(const Locale& aLocale, UErrorCode& success); 128 129 /** 130 * Copy Constructor 131 * @internal 132 */ 133 CopticCalendar (const CopticCalendar& other); 134 135 /** 136 * Destructor. 137 * @internal 138 */ 139 virtual ~CopticCalendar(); 140 141 /** 142 * Create and return a polymorphic copy of this calendar. 143 * @return return a polymorphic copy of this calendar. 144 * @internal 145 */ 146 virtual Calendar* clone(void) const; 147 148 /** 149 * return the calendar type, "coptic" 150 * @return calendar type 151 * @internal 152 */ 153 const char * getType() const; 154 155 protected: 156 //------------------------------------------------------------------------- 157 // Calendar framework 158 //------------------------------------------------------------------------- 159 160 /** 161 * Return the extended year defined by the current fields. 162 * @internal 163 */ 164 virtual int32_t handleGetExtendedYear(); 165 166 /** 167 * Compute fields from the JD 168 * @internal 169 */ 170 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 171 172 /** 173 * Returns the date of the start of the default century 174 * @return start of century - in milliseconds since epoch, 1970 175 * @internal 176 */ 177 virtual UDate defaultCenturyStart() const; 178 179 /** 180 * Returns the year in which the default century begins 181 * @internal 182 */ 183 virtual int32_t defaultCenturyStartYear() const; 184 185 /** 186 * Return the date offset from Julian 187 * @internal 188 */ 189 virtual int32_t getJDEpochOffset() const; 190 191 private: 192 /** 193 * The system maintains a static default century start date. This is initialized 194 * the first time it is used. Before then, it is set to SYSTEM_DEFAULT_CENTURY to 195 * indicate an uninitialized state. Once the system default century date and year 196 * are set, they do not change. 197 */ 198 static UDate fgSystemDefaultCenturyStart; 199 200 /** 201 * See documentation for systemDefaultCenturyStart. 202 */ 203 static int32_t fgSystemDefaultCenturyStartYear; 204 205 /** 206 * Default value that indicates the defaultCenturyStartYear is unitialized 207 */ 208 static const int32_t fgSystemDefaultCenturyYear; 209 210 /** 211 * start of default century, as a date 212 */ 213 static const UDate fgSystemDefaultCentury; 214 215 /** 216 * Initializes the 100-year window that dates with 2-digit years 217 * are considered to fall within so that its start date is 80 years 218 * before the current time. 219 */ 220 static void initializeSystemDefaultCentury(void); 221 222 public: 223 /** 224 * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 225 * override. This method is to implement a simple version of RTTI, since not all C++ 226 * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 227 * this method. 228 * 229 * @return The class ID for this object. All objects of a given class have the 230 * same class ID. Objects of other classes have different class IDs. 231 * @internal 232 */ 233 virtual UClassID getDynamicClassID(void) const; 234 235 /** 236 * Return the class ID for this class. This is useful only for comparing to a return 237 * value from getDynamicClassID(). For example: 238 * 239 * Base* polymorphic_pointer = createPolymorphicObject(); 240 * if (polymorphic_pointer->getDynamicClassID() == 241 * Derived::getStaticClassID()) ... 242 * 243 * @return The class ID for all objects of this class. 244 * @internal 245 */ 246 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 247 248 #if 0 249 // We do not want to introduce this API in ICU4C. 250 // It was accidentally introduced in ICU4J as a public API. 251 public: 252 //------------------------------------------------------------------------- 253 // Calendar system Conversion methods... 254 //------------------------------------------------------------------------- 255 /** 256 * Convert an Coptic year, month, and day to a Julian day. 257 * 258 * @param year the extended year 259 * @param month the month 260 * @param day the day 261 * @return Julian day 262 * @internal 263 */ 264 static int32_t copticToJD(int32_t year, int32_t month, int32_t day); 265 #endif 266 }; 267 268 U_NAMESPACE_END 269 270 #endif /* #if !UCONFIG_NO_FORMATTING */ 271 #endif /* COPTCCAL_H */ 272 //eof 273