ustr_imp.h revision b13da9df870a61b11249bf741347908dbea0edd8
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Copyright (C) 1999-2007, International Business Machines 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: ustr_imp.h 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2001jan30 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Markus W. Scherer 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __USTR_IMP_H__ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __USTR_IMP_H__ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uiter.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucase.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** Simple declaration for u_strToTitle() to avoid including unicode/ubrk.h. */ 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define UBRK_TYPEDEF_UBREAK_ITERATOR 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru typedef void UBreakIterator; 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare two strings in code point order or code unit order. 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Works in strcmp style (both lengths -1), 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * strncmp style (lengths equal and >=0, flag TRUE), 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and memcmp/UnicodeString style (at least one length >=0). 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_strCompare(const UChar *s1, int32_t length1, 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *s2, int32_t length2, 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool strncmpStyle, UBool codePointOrder); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Internal API, used by u_strcasecmp() etc. 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare strings case-insensitively, 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in code point order or code unit order. 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_strcmpFold(const UChar *s1, int32_t length1, 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *s2, int32_t length2, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t options, 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Are the Unicode properties loaded? 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This must be used before internal functions are called that do 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * not perform this check. 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Generate a debug assertion failure if data is not loaded, to flag the fact 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that u_init() wasn't called first, before trying to access character properties. 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC UBool 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_haveProperties(UErrorCode *pErrorCode); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Load the Unicode property data. 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Intended primarily for use from u_init(). 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Has no effect if property data is already loaded. 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NOT thread safe. 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*U_CFUNC int8_t 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_loadPropsData(UErrorCode *errorCode);*/ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Type of a function that may be passed to the internal case mapping functions 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * or similar for growing the destination buffer. 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef UBool U_CALLCONV 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUGrowBuffer(void *context, /* opaque pointer for this function */ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar **pBuffer, /* in/out destination buffer pointer */ 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t *pCapacity, /* in/out buffer capacity in numbers of UChars */ 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t reqCapacity,/* requested capacity */ 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length); /* number of UChars to be copied to new buffer */ 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Default implementation of UGrowBuffer. 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Takes a static buffer as context, allocates a new buffer, 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and releases the old one if it is not the same as the one passed as context. 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool /* U_CALLCONV U_EXPORT2 */ 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_growBufferFromStatic(void *context, 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar **pBuffer, int32_t *pCapacity, int32_t reqCapacity, 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Internal string casing functions implementing 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ustring.h/ustrcase.c and UnicodeString case mapping functions. 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct UCaseMap { 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UCaseProps *csp; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *iter; /* We adopt the iterator, so we own it. */ 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char locale[32]; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t locCache; 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t options; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __UCASEMAP_H__ 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UCaseMap UCaseMap; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TO_LOWER, 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TO_UPPER, 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TO_TITLE, 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FOLD_CASE 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruustr_toLower(const UCaseProps *csp, 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dest, int32_t destCapacity, 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *src, int32_t srcLength, 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locale, 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruustr_toUpper(const UCaseProps *csp, 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dest, int32_t destCapacity, 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *src, int32_t srcLength, 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locale, 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruustr_toTitle(const UCaseProps *csp, 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dest, int32_t destCapacity, 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *src, int32_t srcLength, 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *titleIter, 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locale, uint32_t options, 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Internal case folding function. 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruustr_foldCase(const UCaseProps *csp, 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dest, int32_t destCapacity, 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *src, int32_t srcLength, 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t options, 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a UChar * string if possible. 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If length < destCapacity then NUL-terminate. 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If length == destCapacity then do not terminate but set U_STRING_NOT_TERMINATED_WARNING. 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If length > destCapacity then do not terminate but set U_BUFFER_OVERFLOW_ERROR. 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dest Destination buffer, can be NULL if destCapacity==0. 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param destCapacity Number of UChars available at dest. 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param length Number of UChars that were (to be) written to dest. 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pErrorCode ICU error code. 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return length 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateUChars(UChar *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a char * string if possible. 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as u_terminateUChars() but for a different string type. 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateChars(char *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a UChar32 * string if possible. 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as u_terminateUChars() but for a different string type. 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateUChar32s(UChar32 *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a wchar_t * string if possible. 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as u_terminateUChars() but for a different string type. 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateWChars(wchar_t *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 212