00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00047 #ifndef UCNV_H
00048 #define UCNV_H
00049
00050 #include "unicode/ucnv_err.h"
00051 #include "unicode/uenum.h"
00052 #include "unicode/localpointer.h"
00053
00054 #ifndef __USET_H__
00055
00065 struct USet;
00067 typedef struct USet USet;
00068
00069 #endif
00070
00071 #if !UCONFIG_NO_CONVERSION
00072
00073 U_CDECL_BEGIN
00074
00076 #define UCNV_MAX_CONVERTER_NAME_LENGTH 60
00077
00078 #define UCNV_MAX_FULL_FILE_NAME_LENGTH (600+UCNV_MAX_CONVERTER_NAME_LENGTH)
00079
00081 #define UCNV_SI 0x0F
00082
00083 #define UCNV_SO 0x0E
00084
00090 typedef enum {
00092 UCNV_UNSUPPORTED_CONVERTER = -1,
00094 UCNV_SBCS = 0,
00096 UCNV_DBCS = 1,
00098 UCNV_MBCS = 2,
00100 UCNV_LATIN_1 = 3,
00102 UCNV_UTF8 = 4,
00104 UCNV_UTF16_BigEndian = 5,
00106 UCNV_UTF16_LittleEndian = 6,
00108 UCNV_UTF32_BigEndian = 7,
00110 UCNV_UTF32_LittleEndian = 8,
00112 UCNV_EBCDIC_STATEFUL = 9,
00114 UCNV_ISO_2022 = 10,
00115
00117 UCNV_LMBCS_1 = 11,
00119 UCNV_LMBCS_2,
00121 UCNV_LMBCS_3,
00123 UCNV_LMBCS_4,
00125 UCNV_LMBCS_5,
00127 UCNV_LMBCS_6,
00129 UCNV_LMBCS_8,
00131 UCNV_LMBCS_11,
00133 UCNV_LMBCS_16,
00135 UCNV_LMBCS_17,
00137 UCNV_LMBCS_18,
00139 UCNV_LMBCS_19,
00141 UCNV_LMBCS_LAST = UCNV_LMBCS_19,
00143 UCNV_HZ,
00145 UCNV_SCSU,
00147 UCNV_ISCII,
00149 UCNV_US_ASCII,
00151 UCNV_UTF7,
00153 UCNV_BOCU1,
00155 UCNV_UTF16,
00157 UCNV_UTF32,
00159 UCNV_CESU8,
00161 UCNV_IMAP_MAILBOX,
00163 UCNV_COMPOUND_TEXT,
00164
00165
00166 UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES
00167 } UConverterType;
00168
00178 typedef enum {
00179 UCNV_UNKNOWN = -1,
00180 UCNV_IBM = 0
00181 } UConverterPlatform;
00182
00198 typedef void (U_EXPORT2 *UConverterToUCallback) (
00199 const void* context,
00200 UConverterToUnicodeArgs *args,
00201 const char *codeUnits,
00202 int32_t length,
00203 UConverterCallbackReason reason,
00204 UErrorCode *pErrorCode);
00205
00221 typedef void (U_EXPORT2 *UConverterFromUCallback) (
00222 const void* context,
00223 UConverterFromUnicodeArgs *args,
00224 const UChar* codeUnits,
00225 int32_t length,
00226 UChar32 codePoint,
00227 UConverterCallbackReason reason,
00228 UErrorCode *pErrorCode);
00229
00230 U_CDECL_END
00231
00237 #define UCNV_OPTION_SEP_CHAR ','
00238
00244 #define UCNV_OPTION_SEP_STRING ","
00245
00251 #define UCNV_VALUE_SEP_CHAR '='
00252
00258 #define UCNV_VALUE_SEP_STRING "="
00259
00268 #define UCNV_LOCALE_OPTION_STRING ",locale="
00269
00281 #define UCNV_VERSION_OPTION_STRING ",version="
00282
00293 #define UCNV_SWAP_LFNL_OPTION_STRING ",swaplfnl"
00294
00310 U_STABLE int U_EXPORT2
00311 ucnv_compareNames(const char *name1, const char *name2);
00312
00313
00364 U_STABLE UConverter* U_EXPORT2
00365 ucnv_open(const char *converterName, UErrorCode *err);
00366
00367
00394 U_STABLE UConverter* U_EXPORT2
00395 ucnv_openU(const UChar *name,
00396 UErrorCode *err);
00397
00462 U_STABLE UConverter* U_EXPORT2
00463 ucnv_openCCSID(int32_t codepage,
00464 UConverterPlatform platform,
00465 UErrorCode * err);
00466
00497 U_STABLE UConverter* U_EXPORT2
00498 ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err);
00499
00537 U_STABLE UConverter * U_EXPORT2
00538 ucnv_safeClone(const UConverter *cnv,
00539 void *stackBuffer,
00540 int32_t *pBufferSize,
00541 UErrorCode *status);
00542
00549 #define U_CNV_SAFECLONE_BUFFERSIZE 1024
00550
00562 U_STABLE void U_EXPORT2
00563 ucnv_close(UConverter * converter);
00564
00565 #if U_SHOW_CPLUSPLUS_API
00566
00567 U_NAMESPACE_BEGIN
00568
00578 U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterPointer, UConverter, ucnv_close);
00579
00580 U_NAMESPACE_END
00581
00582 #endif
00583
00601 U_STABLE void U_EXPORT2
00602 ucnv_getSubstChars(const UConverter *converter,
00603 char *subChars,
00604 int8_t *len,
00605 UErrorCode *err);
00606
00626 U_STABLE void U_EXPORT2
00627 ucnv_setSubstChars(UConverter *converter,
00628 const char *subChars,
00629 int8_t len,
00630 UErrorCode *err);
00631
00659 U_STABLE void U_EXPORT2
00660 ucnv_setSubstString(UConverter *cnv,
00661 const UChar *s,
00662 int32_t length,
00663 UErrorCode *err);
00664
00678 U_STABLE void U_EXPORT2
00679 ucnv_getInvalidChars(const UConverter *converter,
00680 char *errBytes,
00681 int8_t *len,
00682 UErrorCode *err);
00683
00697 U_STABLE void U_EXPORT2
00698 ucnv_getInvalidUChars(const UConverter *converter,
00699 UChar *errUChars,
00700 int8_t *len,
00701 UErrorCode *err);
00702
00710 U_STABLE void U_EXPORT2
00711 ucnv_reset(UConverter *converter);
00712
00721 U_STABLE void U_EXPORT2
00722 ucnv_resetToUnicode(UConverter *converter);
00723
00732 U_STABLE void U_EXPORT2
00733 ucnv_resetFromUnicode(UConverter *converter);
00734
00783 U_STABLE int8_t U_EXPORT2
00784 ucnv_getMaxCharSize(const UConverter *converter);
00785
00805 #define UCNV_GET_MAX_BYTES_FOR_STRING(length, maxCharSize) \
00806 (((int32_t)(length)+10)*(int32_t)(maxCharSize))
00807
00816 U_STABLE int8_t U_EXPORT2
00817 ucnv_getMinCharSize(const UConverter *converter);
00818
00833 U_STABLE int32_t U_EXPORT2
00834 ucnv_getDisplayName(const UConverter *converter,
00835 const char *displayLocale,
00836 UChar *displayName,
00837 int32_t displayNameCapacity,
00838 UErrorCode *err);
00839
00850 U_STABLE const char * U_EXPORT2
00851 ucnv_getName(const UConverter *converter, UErrorCode *err);
00852
00876 U_STABLE int32_t U_EXPORT2
00877 ucnv_getCCSID(const UConverter *converter,
00878 UErrorCode *err);
00879
00890 U_STABLE UConverterPlatform U_EXPORT2
00891 ucnv_getPlatform(const UConverter *converter,
00892 UErrorCode *err);
00893
00902 U_STABLE UConverterType U_EXPORT2
00903 ucnv_getType(const UConverter * converter);
00904
00920 U_STABLE void U_EXPORT2
00921 ucnv_getStarters(const UConverter* converter,
00922 UBool starters[256],
00923 UErrorCode* err);
00924
00925
00931 typedef enum UConverterUnicodeSet {
00933 UCNV_ROUNDTRIP_SET,
00935 UCNV_ROUNDTRIP_AND_FALLBACK_SET,
00937 UCNV_SET_COUNT
00938 } UConverterUnicodeSet;
00939
00940
00986 U_STABLE void U_EXPORT2
00987 ucnv_getUnicodeSet(const UConverter *cnv,
00988 USet *setFillIn,
00989 UConverterUnicodeSet whichSet,
00990 UErrorCode *pErrorCode);
00991
01003 U_STABLE void U_EXPORT2
01004 ucnv_getToUCallBack (const UConverter * converter,
01005 UConverterToUCallback *action,
01006 const void **context);
01007
01019 U_STABLE void U_EXPORT2
01020 ucnv_getFromUCallBack (const UConverter * converter,
01021 UConverterFromUCallback *action,
01022 const void **context);
01023
01039 U_STABLE void U_EXPORT2
01040 ucnv_setToUCallBack (UConverter * converter,
01041 UConverterToUCallback newAction,
01042 const void* newContext,
01043 UConverterToUCallback *oldAction,
01044 const void** oldContext,
01045 UErrorCode * err);
01046
01062 U_STABLE void U_EXPORT2
01063 ucnv_setFromUCallBack (UConverter * converter,
01064 UConverterFromUCallback newAction,
01065 const void *newContext,
01066 UConverterFromUCallback *oldAction,
01067 const void **oldContext,
01068 UErrorCode * err);
01069
01128 U_STABLE void U_EXPORT2
01129 ucnv_fromUnicode (UConverter * converter,
01130 char **target,
01131 const char *targetLimit,
01132 const UChar ** source,
01133 const UChar * sourceLimit,
01134 int32_t* offsets,
01135 UBool flush,
01136 UErrorCode * err);
01137
01197 U_STABLE void U_EXPORT2
01198 ucnv_toUnicode(UConverter *converter,
01199 UChar **target,
01200 const UChar *targetLimit,
01201 const char **source,
01202 const char *sourceLimit,
01203 int32_t *offsets,
01204 UBool flush,
01205 UErrorCode *err);
01206
01234 U_STABLE int32_t U_EXPORT2
01235 ucnv_fromUChars(UConverter *cnv,
01236 char *dest, int32_t destCapacity,
01237 const UChar *src, int32_t srcLength,
01238 UErrorCode *pErrorCode);
01239
01266 U_STABLE int32_t U_EXPORT2
01267 ucnv_toUChars(UConverter *cnv,
01268 UChar *dest, int32_t destCapacity,
01269 const char *src, int32_t srcLength,
01270 UErrorCode *pErrorCode);
01271
01342 U_STABLE UChar32 U_EXPORT2
01343 ucnv_getNextUChar(UConverter * converter,
01344 const char **source,
01345 const char * sourceLimit,
01346 UErrorCode * err);
01347
01486 U_STABLE void U_EXPORT2
01487 ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
01488 char **target, const char *targetLimit,
01489 const char **source, const char *sourceLimit,
01490 UChar *pivotStart, UChar **pivotSource,
01491 UChar **pivotTarget, const UChar *pivotLimit,
01492 UBool reset, UBool flush,
01493 UErrorCode *pErrorCode);
01494
01550 U_STABLE int32_t U_EXPORT2
01551 ucnv_convert(const char *toConverterName,
01552 const char *fromConverterName,
01553 char *target,
01554 int32_t targetCapacity,
01555 const char *source,
01556 int32_t sourceLength,
01557 UErrorCode *pErrorCode);
01558
01604 U_STABLE int32_t U_EXPORT2
01605 ucnv_toAlgorithmic(UConverterType algorithmicType,
01606 UConverter *cnv,
01607 char *target, int32_t targetCapacity,
01608 const char *source, int32_t sourceLength,
01609 UErrorCode *pErrorCode);
01610
01656 U_STABLE int32_t U_EXPORT2
01657 ucnv_fromAlgorithmic(UConverter *cnv,
01658 UConverterType algorithmicType,
01659 char *target, int32_t targetCapacity,
01660 const char *source, int32_t sourceLength,
01661 UErrorCode *pErrorCode);
01662
01670 U_STABLE int32_t U_EXPORT2
01671 ucnv_flushCache(void);
01672
01680 U_STABLE int32_t U_EXPORT2
01681 ucnv_countAvailable(void);
01682
01693 U_STABLE const char* U_EXPORT2
01694 ucnv_getAvailableName(int32_t n);
01695
01708 U_STABLE UEnumeration * U_EXPORT2
01709 ucnv_openAllNames(UErrorCode *pErrorCode);
01710
01721 U_STABLE uint16_t U_EXPORT2
01722 ucnv_countAliases(const char *alias, UErrorCode *pErrorCode);
01723
01736 U_STABLE const char * U_EXPORT2
01737 ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode);
01738
01752 U_STABLE void U_EXPORT2
01753 ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode);
01754
01778 U_STABLE UEnumeration * U_EXPORT2
01779 ucnv_openStandardNames(const char *convName,
01780 const char *standard,
01781 UErrorCode *pErrorCode);
01782
01788 U_STABLE uint16_t U_EXPORT2
01789 ucnv_countStandards(void);
01790
01798 U_STABLE const char * U_EXPORT2
01799 ucnv_getStandard(uint16_t n, UErrorCode *pErrorCode);
01800
01820 U_STABLE const char * U_EXPORT2
01821 ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorCode);
01822
01842 U_STABLE const char * U_EXPORT2
01843 ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode);
01844
01859 U_STABLE const char * U_EXPORT2
01860 ucnv_getDefaultName(void);
01861
01862 #ifndef U_HIDE_SYSTEM_API
01863
01879 U_STABLE void U_EXPORT2
01880 ucnv_setDefaultName(const char *name);
01881 #endif
01882
01900 U_STABLE void U_EXPORT2
01901 ucnv_fixFileSeparator(const UConverter *cnv, UChar *source, int32_t sourceLen);
01902
01911 U_STABLE UBool U_EXPORT2
01912 ucnv_isAmbiguous(const UConverter *cnv);
01913
01929 U_STABLE void U_EXPORT2
01930 ucnv_setFallback(UConverter *cnv, UBool usesFallback);
01931
01941 U_STABLE UBool U_EXPORT2
01942 ucnv_usesFallback(const UConverter *cnv);
01943
01973 U_STABLE const char* U_EXPORT2
01974 ucnv_detectUnicodeSignature(const char* source,
01975 int32_t sourceLength,
01976 int32_t *signatureLength,
01977 UErrorCode *pErrorCode);
01978
01990 U_STABLE int32_t U_EXPORT2
01991 ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status);
01992
02004 U_STABLE int32_t U_EXPORT2
02005 ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status);
02006
02022 U_STABLE UBool U_EXPORT2
02023 ucnv_isFixedWidth(UConverter *cnv, UErrorCode *status);
02024
02025 #endif
02026
02027 #endif
02028