1 /* 2 ******************************************************************************* 3 * Copyright (C) 2003 - 2013, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 */ 7 8 #ifndef ETHPCCAL_H 9 #define ETHPCCAL_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 Ethiopic calendar system. 22 * @internal 23 */ 24 class EthiopicCalendar : public CECalendar { 25 26 public: 27 /** 28 * Calendar type - use Amete Alem era for all the time or not 29 * @internal 30 */ 31 enum EEraType { 32 AMETE_MIHRET_ERA, 33 AMETE_ALEM_ERA 34 }; 35 36 /** 37 * Useful constants for EthiopicCalendar. 38 * @internal 39 */ 40 enum EMonths { 41 /** 42 * Constant for መስከረም, the 1st month of the Ethiopic year. 43 */ 44 MESKEREM, 45 46 /** 47 * Constant for ጥቅምት, the 2nd month of the Ethiopic year. 48 */ 49 TEKEMT, 50 51 /** 52 * Constant for ኅዳር, the 3rd month of the Ethiopic year. 53 */ 54 HEDAR, 55 56 /** 57 * Constant for ታኅሣሥ, the 4th month of the Ethiopic year. 58 */ 59 TAHSAS, 60 61 /** 62 * Constant for ጥር, the 5th month of the Ethiopic year. 63 */ 64 TER, 65 66 /** 67 * Constant for የካቲት, the 6th month of the Ethiopic year. 68 */ 69 YEKATIT, 70 71 /** 72 * Constant for መጋቢት, the 7th month of the Ethiopic year. 73 */ 74 MEGABIT, 75 76 /** 77 * Constant for ሚያዝያ, the 8th month of the Ethiopic year. 78 */ 79 MIAZIA, 80 81 /** 82 * Constant for ግንቦት, the 9th month of the Ethiopic year. 83 */ 84 GENBOT, 85 86 /** 87 * Constant for ሰኔ, the 10th month of the Ethiopic year. 88 */ 89 SENE, 90 91 /** 92 * Constant for ሐምሌ, the 11th month of the Ethiopic year. 93 */ 94 HAMLE, 95 96 /** 97 * Constant for ነሐሴ, the 12th month of the Ethiopic year. 98 */ 99 NEHASSA, 100 101 /** 102 * Constant for ጳጉሜን, the 13th month of the Ethiopic year. 103 */ 104 PAGUMEN 105 }; 106 107 enum EEras { 108 AMETE_ALEM, // Before the epoch 109 AMETE_MIHRET // After the epoch 110 }; 111 112 /** 113 * Constructs a EthiopicCalendar based on the current time in the default time zone 114 * with the given locale. 115 * 116 * @param aLocale The given locale. 117 * @param success Indicates the status of EthiopicCalendar object construction. 118 * Returns U_ZERO_ERROR if constructed successfully. 119 * @param type Whether this Ethiopic calendar use Amete Mihrret (default) or 120 * only use Amete Alem for all the time. 121 * @internal 122 */ 123 EthiopicCalendar(const Locale& aLocale, UErrorCode& success, EEraType type = AMETE_MIHRET_ERA); 124 125 /** 126 * Copy Constructor 127 * @internal 128 */ 129 EthiopicCalendar(const EthiopicCalendar& other); 130 131 /** 132 * Destructor. 133 * @internal 134 */ 135 virtual ~EthiopicCalendar(); 136 137 /** 138 * Create and return a polymorphic copy of this calendar. 139 * @return return a polymorphic copy of this calendar. 140 * @internal 141 */ 142 virtual Calendar* clone() const; 143 144 /** 145 * return the calendar type, "ethiopic" 146 * @return calendar type 147 * @internal 148 */ 149 virtual const char * getType() const; 150 151 /** 152 * Set Alem or Mihret era. 153 * @param onOff Set Amete Alem era if true, otherwise set Amete Mihret era. 154 * @internal 155 */ 156 void setAmeteAlemEra (UBool onOff); 157 158 /** 159 * Return true if this calendar is set to the Amete Alem era. 160 * @return true if set to the Amete Alem era. 161 * @internal 162 */ 163 UBool isAmeteAlemEra() const; 164 165 protected: 166 //------------------------------------------------------------------------- 167 // Calendar framework 168 //------------------------------------------------------------------------- 169 170 /** 171 * Return the extended year defined by the current fields. 172 * @internal 173 */ 174 virtual int32_t handleGetExtendedYear(); 175 176 /** 177 * Compute fields from the JD 178 * @internal 179 */ 180 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 181 182 /** 183 * Calculate the limit for a specified type of limit and field 184 * @internal 185 */ 186 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 187 188 /** 189 * Returns the date of the start of the default century 190 * @return start of century - in milliseconds since epoch, 1970 191 * @internal 192 */ 193 virtual UDate defaultCenturyStart() const; 194 195 /** 196 * Returns the year in which the default century begins 197 * @internal 198 */ 199 virtual int32_t defaultCenturyStartYear() const; 200 201 /** 202 * Return the date offset from Julian 203 * @internal 204 */ 205 virtual int32_t getJDEpochOffset() const; 206 207 private: 208 /** 209 * When eraType is AMETE_ALEM_ERA, then this calendar use only AMETE_ALEM 210 * for the era. Otherwise (default), this calendar uses both AMETE_ALEM 211 * and AMETE_MIHRET. 212 * 213 * EXTENDED_YEAR AMETE_ALEM_ERA AMETE_MIHRET_ERA 214 * 0 Amete Alem 5500 Amete Alem 5500 215 * 1 Amete Mihret 1 Amete Alem 5501 216 */ 217 EEraType eraType; 218 219 public: 220 /** 221 * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 222 * override. This method is to implement a simple version of RTTI, since not all C++ 223 * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 224 * this method. 225 * 226 * @return The class ID for this object. All objects of a given class have the 227 * same class ID. Objects of other classes have different class IDs. 228 * @internal 229 */ 230 virtual UClassID getDynamicClassID(void) const; 231 232 /** 233 * Return the class ID for this class. This is useful only for comparing to a return 234 * value from getDynamicClassID(). For example: 235 * 236 * Base* polymorphic_pointer = createPolymorphicObject(); 237 * if (polymorphic_pointer->getDynamicClassID() == 238 * Derived::getStaticClassID()) ... 239 * 240 * @return The class ID for all objects of this class. 241 * @internal 242 */ 243 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 244 245 #if 0 246 // We do not want to introduce this API in ICU4C. 247 // It was accidentally introduced in ICU4J as a public API. 248 249 public: 250 //------------------------------------------------------------------------- 251 // Calendar system Conversion methods... 252 //------------------------------------------------------------------------- 253 254 /** 255 * Convert an Ethiopic year, month, and day to a Julian day. 256 * 257 * @param year the extended year 258 * @param month the month 259 * @param day the day 260 * @return Julian day 261 * @internal 262 */ 263 int32_t ethiopicToJD(int32_t year, int32_t month, int32_t day); 264 #endif 265 }; 266 267 U_NAMESPACE_END 268 #endif /* #if !UCONFIG_NO_FORMATTING */ 269 #endif /* ETHPCCAL_H */ 270 //eof 271