]>
Commit | Line | Data |
---|---|---|
46f4442e A |
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 |