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