0.5.1_alpha ICU support

git-svn-id: svn://db.shs.com.ru/pip@91 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-04-14 10:23:13 +00:00
parent 493d8ba0c7
commit 30c1e62558
9 changed files with 196 additions and 50 deletions

View File

@@ -24,10 +24,12 @@
#define PICHAR_H
#include "pibytearray.h"
/*! \brief Unicode char
* \details This class is wrapper around \c "uint".
* There are many contructors and information functions
*/
#ifdef PIP_ICU
extern char * __syslocname__;
extern char * __sysoemname__;
#endif
class PIP_EXPORT PIChar
{
friend class PIString;
@@ -38,7 +40,7 @@ public:
PIChar(const char c) {ch = c; ch &= 0xFF;}
//! Contructs 2-bytes symbol
PIChar(const short c) {ch = c; ch &= 0xFFFF;}
PIChar(const short c) {ch = c;}
//! Contructs 4-bytes symbol
PIChar(const int c) {ch = c;}
@@ -47,13 +49,13 @@ public:
PIChar(const uchar c) {ch = c; ch &= 0xFF;}
//! Contructs 2-bytes symbol
PIChar(const ushort c) {ch = c; ch &= 0xFFFF;}
PIChar(const ushort c) {ch = c;}
//! Default constructor. Contructs 4-bytes symbol
PIChar(const uint c = 0) {ch = c;}
//! Contructs symbol from no more than 4 bytes of string
PIChar(const char * c) {ch = *reinterpret_cast<const int * >(c);}
PIChar(const char * c);
//inline operator const int() {return static_cast<const int>(ch);}
//inline operator const char() {return toAscii();}
@@ -67,7 +69,7 @@ public:
inline PIChar & operator =(const uint v) {ch = v; return *this;}*/
//! Compare operator
bool operator ==(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) == 0;}
bool operator ==(const PIChar & o) const;
/*inline bool operator ==(const PIChar & o) const {if (o.isAscii() ^ isAscii()) return false;
if (isAscii()) return (o.toAscii() == toAscii());
return (o.toInt() == toInt());}
@@ -88,87 +90,82 @@ public:
inline bool operator !=(const uint o) const {return (PIChar(o) != *this);}*/
//! Compare operator
bool operator >(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) < 0;}
bool operator >(const PIChar & o) const;
//! Compare operator
bool operator <(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) > 0;}
bool operator <(const PIChar & o) const;
//! Compare operator
bool operator >=(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) <= 0;}
bool operator >=(const PIChar & o) const;
//! Compare operator
bool operator <=(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) >= 0;}
bool operator <=(const PIChar & o) const;
//! Return \b true if symbol is digit ('0' to '9')
bool isDigit() const {return isdigit(ch) != 0;}
bool isDigit() const;
//! Return \b true if symbol is HEX digit ('0' to '9', 'a' to 'f', 'A' to 'F')
bool isHex() const {return isxdigit(ch) != 0;}
bool isHex() const;
//! Return \b true if symbol is drawable (without space)
bool isGraphical() const {return isgraph(ch) != 0;}
bool isGraphical() const;
//! Return \b true if symbol is control byte (< 32 or 127)
bool isControl() const {return iscntrl(ch) != 0;}
bool isControl() const;
//! Return \b true if symbol is in lower case
bool isLower() const {return islower(ch) != 0;}
bool isLower() const;
//! Return \b true if symbol is in upper case
bool isUpper() const {return isupper(ch) != 0;}
bool isUpper() const;
//! Return \b true if symbol is printable (with space)
bool isPrint() const {return isprint(ch) != 0;}
bool isPrint() const;
//! Return \b true if symbol is space or tab
bool isSpace() const {return isspace(ch) != 0;}
bool isSpace() const;
//! Return \b true if symbol is alphabetical letter
bool isAlpha() const {return isalpha(ch) != 0;}
bool isAlpha() const;
//! Return \b true if symbol is ascii (< 128)
bool isAscii() const {return isascii(ch) != 0;}
bool isAscii() const;
int toInt() const {return int(ch);}
const wchar_t * toWCharPtr() const {return reinterpret_cast<const wchar_t * >(&ch);}
const wchar_t * toWCharPtr() const;
//! Return as <tt>"char * "</tt> string
const char * toCharPtr() const {return reinterpret_cast<const char * >(&ch);}
const char * toCharPtr() const;
wchar_t toWChar() const {return wchar_t(ch);}
wchar_t toWChar() const;
char toAscii() const {return ch % 256;}
int unicode16Code() const {wchar_t wc; if (mbtowc(&wc, toCharPtr(), 4) > 0) return wc; return 0;}
//#ifdef WINDOWS
// inline PIChar toUpper() const __attribute__ ((optimize(0))) {return PIChar(toupper(ch));}
// inline PIChar toLower() const __attribute__ ((optimize(0))) {return PIChar(tolower(ch));}
//#else
char toConcole1Byte() const;
ushort unicode16Code() const {return ch;}
//! Return symbol in upper case
PIChar toUpper() const {return PIChar(toupper(ch));}
PIChar toUpper() const;
//! Return symbol in lower case
PIChar toLower() const {return PIChar(tolower(ch));}
//#endif
PIChar toLower() const;
private:
uint ch;
ushort ch;
};
__PICONTAINERS_SIMPLE_TYPE__(PIChar)
//! Output operator to \c std::ostream
inline std::ostream & operator <<(std::ostream & s, const PIChar & v) {s << v.toCharPtr(); return s;}
std::ostream & operator <<(std::ostream & s, const PIChar & v);
//! Output operator to \a PICout
inline PICout operator <<(PICout s, const PIChar & v) {s.space(); s.setControl(0, true); s << v.toCharPtr(); s.restoreControl(); return s;}
PICout operator <<(PICout s, const PIChar & v);
//! Write operator to \c PIByteArray
inline PIByteArray & operator <<(PIByteArray & s, const PIChar & v) {s << uint(v.ch); return s;}
inline PIByteArray & operator <<(PIByteArray & s, const PIChar & v) {s << v.ch; return s;}
//! Read operator from \c PIByteArray
inline PIByteArray & operator >>(PIByteArray & s, PIChar & v) {uint i; s >> i; v.ch = wchar_t(i); return s;}
inline PIByteArray & operator >>(PIByteArray & s, PIChar & v) {s >> v.ch; return s;}
//! Compare operator