1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 427f654740f2a26ad62a5c155af9199af9e69b889claireho* Copyright (C) 1999-2010, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: uinvchar.h 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:2 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2004sep14 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Markus W. Scherer 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Definitions for handling invariant characters, moved here from putil.c 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* for better modularization. 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __UINVCHAR_H__ 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __UINVCHAR_H__ 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check if a char string only contains invariant characters. 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See utypes.h for details. 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param s Input string pointer. 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param length Length of the string, can be -1 if NUL-terminated. 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return TRUE if s contains only invariant characters. 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal (ICU 2.8) 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_isInvariantString(const char *s, int32_t length); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check if a Unicode string only contains invariant characters. 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See utypes.h for details. 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param s Input string pointer. 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param length Length of the string, can be -1 if NUL-terminated. 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return TRUE if s contains only invariant characters. 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal (ICU 2.8) 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_isInvariantUString(const UChar *s, int32_t length); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_UPPER_ORDINAL 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the ordinal number of an uppercase invariant character 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_CHARSET_FAMILY==U_ASCII_FAMILY 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define U_UPPER_ORDINAL(x) ((x)-'A') 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define U_UPPER_ORDINAL(x) (((x) < 'J') ? ((x)-'A') : \ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (((x) < 'S') ? ((x)-'J'+9) : \ 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((x)-'S'+18))) 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# error Unknown charset family! 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Compare two EBCDIC invariant-character strings in ASCII order. 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @internal 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_INTERNAL int32_t U_EXPORT2 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouprv_compareInvEbcdicAsAscii(const char *s1, const char *s2); 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \def uprv_compareInvCharsAsAscii 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Compare two invariant-character strings in ASCII order. 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @internal 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if U_CHARSET_FAMILY==U_ASCII_FAMILY 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho# define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2) 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho# define uprv_compareInvCharsAsAscii(s1, s2) uprv_compareInvEbcdicAsAscii(s1, s2) 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho# error Unknown charset family! 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8627f654740f2a26ad62a5c155af9199af9e69b889claireho/** 87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Converts an EBCDIC invariant character to lowercase ASCII. 88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @internal 89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 90b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_INTERNAL char U_EXPORT2 91b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehouprv_ebcdicToLowercaseAscii(char c); 92b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 93b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 94b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * \def uprv_invCharToLowercaseAscii 95b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Converts an invariant character to lowercase ASCII. 96b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @internal 97b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 98b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if U_CHARSET_FAMILY==U_ASCII_FAMILY 99b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_invCharToLowercaseAscii uprv_asciitolower 100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_invCharToLowercaseAscii uprv_ebcdicToLowercaseAscii 102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#else 103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# error Unknown charset family! 104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif 105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 10727f654740f2a26ad62a5c155af9199af9e69b889claireho * Copy EBCDIC to ASCII 10827f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 10927f654740f2a26ad62a5c155af9199af9e69b889claireho * @see uprv_strncpy 11027f654740f2a26ad62a5c155af9199af9e69b889claireho */ 11127f654740f2a26ad62a5c155af9199af9e69b889clairehoU_INTERNAL uint8_t* U_EXPORT2 11227f654740f2a26ad62a5c155af9199af9e69b889clairehouprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n); 11327f654740f2a26ad62a5c155af9199af9e69b889claireho 11427f654740f2a26ad62a5c155af9199af9e69b889claireho 11527f654740f2a26ad62a5c155af9199af9e69b889claireho/** 11627f654740f2a26ad62a5c155af9199af9e69b889claireho * Copy ASCII to EBCDIC 11727f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 11827f654740f2a26ad62a5c155af9199af9e69b889claireho * @see uprv_strncpy 11927f654740f2a26ad62a5c155af9199af9e69b889claireho */ 12027f654740f2a26ad62a5c155af9199af9e69b889clairehoU_INTERNAL uint8_t* U_EXPORT2 12127f654740f2a26ad62a5c155af9199af9e69b889clairehouprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n); 12227f654740f2a26ad62a5c155af9199af9e69b889claireho 12327f654740f2a26ad62a5c155af9199af9e69b889claireho 12427f654740f2a26ad62a5c155af9199af9e69b889claireho 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 126