add B/T/K language markers

This commit is contained in:
Martin Michelsen
2024-02-20 22:59:53 -08:00
parent 29baaf2d95
commit 4e4ba5650d
5 changed files with 56 additions and 16 deletions
+33 -2
View File
@@ -150,7 +150,10 @@ string tt_encode_marked_optional(const string& utf8, uint8_t default_language, b
string tt_encode_marked(const string& utf8, uint8_t default_language, bool is_utf16) {
if (is_utf16) {
return tt_utf8_to_utf16((default_language ? "\tE" : "\tJ") + utf8);
string to_encode = "\t";
to_encode += marker_for_language_code(default_language);
to_encode += utf8;
return tt_utf8_to_utf16(to_encode);
} else {
if (default_language) {
try {
@@ -171,7 +174,7 @@ string tt_encode_marked(const string& utf8, uint8_t default_language, bool is_ut
string tt_decode_marked(const string& data, uint8_t default_language, bool is_utf16) {
if (is_utf16) {
string ret = tt_utf16_to_utf8(data);
if (ret.size() >= 2 && ret[0] == '\t' && (ret[1] == 'E' || ret[1] == 'J')) {
if (ret.size() >= 2 && ret[0] == '\t' && is_language_marker_utf16(ret[1])) {
ret = ret.substr(2);
}
return ret;
@@ -336,3 +339,31 @@ string escape_player_name(const string& name) {
return remove_color(name);
}
}
char marker_for_language_code(uint8_t language_code) {
switch (language_code) {
case 0:
return 'J';
case 1:
case 2:
case 3:
case 4:
return 'E';
case 5:
return 'B';
case 6:
return 'T';
case 7:
return 'K';
default:
return 'E';
}
}
bool is_language_marker_sjis_8859(char marker) {
return (marker == 'J' || marker == 'E');
}
bool is_language_marker_utf16(char marker) {
return (marker == 'J' || marker == 'E' || marker == 'B' || marker == 'T' || marker == 'K');
}