eliminate using namespace
This commit is contained in:
+47
-49
@@ -9,15 +9,13 @@
|
||||
#include <phosg/Strings.hh>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const iconv_t TextTranscoder::INVALID_IC = (iconv_t)(-1);
|
||||
const size_t TextTranscoder::FAILURE_RESULT = static_cast<size_t>(-1);
|
||||
|
||||
TextTranscoder::TextTranscoder(const char* to, const char* from) : ic(iconv_open(to, from)) {
|
||||
if (ic == this->INVALID_IC) {
|
||||
string error_str = phosg::string_for_error(errno);
|
||||
throw runtime_error(std::format("failed to initialize {} -> {} text converter: {}", from, to, error_str));
|
||||
throw std::runtime_error(std::format("failed to initialize {} -> {} text converter: {}",
|
||||
from, to, phosg::string_for_error(errno)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,32 +43,32 @@ TextTranscoder::Result TextTranscoder::operator()(
|
||||
if (ret == this->FAILURE_RESULT) {
|
||||
switch (errno) {
|
||||
case EILSEQ: {
|
||||
string custom_result = this->on_untranslatable(&src, &src_bytes);
|
||||
std::string custom_result = this->on_untranslatable(&src, &src_bytes);
|
||||
if (custom_result.empty()) {
|
||||
throw runtime_error(std::format("untranslatable character at position 0x{:X}", bytes_read));
|
||||
throw std::runtime_error(std::format("untranslatable character at position 0x{:X}", bytes_read));
|
||||
} else if (custom_result.size() <= dest_bytes) {
|
||||
memcpy(dest, custom_result.data(), custom_result.size());
|
||||
dest = reinterpret_cast<char*>(dest) + custom_result.size();
|
||||
dest_bytes -= custom_result.size();
|
||||
} else if (!truncate_oversize_result) {
|
||||
throw runtime_error("string does not fit in buffer");
|
||||
throw std::runtime_error("string does not fit in buffer");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EINVAL:
|
||||
throw runtime_error(std::format("incomplete multibyte sequence at position 0x{:X}", bytes_read));
|
||||
throw std::runtime_error(std::format("incomplete multibyte sequence at position 0x{:X}", bytes_read));
|
||||
case E2BIG:
|
||||
if (!truncate_oversize_result) {
|
||||
throw runtime_error("string does not fit in buffer");
|
||||
throw std::runtime_error("string does not fit in buffer");
|
||||
} else {
|
||||
src_bytes = 0;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw runtime_error("transcoding failed: " + phosg::string_for_error(errno));
|
||||
throw std::runtime_error("transcoding failed: " + phosg::string_for_error(errno));
|
||||
}
|
||||
} else if (src_bytes_before == src_bytes) {
|
||||
throw runtime_error("could not transcode any characters");
|
||||
throw std::runtime_error("could not transcode any characters");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,15 +77,15 @@ TextTranscoder::Result TextTranscoder::operator()(
|
||||
return Result{.bytes_read = bytes_read, .bytes_written = bytes_written};
|
||||
}
|
||||
|
||||
string TextTranscoder::operator()(const void* src, size_t src_bytes) {
|
||||
std::string TextTranscoder::operator()(const void* src, size_t src_bytes) {
|
||||
// Clear any conversion state left over from the previous call
|
||||
iconv(this->ic, nullptr, nullptr, nullptr, nullptr);
|
||||
|
||||
const void* orig_src = src;
|
||||
deque<string> blocks;
|
||||
std::deque<std::string> blocks;
|
||||
while (src_bytes > 0) {
|
||||
// Assume 2x input size on average, but always allocate at least 8 bytes
|
||||
string& block = blocks.emplace_back(max<size_t>((src_bytes << 1), 8), '\0');
|
||||
std::string& block = blocks.emplace_back(std::max<size_t>((src_bytes << 1), 8), '\0');
|
||||
char* dest = block.data();
|
||||
size_t dest_size = block.size();
|
||||
size_t src_bytes_before = src_bytes;
|
||||
@@ -103,29 +101,29 @@ string TextTranscoder::operator()(const void* src, size_t src_bytes) {
|
||||
if (ret == this->FAILURE_RESULT) {
|
||||
switch (errno) {
|
||||
case EILSEQ: {
|
||||
string custom_result = this->on_untranslatable(&src, &src_bytes);
|
||||
std::string custom_result = this->on_untranslatable(&src, &src_bytes);
|
||||
if (custom_result.empty()) {
|
||||
throw runtime_error(std::format("untranslatable character at position {}", bytes_read));
|
||||
throw std::runtime_error(std::format("untranslatable character at position {}", bytes_read));
|
||||
}
|
||||
blocks.emplace_back(std::move(custom_result));
|
||||
break;
|
||||
}
|
||||
case EINVAL:
|
||||
throw runtime_error(std::format("incomplete multibyte sequence at position {}", bytes_read));
|
||||
throw std::runtime_error(std::format("incomplete multibyte sequence at position {}", bytes_read));
|
||||
case E2BIG:
|
||||
break;
|
||||
default:
|
||||
throw runtime_error("transcoding failed: " + phosg::string_for_error(errno));
|
||||
throw std::runtime_error("transcoding failed: " + phosg::string_for_error(errno));
|
||||
}
|
||||
} else if (src_bytes_before == src_bytes) {
|
||||
throw runtime_error("could not transcode any characters");
|
||||
throw std::runtime_error("could not transcode any characters");
|
||||
}
|
||||
}
|
||||
|
||||
return phosg::join(blocks, "");
|
||||
}
|
||||
|
||||
string TextTranscoder::operator()(const string& data) {
|
||||
std::string TextTranscoder::operator()(const std::string& data) {
|
||||
return this->operator()(data.data(), data.size());
|
||||
}
|
||||
|
||||
@@ -136,7 +134,7 @@ std::string TextTranscoder::on_untranslatable(const void**, size_t*) const {
|
||||
TextTranscoderCustomSJISToUTF8::TextTranscoderCustomSJISToUTF8() : TextTranscoder("UTF-8", "SHIFT_JIS") {}
|
||||
|
||||
std::string encode_utf8_char(uint32_t ch) {
|
||||
string ret;
|
||||
std::string ret;
|
||||
if (ch < 0x80) {
|
||||
ret.push_back(ch);
|
||||
} else if (ch < 0x800) {
|
||||
@@ -152,14 +150,14 @@ std::string encode_utf8_char(uint32_t ch) {
|
||||
ret.push_back(0x80 | ((ch >> 6) & 0x3F));
|
||||
ret.push_back(0x80 | (ch & 0x3F));
|
||||
} else {
|
||||
throw runtime_error("unencodable Unicode code point");
|
||||
throw std::runtime_error("unencodable Unicode code point");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint32_t decode_utf8_char(const void** vdata, size_t* size) {
|
||||
if (*size == 0) {
|
||||
throw runtime_error("incomplete UTF-8 character");
|
||||
throw std::runtime_error("incomplete UTF-8 character");
|
||||
}
|
||||
|
||||
const uint8_t* data = reinterpret_cast<const uint8_t*>(*vdata);
|
||||
@@ -169,27 +167,27 @@ uint32_t decode_utf8_char(const void** vdata, size_t* size) {
|
||||
return *data;
|
||||
} else if ((data[0] & 0xE0) == 0xC0) {
|
||||
if ((*size < 2) || ((data[1] & 0xC0) != 0x80)) {
|
||||
throw runtime_error("incomplete UTF-8 character");
|
||||
throw std::runtime_error("incomplete UTF-8 character");
|
||||
}
|
||||
(*size) -= 2;
|
||||
*vdata = data + 2;
|
||||
return ((data[0] & 0x1F) << 6) | (data[1] & 0x3F);
|
||||
} else if ((data[0] & 0xF0) == 0xE0) {
|
||||
if ((*size < 3) || ((data[1] & 0xC0) != 0x80) || ((data[2] & 0xC0) != 0x80)) {
|
||||
throw runtime_error("incomplete UTF-8 character");
|
||||
throw std::runtime_error("incomplete UTF-8 character");
|
||||
}
|
||||
(*size) -= 3;
|
||||
*vdata = data + 3;
|
||||
return ((data[0] & 0x0F) << 12) | ((data[1] & 0x3F) << 6) | (data[2] & 0x3F);
|
||||
} else if ((data[0] & 0xF8) == 0xF0) {
|
||||
if ((*size < 4) || ((data[1] & 0xC0) != 0x80) || ((data[2] & 0xC0) != 0x80) || ((data[3] & 0xC0) != 0x80)) {
|
||||
throw runtime_error("incomplete UTF-8 character");
|
||||
throw std::runtime_error("incomplete UTF-8 character");
|
||||
}
|
||||
(*size) -= 4;
|
||||
*vdata = data + 4;
|
||||
return ((data[0] & 0x07) << 18) | ((data[1] & 0x3F) << 12) | ((data[2] & 0x3F) << 6) | (data[3] & 0x3F);
|
||||
} else {
|
||||
throw runtime_error("invalid UTF-8 character");
|
||||
throw std::runtime_error("invalid UTF-8 character");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +206,7 @@ std::string TextTranscoderCustomSJISToUTF8::on_untranslatable(const void** vsrc,
|
||||
return "";
|
||||
}
|
||||
|
||||
string ret;
|
||||
std::string ret;
|
||||
if (src[1] < 0x40) {
|
||||
return "";
|
||||
} else if (src[1] == 0x40) { // F040 -> U+2665
|
||||
@@ -236,7 +234,7 @@ std::string TextTranscoderUTF8ToCustomSJIS::on_untranslatable(const void** src,
|
||||
uint32_t ch;
|
||||
try {
|
||||
ch = decode_utf8_char(src, size);
|
||||
} catch (const runtime_error&) {
|
||||
} catch (const std::runtime_error&) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -245,11 +243,11 @@ std::string TextTranscoderUTF8ToCustomSJIS::on_untranslatable(const void** src,
|
||||
} else if (ch == 0x24EA) { // U+24EA -> F041
|
||||
return "\xF0\x41";
|
||||
} else if (ch >= 0x2460 && ch <= 0x2468) { // U+2460-U+2468 -> F042-F04A
|
||||
string ret("\xF0");
|
||||
std::string ret("\xF0");
|
||||
ret.push_back(0x42 + (ch - 0x2460));
|
||||
return ret;
|
||||
} else if (ch >= 0x1D4D0 && ch <= 0x1D4E9) { // U+1D4D0-U+1D4E9 -> F04B-F064
|
||||
string ret("\xF0");
|
||||
std::string ret("\xF0");
|
||||
ret.push_back(0x4B + (ch - 0x1D4D0));
|
||||
return ret;
|
||||
} else {
|
||||
@@ -270,29 +268,29 @@ TextTranscoder tt_utf8_to_utf16("UTF-16LE", "UTF-8");
|
||||
TextTranscoder tt_ascii_to_utf8("UTF-8", "ASCII");
|
||||
TextTranscoder tt_utf8_to_ascii("ASCII", "UTF-8");
|
||||
|
||||
string tt_encode_marked_optional(const string& utf8, Language default_language, bool is_utf16) {
|
||||
std::string tt_encode_marked_optional(const std::string& utf8, Language default_language, bool is_utf16) {
|
||||
if (is_utf16) {
|
||||
return tt_utf8_to_utf16(utf8);
|
||||
} else {
|
||||
if (default_language == Language::JAPANESE) {
|
||||
try {
|
||||
return tt_utf8_to_sega_sjis(utf8);
|
||||
} catch (const exception& e) {
|
||||
} catch (const std::exception& e) {
|
||||
return "\tE" + tt_utf8_to_8859(utf8);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
return tt_utf8_to_8859(utf8);
|
||||
} catch (const exception& e) {
|
||||
} catch (const std::exception& e) {
|
||||
return "\tJ" + tt_utf8_to_sega_sjis(utf8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string tt_encode_marked(const string& utf8, Language default_language, bool is_utf16) {
|
||||
std::string tt_encode_marked(const std::string& utf8, Language default_language, bool is_utf16) {
|
||||
if (is_utf16) {
|
||||
string to_encode = "\t";
|
||||
std::string to_encode = "\t";
|
||||
to_encode += marker_for_language(default_language);
|
||||
to_encode += utf8;
|
||||
return tt_utf8_to_utf16(to_encode);
|
||||
@@ -300,22 +298,22 @@ string tt_encode_marked(const string& utf8, Language default_language, bool is_u
|
||||
if (default_language == Language::JAPANESE) {
|
||||
try {
|
||||
return "\tJ" + tt_utf8_to_sega_sjis(utf8);
|
||||
} catch (const exception& e) {
|
||||
} catch (const std::exception& e) {
|
||||
return "\tE" + tt_utf8_to_8859(utf8);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
return "\tE" + tt_utf8_to_8859(utf8);
|
||||
} catch (const exception& e) {
|
||||
} catch (const std::exception& e) {
|
||||
return "\tJ" + tt_utf8_to_sega_sjis(utf8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string tt_decode_marked(const string& data, Language default_language, bool is_utf16) {
|
||||
std::string tt_decode_marked(const std::string& data, Language default_language, bool is_utf16) {
|
||||
if (is_utf16) {
|
||||
string ret = tt_utf16_to_utf8(data);
|
||||
std::string ret = tt_utf16_to_utf8(data);
|
||||
if (ret.size() >= 2 && ret[0] == '\t' && is_language_marker_utf16(ret[1])) {
|
||||
ret = ret.substr(2);
|
||||
}
|
||||
@@ -332,19 +330,19 @@ string tt_decode_marked(const string& data, Language default_language, bool is_u
|
||||
}
|
||||
}
|
||||
|
||||
string add_language_marker(const string& s, char marker) {
|
||||
std::string add_language_marker(const std::string& s, char marker) {
|
||||
if ((s.size() >= 2) && (s[0] == '\t') && (s[1] != 'C')) {
|
||||
return s;
|
||||
}
|
||||
|
||||
string ret;
|
||||
std::string ret;
|
||||
ret.push_back('\t');
|
||||
ret.push_back(marker);
|
||||
ret += s;
|
||||
return ret;
|
||||
}
|
||||
|
||||
string remove_language_marker(const string& s) {
|
||||
std::string remove_language_marker(const std::string& s) {
|
||||
if ((s.size() < 2) || (s[0] != '\t') || (s[1] == 'C')) {
|
||||
return s;
|
||||
}
|
||||
@@ -394,7 +392,7 @@ size_t add_color_inplace(char* a, size_t max_chars) {
|
||||
return d - orig_d;
|
||||
}
|
||||
|
||||
void add_color_inplace(string& s) {
|
||||
void add_color_inplace(std::string& s) {
|
||||
s.resize(add_color_inplace(s.data(), s.size()));
|
||||
}
|
||||
|
||||
@@ -425,7 +423,7 @@ void add_color(phosg::StringWriter& w, const char* src, size_t max_input_chars)
|
||||
}
|
||||
}
|
||||
|
||||
string add_color(const string& s) {
|
||||
std::string add_color(const std::string& s) {
|
||||
phosg::StringWriter w;
|
||||
add_color(w, s.data(), s.size());
|
||||
return std::move(w.str());
|
||||
@@ -453,14 +451,14 @@ void remove_color(phosg::StringWriter& w, const char* src, size_t max_input_char
|
||||
}
|
||||
}
|
||||
|
||||
string remove_color(const string& s) {
|
||||
std::string remove_color(const std::string& s) {
|
||||
phosg::StringWriter w;
|
||||
remove_color(w, s.data(), s.size());
|
||||
return std::move(w.str());
|
||||
}
|
||||
|
||||
string strip_color(const string& s) {
|
||||
string ret;
|
||||
std::string strip_color(const std::string& s) {
|
||||
std::string ret;
|
||||
for (size_t r = 0; r < s.size(); r++) {
|
||||
if ((s[r] == '$' || s[r] == '\t') &&
|
||||
(s[r + 1] == 'C') && (((s[r + 2] >= '0') && (s[r + 2] <= '9')) || (s[r + 2] == 'G') || (s[r + 2] == 'a'))) {
|
||||
@@ -472,7 +470,7 @@ string strip_color(const string& s) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
string escape_player_name(const string& name) {
|
||||
std::string escape_player_name(const std::string& name) {
|
||||
if (name.size() > 2 && name[0] == '\t' && name[1] != 'C') {
|
||||
return remove_color(name.substr(2));
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user