~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/icu/source/i18n/indiancal.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *****************************************************************************
3
 
 * Copyright (C) 2003-2008, International Business Machines Corporation
4
 
 * and others. All Rights Reserved.
5
 
 *****************************************************************************
6
 
 *
7
 
 * File INDIANCAL.H
8
 
 *****************************************************************************
9
 
 */
10
 
 
11
 
#ifndef INDIANCAL_H
12
 
#define INDIANCAL_H
13
 
 
14
 
#include "unicode/utypes.h"
15
 
 
16
 
#if !UCONFIG_NO_FORMATTING
17
 
 
18
 
#include "unicode/calendar.h"
19
 
 
20
 
U_NAMESPACE_BEGIN
21
 
 
22
 
/**
23
 
 * Concrete class which provides the Indian calendar.
24
 
 * <P>
25
 
 * <code>IndianCalendar</code> is a subclass of <code>Calendar</code>
26
 
 * that numbers years since the begining of SAKA ERA.  This is the civil calendar
27
 
 * which is accepted by government of India as Indian National Calendar.
28
 
 * The two calendars most widely used in India today are the Vikrama calendar
29
 
 * followed in North India and the Shalivahana or Saka calendar which is followed
30
 
 * in South India and Maharashtra.
31
 
 
32
 
 * A variant of the Shalivahana Calendar was reformed and standardized as the
33
 
 * Indian National calendar in 1957.
34
 
 * <p>
35
 
 * Some details of Indian National Calendar (to be implemented) :
36
 
 * The Months
37
 
 * Month          Length      Start date (Gregorian)
38
 
 * =================================================
39
 
 * 1 Chaitra      30/31          March 22*
40
 
 * 2 Vaisakha     31             April 21
41
 
 * 3 Jyaistha     31             May 22
42
 
 * 4 Asadha       31             June 22
43
 
 * 5 Sravana      31             July 23
44
 
 * 6 Bhadra       31             August 23
45
 
 * 7 Asvina       30             September 23
46
 
 * 8 Kartika      30             October 23
47
 
 * 9 Agrahayana   30             November 22
48
 
 * 10 Pausa       30             December 22
49
 
 * 11 Magha       30             January 21
50
 
 * 12 Phalguna    30             February 20
51
 
 
52
 
 * In leap years, Chaitra has 31 days and starts on March 21 instead.
53
 
 * The leap years of Gregorian calendar and Indian National Calendar are in synchornization.
54
 
 * So When its a leap year in Gregorian calendar then Chaitra has 31 days.
55
 
 *
56
 
 * The Years
57
 
 * Years are counted in the Saka Era, which starts its year 0 in 78AD (by gregorian calendar).
58
 
 * So for eg. 9th June 2006 by Gregorian Calendar, is same as 19th of Jyaistha in 1928 of Saka
59
 
 * era by Indian National Calendar.
60
 
 * <p>
61
 
 * The Indian Calendar has only one allowable era: <code>Saka Era</code>.  If the
62
 
 * calendar is not in lenient mode (see <code>setLenient</code>), dates before
63
 
 * 1/1/1 Saka Era are rejected with an <code>IllegalArgumentException</code>.
64
 
 * <p>
65
 
 * @internal
66
 
 */
67
 
 
68
 
 
69
 
class IndianCalendar : public Calendar {
70
 
public:
71
 
  /**
72
 
   * Useful constants for IndianCalendar.
73
 
   * @internal
74
 
   */
75
 
  enum EEras {
76
 
    /** 
77
 
     * Constant for Chaitra, the 1st month of the Indian year. 
78
 
     */
79
 
      CHAITRA,
80
 
 
81
 
      /**
82
 
     * Constant for Vaisakha, the 2nd month of the Indian year. 
83
 
     */
84
 
      VAISAKHA,
85
 
 
86
 
      /**
87
 
     * Constant for Jyaistha, the 3rd month of the Indian year. 
88
 
     */
89
 
      JYAISTHA,
90
 
 
91
 
    /**
92
 
     * Constant for Asadha, the 4th month of the Indian year. 
93
 
     */
94
 
      ASADHA,
95
 
 
96
 
    /**
97
 
     * Constant for Sravana, the 5th month of the Indian year. 
98
 
     */
99
 
      SRAVANA,
100
 
 
101
 
    /**
102
 
     * Constant for Bhadra the 6th month of the Indian year
103
 
     */
104
 
      BHADRA,
105
 
 
106
 
    /** 
107
 
     * Constant for the Asvina, the 7th month of the Indian year. 
108
 
     */
109
 
      ASVINA,
110
 
 
111
 
