xref: /aosp_15_r20/external/icu/libicu/cts_headers/ucasemap_imp.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2017 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker 
4*0e209d39SAndroid Build Coastguard Worker // ucasemap_imp.h
5*0e209d39SAndroid Build Coastguard Worker // created: 2017feb08 Markus W. Scherer
6*0e209d39SAndroid Build Coastguard Worker 
7*0e209d39SAndroid Build Coastguard Worker #ifndef __UCASEMAP_IMP_H__
8*0e209d39SAndroid Build Coastguard Worker #define __UCASEMAP_IMP_H__
9*0e209d39SAndroid Build Coastguard Worker 
10*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
11*0e209d39SAndroid Build Coastguard Worker #include "unicode/ucasemap.h"
12*0e209d39SAndroid Build Coastguard Worker #include "unicode/uchar.h"
13*0e209d39SAndroid Build Coastguard Worker #include "ucase.h"
14*0e209d39SAndroid Build Coastguard Worker 
15*0e209d39SAndroid Build Coastguard Worker /**
16*0e209d39SAndroid Build Coastguard Worker  * Bit mask for the titlecasing iterator options bit field.
17*0e209d39SAndroid Build Coastguard Worker  * Currently only 3 out of 8 values are used:
18*0e209d39SAndroid Build Coastguard Worker  * 0 (words), U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES.
19*0e209d39SAndroid Build Coastguard Worker  * See stringoptions.h.
20*0e209d39SAndroid Build Coastguard Worker  * @internal
21*0e209d39SAndroid Build Coastguard Worker  */
22*0e209d39SAndroid Build Coastguard Worker #define U_TITLECASE_ITERATOR_MASK 0xe0
23*0e209d39SAndroid Build Coastguard Worker 
24*0e209d39SAndroid Build Coastguard Worker /**
25*0e209d39SAndroid Build Coastguard Worker  * Bit mask for the titlecasing index adjustment options bit set.
26*0e209d39SAndroid Build Coastguard Worker  * Currently two bits are defined:
27*0e209d39SAndroid Build Coastguard Worker  * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED.
28*0e209d39SAndroid Build Coastguard Worker  * See stringoptions.h.
29*0e209d39SAndroid Build Coastguard Worker  * @internal
30*0e209d39SAndroid Build Coastguard Worker  */
31*0e209d39SAndroid Build Coastguard Worker #define U_TITLECASE_ADJUSTMENT_MASK 0x600
32*0e209d39SAndroid Build Coastguard Worker 
33*0e209d39SAndroid Build Coastguard Worker /**
34*0e209d39SAndroid Build Coastguard Worker  * Internal API, used by u_strcasecmp() etc.
35*0e209d39SAndroid Build Coastguard Worker  * Compare strings case-insensitively,
36*0e209d39SAndroid Build Coastguard Worker  * in code point order or code unit order.
37*0e209d39SAndroid Build Coastguard Worker  */
38*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t
39*0e209d39SAndroid Build Coastguard Worker u_strcmpFold(const UChar *s1, int32_t length1,
40*0e209d39SAndroid Build Coastguard Worker              const UChar *s2, int32_t length2,
41*0e209d39SAndroid Build Coastguard Worker              uint32_t options,
42*0e209d39SAndroid Build Coastguard Worker              UErrorCode *pErrorCode);
43*0e209d39SAndroid Build Coastguard Worker 
44*0e209d39SAndroid Build Coastguard Worker /**
45*0e209d39SAndroid Build Coastguard Worker  * Internal API, used for detecting length of
46*0e209d39SAndroid Build Coastguard Worker  * shared prefix case-insensitively.
47*0e209d39SAndroid Build Coastguard Worker  * @param s1            input string 1
48*0e209d39SAndroid Build Coastguard Worker  * @param length1       length of string 1, or -1 (NULL terminated)
49*0e209d39SAndroid Build Coastguard Worker  * @param s2            input string 2
50*0e209d39SAndroid Build Coastguard Worker  * @param length2       length of string 2, or -1 (NULL terminated)
51*0e209d39SAndroid Build Coastguard Worker  * @param options       compare options
52*0e209d39SAndroid Build Coastguard Worker  * @param matchLen1     (output) length of partial prefix match in s1
53*0e209d39SAndroid Build Coastguard Worker  * @param matchLen2     (output) length of partial prefix match in s2
54*0e209d39SAndroid Build Coastguard Worker  * @param pErrorCode    receives error status
55*0e209d39SAndroid Build Coastguard Worker  */
56*0e209d39SAndroid Build Coastguard Worker U_CAPI void
57*0e209d39SAndroid Build Coastguard Worker u_caseInsensitivePrefixMatch(const UChar *s1, int32_t length1,
58*0e209d39SAndroid Build Coastguard Worker                              const UChar *s2, int32_t length2,
59*0e209d39SAndroid Build Coastguard Worker                              uint32_t options,
60*0e209d39SAndroid Build Coastguard Worker                              int32_t *matchLen1, int32_t *matchLen2,
61*0e209d39SAndroid Build Coastguard Worker                              UErrorCode *pErrorCode);
62*0e209d39SAndroid Build Coastguard Worker 
63*0e209d39SAndroid Build Coastguard Worker #ifdef __cplusplus
64*0e209d39SAndroid Build Coastguard Worker 
65*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
66*0e209d39SAndroid Build Coastguard Worker 
67*0e209d39SAndroid Build Coastguard Worker class BreakIterator;        // unicode/brkiter.h
68*0e209d39SAndroid Build Coastguard Worker class ByteSink;
69*0e209d39SAndroid Build Coastguard Worker class Locale;               // unicode/locid.h
70*0e209d39SAndroid Build Coastguard Worker 
71*0e209d39SAndroid Build Coastguard Worker /** Returns true if the options are valid. Otherwise false, and sets an error. */
ustrcase_checkTitleAdjustmentOptions(uint32_t options,UErrorCode & errorCode)72*0e209d39SAndroid Build Coastguard Worker inline UBool ustrcase_checkTitleAdjustmentOptions(uint32_t options, UErrorCode &errorCode) {
73*0e209d39SAndroid Build Coastguard Worker     if (U_FAILURE(errorCode)) { return false; }
74*0e209d39SAndroid Build Coastguard Worker     if ((options & U_TITLECASE_ADJUSTMENT_MASK) == U_TITLECASE_ADJUSTMENT_MASK) {
75*0e209d39SAndroid Build Coastguard Worker         // Both options together.
76*0e209d39SAndroid Build Coastguard Worker         errorCode = U_ILLEGAL_ARGUMENT_ERROR;
77*0e209d39SAndroid Build Coastguard Worker         return false;
78*0e209d39SAndroid Build Coastguard Worker     }
79*0e209d39SAndroid Build Coastguard Worker     return true;
80*0e209d39SAndroid Build Coastguard Worker }
81*0e209d39SAndroid Build Coastguard Worker 
ustrcase_isLNS(UChar32 c)82*0e209d39SAndroid Build Coastguard Worker inline UBool ustrcase_isLNS(UChar32 c) {
83*0e209d39SAndroid Build Coastguard Worker     // Letter, number, symbol,
84*0e209d39SAndroid Build Coastguard Worker     // or a private use code point because those are typically used as letters or numbers.
85*0e209d39SAndroid Build Coastguard Worker     // Consider modifier letters only if they are cased.
86*0e209d39SAndroid Build Coastguard Worker     const uint32_t LNS = (U_GC_L_MASK|U_GC_N_MASK|U_GC_S_MASK|U_GC_CO_MASK) & ~U_GC_LM_MASK;
87*0e209d39SAndroid Build Coastguard Worker     int gc = u_charType(c);
88*0e209d39SAndroid Build Coastguard Worker     return (U_MASK(gc) & LNS) != 0 || (gc == U_MODIFIER_LETTER && ucase_getType(c) != UCASE_NONE);
89*0e209d39SAndroid Build Coastguard Worker }
90*0e209d39SAndroid Build Coastguard Worker 
91*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION
92*0e209d39SAndroid Build Coastguard Worker 
93*0e209d39SAndroid Build Coastguard Worker /** Returns nullptr if error. Pass in either locale or locID, not both. */
94*0e209d39SAndroid Build Coastguard Worker U_CFUNC
95*0e209d39SAndroid Build Coastguard Worker BreakIterator *ustrcase_getTitleBreakIterator(
96*0e209d39SAndroid Build Coastguard Worker         const Locale *locale, const char *locID, uint32_t options, BreakIterator *iter,
97*0e209d39SAndroid Build Coastguard Worker         LocalPointer<BreakIterator> &ownedIter, UErrorCode &errorCode);
98*0e209d39SAndroid Build Coastguard Worker 
99*0e209d39SAndroid Build Coastguard Worker #endif
100*0e209d39SAndroid Build Coastguard Worker 
101*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
102*0e209d39SAndroid Build Coastguard Worker 
103*0e209d39SAndroid Build Coastguard Worker #include "unicode/unistr.h"  // for UStringCaseMapper
104*0e209d39SAndroid Build Coastguard Worker 
105*0e209d39SAndroid Build Coastguard Worker /*
106*0e209d39SAndroid Build Coastguard Worker  * Internal string casing functions implementing
107*0e209d39SAndroid Build Coastguard Worker  * ustring.h/ustrcase.cpp and UnicodeString case mapping functions.
108*0e209d39SAndroid Build Coastguard Worker  */
109*0e209d39SAndroid Build Coastguard Worker 
110*0e209d39SAndroid Build Coastguard Worker struct UCaseMap : public icu::UMemory {
111*0e209d39SAndroid Build Coastguard Worker     /** Implements most of ucasemap_open(). */
112*0e209d39SAndroid Build Coastguard Worker     UCaseMap(const char *localeID, uint32_t opts, UErrorCode *pErrorCode);
113*0e209d39SAndroid Build Coastguard Worker     ~UCaseMap();
114*0e209d39SAndroid Build Coastguard Worker 
115*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION
116*0e209d39SAndroid Build Coastguard Worker     icu::BreakIterator *iter;  /* We adopt the iterator, so we own it. */
117*0e209d39SAndroid Build Coastguard Worker #endif
118*0e209d39SAndroid Build Coastguard Worker     char locale[32];
119*0e209d39SAndroid Build Coastguard Worker     int32_t caseLocale;
120*0e209d39SAndroid Build Coastguard Worker     uint32_t options;
121*0e209d39SAndroid Build Coastguard Worker };
122*0e209d39SAndroid Build Coastguard Worker 
123*0e209d39SAndroid Build Coastguard Worker #if UCONFIG_NO_BREAK_ITERATION
124*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR_PARAM
125*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR_UNUSED
126*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR
127*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR_NULL
128*0e209d39SAndroid Build Coastguard Worker #else
129*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR_PARAM icu::BreakIterator *iter,
130*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR_UNUSED icu::BreakIterator *,
131*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR iter,
132*0e209d39SAndroid Build Coastguard Worker #   define UCASEMAP_BREAK_ITERATOR_NULL NULL,
133*0e209d39SAndroid Build Coastguard Worker #endif
134*0e209d39SAndroid Build Coastguard Worker 
135*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t
136*0e209d39SAndroid Build Coastguard Worker ustrcase_getCaseLocale(const char *locale);
137*0e209d39SAndroid Build Coastguard Worker 
138*0e209d39SAndroid Build Coastguard Worker // TODO: swap src / dest if approved for new public api
139*0e209d39SAndroid Build Coastguard Worker /** Implements UStringCaseMapper. */
140*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t U_CALLCONV
141*0e209d39SAndroid Build Coastguard Worker ustrcase_internalToLower(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
142*0e209d39SAndroid Build Coastguard Worker                          char16_t *dest, int32_t destCapacity,
143*0e209d39SAndroid Build Coastguard Worker                          const char16_t *src, int32_t srcLength,
144*0e209d39SAndroid Build Coastguard Worker                          icu::Edits *edits,
145*0e209d39SAndroid Build Coastguard Worker                          UErrorCode &errorCode);
146*0e209d39SAndroid Build Coastguard Worker 
147*0e209d39SAndroid Build Coastguard Worker /** Implements UStringCaseMapper. */
148*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t U_CALLCONV
149*0e209d39SAndroid Build Coastguard Worker ustrcase_internalToUpper(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
150*0e209d39SAndroid Build Coastguard Worker                          char16_t *dest, int32_t destCapacity,
151*0e209d39SAndroid Build Coastguard Worker                          const char16_t *src, int32_t srcLength,
152*0e209d39SAndroid Build Coastguard Worker                          icu::Edits *edits,
153*0e209d39SAndroid Build Coastguard Worker                          UErrorCode &errorCode);
154*0e209d39SAndroid Build Coastguard Worker 
155*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION
156*0e209d39SAndroid Build Coastguard Worker 
157*0e209d39SAndroid Build Coastguard Worker /** Implements UStringCaseMapper. */
158*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t U_CALLCONV
159*0e209d39SAndroid Build Coastguard Worker ustrcase_internalToTitle(int32_t caseLocale, uint32_t options,
160*0e209d39SAndroid Build Coastguard Worker                          icu::BreakIterator *iter,
161*0e209d39SAndroid Build Coastguard Worker                          char16_t *dest, int32_t destCapacity,
162*0e209d39SAndroid Build Coastguard Worker                          const char16_t *src, int32_t srcLength,
163*0e209d39SAndroid Build Coastguard Worker                          icu::Edits *edits,
164*0e209d39SAndroid Build Coastguard Worker                          UErrorCode &errorCode);
165*0e209d39SAndroid Build Coastguard Worker 
166*0e209d39SAndroid Build Coastguard Worker #endif
167*0e209d39SAndroid Build Coastguard Worker 
168*0e209d39SAndroid Build Coastguard Worker /** Implements UStringCaseMapper. */
169*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t U_CALLCONV
170*0e209d39SAndroid Build Coastguard Worker ustrcase_internalFold(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
171*0e209d39SAndroid Build Coastguard Worker                       char16_t *dest, int32_t destCapacity,
172*0e209d39SAndroid Build Coastguard Worker                       const char16_t *src, int32_t srcLength,
173*0e209d39SAndroid Build Coastguard Worker                       icu::Edits *edits,
174*0e209d39SAndroid Build Coastguard Worker                       UErrorCode &errorCode);
175*0e209d39SAndroid Build Coastguard Worker 
176*0e209d39SAndroid Build Coastguard Worker /**
177*0e209d39SAndroid Build Coastguard Worker  * Common string case mapping implementation for ucasemap_toXyz() and UnicodeString::toXyz().
178*0e209d39SAndroid Build Coastguard Worker  * Implements argument checking.
179*0e209d39SAndroid Build Coastguard Worker  */
180*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t
181*0e209d39SAndroid Build Coastguard Worker ustrcase_map(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
182*0e209d39SAndroid Build Coastguard Worker              char16_t *dest, int32_t destCapacity,
183*0e209d39SAndroid Build Coastguard Worker              const char16_t *src, int32_t srcLength,
184*0e209d39SAndroid Build Coastguard Worker              UStringCaseMapper *stringCaseMapper,
185*0e209d39SAndroid Build Coastguard Worker              icu::Edits *edits,
186*0e209d39SAndroid Build Coastguard Worker              UErrorCode &errorCode);
187*0e209d39SAndroid Build Coastguard Worker 
188*0e209d39SAndroid Build Coastguard Worker /**
189*0e209d39SAndroid Build Coastguard Worker  * Common string case mapping implementation for old-fashioned u_strToXyz() functions
190*0e209d39SAndroid Build Coastguard Worker  * that allow the source string to overlap the destination buffer.
191*0e209d39SAndroid Build Coastguard Worker  * Implements argument checking and internally works with an intermediate buffer if necessary.
192*0e209d39SAndroid Build Coastguard Worker  */
193*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t
194*0e209d39SAndroid Build Coastguard Worker ustrcase_mapWithOverlap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
195*0e209d39SAndroid Build Coastguard Worker                         char16_t *dest, int32_t destCapacity,
196*0e209d39SAndroid Build Coastguard Worker                         const char16_t *src, int32_t srcLength,
197*0e209d39SAndroid Build Coastguard Worker                         UStringCaseMapper *stringCaseMapper,
198*0e209d39SAndroid Build Coastguard Worker                         UErrorCode &errorCode);
199*0e209d39SAndroid Build Coastguard Worker 
200*0e209d39SAndroid Build Coastguard Worker /**
201*0e209d39SAndroid Build Coastguard Worker  * UTF-8 string case mapping function type, used by ucasemap_mapUTF8().
202*0e209d39SAndroid Build Coastguard Worker  * UTF-8 version of UStringCaseMapper.
203*0e209d39SAndroid Build Coastguard Worker  * All error checking must be done.
204*0e209d39SAndroid Build Coastguard Worker  * The UCaseMap must be fully initialized, with locale and/or iter set as needed.
205*0e209d39SAndroid Build Coastguard Worker  */
206*0e209d39SAndroid Build Coastguard Worker typedef void U_CALLCONV
207*0e209d39SAndroid Build Coastguard Worker UTF8CaseMapper(int32_t caseLocale, uint32_t options,
208*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION
209*0e209d39SAndroid Build Coastguard Worker                icu::BreakIterator *iter,
210*0e209d39SAndroid Build Coastguard Worker #endif
211*0e209d39SAndroid Build Coastguard Worker                const uint8_t *src, int32_t srcLength,
212*0e209d39SAndroid Build Coastguard Worker                icu::ByteSink &sink, icu::Edits *edits,
213*0e209d39SAndroid Build Coastguard Worker                UErrorCode &errorCode);
214*0e209d39SAndroid Build Coastguard Worker 
215*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION
216*0e209d39SAndroid Build Coastguard Worker 
217*0e209d39SAndroid Build Coastguard Worker /** Implements UTF8CaseMapper. */
218*0e209d39SAndroid Build Coastguard Worker U_CFUNC void U_CALLCONV
219*0e209d39SAndroid Build Coastguard Worker ucasemap_internalUTF8ToTitle(int32_t caseLocale, uint32_t options,
220*0e209d39SAndroid Build Coastguard Worker         icu::BreakIterator *iter,
221*0e209d39SAndroid Build Coastguard Worker         const uint8_t *src, int32_t srcLength,
222*0e209d39SAndroid Build Coastguard Worker         icu::ByteSink &sink, icu::Edits *edits,
223*0e209d39SAndroid Build Coastguard Worker         UErrorCode &errorCode);
224*0e209d39SAndroid Build Coastguard Worker 
225*0e209d39SAndroid Build Coastguard Worker #endif
226*0e209d39SAndroid Build Coastguard Worker 
227*0e209d39SAndroid Build Coastguard Worker void
228*0e209d39SAndroid Build Coastguard Worker ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
229*0e209d39SAndroid Build Coastguard Worker                  const char *src, int32_t srcLength,
230*0e209d39SAndroid Build Coastguard Worker                  UTF8CaseMapper *stringCaseMapper,
231*0e209d39SAndroid Build Coastguard Worker                  icu::ByteSink &sink, icu::Edits *edits,
232*0e209d39SAndroid Build Coastguard Worker                  UErrorCode &errorCode);
233*0e209d39SAndroid Build Coastguard Worker 
234*0e209d39SAndroid Build Coastguard Worker /**
235*0e209d39SAndroid Build Coastguard Worker  * Implements argument checking and buffer handling
236*0e209d39SAndroid Build Coastguard Worker  * for UTF-8 string case mapping as a common function.
237*0e209d39SAndroid Build Coastguard Worker  */
238*0e209d39SAndroid Build Coastguard Worker int32_t
239*0e209d39SAndroid Build Coastguard Worker ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
240*0e209d39SAndroid Build Coastguard Worker                  char *dest, int32_t destCapacity,
241*0e209d39SAndroid Build Coastguard Worker                  const char *src, int32_t srcLength,
242*0e209d39SAndroid Build Coastguard Worker                  UTF8CaseMapper *stringCaseMapper,
243*0e209d39SAndroid Build Coastguard Worker                  icu::Edits *edits,
244*0e209d39SAndroid Build Coastguard Worker                  UErrorCode &errorCode);
245*0e209d39SAndroid Build Coastguard Worker 
246*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
247*0e209d39SAndroid Build Coastguard Worker namespace GreekUpper {
248*0e209d39SAndroid Build Coastguard Worker 
249*0e209d39SAndroid Build Coastguard Worker // Data bits.
250*0e209d39SAndroid Build Coastguard Worker static const uint32_t UPPER_MASK = 0x3ff;
251*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_VOWEL = 0x1000;
252*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_YPOGEGRAMMENI = 0x2000;
253*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_ACCENT = 0x4000;
254*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_DIALYTIKA = 0x8000;
255*0e209d39SAndroid Build Coastguard Worker // Further bits during data building and processing, not stored in the data map.
256*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_COMBINING_DIALYTIKA = 0x10000;
257*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_OTHER_GREEK_DIACRITIC = 0x20000;
258*0e209d39SAndroid Build Coastguard Worker 
259*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_VOWEL_AND_ACCENT = HAS_VOWEL | HAS_ACCENT;
260*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA =
261*0e209d39SAndroid Build Coastguard Worker         HAS_VOWEL_AND_ACCENT | HAS_DIALYTIKA;
262*0e209d39SAndroid Build Coastguard Worker static const uint32_t HAS_EITHER_DIALYTIKA = HAS_DIALYTIKA | HAS_COMBINING_DIALYTIKA;
263*0e209d39SAndroid Build Coastguard Worker 
264*0e209d39SAndroid Build Coastguard Worker // State bits.
265*0e209d39SAndroid Build Coastguard Worker static const uint32_t AFTER_CASED = 1;
266*0e209d39SAndroid Build Coastguard Worker static const uint32_t AFTER_VOWEL_WITH_COMBINING_ACCENT = 2;
267*0e209d39SAndroid Build Coastguard Worker static const uint32_t AFTER_VOWEL_WITH_PRECOMPOSED_ACCENT = 4;
268*0e209d39SAndroid Build Coastguard Worker 
269*0e209d39SAndroid Build Coastguard Worker uint32_t getLetterData(UChar32 c);
270*0e209d39SAndroid Build Coastguard Worker 
271*0e209d39SAndroid Build Coastguard Worker /**
272*0e209d39SAndroid Build Coastguard Worker  * Returns a non-zero value for each of the Greek combining diacritics
273*0e209d39SAndroid Build Coastguard Worker  * listed in The Unicode Standard, version 8, chapter 7.2 Greek,
274*0e209d39SAndroid Build Coastguard Worker  * plus some perispomeni look-alikes.
275*0e209d39SAndroid Build Coastguard Worker  */
276*0e209d39SAndroid Build Coastguard Worker uint32_t getDiacriticData(UChar32 c);
277*0e209d39SAndroid Build Coastguard Worker 
278*0e209d39SAndroid Build Coastguard Worker }  // namespace GreekUpper
279*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
280*0e209d39SAndroid Build Coastguard Worker 
281*0e209d39SAndroid Build Coastguard Worker #endif  // __cplusplus
282*0e209d39SAndroid Build Coastguard Worker 
283*0e209d39SAndroid Build Coastguard Worker #endif  // __UCASEMAP_IMP_H__
284