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