1 // © 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 CopticCalendar* clone() 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