Doxy comments

This commit is contained in:
qPCR4vir 2016-03-23 17:19:54 +01:00
parent d2b08d0f26
commit 266def9ee3
2 changed files with 32 additions and 31 deletions

View File

@ -46,7 +46,31 @@ namespace nana
class charset_encoding_interface; class charset_encoding_interface;
} }
/// An intelligent charset class for character code conversion. /*!\class charset
\brief An intelligent charset class for character code conversion.
Example:
1. A UTF-8 string from the socket.
int len = ::recv(sd, buf, buflen, 0);
textbox.caption(nana::charset(std::string(buf, len), nana::unicode::utf8));
2. Send the string in text to the socket as UTF-8.
std::string utf8str = nana::charset(textbox.caption()).to_bytes(nana::unicode::utf8);
::send(sd, utf8str.c_str(), utf8str.size(), 0);
3, Convert a string to the specified multi-byte character code.
// Convert to a multibytes string through default system language.
std::string mbstr = nana::charset(a_wstring);
// If the default system language is English and convert
// a Chinese unicode string to multibytes string through GB2312
std::setlocale(LC_CTYPE, "zh_CN.GB2312");
//set::setlocale(LC_CTYPE, ".936"); call it in Windows
std::string mbstr = nana::charset(a_wstring_with_chinese);
*/
class charset class charset
{ {
public: public:
@ -74,27 +98,3 @@ namespace nana
}//end namespace nana }//end namespace nana
#endif #endif
/*!\class charset
Example
1. A UTF-8 string from the socket.
int len = ::recv(sd, buf, buflen, 0);
textbox.caption(nana::charset(std::string(buf, len), nana::unicode::utf8));
2. Send the string in text to the socket as UTF-8.
std::string utf8str = nana::charset(textbox.caption()).to_bytes(nana::unicode::utf8);
::send(sd, utf8str.c_str(), utf8str.size(), 0);
3, Convert a string to the specified multi-byte character code.
//Convert to a multibytes string through default system language.
std::string mbstr = nana::charset(a_wstring);
//If the default system language is English and convert
//a Chinese unicode string to multibytes string through GB2312
std::setlocale(LC_CTYPE, "zh_CN.GB2312");
//set::setlocale(LC_CTYPE, ".936"); call it in Windows
std::string mbstr = nana::charset(a_wstring_with_chinese);
*/

View File

@ -578,37 +578,38 @@ namespace nana
std::string data_for_move_; std::string data_for_move_;
}; };
#else #else
/// return the first code point and move the pointer to next character, springing to the end by errors
unsigned long utf8char(const unsigned char*& p, const unsigned char* end) unsigned long utf8char(const unsigned char*& p, const unsigned char* end)
{ {
if(p != end) if(p != end)
{ {
if(*p < 0x80) if(*p < 0x80) // ASCII char 0-127 or 0-0x80
{ {
return *(p++); return *(p++);
} }
unsigned ch = *p; unsigned ch = *p;
unsigned long code; unsigned long code;
if(ch < 0xC0) if(ch < 0xC0) // error? - move to end. Posible ANSI or ISO code-page
{ {
p = end; p = end;
return 0; return 0;
} }
else if(ch < 0xE0 && (p + 1 <= end)) else if(ch < 0xE0 && (p + 1 <= end)) // two byte chararcter
{ {
code = ((ch & 0x1F) << 6) | (p[1] & 0x3F); code = ((ch & 0x1F) << 6) | (p[1] & 0x3F);
p += 2; p += 2;
} }
else if(ch < 0xF0 && (p + 2 <= end)) else if(ch < 0xF0 && (p + 2 <= end)) // 3 byte character
{ {
code = ((((ch & 0xF) << 6) | (p[1] & 0x3F)) << 6) | (p[2] & 0x3F); code = ((((ch & 0xF) << 6) | (p[1] & 0x3F)) << 6) | (p[2] & 0x3F);
p += 3; p += 3;
} }
else if(ch < 0x1F && (p + 3 <= end)) else if(ch < 0x1F && (p + 3 <= end)) // 4 byte character
{ {
code = ((((((ch & 0x7) << 6) | (p[1] & 0x3F)) << 6) | (p[2] & 0x3F)) << 6) | (p[3] & 0x3F); code = ((((((ch & 0x7) << 6) | (p[1] & 0x3F)) << 6) | (p[2] & 0x3F)) << 6) | (p[3] & 0x3F);
p += 4; p += 4;
} }
else else // error, go to end
{ {
p = end; p = end;
return 0; return 0;