Home | History | Annotate | Download | only in i18n
      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
    273