|
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 |