tizen 2.3.1 release
[framework/api/base-utils.git] / src / include / mobile / utils_i18n_types.h
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  *
16  * Copyright (C) 1999-2012, International Business Machines
17  * Corporation and others.  All Rights Reserved.
18  */
19
20
21
22 #ifndef __UTILS_I18N_TYPES_H__
23 #define __UTILS_I18N_TYPES_H__
24
25 #include <inttypes.h>
26 #include <tizen.h>
27 #include <wchar.h>
28
29 /**
30  * @file utils_i18n_types.h
31  * @version 0.1
32  * @brief utils_i18n_types
33  */
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 /**
40  * @addtogroup CAPI_BASE_UTILS_I18N_MODULE
41  * @{
42  */
43
44 /**
45  * @brief Enumeration for error codes to replace exception handlings.
46  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
47  */
48 typedef enum {
49     I18N_ERROR_NONE                         = TIZEN_ERROR_NONE,                   /**< No error, no warning */
50     I18N_ERROR_MISSING_RESOURCE             = TIZEN_ERROR_UTILITY_ICU | 0x01,     /**< The requested resource cannot be found */
51     I18N_ERROR_INVALID_FORMAT               = TIZEN_ERROR_UTILITY_ICU | 0x02,     /**< Data format is not what is expected */
52     I18N_ERROR_FILE_ACCESS                  = TIZEN_ERROR_UTILITY_ICU | 0x03,     /**< The requested file cannot be found */
53     I18N_ERROR_INTERNAL_PROGRAM             = TIZEN_ERROR_UTILITY_ICU | 0x04,     /**< Indicates a bug in the library code */
54     I18N_ERROR_OUT_OF_MEMORY                = TIZEN_ERROR_OUT_OF_MEMORY,          /**< Out of memory */
55     I18N_ERROR_INDEX_OUTOFBOUNDS            = TIZEN_ERROR_UTILITY_ICU | 0x05,     /**< Trying to access the index that is out of bounds */
56     I18N_ERROR_INVALID_CHAR_FOUND           = TIZEN_ERROR_UTILITY_ICU | 0x06,     /**< Character conversion: Unmappable input sequence. In other APIs: Invalid character */
57     I18N_ERROR_BUFFER_OVERFLOW              = TIZEN_ERROR_UTILITY_ICU | 0x07,     /**< A result would not fit in the supplied buffer */
58     I18N_ERROR_NOT_SUPPORTED                = TIZEN_ERROR_NOT_SUPPORTED,          /**< Requested operation is not supported in the current context */
59     I18N_ERROR_COLLATOR_VERSION_MISMATCH    = TIZEN_ERROR_UTILITY_ICU | 0x08,     /**< Collator version is not compatible with the base version */
60     I18N_ERROR_USELESS_COLLATOR             = TIZEN_ERROR_UTILITY_ICU | 0x09,     /**< Collator is options only and no base is specified */
61     I18N_ERROR_NO_WRITE_PERMISSION          = TIZEN_ERROR_UTILITY_ICU | 0x0A,     /**< Attempt to modify read-only or constant data */
62     I18N_ERROR_RESOURCE_TYPE_MISMATCH       = TIZEN_ERROR_UTILITY_ICU | 0x0B,     /**< An operation is requested over a resource that does not support it */
63     I18N_ERROR_TOO_MANY_ALIASES             = TIZEN_ERROR_UTILITY_ICU | 0x0C,     /**< Too many aliases in the path to the requested resource  */
64     I18N_ERROR_INVALID_PARAMETER            = TIZEN_ERROR_INVALID_PARAMETER,      /**< Invalid function parameter */
65     I18N_ERROR_PERMISSION_DENIED            = TIZEN_ERROR_PERMISSION_DENIED,      /**< Permission denied */
66
67     I18N_ERROR_MESSAGE_PARSE                = TIZEN_ERROR_UTILITY_ICU | 0x0D,     /**< Unable to parse a message (message format). @if MOBILE (Since 2.3.1) @endif*/
68     I18N_ERROR_PARSE                        = TIZEN_ERROR_UTILITY_ICU | 0x0E,     /**< Equivalent to Java ParseException. @if MOBILE (Since 2.3.1) @endif*/
69     I18N_ERROR_TRUNCATED_CHAR_FOUND         = TIZEN_ERROR_UTILITY_ICU | 0x0F,     /**< Character conversion: Incomplete input sequence. @if MOBILE (Since 2.3.1) @endif*/
70     I18N_ERROR_ILLEGAL_CHAR_FOUND           = TIZEN_ERROR_UTILITY_ICU | 0x10,     /**< Character conversion: Illegal input sequence/combination of input units. @if MOBILE (Since 2.3.1) @endif*/
71     I18N_ERROR_INVALID_TABLE_FORMAT         = TIZEN_ERROR_UTILITY_ICU | 0x11,     /**< Conversion table file found, but corrupted. @if MOBILE (Since 2.3.1) @endif*/
72     I18N_ERROR_INVALID_TABLE_FILE           = TIZEN_ERROR_UTILITY_ICU | 0x12,     /**< Conversion table file not found. @if MOBILE (Since 2.3.1) @endif*/
73     I18N_ERROR_ILLECAL_ESCAPE_SEQUENCE      = TIZEN_ERROR_UTILITY_ICU | 0x13,     /**< ISO-2022 illlegal escape sequence. @if MOBILE (Since 2.3.1) @endif*/
74     I18N_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE  = TIZEN_ERROR_UTILITY_ICU | 0x14,     /**< ISO-2022 unsupported escape sequence. @if MOBILE (Since 2.3.1) @endif*/
75     I18N_ERROR_NO_SPACE_AVAILABLE           = TIZEN_ERROR_UTILITY_ICU | 0x15,     /**< No space available for in-buffer expansion for Arabic shaping. @if MOBILE (Since 2.3.1) @endif*/
76     I18N_ERROR_CE_NOT_FOUND                 = TIZEN_ERROR_UTILITY_ICU | 0x16,     /**< Currently used only while setting variable top, but can be used generally. @if MOBILE (Since 2.3.1) @endif*/
77     I18N_ERROR_PRIMARY_TOO_LONG             = TIZEN_ERROR_UTILITY_ICU | 0x17,     /**< User tried to set variable top to a primary that is longer than two bytes. @if MOBILE (Since 2.3.1) @endif*/
78     I18N_ERROR_STATE_TOO_OLD                = TIZEN_ERROR_UTILITY_ICU | 0x18,     /**< ICU cannot construct a service from this state, as it is no longer supported. @if MOBILE (Since 2.3.1) @endif*/
79     I18N_ERROR_ENUM_OUT_OF_SYNC             = TIZEN_ERROR_UTILITY_ICU | 0x19,     /**< UEnumeration out of sync with underlying collection. @if MOBILE (Since 2.3.1) @endif*/
80     I18N_ERROR_INVARIANT_CONVERSION         = TIZEN_ERROR_UTILITY_ICU | 0x1A,     /**< Unable to convert a UChar* string to char* with the invariant converter. @if MOBILE (Since 2.3.1) @endif*/
81     I18N_ERROR_INVALID_STATE                = TIZEN_ERROR_UTILITY_ICU | 0x1B,     /**< Requested operation can not be completed with ICU in its current state. @if MOBILE (Since 2.3.1) @endif*/
82     I18N_ERROR_MALFORMED_SET                = TIZEN_ERROR_UTILITY_ICU | 0x1C,     /**< A UnicodeSet pattern is invalid. @if MOBILE (Since 2.3.1) @endif*/
83     I18N_WARNING_STRING_NOT_TERMINATED      = TIZEN_ERROR_UTILITY_ICU | 0x1D,     /**< String not terminated with NULL. @if MOBILE (Since 2.3.1) @endif*/
84     I18N_ERROR_STD3_ASCII_RULES             = TIZEN_ERROR_UTILITY_ICU | 0x1E,     /**< Argument does not satisfy STD3 rules. @if MOBILE (Since 2.3.1) @endif*/
85     I18N_ERROR_UNASSIGNED                   = TIZEN_ERROR_UTILITY_ICU | 0x1F,     /**< Unassigned code points are found. @if MOBILE (Since 2.3.1) @endif*/
86     I18N_WARNING_SORT_KEY_TOO_SHORT         = TIZEN_ERROR_UTILITY_ICU | 0x20,     /**< Number of levels requested in getBound is higher than the number of levels in the sort key. @if MOBILE (Since 2.3.1) @endif*/
87     I18N_ERROR_UNKNOWN                      = TIZEN_ERROR_UNKNOWN,                /**< Unknown error. @if MOBILE (Since 2.3.1) @endif*/
88 } i18n_error_code_e;
89
90 /**
91  * @}
92  * @}
93  */
94
95 /**
96  * @addtogroup CAPI_BASE_UTILS_I18N_UCHAR_MODULE
97  * @{
98  */
99
100 #define I18N_U_MASK(x)                        ((uint32_t)1<<(x)) /**< Get a single-bit bit set (a flag) from a bit number 0..31. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
101
102 #define I18N_U_GC_CN_MASK                     I18N_U_MASK(I18N_UCHAR_U_GENERAL_OTHER_TYPES)     /**<U_GC_XX_MASK constants are bit flags corresponding to Unicode general category values. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
103 #define I18N_U_GC_LU_MASK                     I18N_U_MASK(I18N_UCHAR_U_UPPERCASE_LETTER)        /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
104 #define I18N_U_GC_LL_MASK                     I18N_U_MASK(I18N_UCHAR_U_LOWERCASE_LETTER)        /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
105 #define I18N_U_GC_LT_MASK                     I18N_U_MASK(I18N_UCHAR_U_TITLECASE_LETTER)        /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
106 #define I18N_U_GC_LM_MASK                     I18N_U_MASK(I18N_UCHAR_U_MODIFIER_LETTER)         /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
107 #define I18N_U_GC_LO_MASK                     I18N_U_MASK(I18N_UCHAR_U_OTHER_LETTER)            /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
108 #define I18N_U_GC_MN_MASK                     I18N_U_MASK(I18N_UCHAR_U_NON_SPACING_MARK)        /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
109 #define I18N_U_GC_ME_MASK                     I18N_U_MASK(I18N_UCHAR_U_ENCLOSING_MARK)          /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
110 #define I18N_U_GC_MC_MASK                     I18N_U_MASK(I18N_UCHAR_U_COMBINING_SPACING_MARK)  /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
111 #define I18N_U_GC_ND_MASK                     I18N_U_MASK(I18N_UCHAR_U_DECIMAL_DIGIT_NUMBER)    /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
112 #define I18N_U_GC_NL_MASK                     I18N_U_MASK(I18N_UCHAR_U_LETTER_NUMBER)           /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
113 #define I18N_U_GC_NO_MASK                     I18N_U_MASK(I18N_UCHAR_U_OTHER_NUMBER)            /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
114 #define I18N_U_GC_ZS_MASK                     I18N_U_MASK(I18N_UCHAR_U_SPACE_SEPARATOR)         /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
115 #define I18N_U_GC_ZL_MASK                     I18N_U_MASK(I18N_UCHAR_U_LINE_SEPARATOR)          /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
116 #define I18N_U_GC_ZP_MASK                     I18N_U_MASK(I18N_UCHAR_U_PARAGRAPH_SEPARATOR)     /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
117 #define I18N_U_GC_CC_MASK                     I18N_U_MASK(I18N_UCHAR_U_CONTROL_CHAR)            /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
118 #define I18N_U_GC_CF_MASK                     I18N_U_MASK(I18N_UCHAR_U_FORMAT_CHAR)             /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
119 #define I18N_U_GC_CO_MASK                     I18N_U_MASK(I18N_UCHAR_U_PRIVATE_USE_CHAR)        /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
120 #define I18N_U_GC_CS_MASK                     I18N_U_MASK(I18N_UCHAR_U_SURROGATE)               /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
121 #define I18N_U_GC_PD_MASK                     I18N_U_MASK(I18N_UCHAR_U_DASH_PUNCTUATION)        /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
122 #define I18N_U_GC_PS_MASK                     I18N_U_MASK(I18N_UCHAR_U_START_PUNCTUATION)       /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
123 #define I18N_U_GC_PE_MASK                     I18N_U_MASK(I18N_UCHAR_U_END_PUNCTUATION)         /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
124 #define I18N_U_GC_PC_MASK                     I18N_U_MASK(I18N_UCHAR_U_CONNECTOR_PUNCTUATION)   /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
125 #define I18N_U_GC_PO_MASK                     I18N_U_MASK(I18N_UCHAR_U_OTHER_PUNCTUATION)       /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
126 #define I18N_U_GC_SM_MASK                     I18N_U_MASK(I18N_UCHAR_U_MATH_SYMBOL)             /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
127 #define I18N_U_GC_SC_MASK                     I18N_U_MASK(I18N_UCHAR_U_CURRENCY_SYMBOL)         /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
128 #define I18N_U_GC_SK_MASK                     I18N_U_MASK(I18N_UCHAR_U_MODIFIER_SYMBOL)         /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
129 #define I18N_U_GC_SO_MASK                     I18N_U_MASK(I18N_UCHAR_U_OTHER_SYMBOL)            /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
130 #define I18N_U_GC_PI_MASK                     I18N_U_MASK(I18N_UCHAR_U_INITIAL_PUNCTUATION)     /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
131 #define I18N_U_GC_PF_MASK                     I18N_U_MASK(I18N_UCHAR_U_FINAL_PUNCTUATION)       /**<Mask constant for a #i18n_uchar_category_e. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
132 #define I18N_U_GC_L_MASK                      (I18N_U_GC_LU_MASK|I18N_U_GC_LL_MASK|I18N_U_GC_LT_MASK|I18N_U_GC_LM_MASK|I18N_U_GC_LO_MASK)   /**<Mask constant for multiple #i18n_uchar_category_e bits (L Letters). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
133 #define I18N_U_GC_LC_MASK                     (I18N_U_GC_LU_MASK|I18N_U_GC_LL_MASK|I18N_U_GC_LT_MASK)        /**<Mask constant for multiple #i18n_uchar_category_e bits (LC Cased Letters). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
134 #define I18N_U_GC_M_MASK                      (I18N_U_GC_MN_MASK|I18N_U_GC_ME_MASK|I18N_U_GC_MC_MASK)        /**<Mask constant for multiple #i18n_uchar_category_e bits (M Marks). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
135 #define I18N_U_GC_N_MASK                      (I18N_U_GC_ND_MASK|I18N_U_GC_NL_MASK|I18N_U_GC_NO_MASK)        /**<Mask constant for multiple #i18n_uchar_category_e bits (N Numbers). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
136 #define I18N_U_GC_Z_MASK                      (I18N_U_GC_ZS_MASK|I18N_U_GC_ZL_MASK|I18N_U_GC_ZP_MASK)        /**<Mask constant for multiple #i18n_uchar_category_e bits (Z Separators). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
137 #define I18N_U_GC_C_MASK                      (I18N_U_GC_CN_MASK|I18N_U_GC_CC_MASK|I18N_U_GC_CF_MASK|I18N_U_GC_CO_MASK|I18N_U_GC_CS_MASK)        /**<Mask constant for multiple #i18n_uchar_category_e bits (C Others). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
138 #define I18N_U_GC_P_MASK                      (I18N_U_GC_PD_MASK|I18N_U_GC_PS_MASK|I18N_U_GC_PE_MASK|I18N_U_GC_PC_MASK|I18N_U_GC_PO_MASK|I18N_U_GC_PI_MASK|I18N_U_GC_PF_MASK)   /**<Mask constant for multiple #i18n_uchar_category_e bits (P Punctuation). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
139 #define I18N_U_GC_S_MASK                      (I18N_U_GC_SM_MASK|I18N_U_GC_SC_MASK|I18N_U_GC_SK_MASK|I18N_U_GC_SO_MASK)         /**<Mask constant for multiple #i18n_uchar_category_e bits (S Symbols). @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif   */
140
141 #define I18N_U_NO_NUMERIC_VALUE               ((double)-123456789.)         /**<Special value that is returned by i18n_uchar_get_numeric_value()(not implemented yet) when no numeric value is defined for a code point. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif  */
142
143 #define I18N_U_GET_GC_MASK(c)                 I18N_U_MASK(u_charType(c))    /**<Get a single-bit bit set for the general category of a character. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif  */
144
145 /**
146  * @brief Option value for case folding: use default mappings defined in CaseFolding.txt.
147  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
148  *
149  */
150 #define I18N_U_FOLD_CASE_DEFAULT 0
151
152 /**
153  * @brief Option value for case folding: \n
154  *        Use the modified set of mappings provided in CaseFolding.txt to handle dotted I and dotless i appropriately for Turkic languages (tr, az).\n
155  *        Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that are to be included for default mappings and excluded for the Turkic-specific mappings.\n
156  *        Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that are to be excluded for default mappings and included for the Turkic-specific mappings.
157  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
158  */
159 #define I18N_U_FOLD_CASE_EXCLUDE_SPECIAL_I 1
160
161
162 /**
163  * @brief DONE is returned by i18n_usearch_previous() and i18n_usearch_next() after all valid matches have been returned,
164  *        and by, i18n_usearch_first() and i18n_usearch_last() if there are no matches at all.
165  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
166  */
167 #define I18N_USEARCH_DONE                     -1
168
169
170 #if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32)
171 #   ifdef __STDC_ISO_10646__
172 #       if (U_SIZEOF_WCHAR_T==2)
173 #           define U_WCHAR_IS_UTF16
174 #       elif (U_SIZEOF_WCHAR_T==4)
175 #           define  U_WCHAR_IS_UTF32
176 #       endif
177 #   elif defined __UCS2__
178 #       if (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400) && (U_SIZEOF_WCHAR_T==2)
179 #           define U_WCHAR_IS_UTF16
180 #       endif
181 #   elif defined(__UCS4__) || (U_PLATFORM == U_PF_OS400 && defined(__UTF32__))
182 #       if (U_SIZEOF_WCHAR_T==4)
183 #           define U_WCHAR_IS_UTF32
184 #       endif
185 #   elif U_PLATFORM_IS_DARWIN_BASED || (U_SIZEOF_WCHAR_T==4 && U_PLATFORM_IS_LINUX_BASED)
186 #       define U_WCHAR_IS_UTF32
187 #   elif U_PLATFORM_HAS_WIN32_API
188 #       define U_WCHAR_IS_UTF16
189 #   endif
190 #endif
191 #define U_SIZEOF_UCHAR 2
192
193 /**
194  * @brief i18n_uchar.
195  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
196  */
197 #if defined(UCHAR_TYPE)
198     typedef UCHAR_TYPE i18n_uchar;
199 /* Not #elif U_HAVE_CHAR16_T -- because that is type-incompatible with pre-C++11 callers
200     typedef char16_t i18n_uchar;  */
201 #elif U_SIZEOF_WCHAR_T==2
202     typedef wchar_t i18n_uchar;
203 #elif defined(__CHAR16_TYPE__)
204     typedef __CHAR16_TYPE__ i18n_uchar;
205 #else
206     typedef uint16_t i18n_uchar;
207 #endif
208
209
210 /**
211  * @brief i18n_uchar32.
212  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
213  */
214 typedef int32_t i18n_uchar32;
215 /**
216  * @brief i18n_ubool.
217  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
218  */
219 typedef int8_t i18n_ubool;
220
221 /**
222  * @brief Enumeration of constants for Unicode properties.
223  *        The properties APIs are intended to reflect Unicode properties as defined in the Unicode Character Database (UCD) and Unicode Technical Reports (UTR).
224  *        For details about the properties see http://www.unicode.org/ucd/ . For names of Unicode properties see the UCD file PropertyAliases.txt.
225  *
226  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
227  */
228 typedef enum {
229     I18N_UCHAR_ALPHABETIC                      = 0,                                    /**<  */
230
231     I18N_UCHAR_BINARY_START                    = I18N_UCHAR_ALPHABETIC,                /**<  */
232     I18N_UCHAR_ASCII_HEX_DIGIT,                                                        /**<  */
233     I18N_UCHAR_BIDI_CONTROL,                                                           /**<  */
234     I18N_UCHAR_BIDI_MIRRORED,                                                          /**<  */
235     I18N_UCHAR_DASH,                                                                   /**<  */
236     I18N_UCHAR_DEFAULT_IGNORABLE_CODE_POINT,                                           /**<  */
237     I18N_UCHAR_DEPRECATED,                                                             /**<  */
238     I18N_UCHAR_DIACRITIC,                                                              /**<  */
239     I18N_UCHAR_EXTENDER,                                                               /**<  */
240     I18N_UCHAR_FULL_COMPOSITION_EXCLUSION,                                             /**<  */
241     I18N_UCHAR_GRAPHEME_BASE,                                                          /**<  */
242     I18N_UCHAR_GRAPHEME_EXTEND,                                                        /**<  */
243     I18N_UCHAR_GRAPHEME_LINK,                                                          /**<  */
244     I18N_UCHAR_HEX_DIGIT,                                                              /**<  */
245     I18N_UCHAR_HYPHEN,                                                                 /**<  */
246     I18N_UCHAR_ID_CONTINUE,                                                            /**<  */
247     I18N_UCHAR_ID_START,                                                               /**<  */
248     I18N_UCHAR_IDEOGRAPHIC,                                                            /**<  */
249     I18N_UCHAR_IDS_BINARY_OPERATOR,                                                    /**<  */
250     I18N_UCHAR_IDS_TRINARY_OPERATOR,                                                   /**<  */
251     I18N_UCHAR_JOIN_CONTROL,                                                           /**<  */
252     I18N_UCHAR_LOGICAL_ORDER_EXCEPTION,                                                /**<  */
253     I18N_UCHAR_LOWERCASE,                                                              /**<  */
254     I18N_UCHAR_MATH,                                                                   /**<  */
255     I18N_UCHAR_NONCHARACTER_CODE_POINT,                                                /**<  */
256     I18N_UCHAR_QUOTATION_MARK,                                                         /**<  */
257     I18N_UCHAR_RADICAL,                                                                /**<  */
258     I18N_UCHAR_SOFT_DOTTED,                                                            /**<  */
259     I18N_UCHAR_TERMINAL_PUNCTUATION,                                                   /**<  */
260     I18N_UCHAR_UNIFIED_IDEOGRAPH,                                                      /**<  */
261     I18N_UCHAR_UPPERCASE,                                                              /**<  */
262     I18N_UCHAR_WHITE_SPACE,                                                            /**<  */
263     I18N_UCHAR_XID_CONTINUE,                                                           /**<  */
264     I18N_UCHAR_XID_START,                                                              /**<  */
265     I18N_UCHAR_CASE_SENSITIVE,                                                         /**<  */
266     I18N_UCHAR_S_TERM,                                                                 /**<  */
267     I18N_UCHAR_VARIATION_SELECTOR,                                                     /**<  */
268     I18N_UCHAR_NFD_INERT,                                                              /**<  */
269     I18N_UCHAR_NFKD_INERT,                                                             /**<  */
270     I18N_UCHAR_NFC_INERT,                                                              /**<  */
271     I18N_UCHAR_NFKC_INERT,                                                             /**<  */
272     I18N_UCHAR_SEGMENT_STARTER,                                                        /**<  */
273     I18N_UCHAR_PATTERN_SYNTAX,                                                         /**<  */
274     I18N_UCHAR_PATTERN_WHITE_SPACE,                                                    /**<  */
275     I18N_UCHAR_POSIX_ALNUM,                                                            /**<  */
276     I18N_UCHAR_POSIX_BLANK,                                                            /**<  */
277     I18N_UCHAR_POSIX_GRAPH,                                                            /**<  */
278     I18N_UCHAR_POSIX_PRINT,                                                            /**<  */
279     I18N_UCHAR_POSIX_XDIGIT,                                                           /**<  */
280     I18N_UCHAR_CASED,                                                                  /**<  */
281     I18N_UCHAR_CASE_IGNORABLE,                                                         /**<  */
282     I18N_UCHAR_CHANGES_WHEN_LOWERCASED,                                                /**<  */
283     I18N_UCHAR_CHANGES_WHEN_UPPERCASED,                                                /**<  */
284     I18N_UCHAR_CHANGES_WHEN_TITLECASED,                                                /**<  */
285     I18N_UCHAR_CHANGES_WHEN_CASEFOLDED,                                                /**<  */
286     I18N_UCHAR_CHANGES_WHEN_CASEMAPPED,                                                /**<  */
287     I18N_UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED,                                           /**<  */
288     I18N_UCHAR_BINARY_LIMIT,                                                           /**<  */
289
290     I18N_UCHAR_BIDI_CLASS                      = 0x1000,                               /**<  */
291
292     I18N_UCHAR_INT_START                       = I18N_UCHAR_BIDI_CLASS,                /**<  */
293     I18N_UCHAR_BLOCK,                                                                  /**<  */
294     I18N_UCHAR_CANONICAL_COMBINING_CLASS,                                              /**<  */
295     I18N_UCHAR_DECOMPOSITION_TYPE,                                                     /**<  */
296     I18N_UCHAR_EAST_ASIAN_WIDTH,                                                       /**<  */
297     I18N_UCHAR_GENERAL_CATEGORY,                                                       /**<  */
298     I18N_UCHAR_JOINING_GROUP,                                                          /**<  */
299     I18N_UCHAR_JOINING_TYPE,                                                           /**<  */
300     I18N_UCHAR_LINE_BREAK,                                                             /**<  */
301     I18N_UCHAR_NUMERIC_TYPE,                                                           /**<  */
302     I18N_UCHAR_SCRIPT,                                                                 /**<  */
303     I18N_UCHAR_HANGUL_SYLLABLE_TYPE,                                                   /**<  */
304     I18N_UCHAR_NFD_QUICK_CHECK,                                                        /**<  */
305     I18N_UCHAR_NFKD_QUICK_CHECK,                                                       /**<  */
306     I18N_UCHAR_NFC_QUICK_CHECK,                                                        /**<  */
307     I18N_UCHAR_NFKC_QUICK_CHECK,                                                       /**<  */
308     I18N_UCHAR_LEAD_CANONICAL_COMBINING_CLASS,                                         /**<  */
309     I18N_UCHAR_TRAIL_CANONICAL_COMBINING_CLASS,                                        /**<  */
310     I18N_UCHAR_GRAPHEME_CLUSTER_BREAK,                                                 /**<  */
311     I18N_UCHAR_SENTENCE_BREAK,                                                         /**<  */
312     I18N_UCHAR_WORD_BREAK,                                                             /**<  */
313     I18N_UCHAR_BIDI_PAIRED_BRACKET_TYPE,                                               /**<  */
314     I18N_UCHAR_INT_LIMIT,                                                              /**<  */
315
316     I18N_UCHAR_GENERAL_CATEGORY_MASK           = 0x2000,                               /**<  */
317
318     I18N_UCHAR_MASK_START                      = I18N_UCHAR_GENERAL_CATEGORY_MASK,     /**<  */
319     I18N_UCHAR_MASK_LIMIT,                                                             /**<  */
320
321     I18N_UCHAR_NUMERIC_VALUE                   = 0x3000,                               /**<  */
322     I18N_UCHAR_DOUBLE_START                    = I18N_UCHAR_NUMERIC_VALUE,             /**<  */
323     I18N_UCHAR_DOUBLE_LIMIT,                                                           /**<  */
324
325     I18N_UCHAR_AGE                             = 0x4000,                               /**<  */
326     I18N_UCHAR_STRING_START                    = I18N_UCHAR_AGE,                       /**<  */
327     I18N_UCHAR_BIDI_MIRRORING_GLYPH,                                                   /**<  */
328     I18N_UCHAR_CASE_FOLDING,                                                           /**<  */
329
330     I18N_UCHAR_LOWERCASE_MAPPING               = 0x4004,                               /**<  */
331     I18N_UCHAR_NAME,                                                                   /**<  */
332     I18N_UCHAR_SIMPLE_CASE_FOLDING,                                                    /**<  */
333     I18N_UCHAR_SIMPLE_LOWERCASE_MAPPING,                                               /**<  */
334     I18N_UCHAR_SIMPLE_TITLECASE_MAPPING,                                               /**<  */
335     I18N_UCHAR_SIMPLE_UPPERCASE_MAPPING,                                               /**<  */
336     I18N_UCHAR_TITLECASE_MAPPING,                                                      /**<  */
337
338     I18N_UCHAR_UPPERCASE_MAPPING               = 0x400C,                               /**<  */
339     I18N_UCHAR_BIDI_PAIRED_BRACKET,                                                    /**<  */
340     I18N_UCHAR_STRING_LIMIT,                                                           /**<  */
341
342     I18N_UCHAR_SCRIPT_EXTENSIONS               = 0x7000,                               /**<  */
343     I18N_UCHAR_OTHER_PROPERTY_START            = I18N_UCHAR_SCRIPT_EXTENSIONS,         /**<  */
344     I18N_UCHAR_OTHER_PROPERTY_LIMIT,                                                   /**<  */
345     I18N_UCHAR_INVALID_CODE                    = -1                                    /**<  */
346 } i18n_uchar_uproperty_e;
347
348 /**
349  * @brief Constants for Unicode blocks, see the Unicode Data file Blocks.txt.
350  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
351  *
352  */
353 typedef enum {
354     I18N_UCHAR_UBLOCK_NO_BLOCK,                                                  /**<  */
355     I18N_UCHAR_UBLOCK_BASIC_LATIN,                                               /**<  */
356     I18N_UCHAR_UBLOCK_LATIN_1_SUPPLEMENT,                                        /**<  */
357     I18N_UCHAR_UBLOCK_LATIN_EXTENDED_A,                                          /**<  */
358     I18N_UCHAR_UBLOCK_LATIN_EXTENDED_B,                                          /**<  */
359     I18N_UCHAR_UBLOCK_IPA_EXTENSIONS,                                            /**<  */
360     I18N_UCHAR_UBLOCK_SPACING_MODIFIER_LETTERS,                                  /**<  */
361     I18N_UCHAR_UBLOCK_COMBINING_DIACRITICAL_MARKS,                               /**<  */
362     I18N_UCHAR_UBLOCK_GREEK,                                                     /**<  */
363     I18N_UCHAR_UBLOCK_CYRILLIC,                                                  /**<  */
364     I18N_UCHAR_UBLOCK_ARMENIAN,                                                  /**<  */
365     I18N_UCHAR_UBLOCK_HEBREW,                                                    /**<  */
366     I18N_UCHAR_UBLOCK_ARABIC,                                                    /**<  */
367     I18N_UCHAR_UBLOCK_SYRIAC,                                                    /**<  */
368     I18N_UCHAR_UBLOCK_THAANA,                                                    /**<  */
369     I18N_UCHAR_UBLOCK_DEVANAGARI,                                                /**<  */
370     I18N_UCHAR_UBLOCK_BENGALI,                                                   /**<  */
371     I18N_UCHAR_UBLOCK_GURMUKHI,                                                  /**<  */
372     I18N_UCHAR_UBLOCK_GUJARATI,                                                  /**<  */
373     I18N_UCHAR_UBLOCK_ORIYA,                                                     /**<  */
374     I18N_UCHAR_UBLOCK_TAMIL,                                                     /**<  */
375     I18N_UCHAR_UBLOCK_TELUGU,                                                    /**<  */
376     I18N_UCHAR_UBLOCK_KANNADA,                                                   /**<  */
377     I18N_UCHAR_UBLOCK_MALAYALAM,                                                 /**<  */
378     I18N_UCHAR_UBLOCK_SINHALA,                                                   /**<  */
379     I18N_UCHAR_UBLOCK_THAI,                                                      /**<  */
380     I18N_UCHAR_UBLOCK_LAO,                                                       /**<  */
381     I18N_UCHAR_UBLOCK_TIBETAN,                                                   /**<  */
382     I18N_UCHAR_UBLOCK_MYANMAR,                                                   /**<  */
383     I18N_UCHAR_UBLOCK_GEORGIAN,                                                  /**<  */
384     I18N_UCHAR_UBLOCK_HANGUL_JAMO,                                               /**<  */
385     I18N_UCHAR_UBLOCK_ETHIOPIC,                                                  /**<  */
386     I18N_UCHAR_UBLOCK_CHEROKEE,                                                  /**<  */
387     I18N_UCHAR_UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,                     /**<  */
388     I18N_UCHAR_UBLOCK_OGHAM,                                                     /**<  */
389     I18N_UCHAR_UBLOCK_RUNIC,                                                     /**<  */
390     I18N_UCHAR_UBLOCK_KHMER,                                                     /**<  */
391     I18N_UCHAR_UBLOCK_MONGOLIAN,                                                 /**<  */
392     I18N_UCHAR_UBLOCK_LATIN_EXTENDED_ADDITIONAL,                                 /**<  */
393     I18N_UCHAR_UBLOCK_GREEK_EXTENDED,                                            /**<  */
394     I18N_UCHAR_UBLOCK_GENERAL_PUNCTUATION,                                       /**<  */
395     I18N_UCHAR_UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS,                               /**<  */
396     I18N_UCHAR_UBLOCK_CURRENCY_SYMBOLS,                                          /**<  */
397     I18N_UCHAR_UBLOCK_COMBINING_MARKS_FOR_SYMBOLS,                               /**<  */
398     I18N_UCHAR_UBLOCK_LETTERLIKE_SYMBOLS,                                        /**<  */
399     I18N_UCHAR_UBLOCK_NUMBER_FORMS,                                              /**<  */
400     I18N_UCHAR_UBLOCK_ARROWS,                                                    /**<  */
401     I18N_UCHAR_UBLOCK_MATHEMATICAL_OPERATORS,                                    /**<  */
402     I18N_UCHAR_UBLOCK_MISCELLANEOUS_TECHNICAL,                                   /**<  */
403     I18N_UCHAR_UBLOCK_CONTROL_PICTURES,                                          /**<  */
404     I18N_UCHAR_UBLOCK_OPTICAL_CHARACTER_RECOGNITION,                             /**<  */
405     I18N_UCHAR_UBLOCK_ENCLOSED_ALPHANUMERICS,                                    /**<  */
406     I18N_UCHAR_UBLOCK_BOX_DRAWING,                                               /**<  */
407     I18N_UCHAR_UBLOCK_BLOCK_ELEMENTS,                                            /**<  */
408     I18N_UCHAR_UBLOCK_GEOMETRIC_SHAPES,                                          /**<  */
409     I18N_UCHAR_UBLOCK_MISCELLANEOUS_SYMBOLS,                                     /**<  */
410     I18N_UCHAR_UBLOCK_DINGBATS,                                                  /**<  */
411     I18N_UCHAR_UBLOCK_BRAILLE_PATTERNS,                                          /**<  */
412     I18N_UCHAR_UBLOCK_CJK_RADICALS_SUPPLEMENT,                                   /**<  */
413     I18N_UCHAR_UBLOCK_KANGXI_RADICALS,                                           /**<  */
414     I18N_UCHAR_UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS,                        /**<  */
415     I18N_UCHAR_UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION,                               /**<  */
416     I18N_UCHAR_UBLOCK_HIRAGANA,                                                  /**<  */
417     I18N_UCHAR_UBLOCK_KATAKANA,                                                  /**<  */
418     I18N_UCHAR_UBLOCK_BOPOMOFO,                                                  /**<  */
419     I18N_UCHAR_UBLOCK_HANGUL_COMPATIBILITY_JAMO,                                 /**<  */
420     I18N_UCHAR_UBLOCK_KANBUN,                                                    /**<  */
421     I18N_UCHAR_UBLOCK_BOPOMOFO_EXTENDED,                                         /**<  */
422     I18N_UCHAR_UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS,                           /**<  */
423     I18N_UCHAR_UBLOCK_CJK_COMPATIBILITY,                                         /**<  */
424     I18N_UCHAR_UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,                        /**<  */
425     I18N_UCHAR_UBLOCK_CJK_UNIFIED_IDEOGRAPHS,                                    /**<  */
426     I18N_UCHAR_UBLOCK_YI_SYLLABLES,                                              /**<  */
427     I18N_UCHAR_UBLOCK_YI_RADICALS,                                               /**<  */
428     I18N_UCHAR_UBLOCK_HANGUL_SYLLABLES,                                          /**<  */
429     I18N_UCHAR_UBLOCK_HIGH_SURROGATES,                                           /**<  */
430     I18N_UCHAR_UBLOCK_HIGH_PRIVATE_USE_SURROGATES,                               /**<  */
431     I18N_UCHAR_UBLOCK_LOW_SURROGATES,                                            /**<  */
432     I18N_UCHAR_UBLOCK_PRIVATE_USE_AREA,                                          /**<  */
433     I18N_UCHAR_UBLOCK_PRIVATE_USE,                                               /**<  */
434     I18N_UCHAR_UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS,                              /**<  */
435
436     I18N_UCHAR_UBLOCK_ALPHABETIC_PRESENTATION_FORMS,                             /**<  */
437     I18N_UCHAR_UBLOCK_ARABIC_PRESENTATION_FORMS_A,                               /**<  */
438     I18N_UCHAR_UBLOCK_COMBINING_HALF_MARKS,                                      /**<  */
439     I18N_UCHAR_UBLOCK_CJK_COMPATIBILITY_FORMS,                                   /**<  */
440     I18N_UCHAR_UBLOCK_SMALL_FORM_VARIANTS,                                       /**<  */
441     I18N_UCHAR_UBLOCK_ARABIC_PRESENTATION_FORMS_B,                               /**<  */
442     I18N_UCHAR_UBLOCK_SPECIALS,                                                  /**<  */
443     I18N_UCHAR_UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS,                             /**<  */
444     I18N_UCHAR_UBLOCK_OLD_ITALIC,                                                /**<  */
445     I18N_UCHAR_UBLOCK_GOTHIC,                                                    /**<  */
446     I18N_UCHAR_UBLOCK_DESERET,                                                   /**<  */
447     I18N_UCHAR_UBLOCK_BYZANTINE_MUSICAL_SYMBOLS,                                 /**<  */
448     I18N_UCHAR_UBLOCK_MUSICAL_SYMBOLS,                                           /**<  */
449     I18N_UCHAR_UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS,                         /**<  */
450     I18N_UCHAR_UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,                        /**<  */
451     I18N_UCHAR_UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,                   /**<  */
452     I18N_UCHAR_UBLOCK_TAGS,                                                      /**<  */
453     I18N_UCHAR_UBLOCK_CYRILLIC_SUPPLEMENT,                                       /**<  */
454     I18N_UCHAR_UBLOCK_CYRILLIC_SUPPLEMENTARY,                                    /**<  */
455     I18N_UCHAR_UBLOCK_TAGALOG,                                                   /**<  */
456     I18N_UCHAR_UBLOCK_HANUNOO,                                                   /**<  */
457     I18N_UCHAR_UBLOCK_BUHID,                                                     /**<  */
458     I18N_UCHAR_UBLOCK_TAGBANWA,                                                  /**<  */
459     I18N_UCHAR_UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A,                      /**<  */
460     I18N_UCHAR_UBLOCK_SUPPLEMENTAL_ARROWS_A,                                     /**<  */
461     I18N_UCHAR_UBLOCK_SUPPLEMENTAL_ARROWS_B,                                     /**<  */
462     I18N_UCHAR_UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B,                      /**<  */
463     I18N_UCHAR_UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS,                       /**<  */
464     I18N_UCHAR_UBLOCK_KATAKANA_PHONETIC_EXTENSIONS,                              /**<  */
465     I18N_UCHAR_UBLOCK_VARIATION_SELECTORS,                                       /**<  */
466     I18N_UCHAR_UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A,                          /**<  */
467     I18N_UCHAR_UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B,                          /**<  */
468     I18N_UCHAR_UBLOCK_LIMBU,                                                     /**<  */
469     I18N_UCHAR_UBLOCK_TAI_LE,                                                    /**<  */
470     I18N_UCHAR_UBLOCK_KHMER_SYMBOLS,                                             /**<  */
471     I18N_UCHAR_UBLOCK_PHONETIC_EXTENSIONS,                                       /**<  */
472     I18N_UCHAR_UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS,                          /**<  */
473     I18N_UCHAR_UBLOCK_YIJING_HEXAGRAM_SYMBOLS,                                   /**<  */
474     I18N_UCHAR_UBLOCK_LINEAR_B_SYLLABARY,                                        /**<  */
475     I18N_UCHAR_UBLOCK_LINEAR_B_IDEOGRAMS,                                        /**<  */
476     I18N_UCHAR_UBLOCK_AEGEAN_NUMBERS,                                            /**<  */
477     I18N_UCHAR_UBLOCK_UGARITIC,                                                  /**<  */
478     I18N_UCHAR_UBLOCK_SHAVIAN,                                                   /**<  */
479     I18N_UCHAR_UBLOCK_OSMANYA,                                                   /**<  */
480     I18N_UCHAR_UBLOCK_CYPRIOT_SYLLABARY,                                         /**<  */
481     I18N_UCHAR_UBLOCK_TAI_XUAN_JING_SYMBOLS,                                     /**<  */
482     I18N_UCHAR_UBLOCK_VARIATION_SELECTORS_SUPPLEMENT,                            /**<  */
483     I18N_UCHAR_UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION,                            /**<  */
484     I18N_UCHAR_UBLOCK_ANCIENT_GREEK_NUMBERS,                                     /**<  */
485     I18N_UCHAR_UBLOCK_ARABIC_SUPPLEMENT,                                         /**<  */
486     I18N_UCHAR_UBLOCK_BUGINESE,                                                  /**<  */
487     I18N_UCHAR_UBLOCK_CJK_STROKES,                                               /**<  */
488     I18N_UCHAR_UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT,                    /**<  */
489     I18N_UCHAR_UBLOCK_COPTIC,                                                    /**<  */
490     I18N_UCHAR_UBLOCK_ETHIOPIC_EXTENDED,                                         /**<  */
491     I18N_UCHAR_UBLOCK_ETHIOPIC_SUPPLEMENT,                                       /**<  */
492     I18N_UCHAR_UBLOCK_GEORGIAN_SUPPLEMENT,                                       /**<  */
493     I18N_UCHAR_UBLOCK_GLAGOLITIC,                                                /**<  */
494     I18N_UCHAR_UBLOCK_KHAROSHTHI,                                                /**<  */
495     I18N_UCHAR_UBLOCK_MODIFIER_TONE_LETTERS,                                     /**<  */
496     I18N_UCHAR_UBLOCK_NEW_TAI_LUE,                                               /**<  */
497     I18N_UCHAR_UBLOCK_OLD_PERSIAN,                                               /**<  */
498     I18N_UCHAR_UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT,                            /**<  */
499     I18N_UCHAR_UBLOCK_SUPPLEMENTAL_PUNCTUATION,                                  /**<  */
500     I18N_UCHAR_UBLOCK_SYLOTI_NAGRI,                                              /**<  */
501     I18N_UCHAR_UBLOCK_TIFINAGH,                                                  /**<  */
502     I18N_UCHAR_UBLOCK_VERTICAL_FORMS,                                            /**<  */
503     I18N_UCHAR_UBLOCK_NKO,                                                       /**<  */
504     I18N_UCHAR_UBLOCK_BALINESE,                                                  /**<  */
505     I18N_UCHAR_UBLOCK_LATIN_EXTENDED_C,                                          /**<  */
506     I18N_UCHAR_UBLOCK_LATIN_EXTENDED_D,                                          /**<  */
507     I18N_UCHAR_UBLOCK_PHAGS_PA,                                                  /**<  */
508     I18N_UCHAR_UBLOCK_PHOENICIAN,                                                /**<  */
509     I18N_UCHAR_UBLOCK_CUNEIFORM,                                                 /**<  */
510     I18N_UCHAR_UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION,                         /**<  */
511     I18N_UCHAR_UBLOCK_COUNTING_ROD_NUMERALS,                                     /**<  */
512     I18N_UCHAR_UBLOCK_SUNDANESE,                                                 /**<  */
513     I18N_UCHAR_UBLOCK_LEPCHA,                                                    /**<  */
514     I18N_UCHAR_UBLOCK_OL_CHIKI,                                                  /**<  */
515     I18N_UCHAR_UBLOCK_CYRILLIC_EXTENDED_A,                                       /**<  */
516     I18N_UCHAR_UBLOCK_VAI,                                                       /**<  */
517     I18N_UCHAR_UBLOCK_CYRILLIC_EXTENDED_B,                                       /**<  */
518     I18N_UCHAR_UBLOCK_SAURASHTRA,                                                /**<  */
519     I18N_UCHAR_UBLOCK_KAYAH_LI,                                                  /**<  */
520     I18N_UCHAR_UBLOCK_REJANG,                                                    /**<  */
521     I18N_UCHAR_UBLOCK_CHAM,                                                      /**<  */
522     I18N_UCHAR_UBLOCK_ANCIENT_SYMBOLS,                                           /**<  */
523     I18N_UCHAR_UBLOCK_PHAISTOS_DISC,                                             /**<  */
524     I18N_UCHAR_UBLOCK_LYCIAN,                                                    /**<  */
525     I18N_UCHAR_UBLOCK_CARIAN,                                                    /**<  */
526     I18N_UCHAR_UBLOCK_LYDIAN,                                                    /**<  */
527     I18N_UCHAR_UBLOCK_MAHJONG_TILES,                                             /**<  */
528     I18N_UCHAR_UBLOCK_DOMINO_TILES,                                              /**<  */
529     I18N_UCHAR_UBLOCK_SAMARITAN,                                                 /**<  */
530     I18N_UCHAR_UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED,            /**<  */
531     I18N_UCHAR_UBLOCK_TAI_THAM,                                                  /**<  */
532     I18N_UCHAR_UBLOCK_VEDIC_EXTENSIONS,                                          /**<  */
533     I18N_UCHAR_UBLOCK_LISU,                                                      /**<  */
534     I18N_UCHAR_UBLOCK_BAMUM,                                                     /**<  */
535     I18N_UCHAR_UBLOCK_COMMON_INDIC_NUMBER_FORMS,                                 /**<  */
536     I18N_UCHAR_UBLOCK_DEVANAGARI_EXTENDED,                                       /**<  */
537     I18N_UCHAR_UBLOCK_HANGUL_JAMO_EXTENDED_A,                                    /**<  */
538     I18N_UCHAR_UBLOCK_JAVANESE,                                                  /**<  */
539     I18N_UCHAR_UBLOCK_MYANMAR_EXTENDED_A,                                        /**<  */
540     I18N_UCHAR_UBLOCK_TAI_VIET,                                                  /**<  */
541     I18N_UCHAR_UBLOCK_MEETEI_MAYEK,                                              /**<  */
542     I18N_UCHAR_UBLOCK_HANGUL_JAMO_EXTENDED_B,                                    /**<  */
543     I18N_UCHAR_UBLOCK_IMPERIAL_ARAMAIC,                                          /**<  */
544     I18N_UCHAR_UBLOCK_OLD_SOUTH_ARABIAN,                                         /**<  */
545     I18N_UCHAR_UBLOCK_AVESTAN,                                                   /**<  */
546     I18N_UCHAR_UBLOCK_INSCRIPTIONAL_PARTHIAN,                                    /**<  */
547     I18N_UCHAR_UBLOCK_INSCRIPTIONAL_PAHLAVI,                                     /**<  */
548     I18N_UCHAR_UBLOCK_OLD_TURKIC,                                                /**<  */
549     I18N_UCHAR_UBLOCK_RUMI_NUMERAL_SYMBOLS,                                      /**<  */
550     I18N_UCHAR_UBLOCK_KAITHI,                                                    /**<  */
551     I18N_UCHAR_UBLOCK_EGYPTIAN_HIEROGLYPHS,                                      /**<  */
552     I18N_UCHAR_UBLOCK_ENCLOSED_ALPHANUMERIC_SUPPLEMENT,                          /**<  */
553     I18N_UCHAR_UBLOCK_ENCLOSED_IDEOGRAPHIC_SUPPLEMENT,                           /**<  */
554     I18N_UCHAR_UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,                        /**<  */
555     I18N_UCHAR_UBLOCK_MANDAIC,                                                   /**<  */
556     I18N_UCHAR_UBLOCK_BATAK,                                                     /**<  */
557     I18N_UCHAR_UBLOCK_ETHIOPIC_EXTENDED_A,                                       /**<  */
558     I18N_UCHAR_UBLOCK_BRAHMI,                                                    /**<  */
559     I18N_UCHAR_UBLOCK_BAMUM_SUPPLEMENT,                                          /**<  */
560     I18N_UCHAR_UBLOCK_KANA_SUPPLEMENT,                                           /**<  */
561     I18N_UCHAR_UBLOCK_PLAYING_CARDS,                                             /**<  */
562     I18N_UCHAR_UBLOCK_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS,                     /**<  */
563     I18N_UCHAR_UBLOCK_EMOTICONS,                                                 /**<  */
564     I18N_UCHAR_UBLOCK_TRANSPORT_AND_MAP_SYMBOLS,                                 /**<  */
565     I18N_UCHAR_UBLOCK_ALCHEMICAL_SYMBOLS,                                        /**<  */
566     I18N_UCHAR_UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,                        /**<  */
567     I18N_UCHAR_UBLOCK_COUNT,                                                     /**<  */
568     I18N_UCHAR_UBLOCK_INVALID_CODE = -1                                          /**<  */
569 } i18n_uchar_ublock_code_e;
570
571 /**
572  * @brief Enumeration for the language directional property of a character set.
573  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
574  *
575  */
576 typedef enum {
577 /*
578  * Note: UCharDirection constants and their API comments are parsed by preparseucd.py.
579  * It matches pairs of lines like
580  * / ** <Unicode 1..3-letter Bidi_Class value> comment... * /
581  * U_<[A-Z_]+> = <integer>,
582  */
583     I18N_UCHAR_U_LEFT_TO_RIGHT,                                      /**< L */
584     I18N_UCHAR_U_RIGHT_TO_LEFT,                                      /**< R */
585     I18N_UCHAR_U_EUROPEAN_NUMBER,                                    /**< EN */
586     I18N_UCHAR_U_EUROPEAN_NUMBER_SEPARATOR,                          /**< ES */
587     I18N_UCHAR_U_EUROPEAN_NUMBER_TERMINATOR,                         /**< ET */
588     I18N_UCHAR_U_ARABIC_NUMBER,                                      /**< AN */
589     I18N_UCHAR_U_COMMON_NUMBER_SEPARATOR,                            /**< CS */
590     I18N_UCHAR_U_BLOCK_SEPARATOR,                                    /**< B */
591     I18N_UCHAR_U_SEGMENT_SEPARATOR,                                  /**< S */
592     I18N_UCHAR_U_WHITE_SPACE_NEUTRAL,                                /**< WS */
593     I18N_UCHAR_U_OTHER_NEUTRAL,                                      /**< ON */
594     I18N_UCHAR_U_LEFT_TO_RIGHT_EMBEDDING,                            /**< LRE */
595     I18N_UCHAR_U_LEFT_TO_RIGHT_OVERRIDE,                             /**< LRO */
596     I18N_UCHAR_U_RIGHT_TO_LEFT_ARABIC,                               /**< AL */
597     I18N_UCHAR_U_RIGHT_TO_LEFT_EMBEDDING,                            /**< RLE */
598     I18N_UCHAR_U_RIGHT_TO_LEFT_OVERRIDE,                             /**< RLO */
599     I18N_UCHAR_U_POP_DIRECTIONAL_FORMAT,                             /**< PDF */
600     I18N_UCHAR_U_DIR_NON_SPACING_MARK,                               /**< NSM */
601     I18N_UCHAR_U_BOUNDARY_NEUTRAL,                                   /**< BN */
602     I18N_UCHAR_U_CHAR_DIRECTION_COUNT                                /**<  */
603 } i18n_uchar_direction_e;
604
605 /**
606  * @brief Enumeration for Decomposition Type constants.
607  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
608  */
609 typedef enum {
610 /*
611  * Note: UDecompositionType constants are parsed by preparseucd.py.
612  * It matches lines like
613  * U_DT_<Unicode Decomposition_Type value name>
614  */
615     I18N_UCHAR_U_DT_NONE,           /**< [none] */
616     I18N_UCHAR_U_DT_CANONICAL,      /**< [can] */
617     I18N_UCHAR_U_DT_COMPAT,         /**< [com] */
618     I18N_UCHAR_U_DT_CIRCLE,         /**< [enc] */
619     I18N_UCHAR_U_DT_FINAL,          /**< [fin] */
620     I18N_UCHAR_U_DT_FONT,           /**< [font] */
621     I18N_UCHAR_U_DT_FRACTION,       /**< [fra] */
622     I18N_UCHAR_U_DT_INITIAL,        /**< [init] */
623     I18N_UCHAR_U_DT_ISOLATED,       /**< [iso] */
624     I18N_UCHAR_U_DT_MEDIAL,         /**< [med] */
625     I18N_UCHAR_U_DT_NARROW,         /**< [nar] */
626     I18N_UCHAR_U_DT_NOBREAK,        /**< [nb] */
627     I18N_UCHAR_U_DT_SMALL,          /**< [sml] */
628     I18N_UCHAR_U_DT_SQUARE,         /**< [sqr] */
629     I18N_UCHAR_U_DT_SUB,            /**< [sub] */
630     I18N_UCHAR_U_DT_SUPER,          /**< [sup] */
631     I18N_UCHAR_U_DT_VERTICAL,       /**< [vert] */
632     I18N_UCHAR_U_DT_WIDE,           /**< [wide] */
633     I18N_UCHAR_U_DT_COUNT           /**< 18 */
634 } i18n_uchar_u_decomposition_type_e;
635
636 /**
637  * @brief Enumeration for East Asian Width constants.
638  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
639  */
640 typedef enum {
641     I18N_UCHAR_U_EA_NEUTRAL,         /**< [N] */
642     I18N_UCHAR_U_EA_AMBIGUOUS,       /**< [A] */
643     I18N_UCHAR_U_EA_HALFWIDTH,       /**< [H] */
644     I18N_UCHAR_U_EA_FULLWIDTH,       /**< [F] */
645     I18N_UCHAR_U_EA_NARROW,          /**< [Na] */
646     I18N_UCHAR_U_EA_WIDE,            /**< [W] */
647     I18N_UCHAR_U_EA_COUNT
648 } i18n_uchar_u_east_asian_width_e;
649
650 /**
651  * @brief Enumeration for Unicode general category types.
652  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
653  */
654 typedef enum {
655     I18N_UCHAR_U_UNASSIGNED,                        /**< Non-category for unassigned and non-character code points */
656     I18N_UCHAR_U_GENERAL_OTHER_TYPES = 0,           /**< Cn "Other, Not Assigned (no characters in [UnicodeData.txt] have this property)" (same as #I18N_UCHAR_U_UNASSIGNED!) */
657     I18N_UCHAR_U_UPPERCASE_LETTER,                  /**< Lu */
658     I18N_UCHAR_U_LOWERCASE_LETTER,                  /**< Ll */
659     I18N_UCHAR_U_TITLECASE_LETTER,                  /**< Lt */
660     I18N_UCHAR_U_MODIFIER_LETTER,                   /**< Lm */
661     I18N_UCHAR_U_OTHER_LETTER,                      /**< Lo */
662     I18N_UCHAR_U_NON_SPACING_MARK,                  /**< Mn */
663     I18N_UCHAR_U_ENCLOSING_MARK,                    /**< Me */
664     I18N_UCHAR_U_COMBINING_SPACING_MARK,            /**< Mc */
665     I18N_UCHAR_U_DECIMAL_DIGIT_NUMBER,              /**< Nd */
666     I18N_UCHAR_U_LETTER_NUMBER,                     /**< Nl */
667     I18N_UCHAR_U_OTHER_NUMBER,                      /**< No */
668     I18N_UCHAR_U_SPACE_SEPARATOR,                   /**< Zs */
669     I18N_UCHAR_U_LINE_SEPARATOR,                    /**< Zl */
670     I18N_UCHAR_U_PARAGRAPH_SEPARATOR,               /**< Zp */
671     I18N_UCHAR_U_CONTROL_CHAR,                      /**< Cc */
672     I18N_UCHAR_U_FORMAT_CHAR,                       /**< Cf */
673     I18N_UCHAR_U_PRIVATE_USE_CHAR,                  /**< Co */
674     I18N_UCHAR_U_SURROGATE,                         /**< Cs */
675     I18N_UCHAR_U_DASH_PUNCTUATION,                  /**< Pd */
676     I18N_UCHAR_U_START_PUNCTUATION,                 /**< Ps */
677     I18N_UCHAR_U_END_PUNCTUATION,                   /**< Pe */
678     I18N_UCHAR_U_CONNECTOR_PUNCTUATION,             /**< Pc */
679     I18N_UCHAR_U_OTHER_PUNCTUATION,                 /**< Po */
680     I18N_UCHAR_U_MATH_SYMBOL,                       /**< Sm */
681     I18N_UCHAR_U_CURRENCY_SYMBOL,                   /**< Sc */
682     I18N_UCHAR_U_MODIFIER_SYMBOL,                   /**< Sk */
683     I18N_UCHAR_U_OTHER_SYMBOL,                      /**< So */
684     I18N_UCHAR_U_INITIAL_PUNCTUATION,               /**< Pi */
685     I18N_UCHAR_U_FINAL_PUNCTUATION,                 /**< Pf */
686     I18N_UCHAR_U_CHAR_CATEGORY_COUNT                /**< One higher than the last enum #i18n_uchar_category_e constant */
687 } i18n_uchar_category_e;
688
689 /**
690  * @brief Enumeration for Joining Group constants.
691  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
692  */
693 typedef enum {
694 /*
695  * Note: UJoiningGroup constants are parsed by preparseucd.py.
696  * It matches lines like
697  * U_JG_<Unicode Joining_Group value name>
698  */
699     I18N_UCHAR_U_JG_NO_JOINING_GROUP,                                              /**<  */
700     I18N_UCHAR_U_JG_AIN,                                                           /**<  */
701     I18N_UCHAR_U_JG_ALAPH,                                                         /**<  */
702     I18N_UCHAR_U_JG_ALEF,                                                          /**<  */
703     I18N_UCHAR_U_JG_BEH,                                                           /**<  */
704     I18N_UCHAR_U_JG_BETH,                                                          /**<  */
705     I18N_UCHAR_U_JG_DAL,                                                           /**<  */
706     I18N_UCHAR_U_JG_DALATH_RISH,                                                   /**<  */
707     I18N_UCHAR_U_JG_E,                                                             /**<  */
708     I18N_UCHAR_U_JG_FEH,                                                           /**<  */
709     I18N_UCHAR_U_JG_FINAL_SEMKATH,                                                 /**<  */
710     I18N_UCHAR_U_JG_GAF,                                                           /**<  */
711     I18N_UCHAR_U_JG_GAMAL,                                                         /**<  */
712     I18N_UCHAR_U_JG_HAH,                                                           /**<  */
713     I18N_UCHAR_U_JG_TEH_MARBUTA_GOAL,                                              /**<  */
714     I18N_UCHAR_U_JG_HAMZA_ON_HEH_GOAL = I18N_UCHAR_U_JG_TEH_MARBUTA_GOAL,          /**<  */
715     I18N_UCHAR_U_JG_HE,                                                            /**<  */
716     I18N_UCHAR_U_JG_HEH,                                                           /**<  */
717     I18N_UCHAR_U_JG_HEH_GOAL,                                                      /**<  */
718     I18N_UCHAR_U_JG_HETH,                                                          /**<  */
719     I18N_UCHAR_U_JG_KAF,                                                           /**<  */
720     I18N_UCHAR_U_JG_KAPH,                                                          /**<  */
721     I18N_UCHAR_U_JG_KNOTTED_HEH,                                                   /**<  */
722     I18N_UCHAR_U_JG_LAM,                                                           /**<  */
723     I18N_UCHAR_U_JG_LAMADH,                                                        /**<  */
724     I18N_UCHAR_U_JG_MEEM,                                                          /**<  */
725     I18N_UCHAR_U_JG_MIM,                                                           /**<  */
726     I18N_UCHAR_U_JG_NOON,                                                          /**<  */
727     I18N_UCHAR_U_JG_NUN,                                                           /**<  */
728     I18N_UCHAR_U_JG_PE,                                                            /**<  */
729     I18N_UCHAR_U_JG_QAF,                                                           /**<  */
730     I18N_UCHAR_U_JG_QAPH,                                                          /**<  */
731     I18N_UCHAR_U_JG_REH,                                                           /**<  */
732     I18N_UCHAR_U_JG_REVERSED_PE,                                                   /**<  */
733     I18N_UCHAR_U_JG_SAD,                                                           /**<  */
734     I18N_UCHAR_U_JG_SADHE,                                                         /**<  */
735     I18N_UCHAR_U_JG_SEEN,                                                          /**<  */
736     I18N_UCHAR_U_JG_SEMKATH,                                                       /**<  */
737     I18N_UCHAR_U_JG_SHIN,                                                          /**<  */
738     I18N_UCHAR_U_JG_SWASH_KAF,                                                     /**<  */
739     I18N_UCHAR_U_JG_SYRIAC_WAW,                                                    /**<  */
740     I18N_UCHAR_U_JG_TAH,                                                           /**<  */
741     I18N_UCHAR_U_JG_TAW,                                                           /**<  */
742     I18N_UCHAR_U_JG_TEH_MARBUTA,                                                   /**<  */
743     I18N_UCHAR_U_JG_TETH,                                                          /**<  */
744     I18N_UCHAR_U_JG_WAW,                                                           /**<  */
745     I18N_UCHAR_U_JG_YEH,                                                           /**<  */
746     I18N_UCHAR_U_JG_YEH_BARREE,                                                    /**<  */
747     I18N_UCHAR_U_JG_YEH_WITH_TAIL,                                                 /**<  */
748     I18N_UCHAR_U_JG_YUDH,                                                          /**<  */
749     I18N_UCHAR_U_JG_YUDH_HE,                                                       /**<  */
750     I18N_UCHAR_U_JG_ZAIN,                                                          /**<  */
751     I18N_UCHAR_U_JG_FE,                                                            /**<  */
752     I18N_UCHAR_U_JG_KHAPH,                                                         /**<  */
753     I18N_UCHAR_U_JG_ZHAIN,                                                         /**<  */
754     I18N_UCHAR_U_JG_BURUSHASKI_YEH_BARREE,                                         /**<  */
755     I18N_UCHAR_U_JG_FARSI_YEH,                                                     /**<  */
756     I18N_UCHAR_U_JG_NYA,                                                           /**<  */
757     I18N_UCHAR_U_JG_ROHINGYA_YEH,
758     I18N_UCHAR_U_JG_COUNT                                                          /**<  */
759  } i18n_uchar_u_joining_group_e;
760
761 /**
762  * @brief Enumeration for Joining Type constants.
763  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
764  */
765 typedef enum {
766 /*
767  * Note: i18n_uchar_u_joining_type_e constants are parsed by preparseucd.py.
768  * It matches lines like
769  * U_JT_<Unicode Joining_Type value name>
770  */
771     I18N_UCHAR_U_JT_NON_JOINING,        /**< [U] */
772     I18N_UCHAR_U_JT_JOIN_CAUSING,       /**< [C] */
773     I18N_UCHAR_U_JT_DUAL_JOINING,       /**< [D] */
774     I18N_UCHAR_U_JT_LEFT_JOINING,       /**< [L] */
775     I18N_UCHAR_U_JT_RIGHT_JOINING,      /**< [R] */
776     I18N_UCHAR_U_JT_TRANSPARENT,        /**< [T] */
777     I18N_UCHAR_U_JT_COUNT               /**< 6 */
778 } i18n_uchar_u_joining_type_e;
779
780 /**
781  * @brief Enumeration for Line Break constants.
782  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
783  */
784 typedef enum {
785 /*
786  * Note: i18n_uchar_u_line_break_e constants are parsed by preparseucd.py.
787  * It matches lines like
788  * U_LB_<Unicode Line_Break value name>
789  */
790     I18N_UCHAR_U_LB_UNKNOWN,                                                         /**< [XX] */
791     I18N_UCHAR_U_LB_AMBIGUOUS,                                                       /**< [AI] */
792     I18N_UCHAR_U_LB_ALPHABETIC,                                                      /**< [AL] */
793     I18N_UCHAR_U_LB_BREAK_BOTH,                                                      /**< [B2] */
794     I18N_UCHAR_U_LB_BREAK_AFTER,                                                     /**< [BA] */
795     I18N_UCHAR_U_LB_BREAK_BEFORE,                                                    /**< [BB] */
796     I18N_UCHAR_U_LB_MANDATORY_BREAK,                                                 /**< [BK] */
797     I18N_UCHAR_U_LB_CONTINGENT_BREAK,                                                /**< [CB] */
798     I18N_UCHAR_U_LB_CLOSE_PUNCTUATION,                                               /**< [CL] */
799     I18N_UCHAR_U_LB_COMBINING_MARK,                                                  /**< [CM] */
800     I18N_UCHAR_U_LB_CARRIAGE_RETURN,                                                 /**< [CR] */
801     I18N_UCHAR_U_LB_EXCLAMATION,                                                     /**< [EX] */
802     I18N_UCHAR_U_LB_GLUE,                                                            /**< [GL] */
803     I18N_UCHAR_U_LB_HYPHEN,                                                          /**< [HY] */
804     I18N_UCHAR_U_LB_IDEOGRAPHIC,                                                     /**< [ID] */
805     I18N_UCHAR_U_LB_INSEPARABLE,                                                     /**< [IN] */
806     I18N_UCHAR_U_LB_INSEPERABLE = I18N_UCHAR_U_LB_INSEPARABLE,
807     I18N_UCHAR_U_LB_INFIX_NUMERIC,                                                   /**< [IS] */
808     I18N_UCHAR_U_LB_LINE_FEED,                                                       /**< [LF] */
809     I18N_UCHAR_U_LB_NONSTARTER,                                                      /**< [NS] */
810     I18N_UCHAR_U_LB_NUMERIC,                                                         /**< [NU] */
811     I18N_UCHAR_U_LB_OPEN_PUNCTUATION,                                                /**< [OP] */
812     I18N_UCHAR_U_LB_POSTFIX_NUMERIC,                                                 /**< [PO] */
813     I18N_UCHAR_U_LB_PREFIX_NUMERIC,                                                  /**< [PR] */
814     I18N_UCHAR_U_LB_QUOTATION,                                                       /**< [QU] */
815     I18N_UCHAR_U_LB_COMPLEX_CONTEXT,                                                 /**< [SA] */
816     I18N_UCHAR_U_LB_SURROGATE,                                                       /**< [SG] */
817     I18N_UCHAR_U_LB_SPACE,                                                           /**< [SP] */
818     I18N_UCHAR_U_LB_BREAK_SYMBOLS,                                                   /**< [SY] */
819     I18N_UCHAR_U_LB_ZWSPACE,                                                         /**< [ZW] */
820     I18N_UCHAR_U_LB_NEXT_LINE,                                                       /**< [NL] */
821     I18N_UCHAR_U_LB_WORD_JOINER,                                                     /**< [WJ] */
822     I18N_UCHAR_U_LB_H2,                                                              /**< [H2] */
823     I18N_UCHAR_U_LB_H3,                                                              /**< [H3] */
824     I18N_UCHAR_U_LB_JL,                                                              /**< [JL] */
825     I18N_UCHAR_U_LB_JT,                                                              /**< [JT] */
826     I18N_UCHAR_U_LB_JV,                                                              /**< [JV] */
827     I18N_UCHAR_U_LB_CLOSE_PARENTHESIS,                                               /**< [CP] */
828     I18N_UCHAR_U_LB_COUNT
829  } i18n_uchar_u_line_break_e;
830
831 /**
832  * @brief Enumeration for Numeric Type constants.
833  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
834  */
835 typedef enum {
836 /*
837  * Note: i18n_uchar_u_numeric_type_e constants are parsed by preparseucd.py.
838  * It matches lines like
839  * U_NT_<Unicode Numeric_Type value name>
840  */
841     I18N_UCHAR_U_NT_NONE,         /**< [None] */
842     I18N_UCHAR_U_NT_DECIMAL,      /**< [de] */
843     I18N_UCHAR_U_NT_DIGIT,        /**< [di] */
844     I18N_UCHAR_U_NT_NUMERIC,      /**< [nu] */
845     I18N_UCHAR_U_NT_COUNT         /**<  */
846 } i18n_uchar_u_numeric_type_e;
847
848 /**
849  * @brief Enumeration for Hangul Syllable Type constants.
850  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
851  */
852 typedef enum {
853 /*
854  * Note: i18n_uchar_u_hangul_syllable_type_e constants are parsed by preparseucd.py.
855  * It matches lines like
856  * U_HST_<Unicode Hangul_Syllable_Type value name>
857  */
858     I18N_UCHAR_U_HST_NOT_APPLICABLE,     /**< [NA] */
859     I18N_UCHAR_U_HST_LEADING_JAMO,       /**< [L] */
860     I18N_UCHAR_U_HST_VOWEL_JAMO,         /**< [V] */
861     I18N_UCHAR_U_HST_TRAILING_JAMO,      /**< [T] */
862     I18N_UCHAR_U_HST_LV_SYLLABLE,        /**< [LV] */
863     I18N_UCHAR_U_HST_LVT_SYLLABLE,       /**< [LVT] */
864     I18N_UCHAR_U_HST_COUNT               /**<  */
865 } i18n_uchar_u_hangul_syllable_type_e;
866
867 /**
868  * @brief Enumeration for Sentence Break constants.
869  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
870  */
871 typedef enum {
872 /*
873  * Note: i18n_uchar_u_sentence_break_e constants are parsed by preparseucd.py.
874  * It matches lines like
875  * U_SB_<Unicode Sentence_Break value name>
876  */
877     I18N_UCHAR_U_SB_OTHER,         /**< [XX] */
878     I18N_UCHAR_U_SB_ATERM,         /**< [AT] */
879     I18N_UCHAR_U_SB_CLOSE,         /**< [CL] */
880     I18N_UCHAR_U_SB_FORMAT,        /**< [FO] */
881     I18N_UCHAR_U_SB_LOWER,         /**< [LO] */
882     I18N_UCHAR_U_SB_NUMERIC,       /**< [NU] */
883     I18N_UCHAR_U_SB_OLETTER,       /**< [LE] */
884     I18N_UCHAR_U_SB_SEP,           /**< [SE] */
885     I18N_UCHAR_U_SB_SP,            /**< [SP] */
886     I18N_UCHAR_U_SB_STERM,         /**< [ST] */
887     I18N_UCHAR_U_SB_UPPER,         /**< [UP] */
888     I18N_UCHAR_U_SB_CR,            /**< [CR] */
889     I18N_UCHAR_U_SB_EXTEND,        /**< [EX] */
890     I18N_UCHAR_U_SB_LF,            /**< [LF] */
891     I18N_UCHAR_U_SB_SCONTINUE,     /**< [SC] */
892     I18N_UCHAR_U_SB_COUNT          /**<  */
893 } i18n_uchar_u_sentence_break_e;
894
895 /**
896  * @brief Enumeration for Word Break constants.
897  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
898  */
899 typedef enum {
900 /*
901  * Note: i18n_uchar_u_word_break_values_e constants are parsed by preparseucd.py.
902  * It matches lines like
903  * U_WB_<Unicode Word_Break value name>
904  */
905     I18N_UCHAR_U_WB_OTHER,              /**< [XX] */
906     I18N_UCHAR_U_WB_ALETTER,            /**< [LE] */
907     I18N_UCHAR_U_WB_FORMAT,             /**< [FO] */
908     I18N_UCHAR_U_WB_KATAKANA,           /**< [KA] */
909     I18N_UCHAR_U_WB_MIDLETTER,          /**< [ML] */
910     I18N_UCHAR_U_WB_MIDNUM,             /**< [MN] */
911     I18N_UCHAR_U_WB_NUMERIC,            /**< [NU] */
912     I18N_UCHAR_U_WB_EXTENDNUMLET,       /**< [EX] */
913     I18N_UCHAR_U_WB_CR,                 /**< [CR] */
914     I18N_UCHAR_U_WB_EXTEND,             /**< [Extend] */
915     I18N_UCHAR_U_WB_LF,                 /**< [LF] */
916     I18N_UCHAR_U_WB_MIDNUMLET,          /**< [MB] */
917     I18N_UCHAR_U_WB_NEWLINE,            /**< [NL] */
918     I18N_UCHAR_U_WB_COUNT               /**<  */
919 } i18n_uchar_u_word_break_values_e;
920
921 /**
922  * @brief Enumeration for Grapheme Cluster Break constants.
923  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
924  */
925 typedef enum {
926 /*
927  * Note: i18n_uchar_u_grapheme_cluster_break_e constants are parsed by preparseucd.py.
928  * It matches lines like
929  * U_GCB_<Unicode Grapheme_Cluster_Break value name>
930  */
931     I18N_UCHAR_U_GCB_OTHER,                    /**< [XX] */
932     I18N_UCHAR_U_GCB_CONTROL,                  /**< [CN] */
933     I18N_UCHAR_U_GCB_CR,                       /**< [CR] */
934     I18N_UCHAR_U_GCB_EXTEND,                   /**< [EX] */
935     I18N_UCHAR_U_GCB_L,                        /**< [L] */
936     I18N_UCHAR_U_GCB_LF,                       /**< [LF] */
937     I18N_UCHAR_U_GCB_LV,                       /**< [LV] */
938     I18N_UCHAR_U_GCB_LVT,                      /**< [LVT] */
939     I18N_UCHAR_U_GCB_T,                        /**< [T] */
940     I18N_UCHAR_U_GCB_V,                        /**< [V] */
941     I18N_UCHAR_U_GCB_SPACING_MARK,             /**< [SM] */
942     I18N_UCHAR_U_GCB_PREPEND,                  /**< [PP] */
943     I18N_UCHAR_UCHAR_U_GCB_COUNT               /**<  */
944 } i18n_uchar_u_grapheme_cluster_break_e;
945
946 /**
947  * @}
948  * @}
949  */
950
951 /**
952  * @addtogroup CAPI_BASE_UTILS_I18N_UCOLLATOR_MODULE
953  * @{
954  */
955
956 /**
957  * @brief Structure representing a collator object instance.
958  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
959  */
960 typedef void *i18n_ucollator_h;
961
962 /**
963  * @brief Enumeration for attributes that collation service understands.
964  *        All the attributes can take #I18N_UCOLLATOR_DEFAULT value, as well as the values specific to each one.
965  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
966  */
967 typedef enum {
968     I18N_UCOLLATOR_FRENCH_COLLATION,                                            /**< Attribute for direction of secondary weights - used in Canadian French. Acceptable values are #I18N_UCOLLATOR_ON, which results in secondary weights being considered backwards, and #I18N_UCOLLATOR_OFF which treats secondary weights in the order they appear */
969     I18N_UCOLLATOR_ALTERNATE_HANDLING,                                          /**< Attribute for handling variable elements. Acceptable values are #I18N_UCOLLATOR_NON_IGNORABLE (default) which treats all the codepoints with non-ignorable primary weights in the same way, and #I18N_UCOLLATOR_SHIFTED which causes codepoints with primary weights that are equal or below the variable top value to be ignored at the primary level and moved to the quaternary level */
970     I18N_UCOLLATOR_CASE_FIRST,                                                  /**< Controls the ordering of upper and lower case letters. Acceptable values are #I18N_UCOLLATOR_OFF (default), which orders upper and lower case letters in accordance to their tertiary weights, #I18N_UCOLLATOR_UPPER_FIRST which forces upper case letters to sort before lower case letters, and #I18N_UCOLLATOR_LOWER_FIRST which does the opposite */
971     I18N_UCOLLATOR_CASE_LEVEL,                                                  /**< Controls whether an extra case level (positioned before the third level) is generated or not. Acceptable values are #I18N_UCOLLATOR_OFF (default), when case level is not generated, and #I18N_UCOLLATOR_ON which causes the case level to be generated. Contents of the case level are affected by the value of the #I18N_UCOLLATOR_CASE_FIRST attribute. A simple way to ignore accent differences in a string is to set the strength to #I18N_UCOLLATOR_PRIMARY and enable case level */
972     I18N_UCOLLATOR_NORMALIZATION_MODE,                                          /**< Controls whether the normalization check and necessary normalizations are performed. When set to #I18N_UCOLLATOR_OFF (default) no normalization check is performed. The correctness of the result is guaranteed only if the input data is in so-called FCD form (see users manual for more info). When set to #I18N_UCOLLATOR_ON, an incremental check is performed to see whether the input data is in the FCD form. If the data is not in the FCD form, incremental NFD normalization is performed */
973     I18N_UCOLLATOR_DECOMPOSITION_MODE = I18N_UCOLLATOR_NORMALIZATION_MODE,      /**< An alias for the #I18N_UCOLLATOR_NORMALIZATION_MODE attribute */
974     I18N_UCOLLATOR_STRENGTH,                                                    /**< The strength attribute. Can be either #I18N_UCOLLATOR_PRIMARY, #I18N_UCOLLATOR_SECONDARY, #I18N_UCOLLATOR_TERTIARY, #I18N_UCOLLATOR_QUATERNARY, or #I18N_UCOLLATOR_IDENTICAL. The usual strength for most locales (except Japanese) is tertiary. Quaternary strength is useful when combined with shifted setting for the alternate handling attribute and for JIS X 4061 collation, when it is used to distinguish between Katakana and Hiragana. Otherwise, quaternary level is affected only by the number of non-ignorable code points in the string. Identical strength is rarely useful, as it amounts to codepoints of the NFD form of the string */
975     I18N_UCOLLATOR_NUMERIC_COLLATION = I18N_UCOLLATOR_STRENGTH + 2,             /**< When turned on, this attribute makes substrings of digits that are sort according to their numeric values. This is a way to get '100' to sort AFTER '2'. Note that the longest digit substring that can be treated as a single unit is 254 digits (not counting leading zeros). If a digit substring is longer than that, the digits beyond the limit will be treated as a separate digit substring. A "digit" in this sense is a code point with General_Category=Nd, which does not include circled numbers, roman numerals, and so on. Only a contiguous digit substring is considered, that is, non-negative integers without separators. There is no support for plus/minus signs, decimals, exponents, and so on */
976     I18N_UCOLLATOR_ATTRIBUTE_COUNT                                              /**< The number of i18n_ucollator_attribute_e constants */
977 } i18n_ucollator_attribute_e;
978
979 /**
980  * @brief Enumeration containing attribute values for controlling collation behavior.
981  *        Here are all the allowable values. Not every attribute can take every value.
982  *        The only universal value is #I18N_UCOLLATOR_DEFAULT, which resets the attribute value to the predefined value for that locale.
983  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
984  */
985 typedef enum {
986     I18N_UCOLLATOR_DEFAULT           = -1,                          /**< Accepted by most attributes */
987     I18N_UCOLLATOR_PRIMARY           = 0,                           /**< Primary collation strength */
988     I18N_UCOLLATOR_SECONDARY         = 1,                           /**< Secondary collation strength */
989     I18N_UCOLLATOR_TERTIARY          = 2,                           /**< Tertiary collation strength */
990     I18N_UCOLLATOR_DEFAULT_STRENGTH  = I18N_UCOLLATOR_TERTIARY,     /**< Default collation strength */
991     I18N_UCOLLATOR_CE_STRENGTH_LIMIT,
992     I18N_UCOLLATOR_QUATERNARY        = 3,                           /**< Quaternary collation strength */
993     I18N_UCOLLATOR_IDENTICAL         = 15,                          /**< Identical collation strength */
994     I18N_UCOLLATOR_STRENGTH_LIMIT,
995
996     I18N_UCOLLATOR_OFF               = 16,                          /**< Turn the feature off - works for #I18N_UCOLLATOR_FRENCH_COLLATION, #I18N_UCOLLATOR_CASE_LEVEL & #I18N_UCOLLATOR_DECOMPOSITION_MODE */
997     I18N_UCOLLATOR_ON                = 17,                          /**< Turn the feature on - works for #I18N_UCOLLATOR_FRENCH_COLLATION, #I18N_UCOLLATOR_CASE_LEVEL & #I18N_UCOLLATOR_DECOMPOSITION_MODE */
998
999     I18N_UCOLLATOR_SHIFTED           = 20,                          /**< Valid for #I18N_UCOLLATOR_ALTERNATE_HANDLING. Alternate handling will be shifted. */
1000     I18N_UCOLLATOR_NON_IGNORABLE     = 21,                          /**< Valid for #I18N_UCOLLATOR_ALTERNATE_HANDLING. Alternate handling will be non ignorable. */
1001     I18N_UCOLLATOR_LOWER_FIRST       = 24,                          /**< Valid for #I18N_UCOLLATOR_CASE_FIRST - lower case sorts before upper case. */
1002     I18N_UCOLLATOR_UPPER_FIRST       = 25,                          /**< Upper case sorts before lower case. */
1003     I18N_UCOLLATOR_ATTRIBUTE_VALUE_COUNT
1004 } i18n_ucollator_attribute_value_e;
1005
1006 /**
1007  * @brief Enumeration in which the base letter represents a primary difference. Set comparison level to #I18N_UCOLLATOR_PRIMARY to ignore secondary and tertiary differences. Use this to set the strength of an #i18n_ucollator_h. Example of primary difference, "abc" < "abd"
1008  *        Diacritical differences on the same base letter represent a secondary difference. Set comparison level to #I18N_UCOLLATOR_SECONDARY to ignore tertiary differences. Use this to set the strength of an #i18n_ucollator_h. Example of secondary difference, "&auml;" >> "a".
1009  *        Uppercase and lowercase versions of the same character represent a tertiary difference. Set comparison level to #I18N_UCOLLATOR_TERTIARY to include all comparison differences. Use this to set the strength of an #i18n_ucollator_h. Example of tertiary difference, "abc" <<< "ABC".
1010  *        Two characters are considered "identical" when they have the same unicode spellings. #I18N_UCOLLATOR_IDENTICAL. For example, "&auml;" == "&auml;".
1011  *        #i18n_ucollator_strength_e is also used to determine the strength of sort keys generated from #i18n_ucollator_h. These values can now be found in the #i18n_ucollator_attribute_value_e enum.
1012  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1013  */
1014 typedef i18n_ucollator_attribute_value_e i18n_ucollator_strength_e;
1015
1016 /**
1017  * @brief Enumeration for source and target string comparison result.
1018  *        #I18N_UCOLLATOR_LESS is returned if the source string is compared to be less than the target string in the {@link i18n_ucollator_str_collator() } method.
1019  *        #I18N_UCOLLATOR_EQUAL is returned if the source string is compared to be equal to the target string in the {@link i18n_ucollator_str_collator() } method.
1020  *        #I18N_UCOLLATOR_GREATER is returned if the source string is compared to be greater than the target string in the {@link #i18n_ucollator_str_collator() } method.
1021  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1022  */
1023 typedef enum {
1024     I18N_UCOLLATOR_EQUAL     = 0,    /**< string a == string b */
1025     I18N_UCOLLATOR_GREATER   = 1,    /**< string a > string b */
1026     I18N_UCOLLATOR_LESS      = -1    /**< string a < string b */
1027 } i18n_ucollator_result_e;
1028
1029 /**
1030  * @}
1031  * @}
1032  */
1033
1034 /**
1035  * @addtogroup CAPI_BASE_UTILS_I18N_UNORMALIZATION_MODULE
1036  * @{
1037  */
1038
1039
1040 /**
1041  * @brief i18n_unormalizer_h.
1042  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1043  *
1044  */
1045
1046 typedef const void* i18n_unormalizer_h;
1047
1048 /**
1049  * @brief Enumeration of constants for normalization modes.
1050  *        For details about standard Unicode normalization forms and about the algorithms which are also used with custom mapping tables see http://www.unicode.org/unicode/reports/tr15/
1051  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1052  */
1053 typedef enum {
1054     I18N_UNORMALIZATION_COMPOSE,              /**< Decomposition followed by composition. Same as standard NFC when using an "nfc" instance. Same as standard NFKC when using an "nfkc" instance.
1055                                                    For details about standard Unicode normalization forms see http://www.unicode.org/unicode/reports/tr15/ */
1056     I18N_UNORMALIZATION_DECOMPOSE,            /**< Map and reorder canonically. Same as standard NFD when using an "nfc" instance. Same as standard NFKD when using an "nfkc" instance.
1057                                                    For details about standard Unicode normalization forms see http://www.unicode.org/unicode/reports/tr15/ */
1058     I18N_UNORMALIZATION_FCD,                  /**< "Fast C or D" form. If a string is in this form, then further decomposition without reordering would yield the same form as DECOMPOSE.
1059                                                    Text in "Fast C or D" form can be processed efficiently with data tables that are "canonically closed",
1060                                                    that is, that provide equivalent data for equivalent text, without having to be fully normalized.
1061                                                    Not a standard Unicode normalization form. Not a unique form: Different FCD strings can be canonically equivalent.
1062                                                    For details see http://www.unicode.org/notes/tn5/#FCD  */
1063     I18N_UNORMALIZATION_COMPOSE_CONTIGUOUS    /**< Compose only contiguously. Also known as "FCC" or "Fast C Contiguous". The result will often but not always be in NFC.
1064                                                    The result will conform to FCD which is useful for processing. Not a standard Unicode normalization form.
1065                                                    For details see http://www.unicode.org/notes/tn5/#FCC  */
1066 } i18n_unormalization_mode_e;
1067
1068 /**
1069  * @}
1070  * @}
1071  */
1072
1073 /**
1074  * @addtogroup CAPI_BASE_UTILS_I18N_USEARCH_MODULE
1075  * @{
1076  */
1077
1078 /**
1079  * @brief i18n_usearch_h.
1080  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1081  */
1082 typedef void* i18n_usearch_h;
1083
1084 /**
1085  * @}
1086  * @}
1087  */
1088
1089 /**
1090  * @addtogroup CAPI_BASE_UTILS_I18N_UCALENDAR_MODULE
1091  * @{
1092  */
1093
1094 /**
1095  * @brief i18n_ucalendar_h.
1096  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1097  */
1098 typedef void* i18n_ucalendar_h;
1099
1100 /**
1101  * @brief The time zone ID reserved for unknown time zone.
1102  * @since_tizen 2.3.1
1103  */
1104 #define I18N_UCALENDAR_UNKNOWN_ZONE_ID "Etc/Unknown"
1105
1106 /**
1107  * @brief Enumeration for possible fields in an #i18n_ucalendar_h.
1108  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1109  */
1110 typedef enum {
1111     I18N_UCALENDAR_ERA,                                 /**< Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar */
1112     I18N_UCALENDAR_YEAR,                                /**< Field number indicating the year */
1113     I18N_UCALENDAR_MONTH,                               /**< Field number indicating the month. This is a calendar-specific value. \n The first month of the year is JANUARY;
1114                                                              the last depends on the number of months in a year */
1115     I18N_UCALENDAR_WEEK_OF_YEAR,                        /**< Field number indicating the week number within the current year. \n
1116                                                              The first week of the year, as defined by the #I18N_UCALENDAR_FIRST_DAY_OF_WEEK and #I18N_UCALENDAR_MINIMAL_DAYS_IN_FIRST_WEEK attributes, has value 1.
1117                                                              Subclasses define the value of #I18N_UCALENDAR_WEEK_OF_YEAR for days before the first week of the year */
1118     I18N_UCALENDAR_WEEK_OF_MONTH,                       /**< Field number indicating the week number within the current month. \n
1119                                                              The first week of the month, as defined by the #I18N_UCALENDAR_FIRST_DAY_OF_WEEK and #I18N_UCALENDAR_MINIMAL_DAYS_IN_FIRST_WEEK attributes, has value 1.
1120                                                              Subclasses define the value of WEEK_OF_MONTH for days before the first week of the month */
1121     I18N_UCALENDAR_DATE,                                /**< Field number indicating the day of the month.  \n This is a synonym for DAY_OF_MONTH. The first day of the month has value 1  */
1122     I18N_UCALENDAR_DAY_OF_YEAR,                         /**< Field number indicating the day number within the current year. \n The first day of the year has value 1. */
1123     I18N_UCALENDAR_DAY_OF_WEEK,                         /**< Field number indicating the day of the week.   \n
1124                                                              This field takes values "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", and "Saturday" */
1125     I18N_UCALENDAR_DAY_OF_WEEK_IN_MONTH,                /**< Field number indicating the ordinal number of the day of the week within the current month.  \n
1126                                                              Together with the "day of week" field, this uniquely specifies a day within a month.
1127                                                              "day of month" 1 through 7 always correspond to "day of week in month" 1; 8 through 15 correspond to "day of week in month" 2, and so on.
1128                                                              "day of week in month" 0 indicates the week before "day of week in month" 1.
1129                                                              Negative values count back from the end of the month, so the last Sunday of a month is specified as "day of week" = "Sunday",
1130                                                              "day of week in month" = -1. Because negative values count backward they will usually be aligned differently within the month than positive values.
1131                                                              For example, if a month has 31 days, "day of week in month" -1 will overlap "day of week in month" 5 and the end of 4 */
1132     I18N_UCALENDAR_AM_PM,                               /**< Field number indicating whether the "hour" is before or after noon.  \n E.g., at 10:04:15.250 PM the AM_PM is PM */
1133     I18N_UCALENDAR_HOUR,                                /**< Field number indicating the hour of the morning or afternoon.  \n "hour" is used for the 12-hour clock. E.g., at 10:04:15.250 PM the "Hour" is 10 */
1134     I18N_UCALENDAR_HOUR_OF_DAY,                         /**< Field number indicating the hour of the day.  \n "Hour of day" is used for the 24-hour clock. E.g., at 10:04:15.250 PM the "Hour of day" is 22 */
1135     I18N_UCALENDAR_MINUTE,                              /**< Field number indicating the minute within the hour.  \n E.g., at 10:04:15.250 PM the #I18N_UCALENDAR_MINUTE is 4 */
1136     I18N_UCALENDAR_SECOND,                              /**< Field number indicating the second within the minute.  \n E.g., at 10:04:15.250 PM the #I18N_UCALENDAR_SECOND is 15 */
1137     I18N_UCALENDAR_MILLISECOND,                         /**< Field number indicating the millisecond within the second.  \n E.g., at 10:04:15.250 PM the #I18N_UCALENDAR_MILLISECOND is 250 */
1138     I18N_UCALENDAR_ZONE_OFFSET,                         /**< Field number indicating the raw offset from GMT in milliseconds  */
1139     I18N_UCALENDAR_DST_OFFSET,                          /**< Field number indicating the daylight savings offset in milliseconds  */
1140     I18N_UCALENDAR_YEAR_WOY,                            /**< Field number indicating the extended year corresponding to the #I18N_UCALENDAR_WEEK_OF_YEAR field. \n
1141                                                              This may be one greater or less than the value of #I18N_UCALENDAR_EXTENDED_YEAR */
1142     I18N_UCALENDAR_DOW_LOCAL,                           /**< Field number indicating the localized day of the week. \n
1143                                                              This will be a value from 1 to 7 inclusive, with 1 being the localized first day of the week */
1144     I18N_UCALENDAR_EXTENDED_YEAR,                       /**< Year of this calendar system, encompassing all supra-year fields. \n
1145                                                              For example, in Gregorian/Julian calendars, positive Extended Year values indicate years AD, 1 BC = 0 extended, 2 BC = -1 extended, and so on */
1146     I18N_UCALENDAR_JULIAN_DAY,                          /**< Field number indicating the modified Julian day number. \n
1147                                                              This is different from the conventional Julian day number in two regards.
1148                                                              First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number; that is, it depends on the local time zone.
1149                                                              It can be thought of as a single number that encompasses all the date-related fields */
1150     I18N_UCALENDAR_MILLISECONDS_IN_DAY,                 /**< Ranges from 0 to 23:59:59.999 (regardless of DST). \n
1151                                                              This field behaves exactly like a composite of all time-related fields, not including the zone fields.
1152                                                              As such, it also reflects discontinuities in those fields on DST transition days. On a day of DST onset, it will jump forward.
1153                                                              On a day of DST cessation, it will jump backward.
1154                                                              This reflects the fact that it must be combined with the DST offset field to obtain a unique local time value */
1155     I18N_UCALENDAR_IS_LEAP_MONTH,                       /**< Whether or not the current month is a leap month (0 or 1) */
1156     I18N_UCALENDAR_FIELD_COUNT,                         /**< Number of enumerators */
1157     I18N_UCALENDAR_DAY_OF_MONTH = I18N_UCALENDAR_DATE   /**< Field number indicating the day of the month.  \n This is a synonym for #I18N_UCALENDAR_DATE. The first day of the month has value 1 */
1158 } i18n_ucalendar_date_fields_e;
1159
1160 /**
1161  * @brief Enumeration for possible months in an #i18n_ucalendar_h.
1162  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1163  */
1164 typedef enum {
1165     I18N_UCALENDAR_TRADITIONAL,                             /**< Despite the name, #I18N_UCALENDAR_TRADITIONAL designates the locale's default calendar, which may be the Gregorian calendar or some other calendar */
1166     I18N_UCALENDAR_DEFAULT = I18N_UCALENDAR_TRADITIONAL,    /**< A better name for #I18N_UCALENDAR_TRADITIONAL  */
1167     I18N_UCALENDAR_GREGORIAN                                /**< Unambiguously designates the Gregorian calendar for the locale */
1168 } i18n_ucalendar_type_e;
1169
1170 /**
1171  * @brief Enumeration for possible months in an #i18n_ucalendar_h.
1172  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1173  */
1174 typedef enum {
1175     I18N_UCALENDAR_JANUARY,         /**< January */
1176     I18N_UCALENDAR_FEBRUARY,        /**< February */
1177     I18N_UCALENDAR_MARCH,           /**< March */
1178     I18N_UCALENDAR_APRIL,           /**< April */
1179     I18N_UCALENDAR_MAY,             /**< May */
1180     I18N_UCALENDAR_JUNE,            /**< June */
1181     I18N_UCALENDAR_JULY,            /**< July */
1182     I18N_UCALENDAR_AUGUST,          /**< August */
1183     I18N_UCALENDAR_SEPTEMBER,       /**< September */
1184     I18N_UCALENDAR_OCTOBER,         /**< October */
1185     I18N_UCALENDAR_NOVEMBER,        /**< November */
1186     I18N_UCALENDAR_DECEMBER         /**< December */
1187 } i18n_ucalendar_months_e;
1188
1189 /**
1190  * @brief Enumeration for possible formats of an #i18n_ucalendar_h's display name.
1191  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1192  */
1193 typedef enum {
1194     I18N_UCALENDAR_STANDARD,          /**< Standard display name */
1195     I18N_UCALENDAR_SHORT_STANDARD,    /**< Short standard display name */
1196     I18N_UCALENDAR_DST,               /**< Daylight savings display name */
1197     I18N_UCALENDAR_SHORT_DST          /**< Short daylight savings display name */
1198 } i18n_ucalendar_displayname_type_e;
1199
1200 /**
1201  * @brief Enumeration for types of #i18n_ucalendar_h attributes.
1202  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1203  */
1204 typedef enum {
1205     I18N_UCALENDAR_LENIENT,                       /**< Lenient parsing */
1206     I18N_UCALENDAR_FIRST_DAY_OF_WEEK,             /**< First day of the week */
1207     I18N_UCALENDAR_MINIMAL_DAYS_IN_FIRST_WEEK     /**< Minimum number of days in the first week */
1208 } i18n_ucalendar_attribute_e;
1209
1210 /**
1211  * @brief System time zone type constants.
1212  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1213  */
1214 typedef enum {
1215     I18N_UCALENDAR_ZONE_TYPE_ANY,                   /**< Any system zones. */
1216     I18N_UCALENDAR_ZONE_TYPE_CANONICAL,             /**< Canonical system zones. */
1217     I18N_UCALENDAR_ZONE_TYPE_CANONICAL_LOCATION     /**< Canonical system zones associated with actual locations. */
1218 } i18n_system_timezone_type_e;
1219
1220 /**
1221  * @brief Possible limit values for an #i18n_ucalendar_h.
1222  * @since_tizen 2.3.1
1223  */
1224 typedef enum {
1225     I18N_UCALENDAR_MINIMUM,             /**< Minimum value */
1226     I18N_UCALENDAR_MAXIMUM,             /**< Maximum value */
1227     I18N_UCALENDAR_GREATEST_MINIMUM,    /**< Greatest minimum value */
1228     I18N_UCALENDAR_LEAST_MAXIMUM,       /**< Least maximum value */
1229     I18N_UCALENDAR_ACTUAL_MINIMUM,      /**< Actual minimum value */
1230     I18N_UCALENDAR_ACTUAL_MAXIMUM       /**< Actual maximum value */
1231 } i18n_ucalendar_limit_type_e;
1232
1233 /**
1234  * @brief Weekday types, as returned by i18n_ucalendar_get_day_of_week_type().
1235  * @since_tizen 2.3.1
1236  */
1237 typedef enum {
1238     I18N_UCALENDAR_WEEKDAY,           /**< Designates a full weekday (no part of the day is included in the weekend). */
1239     I18N_UCALENDAR_WEEKEND,           /**< Designates a full weekend day (the entire day is included in the weekend). */
1240     I18N_UCALENDAR_WEEKEND_ONSET,     /**< Designates a day that starts as a weekday and transitions to the weekend.
1241                                            Call i18n_ucalendar_get_weekend_transition() to get the time of transition. */
1242     I18N_UCALENDAR_WEEKEND_CEASE,     /**< Designates a day that starts as the weekend and transitions to a weekday.
1243                                            Call i18n_ucalendar_get_weekend_transition() to get the time of transition. */
1244 } i18n_ucalendar_weekday_type_e;
1245
1246 /**
1247  * @brief Useful constants for days of week.
1248  * @details Note: Calendar day-of-week is 1-based. Clients who create locale resources for the field of first-day-of-week should be aware of this.
1249  *          For instance, in US locale, first-day-of-week is set to 1, i.e., #I18N_UCALENDAR_SUNDAY. Possible days of the week in an #i18n_ucalendar_h.
1250  * @since_tizen 2.3.1
1251  */
1252 typedef enum  {
1253     I18N_UCALENDAR_SUNDAY = 1,    /**< Sunday */
1254     I18N_UCALENDAR_MONDAY,        /**< Monday */
1255     I18N_UCALENDAR_TUESDAY,       /**< Tuesday */
1256     I18N_UCALENDAR_WEDNESDAY,     /**< Wednesday */
1257     I18N_UCALENDAR_THURSDAY,      /**< Thursday */
1258     I18N_UCALENDAR_FRIDAY,        /**< Friday */
1259     I18N_UCALENDAR_SATURDAY       /**< Saturday */
1260 } i18n_ucalendar_days_of_week_e;
1261
1262 /**
1263  * @brief Time zone transition types for i18n_ucalendar_get_timezone_transition_date().
1264  * @since_tizen 2.3.1
1265  *
1266  * @see i18n_ucalendar_get_timezone_transition_date()
1267  */
1268 typedef enum {
1269     I18N_UCALENDAR_TZ_TRANSITION_NEXT,                   /**< Get the next transition after the current date, i.e. excludes the current date  */
1270     I18N_UCALENDAR_TZ_TRANSITION_NEXT_INCLUSIVE,         /**< Get the next transition on or after the current date, i.e. may include the current date */
1271     I18N_UCALENDAR_TZ_TRANSITION_PREVIOUS,               /**< Get the previous transition before the current date, i.e. excludes the current date */
1272     I18N_UCALENDAR_TZ_TRANSITION_PREVIOUS_INCLUSIVE,     /**< Get the previous transition on or before the current date, i.e. may include the current date */
1273 } i18n_utimezone_transition_type_e;
1274
1275 /**
1276  * @}
1277  * @}
1278  */
1279
1280 /**
1281  * @addtogroup CAPI_BASE_UTILS_I18N_UDATE_MODULE
1282  * @{
1283  */
1284
1285 /**
1286  * @brief Date and Time data type. \n This is a primitive data type that holds the date and time as the number of milliseconds since 1970-jan-01, 00:00 UTC. UTC leap seconds are ignored.
1287  */
1288
1289 /**
1290  * @brief Date and Time data type.
1291  * @details This is a primitive data type that holds the date and time as the number of milliseconds since 1970-jan-01, 00:00 UTC. UTC leap seconds are ignored.
1292  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1293  */
1294 typedef double i18n_udate;
1295
1296 /**
1297  * @brief A date formatter.
1298  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1299  */
1300 typedef void *i18n_udate_format_h;
1301
1302 /**
1303  * @brief A struct representing a range of text containing a specific field.
1304  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1305  */
1306 typedef struct {
1307     int32_t field;              /**< The field. */
1308     int32_t beginIndex;         /**< The start of the text range containing field.*/
1309     int32_t endIndex;           /**< The limit of the text range containing field.*/
1310 } i18n_ufield_position_s;
1311
1312 /**
1313  * @brief Handle to struct representing a range of text containing a specific field.
1314  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1315  */
1316 typedef i18n_ufield_position_s* i18n_ufield_position_h;
1317
1318 /**
1319  * @brief Enumeration for the possible date/time format styles.
1320  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1321  */
1322 typedef enum {
1323     I18N_UDATE_FULL,                                                         /**< Full style */
1324     I18N_UDATE_LONG,                                                         /**< Long style */
1325     I18N_UDATE_MEDIUM,                                                       /**< Medium style */
1326     I18N_UDATE_SHORT,                                                        /**< Short style */
1327     I18N_UDATE_DEFAULT           = I18N_UDATE_MEDIUM,                        /**< Default style */
1328     I18N_UDATE_RELATIVE          = (1 << 7),                                 /**< Bitfield for relative date */
1329     I18N_UDATE_FULL_RELATIVE     = I18N_UDATE_FULL   | I18N_UDATE_RELATIVE,  /**< #I18N_UDATE_FULL | #I18N_UDATE_RELATIVE */
1330     I18N_UDATE_LONG_RELATIVE     = I18N_UDATE_LONG   | I18N_UDATE_RELATIVE,  /**< #I18N_UDATE_LONG | #I18N_UDATE_RELATIVE */
1331     I18N_UDATE_MEDIUM_RELATIVE   = I18N_UDATE_MEDIUM | I18N_UDATE_RELATIVE,  /**< #I18N_UDATE_MEDIUM | #I18N_UDATE_RELATIVE */
1332     I18N_UDATE_SHORT_RELATIVE    = I18N_UDATE_SHORT  | I18N_UDATE_RELATIVE,  /**< #I18N_UDATE_SHORT | #I18N_UDATE_RELATIVE */
1333     I18N_UDATE_NONE              = -1,                                       /**< No style */
1334     I18N_UDATE_PATTERN           = -2                                        /**< Use the pattern given in the parameter to i18n_udate_create(). */
1335 } i18n_udate_format_style_e;
1336
1337 /**
1338  * @brief Enumeration for format fields.
1339  * @since_tizen 2.3.1
1340  */
1341 typedef enum {
1342     I18N_UDATE_FORMAT_ERA_FIELD,                           /**< Era field */
1343     I18N_UDATE_FORMAT_YEAR_FIELD,                          /**< Year field */
1344     I18N_UDATE_FORMAT_MONTH_FIELD,                         /**< Month field */
1345     I18N_UDATE_FORMAT_DATE_FIELD,                          /**< Date field */
1346     I18N_UDATE_FORMAT_HOUR_OF_DAY1_FIELD,                  /**< Hour of day1 field */
1347     I18N_UDATE_FORMAT_HOUR_OF_DAY0_FIELD,                  /**< Hour of day0 field */
1348     I18N_UDATE_FORMAT_MINUTE_FIELD,                        /**< Minute field */
1349     I18N_UDATE_FORMAT_SECOND_FIELD,                        /**< Second field */
1350     I18N_UDATE_FORMAT_FRACTIONAL_SECOND_FIELD,             /**< Fractional second field */
1351     I18N_UDATE_FORMAT_DAY_OF_WEEK_FIELD,                   /**< Day of week field */
1352     I18N_UDATE_FORMAT_DAY_OF_YEAR_FIELD,                   /**< Day of year field */
1353     I18N_UDATE_FORMAT_DAY_OF_WEEK_IN_MONTH_FIELD,          /**< Day of week in month field */
1354     I18N_UDATE_FORMAT_WEEK_OF_YEAR_FIELD,                  /**< Week of year field */
1355     I18N_UDATE_FORMAT_WEEK_OF_MONTH_FIELD,                 /**< Week of month field */
1356     I18N_UDATE_FORMAT_AM_PM_FIELD,                         /**< a.m. / p.m. field */
1357     I18N_UDATE_FORMAT_HOUR1_FIELD,                         /**< Hour1 field */
1358     I18N_UDATE_FORMAT_HOUR0_FIELD,                         /**< Hour0 field */
1359     I18N_UDATE_FORMAT_TIMEZONE_FIELD,                      /**< Timezone field */
1360     I18N_UDATE_FORMAT_YEAR_WOY_FIELD,                      /**< Year woy field */
1361     I18N_UDATE_FORMAT_DOW_LOCAL_FIELD,                     /**< Dow local field */
1362     I18N_UDATE_FORMAT_EXTENDED_YEAR_FIELD,                 /**< Extended year field */
1363     I18N_UDATE_FORMAT_JULIAN_DAY_FIELD,                    /**< Julian day field */
1364     I18N_UDATE_FORMAT_MILLISECONDS_IN_DAY_FIELD,           /**< Milliseconds in day field */
1365     I18N_UDATE_FORMAT_TIMEZONE_RFC_FIELD,                  /**< Timezone RFC field */
1366     I18N_UDATE_FORMAT_TIMEZONE_GENERIC_FIELD,              /**< Timezone generic field */
1367     I18N_UDATE_FORMAT_STANDALONE_DAY_FIELD,                /**< Standalone day field */
1368     I18N_UDATE_FORMAT_STANDALONE_MONTH_FIELD,              /**< Standalone month field */
1369     I18N_UDATE_FORMAT_QUARTER_FIELD,                       /**< Quarter field */
1370     I18N_UDATE_FORMAT_STANDALONE_QUARTER_FIELD,            /**< Standalone quarter field */
1371     I18N_UDATE_FORMAT_TIMEZONE_SPECIAL_FIELD,              /**< Timezone special field */
1372     I18N_UDATE_FORMAT_YEAR_NAME_FIELD,                     /**< Year name field */
1373     I18N_UDATE_FORMAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD, /**< Timezone localized gmt offset field */
1374     I18N_UDATE_FORMAT_TIMEZONE_ISO_FIELD,                  /**< Timezone ISO field */
1375     I18N_UDATE_FORMAT_TIMEZONE_ISO_LOCAL_FIELD,            /**< Timezone ISO local field */
1376     I18N_UDATE_FORMAT_FIELD_COUNT                          /**< Field count */
1377 } i18n_udate_format_field_e;
1378
1379 /**
1380  * @brief Enumeration for symbol types.
1381  * @since_tizen 2.3.1
1382  */
1383 typedef enum {
1384     I18N_UDATE_FORMAT_SYMBOL_TYPE_ERAS,                        /**< Eras */
1385     I18N_UDATE_FORMAT_SYMBOL_TYPE_MONTHS,                      /**< Months */
1386     I18N_UDATE_FORMAT_SYMBOL_TYPE_SHORT_MONTHS,                /**< Short months */
1387     I18N_UDATE_FORMAT_SYMBOL_TYPE_WEEKDAYS,                    /**< Weekdays */
1388     I18N_UDATE_FORMAT_SYMBOL_TYPE_SHORT_WEEKDAYS,              /**< Short weekdays */
1389     I18N_UDATE_FORMAT_SYMBOL_TYPE_AM_PMS,                      /**< AM PMs */
1390     I18N_UDATE_FORMAT_SYMBOL_TYPE_LOCALIZED_CHARS,             /**< Localized chars */
1391     I18N_UDATE_FORMAT_SYMBOL_TYPE_ERA_NAMES,                   /**< Era names */
1392     I18N_UDATE_FORMAT_SYMBOL_TYPE_NARROW_MONTHS,               /**< Narrow months */
1393     I18N_UDATE_FORMAT_SYMBOL_TYPE_NARROW_WEEKDAYS,             /**< Narrow weekdays */
1394     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_MONTHS,           /**< Standalone months */
1395     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_SHORT_MONTHS,     /**< Standalone short months */
1396     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_NARROW_MONTHS,    /**< Standalone narrow months */
1397     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_WEEKDAYS,         /**< Standalone weekdays */
1398     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_SHORT_WEEKDAYS,   /**< Standalone short weekdays */
1399     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_NARROW_WEEKDAYS,  /**< Standalone narrow weekdays */
1400     I18N_UDATE_FORMAT_SYMBOL_TYPE_QUARTERS,                    /**< Quarters */
1401     I18N_UDATE_FORMAT_SYMBOL_TYPE_SHORT_QUARTERS,              /**< Short quarters */
1402     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_QUARTERS,         /**< Standalone quarters */
1403     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_SHORT_QUARTERS,   /**< Standalone short quarters */
1404     I18N_UDATE_FORMAT_SYMBOL_TYPE_SHORTER_WEEKDAYS,            /**< Shorter weekdays */
1405     I18N_UDATE_FORMAT_SYMBOL_TYPE_STANDALONE_SHORTER_WEEKDAYS, /**< Standalone shorter weekdays */
1406 } i18n_udate_format_symbol_type_e;
1407
1408 /**
1409  * @brief Display context types, for getting values of a particular setting.
1410  * @details Note, the specific numeric values are internal and may change.
1411  * @since_tizen 2.3.1
1412
1413  */
1414 typedef enum{
1415     I18N_UDISPCTX_TYPE_DIALECT_HANDLING,        /**<Type to retrieve the dialect handling setting, e.g. UDISPCTX_STANDARD_NAMES or UDISPCTX_DIALECT_NAMES.   */
1416     I18N_UDISPCTX_TYPE_CAPITALIZATION,          /**<Type to retrieve the capitalization context setting, e.g. UDISPCTX_CAPITALIZATION_NONE, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, etc.   */
1417 #ifndef U_HIDE_DRAFT_API
1418     I18N_UDISPCTX_TYPE_DISPLAY_LENGTH           /**<Type to retrieve the display length setting, e.g. UDISPCTX_LENGTH_FULL, UDISPCTX_LENGTH_SHORT.  */
1419 #endif /* U_HIDE_DRAFT_API */
1420 } i18n_udisplay_context_type_e;
1421
1422 /**
1423  * @brief Enumeration for display context.
1424  * @since_tizen 2.3.1
1425  */
1426 typedef enum {
1427     I18N_UDISPLAY_CONTEXT_STANDARD_NAMES                           = (I18N_UDISPCTX_TYPE_DIALECT_HANDLING<<8) + 0, /**< Standard names */
1428     I18N_UDISPLAY_CONTEXT_DIALECT_NAMES                            = (I18N_UDISPCTX_TYPE_DIALECT_HANDLING<<8) + 1, /**< Dialect names */
1429     I18N_UDISPLAY_CONTEXT_CAPITALIZATION_NONE                      = (I18N_UDISPCTX_TYPE_CAPITALIZATION<<8) + 0,   /**< Capitalization: None */
1430     I18N_UDISPLAY_CONTEXT_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE    = (I18N_UDISPCTX_TYPE_CAPITALIZATION<<8) + 1,   /**< Capitalization: For middle of sentence */
1431     I18N_UDISPLAY_CONTEXT_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE = (I18N_UDISPCTX_TYPE_CAPITALIZATION<<8) + 2,   /**< Capitalization: For beginning of sentence */
1432     I18N_UDISPLAY_CONTEXT_CAPITALIZATION_FOR_UI_LIST_OR_MENU       = (I18N_UDISPCTX_TYPE_CAPITALIZATION<<8) + 3,   /**< Capitalization: For UI list or menu */
1433     I18N_UDISPLAY_CONTEXT_CAPITALIZATION_FOR_STANDALONE            = (I18N_UDISPCTX_TYPE_CAPITALIZATION<<8) + 4,   /**< Capitalization: For standalone */
1434 } i18n_udisplay_context_e;
1435
1436 /**
1437  * @}
1438  * @}
1439  */
1440
1441 /**
1442  * @addtogroup CAPI_BASE_UTILS_I18N_UDATEPG_MODULE
1443  * @{
1444  */
1445
1446 /**
1447  * @brief Handle for a date/time pattern generator object.
1448  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1449  */
1450 typedef void* i18n_udatepg_h;
1451
1452 /**
1453  * @brief Enumeration for field number constants for i18n_udatepg_get_append_item_format() and similar functions.
1454  * @details These constants are separate from #i18n_udate_format_field_e despite semantic overlap because some fields are merged for the date/time pattern generator.
1455  * @since_tizen 2.3.1
1456  */
1457 typedef enum {
1458     I18N_UDATEPG_ERA_FIELD,                  /**< Era field */
1459     I18N_UDATEPG_YEAR_FIELD,                 /**< Year field */
1460     I18N_UDATEPG_QUARTER_FIELD,              /**< Quarter field */
1461     I18N_UDATEPG_MONTH_FIELD,                /**< Month field */
1462     I18N_UDATEPG_WEEK_OF_YEAR_FIELD,         /**< Week of year field */
1463     I18N_UDATEPG_WEEK_OF_MONTH_FIELD,        /**< Week of month field */
1464     I18N_UDATEPG_WEEKDAY_FIELD,              /**< Weekday field */
1465     I18N_UDATEPG_DAY_OF_YEAR_FIELD,          /**< Day of year field */
1466     I18N_UDATEPG_DAY_OF_WEEK_IN_MONTH_FIELD, /**< Day of week in month field */
1467     I18N_UDATEPG_DAY_FIELD,                  /**< Day field */
1468     I18N_UDATEPG_DAYPERIOD_FIELD,            /**< Day period field */
1469     I18N_UDATEPG_HOUR_FIELD,                 /**< Hour field */
1470     I18N_UDATEPG_MINUTE_FIELD,               /**< Minute field */
1471     I18N_UDATEPG_SECOND_FIELD,               /**< Second field */
1472     I18N_UDATEPG_FRACTIONAL_SECOND_FIELD,    /**< Fractional second field */
1473     I18N_UDATEPG_ZONE_FIELD,                 /**< Zone field */
1474     I18N_UDATEPG_FIELD_COUNT                 /**< Field count */
1475 } i18n_udatepg_date_time_pattern_field_e;
1476
1477 /**
1478  * @brief Enumeration for masks to control forcing the length of specified fields in the returned pattern to match those in the skeleton (when this would not happen otherwise).\n
1479  * @details These may be combined to force the length of multiple fields.
1480  *          Used with i18n_udatepg_get_best_pattern_with_options(), i18n_udatepg_replace_field_types_with_options().
1481  * @since_tizen 2.3.1
1482  */
1483 typedef enum {
1484     I18N_UDATEPG_MATCH_NO_OPTIONS        = 0,                                   /**< No options */
1485     I18N_UDATEPG_MATCH_HOUR_FIELD_LENGTH = 1 << I18N_UDATEPG_HOUR_FIELD,        /**< Hour field length */
1486     I18N_UDATEPG_MATCH_ALL_FIELDS_LENGTH = (1 << I18N_UDATEPG_FIELD_COUNT) - 1, /**< All fields length */
1487 } i18n_udatepg_date_time_pattern_match_options_e;
1488
1489 /**
1490  * @brief Enumeration for status return values from i18n_udatepg_add_pattern().
1491  * @since_tizen 2.3.1
1492  */
1493 typedef enum {
1494     I18N_UDATEPG_NO_CONFLICT,    /**< No conflict */
1495     I18N_UDATEPG_BASE_CONFLICT,  /**< Base conflict */
1496     I18N_UDATEPG_CONFLICT,       /**< Conflict */
1497     I18N_UDATEPG_CONFLICT_COUNT, /**< Number of status return values */
1498 } i18n_udatepg_date_time_pattern_conflict_e;
1499
1500 /**
1501  * @}
1502  * @}
1503  */
1504
1505 /**
1506  * @addtogroup CAPI_BASE_UTILS_I18N_UNUMBER_MODULE
1507  * @{
1508  */
1509
1510 /**
1511  * @brief A number formatter.
1512  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1513  */
1514 typedef void* i18n_unumber_format_h;
1515
1516 /**
1517  * @brief Definition of context length.
1518  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1519  */
1520 #define I18N_U_PARSE_CONTEXT_LEN 16
1521
1522 /**
1523  * @brief Struct used to returned detailed information about parsing errors.
1524  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1525  */
1526 typedef struct {
1527     int32_t    line;                                    /**< The line on which the error occured. */
1528     int32_t    offset;                                  /**< The character offset to the error */
1529     i18n_uchar preContext[I18N_U_PARSE_CONTEXT_LEN];    /**< Textual context before the error */
1530     i18n_uchar postContext[I18N_U_PARSE_CONTEXT_LEN];   /**< The error itself and/or textual context after the error */
1531 } i18n_uparse_error_s;
1532
1533 /**
1534  * @brief Enumeration for the possible number format styles.
1535  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1536  */
1537 typedef enum {
1538     I18N_UNUMBER_PATTERN_DECIMAL      = 0,  /**< Decimal format defined by a pattern string */
1539     I18N_UNUMBER_DECIMAL              = 1,  /**< Decimal format ("normal" style) */
1540     I18N_UNUMBER_CURRENCY,                  /**< Currency format with a currency symbol, e.g., "$1.00" */
1541     I18N_UNUMBER_PERCENT,                   /**< Percent format */
1542     I18N_UNUMBER_SCIENTIFIC,                /**< Scientific format */
1543     I18N_UNUMBER_SPELLOUT,                  /**< Spellout rule-based format */
1544     I18N_UNUMBER_ORDINAL,                   /**< Ordinal rule-based format */
1545     I18N_UNUMBER_DURATION,                  /**< Duration rule-based format */
1546     I18N_UNUMBER_NUMBERING_SYSTEM,          /**< Numbering system rule-based format */
1547     I18N_UNUMBER_PATTERN_RULEBASED,         /**< Rule-based format defined by a pattern string */
1548     I18N_UNUMBER_CURRENCY_ISO,              /**< Currency format with an ISO currency code, e.g., "USD1.00" */
1549     I18N_UNUMBER_CURRENCY_PLURAL,           /**< Currency format with a pluralized currency name, e.g., "1.00 US dollar" and "3.00 US dollars" */
1550
1551     I18N_UNUMBER_FORMAT_STYLE_COUNT   = I18N_UNUMBER_CURRENCY_PLURAL + 2,   /**< One more than the highest number format style constant */
1552     I18N_UNUMBER_DEFAULT              = I18N_UNUMBER_DECIMAL,               /**< Default format */
1553     I18N_UNUMBER_IGNORE               = I18N_UNUMBER_PATTERN_DECIMAL        /**< Alias for #I18N_UNUMBER_PATTERN_DECIMAL */
1554  } i18n_unumber_format_style_e;
1555
1556 /**
1557  * @brief Enumeration of constants for specifying a number format symbol.
1558  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1559  */
1560 typedef enum {
1561     I18N_UNUMBER_DECIMAL_SEPARATOR_SYMBOL            = 0,       /**< The decimal separator */
1562     I18N_UNUMBER_GROUPING_SEPARATOR_SYMBOL           = 1,       /**< The grouping separator */
1563     I18N_UNUMBER_PATTERN_SEPARATOR_SYMBOL            = 2,       /**< The pattern separator */
1564     I18N_UNUMBER_PERCENT_SYMBOL                      = 3,       /**< The percent sign */
1565     I18N_UNUMBER_ZERO_DIGIT_SYMBOL                   = 4,       /**< Zero */
1566     I18N_UNUMBER_DIGIT_SYMBOL                        = 5,       /**< Character representing a digit in the pattern.*/
1567     I18N_UNUMBER_MINUS_SIGN_SYMBOL                   = 6,       /**< The minus sign */
1568     I18N_UNUMBER_PLUS_SIGN_SYMBOL                    = 7,       /**< The plus sign */
1569     I18N_UNUMBER_CURRENCY_SYMBOL                     = 8,       /**< The currency symbol */
1570     I18N_UNUMBER_INTL_CURRENCY_SYMBOL                = 9,       /**< The international currency symbol */
1571     I18N_UNUMBER_MONETARY_SEPARATOR_SYMBOL           = 10,      /**< The monetary separator */
1572     I18N_UNUMBER_EXPONENTIAL_SYMBOL                  = 11,      /**< The exponential symbol */
1573     I18N_UNUMBER_PERMILL_SYMBOL                      = 12,      /**< Per mill symbol */
1574     I18N_UNUMBER_PAD_ESCAPE_SYMBOL                   = 13,      /**< Escape padding character */
1575     I18N_UNUMBER_INFINITY_SYMBOL                     = 14,      /**< Infinity symbol */
1576     I18N_UNUMBER_NAN_SYMBOL                          = 15,      /**< NAN symbol */
1577     I18N_UNUMBER_SIGNIFICANT_DIGIT_SYMBOL            = 16,      /**< Significant digit symbol */
1578     I18N_UNUMBER_MONETARY_GROUPING_SEPARATOR_SYMBOL  = 17,      /**< The monetary grouping separator */
1579     I18N_UNUMBER_ONE_DIGIT_SYMBOL                    = 18,      /**< One */
1580     I18N_UNUMBER_TWO_DIGIT_SYMBOL                    = 19,      /**< Two */
1581     I18N_UNUMBER_THREE_DIGIT_SYMBOL                  = 20,      /**< Three */
1582     I18N_UNUMBER_FOUR_DIGIT_SYMBOL                   = 21,      /**< Four */
1583     I18N_UNUMBER_FIVE_DIGIT_SYMBOL                   = 22,      /**< Five */
1584     I18N_UNUMBER_SIX_DIGIT_SYMBOL                    = 23,      /**< Six */
1585     I18N_UNUMBER_SEVEN_DIGIT_SYMBOL                  = 24,      /**< Seven */
1586     I18N_UNUMBER_EIGHT_DIGIT_SYMBOL                  = 25,      /**< Eight */
1587     I18N_UNUMBER_NINE_DIGIT_SYMBOL                   = 26,      /**< Nine */
1588     I18N_UNUMBER_FORMAT_SYMBOL_COUNT                 = 27       /**< Number of enumerators */
1589  } i18n_unumber_format_symbol_e;
1590
1591 /**
1592  * @brief Enumeration for the possible unumber_format numeric attributes.
1593  * @since_tizen 2.3.1
1594  */
1595 typedef enum {
1596     I18N_UNUMBER_PARSE_INT_ONLY,                   /**< Parse integers only */
1597     I18N_UNUMBER_GROUPING_USED,                    /**< Use grouping separator */
1598     I18N_UNUMBER_DECIMAL_ALWAYS_SHOWN,             /**< Always show decimal point */
1599     I18N_UNUMBER_MAX_INTEGER_DIGITS,               /**< Maximum integer digits */
1600     I18N_UNUMBER_MIN_INTEGER_DIGITS,               /**< Minimum integer digits */
1601     I18N_UNUMBER_INTEGER_DIGITS,                   /**< Integer digits */
1602     I18N_UNUMBER_MAX_FRACTION_DIGITS,              /**< Maximum fraction digits */
1603     I18N_UNUMBER_MIN_FRACTION_DIGITS,              /**< Minimum fraction digits */
1604     I18N_UNUMBER_FRACTION_DIGITS,                  /**< Fraction digits */
1605     I18N_UNUMBER_MULTIPLIER,                       /**< Multiplier */
1606     I18N_UNUMBER_GROUPING_SIZE,                    /**< Grouping size */
1607     I18N_UNUMBER_ROUNDING_MODE,                    /**< Rounding Mode */
1608     I18N_UNUMBER_ROUNDING_INCREMENT,               /**< Rounding increment */
1609     I18N_UNUMBER_FORMAT_WIDTH,                     /**< The width to which the output of format() is padded */
1610     I18N_UNUMBER_PADDING_POSITION,                 /**< The position at which padding will take place */
1611     I18N_UNUMBER_SECONDARY_GROUPING_SIZE,          /**< Secondary grouping size */
1612     I18N_UNUMBER_SIGNIFICANT_DIGITS_USED,          /**< Use significant digits */
1613     I18N_UNUMBER_MIN_SIGNIFICANT_DIGITS,           /**< Minimum significant digits */
1614     I18N_UNUMBER_MAX_SIGNIFICANT_DIGITS,           /**< Maximum significant digits */
1615     I18N_UNUMBER_LENIENT_PARSE,                    /**< Lenient parse mode used by rule-based formats */
1616     I18N_UNUM_SCALE = I18N_UNUMBER_LENIENT_PARSE + 2,           /**< Scale, which adjusts the position of the decimal point when formatting.
1617                                                                     Amounts will be multiplied by 10 ^ (scale) before they are formatted. The default value for the scale is 0 ( no adjustment ).
1618                                                                     Example: setting the scale to 3, 123 formats as "123,000"
1619                                                                     Example: setting the scale to -4, 123 formats as "0.0123" */
1620     I18N_UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS  = 0x1000,    /**< If 1, specifies that if setting the "max integer digits" attribute would truncate a value, set an error status rather than silently truncating.
1621                                                                     For example, formatting the value 1234 with 4 max int digits would succeed, but formatting 12345 would fail.
1622                                                                     There is no effect on parsing. Default: 0 (not set) */
1623     I18N_UNUM_PARSE_NO_EXPONENT,                                /**< If this attribute is set to 1, specifies that, if the pattern doesn't contain an exponent,
1624                                                                     the exponent will not be parsed. If the pattern does contain an exponent, this attribute has no effect.
1625                                                                     Has no effect on formatting. Default: 0 (unset) */
1626 } i18n_unumber_format_attribute_e;
1627
1628 /**
1629  * @brief The possible #i18n_unumber_format_h text attributes.
1630  * @since_tizen 2.3.1
1631  */
1632 typedef enum {
1633     I18N_UNUMBER_POSITIVE_PREFIX,               /**< Positive prefix */
1634     I18N_UNUMBER_POSITIVE_SUFFIX,               /**< Positive suffix */
1635     I18N_UNUMBER_NEGATIVE_PREFIX,               /**< Negative prefix */
1636     I18N_UNUMBER_NEGATIVE_SUFFIX,               /**< Negative suffix */
1637     I18N_UNUMBER_PADDING_CHARACTER,             /**< The character used to pad to the format width */
1638     I18N_UNUMBER_CURRENCY_CODE,                 /**< The ISO currency code */
1639     I18N_UNUMBER_DEFAULT_RULESET,               /**< The default rule set, such as "%spellout-numbering-year:", "%spellout-cardinal:", "%spellout-ordinal-masculine-plural:", "%spellout-ordinal-feminine:", or "%spellout-ordinal-neuter:".
1640                                                      The available public rulesets can be listed using i18n_unumber_get_text_attribute() with #I18N_UNUMBER_PUBLIC_RULESETS. This is only available with rule-based formatters */
1641     I18N_UNUMBER_PUBLIC_RULESETS,               /**< The public rule sets. This is only available with rule-based formatters. This is a read-only attribute.
1642                                                      The public rulesets are returned as a single string, with each ruleset name delimited by ';' (semicolon).
1643                                                      See the CLDR LDML spec for more information about RBNF rulesets: http://www.unicode.org/reports/tr35/tr35-numbers.html#Rule-Based_Number_Formatting */
1644 } i18n_unumber_format_text_attribute_e;
1645
1646 /**
1647  * @}
1648  * @}
1649  */
1650
1651 /**
1652  * @addtogroup CAPI_BASE_UTILS_I18N_ULOCALE_MODULE
1653  * @{
1654  */
1655
1656 #define I18N_ULOCALE_CHINESE                   "zh"         /**< Useful constant for zh. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1657 #define I18N_ULOCALE_ENGLISH                   "en"         /**< Useful constant for en. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1658 #define I18N_ULOCALE_FRENCH                    "fr"         /**< Useful constant for fr. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1659 #define I18N_ULOCALE_GERMAN                    "de"         /**< Useful constant for de. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1660 #define I18N_ULOCALE_ITALIAN                   "it"         /**< Useful constant for it. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1661 #define I18N_ULOCALE_JAPANESE                  "ja"         /**< Useful constant for ja. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1662 #define I18N_ULOCALE_KOREAN                    "ko"         /**< Useful constant for ko. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1663 #define I18N_ULOCALE_SIMPLIFIED_CHINESE        "zh_CN"      /**< Useful constant for zh_CN. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1664 #define I18N_ULOCALE_TRADITIONAL_CHINESE       "zh_TW"      /**< Useful constant for zh_TW. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1665 #define I18N_ULOCALE_CANADA                    "en_CA"      /**< Useful constant for en_CA. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1666 #define I18N_ULOCALE_CANADA_FRENCH             "fr_CA"      /**< Useful constant for fr_CA. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1667 #define I18N_ULOCALE_CHINA                     "zh_CN"      /**< Useful constant for zh_CN. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1668 #define I18N_ULOCALE_PRC                       "zh_CN"      /**< Useful constant for zh_CN. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1669 #define I18N_ULOCALE_FRANCE                    "fr_FR"      /**< Useful constant for fr_FR. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1670 #define I18N_ULOCALE_GERMANY                   "de_DE"      /**< Useful constant for de_DE. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1671 #define I18N_ULOCALE_ITALY                     "it_IT"      /**< Useful constant for it_IT. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1672 #define I18N_ULOCALE_JAPAN                     "ja_JP"      /**< Useful constant for ja_JP. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1673 #define I18N_ULOCALE_KOREA                     "ko_KR"      /**< Useful constant for ko_KR. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1674 #define I18N_ULOCALE_TAIWAN                    "zh_TW"      /**< Useful constant for zh_TW. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1675 #define I18N_ULOCALE_UK                        "en_GB"      /**< Useful constant for en_GB. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1676 #define I18N_ULOCALE_US                        "en_US"      /**< Useful constant for en_US. @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif*/
1677
1678 /**
1679  * @brief Enumeration for the 'out_result' parameter return value
1680  * @since_tizen 2.3.1
1681  *
1682  * @see i18n_ulocale_accept_language_from_http()
1683  * @see i18n_ulocale_accept_language()
1684  */
1685 typedef enum {
1686   I18N_ULOCALE_ACCEPT_FAILED   = 0,  /**< No exact match was found */
1687   I18N_ULOCALE_ACCEPT_VALID    = 1,  /**< An exact match was found */
1688   I18N_ULOCALE_ACCEPT_FALLBACK = 2,  /**< A fallback was found, for example,
1689                                           accept list contained 'ja_JP' which matched available locale 'ja' */
1690 } i18n_ulocale_accept_result_e;
1691
1692 /**
1693  * @brief Enumeration for data locale types.
1694  * @since_tizen 2.3.1
1695  */
1696 typedef enum {
1697     I18N_ULOCALE_DATA_LOCALE_TYPE_ACTUAL_LOCALE, /**< Actual locale */
1698     I18N_ULOCALE_DATA_LOCALE_TYPE_VALID_LOCALE,  /**< Valid locale */
1699     I18N_ULOCALE_DATA_LOCALE_TYPE_LIMIT = 3,     /**< Locale type limit */
1700 } i18n_ulocale_data_locale_type_e;
1701
1702 /**
1703  * @brief Enumeration for the return value for the character and line orientation functions.
1704  * @since_tizen 2.3.1
1705  */
1706 typedef enum {
1707   I18N_ULOCALE_LAYOUT_LTR     = 0,  /**< Left-to-right */
1708   I18N_ULOCALE_LAYOUT_RTL     = 1,  /**< Right-to-left */
1709   I18N_ULOCALE_LAYOUT_TTB     = 2,  /**< Top-to-bottom */
1710   I18N_ULOCALE_LAYOUT_BTT     = 3,  /**< Bottom-to-top */
1711   I18N_ULOCALE_LAYOUT_UNKNOWN       /**< Unknown       */
1712 } i18n_ulocale_layout_type_e;
1713
1714 /**
1715  * @}
1716  * @}
1717  */
1718
1719 /**
1720  * @addtogroup CAPI_BASE_UTILS_I18N_USTRING_MODULE
1721  * @{
1722  */
1723
1724 /**
1725  * @brief Callback function for i18n_ustring_unescape_at() that returns a character of the source text given an offset and a context pointer.\n
1726  *        The context pointer will be whatever is passed into i18n_ustring_unescape_at().
1727  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1728  *
1729  * @param[in]   offset      pointer to the offset that will be passed to i18n_ustring_unescape_at().
1730  * @param[in]   context     an opaque pointer passed directly into i18n_ustring_unescape_at()
1731  *
1732  * @retval  character   the character represented by the escape sequence at offset
1733  *
1734  * @see #i18n_ustring_unescape_at()
1735  */
1736 typedef i18n_uchar(* i18n_ustring_unescape_char_at_cb)(int32_t offset, void *context);
1737
1738 /**
1739  * @brief Option value for case folding: use default mappings defined in CaseFolding.txt.
1740  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1741  */
1742 #define I18N_USTRING_U_FOLD_CASE_DEFAULT 0
1743
1744
1745 /**
1746  * @brief Option bit i18n_ustring_case_compare_with_length(), i18n_ustring_case_compare(), etc: Compare strings in code point order instead of code unit order.
1747  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1748  */
1749 #define I18N_USTRING_U_COMPARE_CODE_POINT_ORDER  0x8000
1750
1751 /**
1752  * @brief Option value for case folding: \n
1753  * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I and dotless i appropriately for Turkic languages (tr, az).\n
1754  * Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that are to be included for default mappings and excluded for the Turkic-specific mappings.\n
1755  * Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that are to be excluded for default mappings and included for the Turkic-specific mappings.
1756  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1757  */
1758 #define I18N_USTRING_U_FOLD_CASE_EXCLUDE_SPECIAL_I 1
1759
1760 /**
1761  * @}
1762  * @}
1763  */
1764
1765 /**
1766  * @addtogroup CAPI_BASE_UTILS_I18N_TIMEZONE_MODULE
1767  * @{
1768  */
1769
1770 /**
1771  * @brief handle for object that represents a time zone offset, and also figures out daylight savings..
1772  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1773  */
1774 typedef void* i18n_timezone_h;
1775
1776 /**
1777  * @brief Callback function for i18n_timezone_foreach_timezone_id(), i18n_timezone_foreach_timezone_id_with_offset(), and i18n_timezone_foreach_timezone_id_by_country()
1778  *        that returns an enumeration over all recognized time zone IDs.
1779  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1780  *
1781  * @param[in] timezone_id   time zone ID
1782  * @param[in] user_data     the user data passed to the callback function
1783  *
1784  * @return @c true to continue with the next iteration of the loop, otherwise @c false to break out of the loop.
1785  *
1786  * @see i18n_ustring_unescape_at()
1787  */
1788 typedef bool (*i18n_timezone_id_cb)(const char *timezone_id, void* user_data);
1789
1790 /**
1791  * @brief Enumeration for use with i18n_timezone_get_display_name(), i18n_timezone_get_display_name_with_locale(), and i18n_timezone_get_display_name_with_type().
1792  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1793  */
1794 typedef enum {
1795     I18N_TIMEZONE_DISPLAY_TYPE_SHORT = 1,           /**< Selector for short display name */
1796     I18N_TIMEZONE_DISPLAY_TYPE_LONG,                /**< Selector for long display name */
1797     I18N_TIMEZONE_DISPLAY_TYPE_SHORT_GENERIC,       /**< Selector for short generic display name */
1798     I18N_TIMEZONE_DISPLAY_TYPE_LONG_GENERIC,        /**< Selector for long generic display name */
1799     I18N_TIMEZONE_DISPLAY_TYPE_SHORT_GMT,           /**< Selector for short display name derived */
1800     I18N_TIMEZONE_DISPLAY_TYPE_LONG_GMT,            /**< Selector for long display name derived from time zone offset */
1801     I18N_TIMEZONE_DISPLAY_TYPE_SHORT_COMMONLY_USED, /**< Selector for short display name derived from the time zone's fallback name */
1802     I18N_TIMEZONE_DISPLAY_TYPE_GENERIC_LOCATION     /**< Selector for long display name derived from the time zone's fallback name */
1803 }i18n_timezone_display_type_e;
1804
1805 /**
1806  * @}
1807  * @}
1808  */
1809
1810 /**
1811  * @addtogroup CAPI_BASE_UTILS_I18N_UBRK_MODULE
1812  * @{
1813  */
1814
1815 /**
1816  * @brief i18n_ubreak_iterator_s.
1817  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
1818  */
1819 typedef void* i18n_ubreak_iterator_s;
1820
1821 /**
1822  * @brief i18n_ubreak_iterator_h.
1823  * @since_tizen 2.3.1
1824  */
1825 typedef void* i18n_ubreak_iterator_h;
1826
1827 /**
1828  * @brief A recommended size (in bytes) for the memory buffer to be passed to i18n_ubrk_safe_clone().
1829  * @since_tizen 2.3.1
1830  */
1831 #define I18N_U_BRK_SAFECLONE_BUFFERSIZE 528
1832
1833 /**
1834  * @brief Value indicating all text boundaries have been returned.
1835  * @since_tizen 2.3.1
1836  */
1837 #define I18N_UBRK_DONE   ((int32_t) -1)
1838
1839 /**
1840  * @brief The possible types of text boundaries.
1841  * @since_tizen 2.3.1
1842  *
1843  */
1844 typedef enum {
1845     I18N_UBRK_CHARACTER = 0,     /**< Character breaks */
1846     I18N_UBRK_WORD      = 1,     /**< Word breaks */
1847     I18N_UBRK_LINE      = 2,     /**< Line breaks */
1848     I18N_UBRK_SENTENCE  = 3,     /**< Sentence breaks */
1849 } i18n_ubreak_iterator_type_e;
1850
1851 /**
1852  * @}
1853  * @}
1854  */
1855
1856 /**
1857  * @addtogroup CAPI_BASE_UTILS_I18N_USET_MODULE
1858  * @{
1859  */
1860
1861 /**
1862  * @brief An #i18n_uset_h handle.
1863  * @details Use the @c i18n_uset_* API to manipulate. Create with @c i18n_uset_create*, and destroy with i18n_uset_destroy().
1864  * @since_tizen 2.3.1
1865  */
1866 typedef void *i18n_uset_h;
1867
1868 /**
1869  * @brief Capacity of #i18n_userialized_set_s::static_array.
1870  *        Enough for any single-code point set.
1871  * @since_tizen 2.3.1
1872  *
1873  * @see #i18n_userialized_set_s
1874  */
1875 #define I18N_USET_SERIALIZED_STATIC_ARRAY_CAPACITY 8
1876
1877 /**
1878  * @brief  A serialized form of a Unicode set.
1879  * @since_tizen 2.3.1
1880  */
1881 typedef struct {
1882     const uint16_t *array;                                                        /**< The serialized Unicode Set. */
1883     int32_t         bmp_length;                                                   /**< The length of the array that contains BMP characters. */
1884     int32_t         length;                                                       /**< The total length of the array. */
1885     uint16_t        static_array[I18N_USET_SERIALIZED_STATIC_ARRAY_CAPACITY];     /**< A small buffer for the array to reduce memory allocations. */
1886 } i18n_userialized_set_s;
1887
1888
1889 /**
1890  * @brief Enumeration for span conditions.
1891  * @since_tizen 2.3.1
1892  *
1893  * @see i18n_uset_span()
1894  * @see i18n_uset_span_back()
1895  * @see i18n_uset_span_utf8()
1896  * @see i18n_uset_span_back_utf8()
1897  */
1898 typedef enum {
1899     I18N_USET_SPAN_NOT_CONTAINED = 0,   /**< Continue a span() while there is no set element at the current position.
1900                                              Stops before the first set element (character or string).
1901                                              (For code points only, this is like while contains(current)==false).
1902
1903                                              When span() returns, the substring between where it started and the position
1904                                              it returned consists only of characters that are not in the set,
1905                                              and none of its strings overlap with the span. */
1906     I18N_USET_SPAN_CONTAINED = 1,       /**< Continue a span() while there is a set element at the current position.
1907                                              (For characters only, this is like while contains(current)==true).
1908
1909                                              When span() returns, the substring between where it started and the position
1910                                              it returned consists only of set elements (characters or strings) that are in the set.
1911
1912                                              If a set contains strings, then the span will be the longest substring
1913                                              matching any of the possible concatenations of set elements (characters or strings).
1914                                              (There must be a single, non-overlapping concatenation of characters or strings.)
1915                                              This is equivalent to a POSIX regular expression for (OR of each set element). */
1916     I18N_USET_SPAN_SIMPLE = 2,          /**< Continue a span() while there is a set element at the current position.
1917                                              (For characters only, this is like while contains(current)==true).
1918
1919                                              When span() returns, the substring between where it started and the position
1920                                              it returned consists only of set elements (characters or strings) that are in the set.
1921
1922                                              If a set only contains single characters, then this is the same
1923                                              as #I18N_USET_SPAN_CONTAINED.
1924
1925                                              If a set contains strings, then the span will be the longest substring
1926                                              with a match at each position with the longest single set element (character or string). */
1927     I18N_USET_SPAN_CONDITION_COUNT      /**< One more than the last span condition.  */
1928 } i18n_uset_span_condition_e;
1929
1930
1931 /**
1932  * @brief Enumeration for bitmask values to be passed to i18n_uset_pattern_options_create() or i18n_uset_apply_pattern() taking an option parameter.
1933  * @since_tizen 2.3.1
1934  */
1935 enum {
1936     I18N_USET_IGNORE_SPACE = 1,         /**< Ignore white space within patterns unless quoted or escaped. */
1937     I18N_USET_CASE_INSENSITIVE = 2,     /**< Enable case insensitive matching.
1938                                              E.g., "[ab]" with this flag will match 'a', 'A', 'b', and 'B'.
1939                                              "[^ab]" with this flag will match all except 'a', 'A', 'b', and 'B'.
1940                                              This performs a full closure over case mappings, e.g. U+017F for s.
1941
1942                                              The resulting set is a superset of the input for the code points but not for the strings.
1943                                              It performs a case mapping closure of the code points and adds full case folding strings for the code points,
1944                                              and reduces strings of the original set to their full case folding equivalents.
1945
1946                                              This is designed for case-insensitive matches, for example in regular expressions.
1947                                              The full code point case closure allows checking of an input character directly against the closure set.
1948                                              Strings are matched by comparing the case-folded form from the closure
1949                                              set with an incremental case folding of the string in question.
1950
1951                                              The closure set will also contain single code points if the original
1952                                              set contained case-equivalent strings (like U+00DF for "ss" or "Ss" etc.).
1953                                              This is not necessary (that is, redundant) for the above matching method
1954                                              but results in the same closure sets regardless of whether the original
1955                                              set contained the code point or a string. */
1956
1957     I18N_USET_ADD_CASE_MAPPINGS = 4     /**< Enable case insensitive matching.
1958                                              E.g., "[ab]" with this flag will match 'a', 'A', 'b', and 'B'.
1959                                              "[^ab]" with this flag will match all except 'a', 'A', 'b', and 'B'.
1960                                              This adds the lower-, title-, and uppercase mappings as well as the case folding of each existing element in the set. */
1961 };
1962
1963 /**
1964  * @}
1965  * @}
1966  */
1967
1968 /**
1969  * @addtogroup CAPI_BASE_UTILS_I18N_UENUMERATION_MODULE
1970  * @{
1971  */
1972
1973 /**
1974  * @brief Structure representing an enumeration.
1975  * @details For usage in C programs.
1976  * @since_tizen 2.3.1
1977  */
1978 typedef void* i18n_uenumeration_h;
1979
1980 /**
1981  * @}
1982  * @}
1983  */
1984
1985 #ifdef __cplusplus
1986 }
1987 #endif
1988
1989 #endif  /* __UTILS_I18N_TYPES_H__*/