    /**
112
 
     * Constant for Kartika, the 8th month of the Indian year. 
113
 
     */
114
 
      KARTIKA,
115
 
 
116
 
    /**
117
 
     * Constant for Agrahayana, the 9th month of the Indian year. 
118
 
     */
119
 
      AGRAHAYANA,
120
 
 
121
 
    /**
122
 
     * Constant for Pausa, the 10th month of the Indian year. 
123
 
     */
124
 
      PAUSA,
125
 
 
126
 
    /**
127
 
     * Constant for Magha, the 11th month of the Indian year. 
128
 
     */
129
 
      MAGHA,
130
 
 
131
 
    /**
132
 
     * Constant for Phalguna, the 12th month of the Indian year. 
133
 
     */
134
 
      PHALGUNA
135
 
    };
136
 
 
137
 
  //-------------------------------------------------------------------------
138
 
  // Constructors...
139
 
  //-------------------------------------------------------------------------
140
 
 
141
 
  /**
142
 
   * Constructs an IndianCalendar based on the current time in the default time zone
143
 
   * with the given locale.
144
 
   *
145
 
   * @param aLocale  The given locale.
146
 
   * @param success  Indicates the status of IndianCalendar object construction.
147
 
   *                 Returns U_ZERO_ERROR if constructed successfully.
148
 
   * @param beCivil  Whether the calendar should be civil (default-TRUE) or religious (FALSE)
149
 
   * @internal
150
 
   */
151
 
  IndianCalendar(const Locale& aLocale, UErrorCode &success);
152
 
 
153
 
  /**
154
 
   * Copy Constructor
155
 
   * @internal
156
 
   */
157
 
  IndianCalendar(const IndianCalendar& other);
158
 
 
159
 
  /**
160
 
   * Destructor.
161
 
   * @internal
162
 
   */
163
 
  virtual ~IndianCalendar();
164
 
 
165
 
  /**
166
 
   * Determines whether this object uses the fixed-cycle Indian civil calendar
167
 
   * or an approximation of the religious, astronomical calendar.
168
 
   *
169
 
   * @param beCivil   <code>CIVIL</code> to use the civil calendar,
170
 
   *                  <code>ASTRONOMICAL</code> to use the astronomical calendar.
171
 
   * @internal
172
 
   */
173
 
  //void setCivil(ECivil beCivil, UErrorCode &status);
174
 
    
175
 
  /**
176
 
   * Returns <code>true</code> if this object is using the fixed-cycle civil
177
 
   * calendar, or <code>false</code> if using the religious, astronomical
178
 
   * calendar.
179
 
   * @internal
180
 
   */
181
 
  //UBool isCivil();
182
 
 
183
 
 
184
 
  // TODO: copy c'tor, etc
185
 
 
186
 
  // clone
187
 
  virtual Calendar* clone() const;
188
 
 
189
 
 private:
190
 
  /**
191
 
   * Determine whether a year is the gregorian year a leap year 
192
 
   */
193
 
  //static UBool isGregorianLeap(int32_t year);
194
 
  //----------------------------------------------------------------------
195
 
  // Calendar framework
196
 
  //----------------------------------------------------------------------
197
 
 protected:
198
 
  /**
199
 
   * @internal
200
 
   */
201
 
  virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
202
 
  
203
 
  /**
204
 
   * Return the length (in days) of the given month.
205
 
   *
206
 
   * @param year  The year in Saka era
207
 
   * @param year  The month(0-based) in Indian year
208
 
   * @internal
209
 
   */
210
 
  virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
211
 
  
212
 
  /**
213
 
   * Return the number of days in the given Indian year
214
 
   * @internal
215
 
   */
216
 
  virtual int32_t handleGetYearLength(int32_t extendedYear) const;
217
 
 
218
 
  //-------------------------------------------------------------------------
219
 
  // Functions for converting from field values to milliseconds....
220
 
  //-------------------------------------------------------------------------
221
 
 
222
 
  // Return JD of start of given month/year
223
 
  /**
224
 
   * @internal
225
 
   */
226
 
  virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
227
 
 
228
 
  //-------------------------------------------------------------------------
229
 
  // Functions for converting from milliseconds to field values
230
 
  //-------------------------------------------------------------------------
231
 
 
232
 
  /**
233
 
   * @internal
234
 
   */
235
 
  virtual int32_t handleGetExtendedYear();
236
 
 
237
 
