1 /* 2 ******************************************************************************* 3 * Copyright (C) 2003 - 2013, 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 192 public: 193 /** 194 * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 195 * override. This method is to implement a simple version of RTTI, since not all C++ 196 * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 197 * this method. 198 * 199 * @return The class ID for this object. All objects of a given class have the 200 * same class ID. Objects of other classes have different class IDs. 201 * @internal 202 */ 203 virtual UClassID getDynamicClassID(void) const; 204 205 /** 206 * Return the class ID for this class. This is useful only for comparing to a return 207 * value from getDynamicClassID(). For example: 208 * 209 * Base* polymorphic_pointer = createPolymorphicObject(); 210 * if (polymorphic_pointer->getDynamicClassID() == 211 * Derived::getStaticClassID()) ... 212 * 213 * @return The class ID for all objects of this class. 214 * @internal 215 */ 216 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 217 218 #if 0 219 // We do not want to introduce this API in ICU4C. 220 // It was accidentally introduced in ICU4J as a public API. 221 public: 222 //------------------------------------------------------------------------- 223 // Calendar system Conversion methods... 224 //------------------------------------------------------------------------- 225 /** 226 * Convert an Coptic year, month, and day to a Julian day. 227 * 228 * @param year the extended year 229 * @param month the month 230 * @param day the day 231 * @return Julian day 232 * @internal 233 */ 234 static int32_t copticToJD(int32_t year, int32_t month, int32_t day); 235 #endif 236 }; 237 238 U_NAMESPACE_END 239 240 #endif /* #if !UCONFIG_NO_FORMATTING */ 241 #endif /* COPTCCAL_H */ 242 //eof 243