Added stringutil module
This commit is contained in:
parent
d5dc134737
commit
ee52e412fa
69
src/util/stringutil.cpp
Normal file
69
src/util/stringutil.cpp
Normal file
@ -0,0 +1,69 @@
|
||||
#include "stringutil.h"
|
||||
|
||||
#include <vector>
|
||||
#include <locale>
|
||||
#include <sstream>
|
||||
|
||||
using std::vector;
|
||||
using std::string;
|
||||
using std::stringstream;
|
||||
using std::wstring;
|
||||
using std::wstringstream;
|
||||
|
||||
wstring lfill(wstring s, int length, wchar_t c) {
|
||||
if (s.length() >= length) {
|
||||
return s;
|
||||
}
|
||||
wstringstream ss;
|
||||
for (int i = 0; i < length-s.length(); i++) {
|
||||
ss << c;
|
||||
}
|
||||
ss << s;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
wstring rfill(wstring s, int length, wchar_t c) {
|
||||
if (s.length() >= length) {
|
||||
return s;
|
||||
}
|
||||
wstringstream ss;
|
||||
ss << s;
|
||||
for (int i = 0; i < length-s.length(); i++) {
|
||||
ss << c;
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
uint encode_utf8(uint c, ubyte* bytes) {
|
||||
if (c < 0x80) {
|
||||
bytes[0] = c >> 0 & 0x7F | 0x00;
|
||||
return 1;
|
||||
} else if (c < 0x0800) {
|
||||
bytes[0] = c >> 6 & 0x1F | 0xC0;
|
||||
bytes[1] = c >> 0 & 0x3F | 0x80;
|
||||
return 2;
|
||||
} else if (c < 0x010000) {
|
||||
bytes[0] = c >> 12 & 0x0F | 0xE0;
|
||||
bytes[1] = c >> 6 & 0x3F | 0x80;
|
||||
bytes[2] = c >> 0 & 0x3F | 0x80;
|
||||
return 3;
|
||||
} else {
|
||||
bytes[0] = c >> 18 & 0x07 | 0xF0;
|
||||
bytes[1] = c >> 12 & 0x3F | 0x80;
|
||||
bytes[2] = c >> 6 & 0x3F | 0x80;
|
||||
bytes[3] = c >> 0 & 0x3F | 0x80;
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
string wstr2str_utf8(const wstring ws) {
|
||||
vector<char> chars;
|
||||
char buffer[4];
|
||||
for (wchar_t wc : ws) {
|
||||
uint size = encode_utf8((uint)wc, (ubyte*)buffer);
|
||||
for (uint i = 0; i < size; i++) {
|
||||
chars.push_back(buffer[i]);
|
||||
}
|
||||
}
|
||||
return string(chars.data(), chars.size());
|
||||
}
|
||||
13
src/util/stringutil.h
Normal file
13
src/util/stringutil.h
Normal file
@ -0,0 +1,13 @@
|
||||
#ifndef UTIL_STRINGUTIL_H_
|
||||
#define UTIL_STRINGUTIL_H_
|
||||
|
||||
#include <string>
|
||||
#include "../typedefs.h"
|
||||
|
||||
extern std::wstring lfill(std::wstring s, int length, wchar_t c);
|
||||
extern std::wstring rfill(std::wstring s, int length, wchar_t c);
|
||||
|
||||
extern uint encode_utf8(uint c, ubyte* bytes);
|
||||
extern std::string wstr2str_utf8(const std::wstring ws);
|
||||
|
||||
#endif // UTIL_STRINGUTIL_H_
|
||||
Loading…
x
Reference in New Issue
Block a user