xref: /aosp_15_r20/external/icu/libandroidicu/include/unicode/ucnvsel.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
5*0e209d39SAndroid Build Coastguard Worker *
6*0e209d39SAndroid Build Coastguard Worker *   Copyright (C) 2008-2011, International Business Machines
7*0e209d39SAndroid Build Coastguard Worker *   Corporation, Google and others.  All Rights Reserved.
8*0e209d39SAndroid Build Coastguard Worker *
9*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
10*0e209d39SAndroid Build Coastguard Worker */
11*0e209d39SAndroid Build Coastguard Worker /*
12*0e209d39SAndroid Build Coastguard Worker  * Author : [email protected] (Mohamed Eldawy)
13*0e209d39SAndroid Build Coastguard Worker  * ucnvsel.h
14*0e209d39SAndroid Build Coastguard Worker  *
15*0e209d39SAndroid Build Coastguard Worker  * Purpose: To generate a list of encodings capable of handling
16*0e209d39SAndroid Build Coastguard Worker  * a given Unicode text
17*0e209d39SAndroid Build Coastguard Worker  *
18*0e209d39SAndroid Build Coastguard Worker  * Started 09-April-2008
19*0e209d39SAndroid Build Coastguard Worker  */
20*0e209d39SAndroid Build Coastguard Worker 
21*0e209d39SAndroid Build Coastguard Worker #ifndef __ICU_UCNV_SEL_H__
22*0e209d39SAndroid Build Coastguard Worker #define __ICU_UCNV_SEL_H__
23*0e209d39SAndroid Build Coastguard Worker 
24*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
25*0e209d39SAndroid Build Coastguard Worker 
26*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_CONVERSION
27*0e209d39SAndroid Build Coastguard Worker 
28*0e209d39SAndroid Build Coastguard Worker #include "unicode/uset.h"
29*0e209d39SAndroid Build Coastguard Worker #include "unicode/utf16.h"
30*0e209d39SAndroid Build Coastguard Worker #include "unicode/uenum.h"
31*0e209d39SAndroid Build Coastguard Worker #include "unicode/ucnv.h"
32*0e209d39SAndroid Build Coastguard Worker 
33*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
34*0e209d39SAndroid Build Coastguard Worker #include "unicode/localpointer.h"
35*0e209d39SAndroid Build Coastguard Worker #endif   // U_SHOW_CPLUSPLUS_API
36*0e209d39SAndroid Build Coastguard Worker 
37*0e209d39SAndroid Build Coastguard Worker /**
38*0e209d39SAndroid Build Coastguard Worker  * \file
39*0e209d39SAndroid Build Coastguard Worker  * \brief C API: Encoding/charset encoding selector
40*0e209d39SAndroid Build Coastguard Worker  *
41*0e209d39SAndroid Build Coastguard Worker  * A converter selector is built with a set of encoding/charset names
42*0e209d39SAndroid Build Coastguard Worker  * and given an input string returns the set of names of the
43*0e209d39SAndroid Build Coastguard Worker  * corresponding converters which can convert the string.
44*0e209d39SAndroid Build Coastguard Worker  *
45*0e209d39SAndroid Build Coastguard Worker  * A converter selector can be serialized into a buffer and reopened
46*0e209d39SAndroid Build Coastguard Worker  * from the serialized form.
47*0e209d39SAndroid Build Coastguard Worker  */
48*0e209d39SAndroid Build Coastguard Worker 
49*0e209d39SAndroid Build Coastguard Worker struct UConverterSelector;
50*0e209d39SAndroid Build Coastguard Worker /**
51*0e209d39SAndroid Build Coastguard Worker  * @{
52*0e209d39SAndroid Build Coastguard Worker  * Typedef for selector data structure.
53*0e209d39SAndroid Build Coastguard Worker  */
54*0e209d39SAndroid Build Coastguard Worker typedef struct UConverterSelector UConverterSelector;
55*0e209d39SAndroid Build Coastguard Worker /** @} */
56*0e209d39SAndroid Build Coastguard Worker 
57*0e209d39SAndroid Build Coastguard Worker /**
58*0e209d39SAndroid Build Coastguard Worker  * Open a selector.
59*0e209d39SAndroid Build Coastguard Worker  * If converterListSize is 0, build for all available converters.
60*0e209d39SAndroid Build Coastguard Worker  * If excludedCodePoints is NULL, don't exclude any code points.
61*0e209d39SAndroid Build Coastguard Worker  *
62*0e209d39SAndroid Build Coastguard Worker  * @param converterList a pointer to encoding names needed to be involved.
63*0e209d39SAndroid Build Coastguard Worker  *                      Can be NULL if converterListSize==0.
64*0e209d39SAndroid Build Coastguard Worker  *                      The list and the names will be cloned, and the caller
65*0e209d39SAndroid Build Coastguard Worker  *                      retains ownership of the original.
66*0e209d39SAndroid Build Coastguard Worker  * @param converterListSize number of encodings in above list.
67*0e209d39SAndroid Build Coastguard Worker  *                          If 0, builds a selector for all available converters.
68*0e209d39SAndroid Build Coastguard Worker  * @param excludedCodePoints a set of code points to be excluded from consideration.
69*0e209d39SAndroid Build Coastguard Worker  *                           That is, excluded code points in a string do not change
70*0e209d39SAndroid Build Coastguard Worker  *                           the selection result. (They might be handled by a callback.)
71*0e209d39SAndroid Build Coastguard Worker  *                           Use NULL to exclude nothing.
72*0e209d39SAndroid Build Coastguard Worker  * @param whichSet what converter set to use? Use this to determine whether
73*0e209d39SAndroid Build Coastguard Worker  *                 to consider only roundtrip mappings or also fallbacks.
74*0e209d39SAndroid Build Coastguard Worker  * @param status an in/out ICU UErrorCode
75*0e209d39SAndroid Build Coastguard Worker  * @return the new selector
76*0e209d39SAndroid Build Coastguard Worker  *
77*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
78*0e209d39SAndroid Build Coastguard Worker  */
79*0e209d39SAndroid Build Coastguard Worker U_CAPI UConverterSelector* U_EXPORT2
80*0e209d39SAndroid Build Coastguard Worker ucnvsel_open(const char* const*  converterList, int32_t converterListSize,
81*0e209d39SAndroid Build Coastguard Worker              const USet* excludedCodePoints,
82*0e209d39SAndroid Build Coastguard Worker              const UConverterUnicodeSet whichSet, UErrorCode* status);
83*0e209d39SAndroid Build Coastguard Worker 
84*0e209d39SAndroid Build Coastguard Worker /**
85*0e209d39SAndroid Build Coastguard Worker  * Closes a selector.
86*0e209d39SAndroid Build Coastguard Worker  * If any Enumerations were returned by ucnv_select*, they become invalid.
87*0e209d39SAndroid Build Coastguard Worker  * They can be closed before or after calling ucnv_closeSelector,
88*0e209d39SAndroid Build Coastguard Worker  * but should never be used after the selector is closed.
89*0e209d39SAndroid Build Coastguard Worker  *
90*0e209d39SAndroid Build Coastguard Worker  * @see ucnv_selectForString
91*0e209d39SAndroid Build Coastguard Worker  * @see ucnv_selectForUTF8
92*0e209d39SAndroid Build Coastguard Worker  *
93*0e209d39SAndroid Build Coastguard Worker  * @param sel selector to close
94*0e209d39SAndroid Build Coastguard Worker  *
95*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
96*0e209d39SAndroid Build Coastguard Worker  */
97*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
98*0e209d39SAndroid Build Coastguard Worker ucnvsel_close(UConverterSelector *sel);
99*0e209d39SAndroid Build Coastguard Worker 
100*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
101*0e209d39SAndroid Build Coastguard Worker 
102*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
103*0e209d39SAndroid Build Coastguard Worker 
104*0e209d39SAndroid Build Coastguard Worker /**
105*0e209d39SAndroid Build Coastguard Worker  * \class LocalUConverterSelectorPointer
106*0e209d39SAndroid Build Coastguard Worker  * "Smart pointer" class, closes a UConverterSelector via ucnvsel_close().
107*0e209d39SAndroid Build Coastguard Worker  * For most methods see the LocalPointerBase base class.
108*0e209d39SAndroid Build Coastguard Worker  *
109*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointerBase
110*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointer
111*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
112*0e209d39SAndroid Build Coastguard Worker  */
113*0e209d39SAndroid Build Coastguard Worker U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterSelectorPointer, UConverterSelector, ucnvsel_close);
114*0e209d39SAndroid Build Coastguard Worker 
115*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
116*0e209d39SAndroid Build Coastguard Worker 
117*0e209d39SAndroid Build Coastguard Worker #endif
118*0e209d39SAndroid Build Coastguard Worker 
119*0e209d39SAndroid Build Coastguard Worker /**
120*0e209d39SAndroid Build Coastguard Worker  * Open a selector from its serialized form.
121*0e209d39SAndroid Build Coastguard Worker  * The buffer must remain valid and unchanged for the lifetime of the selector.
122*0e209d39SAndroid Build Coastguard Worker  * This is much faster than creating a selector from scratch.
123*0e209d39SAndroid Build Coastguard Worker  * Using a serialized form from a different machine (endianness/charset) is supported.
124*0e209d39SAndroid Build Coastguard Worker  *
125*0e209d39SAndroid Build Coastguard Worker  * @param buffer pointer to the serialized form of a converter selector;
126*0e209d39SAndroid Build Coastguard Worker  *               must be 32-bit-aligned
127*0e209d39SAndroid Build Coastguard Worker  * @param length the capacity of this buffer (can be equal to or larger than
128*0e209d39SAndroid Build Coastguard Worker  *               the actual data length)
129*0e209d39SAndroid Build Coastguard Worker  * @param status an in/out ICU UErrorCode
130*0e209d39SAndroid Build Coastguard Worker  * @return the new selector
131*0e209d39SAndroid Build Coastguard Worker  *
132*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
133*0e209d39SAndroid Build Coastguard Worker  */
134*0e209d39SAndroid Build Coastguard Worker U_CAPI UConverterSelector* U_EXPORT2
135*0e209d39SAndroid Build Coastguard Worker ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* status);
136*0e209d39SAndroid Build Coastguard Worker 
137*0e209d39SAndroid Build Coastguard Worker /**
138*0e209d39SAndroid Build Coastguard Worker  * Serialize a selector into a linear buffer.
139*0e209d39SAndroid Build Coastguard Worker  * The serialized form is portable to different machines.
140*0e209d39SAndroid Build Coastguard Worker  *
141*0e209d39SAndroid Build Coastguard Worker  * @param sel selector to consider
142*0e209d39SAndroid Build Coastguard Worker  * @param buffer pointer to 32-bit-aligned memory to be filled with the
143*0e209d39SAndroid Build Coastguard Worker  *               serialized form of this converter selector
144*0e209d39SAndroid Build Coastguard Worker  * @param bufferCapacity the capacity of this buffer
145*0e209d39SAndroid Build Coastguard Worker  * @param status an in/out ICU UErrorCode
146*0e209d39SAndroid Build Coastguard Worker  * @return the required buffer capacity to hold serialize data (even if the call fails
147*0e209d39SAndroid Build Coastguard Worker  *         with a U_BUFFER_OVERFLOW_ERROR, it will return the required capacity)
148*0e209d39SAndroid Build Coastguard Worker  *
149*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
150*0e209d39SAndroid Build Coastguard Worker  */
151*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
152*0e209d39SAndroid Build Coastguard Worker ucnvsel_serialize(const UConverterSelector* sel,
153*0e209d39SAndroid Build Coastguard Worker                   void* buffer, int32_t bufferCapacity, UErrorCode* status);
154*0e209d39SAndroid Build Coastguard Worker 
155*0e209d39SAndroid Build Coastguard Worker /**
156*0e209d39SAndroid Build Coastguard Worker  * Select converters that can map all characters in a UTF-16 string,
157*0e209d39SAndroid Build Coastguard Worker  * ignoring the excluded code points.
158*0e209d39SAndroid Build Coastguard Worker  *
159*0e209d39SAndroid Build Coastguard Worker  * @param sel a selector
160*0e209d39SAndroid Build Coastguard Worker  * @param s UTF-16 string
161*0e209d39SAndroid Build Coastguard Worker  * @param length length of the string, or -1 if NUL-terminated
162*0e209d39SAndroid Build Coastguard Worker  * @param status an in/out ICU UErrorCode
163*0e209d39SAndroid Build Coastguard Worker  * @return an enumeration containing encoding names.
164*0e209d39SAndroid Build Coastguard Worker  *         The returned encoding names and their order will be the same as
165*0e209d39SAndroid Build Coastguard Worker  *         supplied when building the selector.
166*0e209d39SAndroid Build Coastguard Worker  *
167*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
168*0e209d39SAndroid Build Coastguard Worker  */
169*0e209d39SAndroid Build Coastguard Worker U_CAPI UEnumeration * U_EXPORT2
170*0e209d39SAndroid Build Coastguard Worker ucnvsel_selectForString(const UConverterSelector* sel,
171*0e209d39SAndroid Build Coastguard Worker                         const UChar *s, int32_t length, UErrorCode *status);
172*0e209d39SAndroid Build Coastguard Worker 
173*0e209d39SAndroid Build Coastguard Worker /**
174*0e209d39SAndroid Build Coastguard Worker  * Select converters that can map all characters in a UTF-8 string,
175*0e209d39SAndroid Build Coastguard Worker  * ignoring the excluded code points.
176*0e209d39SAndroid Build Coastguard Worker  *
177*0e209d39SAndroid Build Coastguard Worker  * @param sel a selector
178*0e209d39SAndroid Build Coastguard Worker  * @param s UTF-8 string
179*0e209d39SAndroid Build Coastguard Worker  * @param length length of the string, or -1 if NUL-terminated
180*0e209d39SAndroid Build Coastguard Worker  * @param status an in/out ICU UErrorCode
181*0e209d39SAndroid Build Coastguard Worker  * @return an enumeration containing encoding names.
182*0e209d39SAndroid Build Coastguard Worker  *         The returned encoding names and their order will be the same as
183*0e209d39SAndroid Build Coastguard Worker  *         supplied when building the selector.
184*0e209d39SAndroid Build Coastguard Worker  *
185*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
186*0e209d39SAndroid Build Coastguard Worker  */
187*0e209d39SAndroid Build Coastguard Worker U_CAPI UEnumeration * U_EXPORT2
188*0e209d39SAndroid Build Coastguard Worker ucnvsel_selectForUTF8(const UConverterSelector* sel,
189*0e209d39SAndroid Build Coastguard Worker                       const char *s, int32_t length, UErrorCode *status);
190*0e209d39SAndroid Build Coastguard Worker 
191*0e209d39SAndroid Build Coastguard Worker #endif  /* !UCONFIG_NO_CONVERSION */
192*0e209d39SAndroid Build Coastguard Worker 
193*0e209d39SAndroid Build Coastguard Worker #endif  /* __ICU_UCNV_SEL_H__ */
194