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