Home | History | Annotate | Download | only in common
      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 
     28 enum {
     29     UCNV_IO_UNNORMALIZED,
     30     UCNV_IO_STD_NORMALIZED,
     31     UCNV_IO_NORM_TYPE_COUNT
     32 };
     33 
     34 typedef struct {
     35     uint16_t stringNormalizationType;
     36     uint16_t containsCnvOptionInfo;
     37 } UConverterAliasOptions;
     38 
     39 typedef 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 
     78 U_CAPI char * U_EXPORT2
     79 ucnv_io_stripASCIIForCompare(char *dst, const char *name);
     80 
     81 U_CAPI char * U_EXPORT2
     82 ucnv_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  */
     94 U_CFUNC const char *
     95 ucnv_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  */
    102 U_CFUNC uint16_t
    103 ucnv_io_countKnownConverters(UErrorCode *pErrorCode);
    104 
    105 /**
    106  * Swap an ICU converter alias table. See implementation for details.
    107  * @internal
    108  */
    109 U_CAPI int32_t U_EXPORT2
    110 ucnv_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