From e443c8a405d4b10febcd0d22d7ab4b7ce34fbd6d Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Thu, 26 Sep 2013 21:12:39 +0200 Subject: [PATCH] [DEV] add capacity at unichar and corect append of string --- etk/UString.cpp | 52 +++++++++++++++++----------------- etk/UString.h | 4 +-- etk/UniChar.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++----- etk/UniChar.h | 4 ++- 4 files changed, 99 insertions(+), 35 deletions(-) diff --git a/etk/UString.cpp b/etk/UString.cpp index c2aa9f8..56963e3 100644 --- a/etk/UString.cpp +++ b/etk/UString.cpp @@ -54,7 +54,7 @@ etk::CCout& etk::operator <<(etk::CCout& _os, const etk::Vector& _ etk::UString::UString(void) { //TK_INFO("new etk::UString()"); - m_data.PushBack('\0'); + m_data.PushBack(etk::UniChar::Null); } @@ -73,8 +73,8 @@ etk::UString::UString(const char* _data, unicode::charset_te _inputCharset) unicode::convertIsoToUnicode(_inputCharset, transformData, m_data); } if( 0 == m_data.Size() - || m_data[m_data.Size()-1]!='\0') { - m_data.PushBack('\0'); + || m_data[m_data.Size()-1]!=etk::UniChar::Null) { + m_data.PushBack(etk::UniChar::Null); } } @@ -131,7 +131,7 @@ etk::UString::UString(const bool _inputData, etk::UString::printMode_te _mode, b } break; } - m_data.PushBack('\0'); + m_data.PushBack(etk::UniChar::Null); } etk::UString::UString(const etk::UString& _obj) @@ -143,7 +143,7 @@ etk::UString::UString(const etk::UString& _obj) etk::UString::UString(const etk::UniChar& _inputData) { m_data.PushBack(_inputData); - m_data.PushBack('\0'); + m_data.PushBack(etk::UniChar::Null); } etk::UString::UString(const float _inputData) @@ -289,9 +289,9 @@ void etk::UString::SetNumber(bool _negative, const uint64_t& _inputData, etk::US //TK_ERROR (" " << ploppp); } if (m_data.Size()==0) { - m_data.PushBack('\0'); - } else if (m_data[m_data.Size()-1]!='\0') { - m_data.PushBack('\0'); + m_data.PushBack(etk::UniChar::Null); + } else if (m_data[m_data.Size()-1]!=etk::UniChar::Null) { + m_data.PushBack(etk::UniChar::Null); } //TK_ERROR(" convert : " << _inputData << " in : " << *this << " len=" << m_data.Size()); } @@ -369,11 +369,11 @@ void etk::UString::Set(const etk::Vector& _inputData) { m_data = _inputData; if (m_data.Size()>0) { - if (m_data[m_data.Size()-1] != '\0') { - m_data.PushBack('\0'); + if (m_data[m_data.Size()-1] != etk::UniChar::Null) { + m_data.PushBack(etk::UniChar::Null); } } else { - m_data.PushBack('\0'); + m_data.PushBack(etk::UniChar::Null); } //TK_DEBUG("m_dataLen="< _lenMax) { + return 0; + } + //4 case + if( _lenMax >= 1 + && (_data[0] & 0x80) == 0x00 ) { + // One Char Element + size = 1; + } else if( _lenMax >= 2 + && (_data[0] & 0xE0) == 0xC0 + && (_data[1] & 0xC0) == 0x80) { + size = 2; + } else if( _lenMax >= 3 + && (_data[0] & 0xF0) == 0xE0 + && (_data[1] & 0xC0) == 0x80 + && (_data[2] & 0xC0) == 0x80) { + size = 3; + } else if( _lenMax >= 4 + && (_data[0] & 0xF8) == 0xF0 + && (_data[1] & 0xC0) == 0x80 + && (_data[2] & 0xC0) == 0x80 + && (_data[3] & 0xC0) == 0x80) { + size = 4; + } + return size; +} -void etk::UniChar::SetUtf8(const char* _input) + +int8_t etk::UniChar::SetUtf8(const char* _input) { m_value = 0; if (NULL == _input) { - return; + return 0; } int32_t len = strlen(_input); + len = SizeElement(_input, len); switch (len) { + default: + // case 0 : An error occured... + m_value = _input[0]; + return 0; case 1: m_value = (uint8_t)(_input[0]) & 0x7F; - break; + return 1; case 2: m_value = (((uint8_t)_input[0]) & 0x1F)<< 6; m_value += ((uint8_t)_input[1]) & 0x3F; - break; + return 2; case 3: m_value = (((uint8_t)_input[0]) & 0x0F)<< 12; m_value += (((uint8_t)_input[1]) & 0x3F)<< 6; m_value += ((uint8_t)_input[2]) & 0x3F; - break; - default: + return 3; + case 4: m_value = (((uint8_t)_input[0]) & 0x07)<< 18; m_value += (((uint8_t)_input[1]) & 0x3F)<< 12; m_value += (((uint8_t)_input[2]) & 0x3F)<< 6; m_value += ((uint8_t)_input[3]) & 0x3F; - break; + return 4; } } diff --git a/etk/UniChar.h b/etk/UniChar.h index 77b1b49..32d9bbe 100644 --- a/etk/UniChar.h +++ b/etk/UniChar.h @@ -44,6 +44,7 @@ namespace etk class UniChar { public: // classic unicar code : + static const UniChar Null; //!< '\0' static const UniChar Return; //!< '\n' static const UniChar CarrierReturn; //!< '\r' CR static const UniChar Tabulation; //!< '\t' TAB @@ -175,7 +176,8 @@ namespace etk uint32_t GetUtf8(void) const; int8_t GetUtf8(char _output[5]) const; - void SetUtf8(const char* _input); + //etk::Vector GetUtf8(void) const; + int8_t SetUtf8(const char* _input); }; };