1/* 2 * Copyright 2010-2011, Oliver Tappe, zooey@hirschkaefer.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _ICU_CTYPE_DATA_H 6#define _ICU_CTYPE_DATA_H 7 8 9#include "ICUCategoryData.h" 10#include "LocaleBackend.h" 11 12 13namespace BPrivate { 14namespace Libroot { 15 16 17class ICUCtypeData : public ICUCategoryData { 18 typedef ICUCategoryData inherited; 19public: 20 ICUCtypeData(pthread_key_t tlsKey); 21 virtual ~ICUCtypeData(); 22 23 void Initialize(LocaleCtypeDataBridge* dataBridge); 24 25 virtual status_t SetTo(const U_NAMESPACE_QUALIFIER Locale& 26 locale, 27 const char* posixLocaleName); 28 virtual status_t SetToPosix(); 29 30 int IsWCType(wint_t wc, wctype_t charClass); 31 status_t ToWCTrans(wint_t wc, wctrans_t transition, 32 wint_t& result); 33 34 status_t MultibyteToWchar(wchar_t* wcOut, const char* mb, 35 size_t mbLength, mbstate_t* mbState, 36 size_t& lengthOut); 37 status_t MultibyteStringToWchar(wchar_t* wcDest, 38 size_t wcDestLength, const char** mbSource, 39 size_t mbSourceLength, mbstate_t* mbState, 40 size_t& lengthOut); 41 status_t WcharToMultibyte(char* mbOut, wchar_t wc, 42 mbstate_t* mbState, size_t& lengthOut); 43 status_t WcharStringToMultibyte(char* mbDest, 44 size_t mbDestLength, 45 const wchar_t** wcSource, 46 size_t wcSourceLength, mbstate_t* mbState, 47 size_t& lengthOut); 48 49 const char* GetLanginfo(int index); 50 51private: 52 status_t _GetConverterForMbState(mbstate_t* mbState, 53 UConverter*& converterOut); 54 55 status_t _DropConverterFromMbState(mbstate_t* mbState); 56 57 /* 58 * The following arrays have 384 elements where the elements at 59 * index -128..-2 mirror the elements at index 128..255 (to protect 60 * against invocations of ctype macros with negative character 61 * values). 62 * The element at index -1 is a dummy element containing the 63 * neutral/identity value used when the array is accessed as in 64 * 'isblank(EOF)' (i.e. with index -1). 65 */ 66 unsigned short fClassInfo[384]; 67 int fToLowerMap[384]; 68 int fToUpperMap[384]; 69 70 LocaleCtypeDataBridge* fDataBridge; 71}; 72 73 74} // namespace Libroot 75} // namespace BPrivate 76 77 78#endif // _ICU_CTYPE_DATA_H 79