1/* 2 ********************************************************************** 3 * Copyright (C) 1999-2006, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 ********************************************************************** 6 * 7 * 8 * ucnv_io.h: 9 * defines variables and functions pertaining to converter name resolution 10 * aspect of the conversion code 11 */ 12 13#ifndef UCNV_IO_H 14#define UCNV_IO_H 15 16#include "unicode/utypes.h" 17 18#if !UCONFIG_NO_CONVERSION 19 20#include "udataswp.h" 21 22#define UCNV_AMBIGUOUS_ALIAS_MAP_BIT 0x8000 23#define UCNV_CONTAINS_OPTION_BIT 0x4000 24#define UCNV_CONVERTER_INDEX_MASK 0xFFF 25#define UCNV_NUM_RESERVED_TAGS 2 26#define UCNV_NUM_HIDDEN_TAGS 1 27 28enum { 29 UCNV_IO_UNNORMALIZED, 30 UCNV_IO_STD_NORMALIZED, 31 UCNV_IO_NORM_TYPE_COUNT 32}; 33 34typedef struct { 35 uint16_t stringNormalizationType; 36 uint16_t containsCnvOptionInfo; 37} UConverterAliasOptions; 38 39typedef struct UConverterAlias { 40 const uint16_t *converterList; 41 const uint16_t *tagList; 42 const uint16_t *aliasList; 43 const uint16_t *untaggedConvArray; 44 const uint16_t *taggedAliasArray; 45 const uint16_t *taggedAliasLists; 46 const UConverterAliasOptions *optionTable; 47 const uint16_t *stringTable; 48 const uint16_t *normalizedStringTable; 49 50 uint32_t converterListSize; 51 uint32_t tagListSize; 52 uint32_t aliasListSize; 53 uint32_t untaggedConvArraySize; 54 uint32_t taggedAliasArraySize; 55 uint32_t taggedAliasListsSize; 56 uint32_t optionTableSize; 57 uint32_t stringTableSize; 58 uint32_t normalizedStringTableSize; 59} UConverterAlias; 60 61/** 62 * \var ucnv_io_stripForCompare 63 * Remove the underscores, dashes and spaces from the name, and convert 64 * the name to lower case. 65 * @param dst The destination buffer, which is <= the buffer of name. 66 * @param dst The destination buffer, which is <= the buffer of name. 67 * @see ucnv_compareNames 68 * @return the destination buffer. 69 */ 70#if U_CHARSET_FAMILY==U_ASCII_FAMILY 71# define ucnv_io_stripForCompare ucnv_io_stripASCIIForCompare 72#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 73# define ucnv_io_stripForCompare ucnv_io_stripEBCDICForCompare 74#else 75# error U_CHARSET_FAMILY is not valid 76#endif 77 78U_CAPI char * U_EXPORT2 79ucnv_io_stripASCIIForCompare(char *dst, const char *name); 80 81U_CAPI char * U_EXPORT2 82ucnv_io_stripEBCDICForCompare(char *dst, const char *name); 83 84/** 85 * Map a converter alias name to a canonical converter name. 86 * The alias is searched for case-insensitively, the converter name 87 * is returned in mixed-case. 88 * Returns NULL if the alias is not found. 89 * @param alias The alias name to be searched. 90 * @param containsOption A return value stating whether the returned converter name contains an option (a comma) 91 * @param pErrorCode The error code 92 * @return the converter name in mixed-case, return NULL if the alias is not found. 93 */ 94U_CFUNC const char * 95ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode); 96 97/** 98 * Return the number of all known converter names (no aliases). 99 * @param pErrorCode The error code 100 * @return the number of all aliases 101 */ 102U_CFUNC uint16_t 103ucnv_io_countKnownConverters(UErrorCode *pErrorCode); 104 105/** 106 * Swap an ICU converter alias table. See implementation for details. 107 * @internal 108 */ 109U_CAPI int32_t U_EXPORT2 110ucnv_swapAliases(const UDataSwapper *ds, 111 const void *inData, int32_t length, void *outData, 112 UErrorCode *pErrorCode); 113 114#endif 115 116#endif /* _UCNV_IO */ 117 118/* 119 * Hey, Emacs, please set the following: 120 * 121 * Local Variables: 122 * indent-tabs-mode: nil 123 * End: 124 * 125 */ 126