• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 *******************************************************************************
3 * Copyright (C) 2011, International Business Machines Corporation and         *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 */
7 #ifndef __TZGNAMES_H
8 #define __TZGNAMES_H
9 
10 /**
11  * \file
12  * \brief C API: Time zone generic names classe
13  */
14 
15 #include "unicode/utypes.h"
16 
17 #if !UCONFIG_NO_FORMATTING
18 
19 #include "unicode/locid.h"
20 #include "unicode/timezone.h"
21 #include "unicode/unistr.h"
22 #include "tznames.h"
23 #include "tznames_impl.h"
24 #include "tzfmt.h"
25 #include "uhash.h"
26 #include "umutex.h"
27 
28 U_CDECL_BEGIN
29 
30 typedef enum UTimeZoneGenericNameType {
31     UTZGNM_UNKNOWN      = 0x00,
32     UTZGNM_LOCATION     = 0x01,
33     UTZGNM_LONG         = 0x02,
34     UTZGNM_SHORT        = 0x04
35 } UTimeZoneGenericNameType;
36 
37 U_CDECL_END
38 
39 U_NAMESPACE_BEGIN
40 
41 class LocaleDisplayNames;
42 class MessageFormat;
43 class TimeZone;
44 
45 class TimeZoneGenericNameMatchInfo : public UMemory {
46 public:
47     TimeZoneGenericNameMatchInfo(UVector* matches);
48     ~TimeZoneGenericNameMatchInfo();
49 
50     int32_t size() const;
51     UTimeZoneGenericNameType getGenericNameType(int32_t index) const;
52     int32_t getMatchLength(int32_t index) const;
53     UnicodeString& getTimeZoneID(int32_t index, UnicodeString& tzID) const;
54 
55 private:
56     UVector* fMatches;  // vector of MatchEntry
57 };
58 
59 class U_I18N_API TimeZoneGenericNames : public UMemory {
60 public:
61     TimeZoneGenericNames(const Locale& locale, UErrorCode& status);
62     virtual ~TimeZoneGenericNames();
63 
64     UnicodeString& getDisplayName(const TimeZone& tz, UTimeZoneGenericNameType type,
65                         UDate date, UnicodeString& name) const;
66 
67     UnicodeString& getGenericLocationName(const UnicodeString& tzCanonicalID, UnicodeString& name) const;
68 
69     int32_t findBestMatch(const UnicodeString& text, int32_t start, uint32_t types,
70         UnicodeString& tzID, UTimeZoneTimeType& timeType, UErrorCode& status) const;
71 
72 private:
73     Locale fLocale;
74     UMTX fLock;
75     const TimeZoneNames* fTimeZoneNames;
76     UHashtable* fLocationNamesMap;
77     UHashtable* fPartialLocationNamesMap;
78 
79     MessageFormat* fRegionFormat;
80     MessageFormat* fFallbackRegionFormat;
81     MessageFormat* fFallbackFormat;
82 
83     LocaleDisplayNames* fLocaleDisplayNames;
84     ZNStringPool fStringPool;
85 
86     TextTrieMap fGNamesTrie;
87     UBool fGNamesTrieFullyLoaded;
88 
89     char fTargetRegion[ULOC_COUNTRY_CAPACITY];
90 
91     void initialize(const Locale& locale, UErrorCode& status);
92     void cleanup();
93 
94     void loadStrings(const UnicodeString& tzCanonicalID);
95 
96     const UChar* getGenericLocationName(const UnicodeString& tzCanonicalID);
97 
98     UnicodeString& formatGenericNonLocationName(const TimeZone& tz, UTimeZoneGenericNameType type,
99                         UDate date, UnicodeString& name) const;
100 
101     UnicodeString& getPartialLocationName(const UnicodeString& tzCanonicalID,
102                         const UnicodeString& mzID, UBool isLong, const UnicodeString& mzDisplayName,
103                         UnicodeString& name) const;
104 
105     const UChar* getPartialLocationName(const UnicodeString& tzCanonicalID,
106                         const UnicodeString& mzID, UBool isLong, const UnicodeString& mzDisplayName);
107 
108     TimeZoneGenericNameMatchInfo* findLocal(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
109 
110     TimeZoneNameMatchInfo* findTimeZoneNames(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
111 };
112 
113 U_NAMESPACE_END
114 #endif
115 #endif
116