  /**
238
 
   * Override Calendar to compute several fields specific to the Indian
239
 
   * calendar system.  These are:
240
 
   *
241
 
   * <ul><li>ERA
242
 
   * <li>YEAR
243
 
   * <li>MONTH
244
 
   * <li>DAY_OF_MONTH
245
 
   * <li>DAY_OF_YEAR
246
 
   * <li>EXTENDED_YEAR</ul>
247
 
   * 
248
 
   * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
249
 
   * method is called. The getGregorianXxx() methods return Gregorian
250
 
   * calendar equivalents for the given Julian day.
251
 
   * @internal
252
 
   */
253
 
  virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
254
 
 
255
 
  // UObject stuff
256
 
 public: 
257
 
  /**
258
 
   * @return   The class ID for this object. All objects of a given class have the
259
 
   *           same class ID. Objects of other classes have different class IDs.
260
 
   * @internal
261
 
   */
262
 
  virtual UClassID getDynamicClassID(void) const;
263
 
 
264
 
  /**
265
 
   * Return the class ID for this class. This is useful only for comparing to a return
266
 
   * value from getDynamicClassID(). For example:
267
 
   *
268
 
   *      Base* polymorphic_pointer = createPolymorphicObject();
269
 
   *      if (polymorphic_pointer->getDynamicClassID() ==
270
 
   *          Derived::getStaticClassID()) ...
271
 
   *
272
 
   * @return   The class ID for all objects of this class.
273
 
   * @internal
274
 
   */
275
 
  U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void);
276
 
 
277
 
  /**
278
 
   * return the calendar type, "buddhist".
279
 
   *
280
 
   * @return calendar type
281
 
   * @internal
282
 
   */
283
 
  virtual const char * getType() const;
284
 
 
285
 
private:
286
 
  IndianCalendar(); // default constructor not implemented
287
 
 
288
 
  // Default century.
289
 
protected:
290
 
 
291
 
  /**
292
 
   * (Overrides Calendar) Return true if the current date for this Calendar is in
293
 
   * Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
294
 
   *
295
 
   * @param status Fill-in parameter which receives the status of this operation.
296
 
   * @return   True if the current date for this Calendar is in Daylight Savings Time,
297
 
   *           false, otherwise.
298
 
   * @internal
299
 
   */
300
 
  virtual UBool inDaylightTime(UErrorCode& status) const;
301
 
 
302
 
 
303
 
  /**
304
 
   * Returns TRUE because the Indian Calendar does have a default century
305
 
   * @internal
306
 
   */
307
 
  virtual UBool haveDefaultCentury() const;
308
 
 
309
 
  /**
310
 
   * Returns the date of the start of the default century
311
 
   * @return start of century - in milliseconds since epoch, 1970
312
 
   * @internal
313
 
   */
314
 
  virtual UDate defaultCenturyStart() const;
315
 
 
316
 
  /**
317
 
   * Returns the year in which the default century begins
318
 
   * @internal
319
 
   */
320
 
  virtual int32_t defaultCenturyStartYear() const;
321
 
 
322
 
 private: // default century stuff.
323
 
  /**
324
 
   * The system maintains a static default century start date.  This is initialized
325
 
   * the first time it is used.  Before then, it is set to SYSTEM_DEFAULT_CENTURY to
326
 
   * indicate an uninitialized state.  Once the system default century date and year
327
 
   * are set, they do not change.
328
 
   */
329
 
  static UDate         fgSystemDefaultCenturyStart;
330
 
 
331
 
  /**
332
 
   * See documentation for systemDefaultCenturyStart.
333
 
   */
334
 
  static int32_t          fgSystemDefaultCenturyStartYear;
335
 
 
336
 
  /**
337
 
   * Default value that indicates the defaultCenturyStartYear is unitialized
338
 
   */
339
 
  static const int32_t    fgSystemDefaultCenturyYear;
340
 
 
341
 
  /**
342
 
   * start of default century, as a date
343
 
   */
344
 
  static const UDate        fgSystemDefaultCentury;
345
 
 
346
 
  /**
347
 
   * Returns the beginning date of the 100-year window that dates 
348
 
   * with 2-digit years are considered to fall within.
349
 
   */
350
 
  UDate         internalGetDefaultCenturyStart(void) const;
351
 
 
352
 
  /**
353
 
   * Returns the first year of the 100-year window that dates with 
354
 
   * 2-digit years are considered to fall within.
355
 
   */
356
 
  int32_t          internalGetDefaultCenturyStartYear(void) const;
357
 
 
358
 
  /**
359
 
   * Initializes the 100-year window that dates with 2-digit years
360
 
   * are considered to fall within so that its start date is 80 years
361
 
   * before the current time.
362
 
   */
363
 
  static void  initializeSystemDefaultCentury(void);
364
 
};
365
 
 
366
 
U_NAMESPACE_END
367
 
 
368
 
#endif
369
 
#endif
370
 
 
371
 
 
372