tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

japancal.h (7474B)


      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-2008, International Business Machines Corporation
      6 * and others. All Rights Reserved.
      7 ********************************************************************************
      8 *
      9 * File JAPANCAL.H
     10 *
     11 * Modification History:
     12 *
     13 *   Date        Name        Description
     14 *   05/13/2003  srl         copied from gregocal.h
     15 ********************************************************************************
     16 */
     17 
     18 #ifndef JAPANCAL_H
     19 #define JAPANCAL_H
     20 
     21 #include "unicode/utypes.h"
     22 
     23 #if !UCONFIG_NO_FORMATTING
     24 
     25 #include "unicode/calendar.h"
     26 #include "unicode/gregocal.h"
     27 
     28 U_NAMESPACE_BEGIN
     29 
     30 /**
     31 * Concrete class which provides the Japanese calendar.
     32 * <P>
     33 * <code>JapaneseCalendar</code> is a subclass of <code>GregorianCalendar</code>
     34 * that numbers years and eras based on the reigns of the Japanese emperors.
     35 * The Japanese calendar is identical to the Gregorian calendar in all respects
     36 * except for the year and era.  The ascension of each  emperor to the throne
     37 * begins a new era, and the years of that era are numbered starting with the
     38 * year of ascension as year 1.
     39 * <p>
     40 * Note that in the year of an imperial ascension, there are two possible sets
     41 * of year and era values: that for the old era and for the new.  For example, a
     42 * new era began on January 7, 1989 AD.  Strictly speaking, the first six days
     43 * of that year were in the Showa era, e.g. "January 6, 64 Showa", while the rest
     44 * of the year was in the Heisei era, e.g. "January 7, 1 Heisei".  This class
     45 * handles this distinction correctly when computing dates.  However, in lenient
     46 * mode either form of date is acceptable as input. 
     47 * <p>
     48 * In modern times, eras have started on January 8, 1868 AD, Gregorian (Meiji),
     49 * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heisei).  Constants
     50 * for these eras, suitable for use in the <code>UCAL_ERA</code> field, are provided
     51 * in this class.  Note that the <em>number</em> used for each era is more or
     52 * less arbitrary.  Currently, the era starting in 645 AD is era #0; however this
     53 * may change in the future.  Use the predefined constants rather than using actual,
     54 * absolute numbers.
     55 * <p>
     56 * Since ICU4C 63, start date of each era is imported from CLDR. CLDR era data
     57 * may contain tentative era in near future with placeholder names. By default,
     58 * such era data is not enabled. ICU4C users who want to test the behavior of
     59 * the future era can enable this one of following settings (in the priority
     60 * order):
     61 * <ol>
     62 * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
     63 * </nl>
     64 * @internal
     65 */
     66 class JapaneseCalendar : public GregorianCalendar {
     67 public:
     68 
     69    /**
     70     * Check environment variable. 
     71     * @internal
     72     */
     73    U_I18N_API static UBool U_EXPORT2 enableTentativeEra();
     74 
     75    /**
     76     * Useful constants for JapaneseCalendar.
     77     * Exported for use by test code.
     78     * @internal
     79     */
     80    U_I18N_API static uint32_t U_EXPORT2 getCurrentEra(); // the current era
     81 
     82    /**
     83     * Constructs a JapaneseCalendar based on the current time in the default time zone
     84     * with the given locale.
     85     *
     86     * @param aLocale  The given locale.
     87     * @param success  Indicates the status of JapaneseCalendar object construction.
     88     *                 Returns U_ZERO_ERROR if constructed successfully.
     89     * @stable ICU 2.0
     90     */
     91    JapaneseCalendar(const Locale& aLocale, UErrorCode& success);
     92 
     93 
     94    /**
     95     * Destructor
     96     * @internal
     97     */
     98    virtual ~JapaneseCalendar();
     99 
    100    /**
    101     * Copy constructor
    102     * @param source    the object to be copied.
    103     * @internal
    104     */
    105    JapaneseCalendar(const JapaneseCalendar& source);
    106 
    107    /**
    108     * Create and return a polymorphic copy of this calendar.
    109     * @return    return a polymorphic copy of this calendar.
    110     * @internal
    111     */
    112    virtual JapaneseCalendar* clone() const override;
    113 
    114    /**
    115     * Return the extended year defined by the current fields.  In the 
    116     * Japanese calendar case, this is equal to the equivalent extended Gregorian year.
    117     * @internal
    118     */
    119    virtual int32_t handleGetExtendedYear(UErrorCode& status) override;
    120 
    121    /**
    122     * Return the maximum value that this field could have, given the current date.
    123     * @internal
    124     */
    125    virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const override;
    126 
    127 
    128 public:
    129    /**
    130     * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual
    131     * override. This method is to implement a simple version of RTTI, since not all C++
    132     * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call
    133     * this method.
    134     *
    135     * @return   The class ID for this object. All objects of a given class have the
    136     *           same class ID. Objects of other classes have different class IDs.
    137     * @internal
    138     */
    139    virtual UClassID getDynamicClassID() const override;
    140 
    141    /**
    142     * Return the class ID for this class. This is useful only for comparing to a return
    143     * value from getDynamicClassID(). For example:
    144     *
    145     *      Base* polymorphic_pointer = createPolymorphicObject();
    146     *      if (polymorphic_pointer->getDynamicClassID() ==
    147     *          Derived::getStaticClassID()) ...
    148     *
    149     * @return   The class ID for all objects of this class.
    150     * @internal
    151     */
    152    U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
    153 
    154    /**
    155     * return the calendar type, "japanese".
    156     *
    157     * @return calendar type
    158     * @internal
    159     */
    160    virtual const char * getType() const override;
    161 
    162    DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY
    163 
    164 private:
    165    JapaneseCalendar(); // default constructor not implemented
    166 
    167 protected:
    168    /** 
    169     * Calculate the era for internal computation
    170     * @internal
    171     */
    172    virtual int32_t internalGetEra() const override;
    173 
    174    /**
    175     * Compute fields from the JD
    176     * @internal
    177     */
    178    virtual void handleComputeFields(int32_t julianDay, UErrorCode& status) override;
    179 
    180    /**
    181     * Calculate the limit for a specified type of limit and field
    182     * @internal
    183     */
    184    virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
    185 
    186    /***
    187     * Called by computeJulianDay.  Returns the default month (0-based) for the year,
    188     * taking year and era into account.  Will return the first month of the given era, if 
    189     * the current year is an ascension year.
    190     * @param eyear the extended year
    191     * @param status Indicates the status.
    192     * @internal
    193     */
    194    virtual int32_t getDefaultMonthInYear(int32_t eyear, UErrorCode& status) override;
    195 
    196    /***
    197     * Called by computeJulianDay.  Returns the default day (1-based) for the month,
    198     * taking currently-set year and era into account.  Will return the first day of the given
    199     * era, if the current month is an ascension year and month.
    200     * @param eyear the extended year
    201     * @param mon the month in the year
    202     * @param status Indicates the status.
    203     * @internal
    204     */
    205    virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month, UErrorCode& status) override;
    206 
    207    virtual bool isEra0CountingBackward() const override { return false; }
    208 };
    209 
    210 U_NAMESPACE_END
    211 
    212 #endif /* #if !UCONFIG_NO_FORMATTING */
    213 
    214 #endif
    215 //eof