120 lines
3.6 KiB
C++
120 lines
3.6 KiB
C++
#include <host/pseudolocalize.h>
|
|
|
|
using namespace std;
|
|
|
|
static const char*
|
|
pseudolocalize_char(char c)
|
|
{
|
|
switch (c) {
|
|
case 'a': return "\xc4\x83";
|
|
case 'b': return "\xcf\x84";
|
|
case 'c': return "\xc4\x8b";
|
|
case 'd': return "\xc4\x8f";
|
|
case 'e': return "\xc4\x99";
|
|
case 'f': return "\xc6\x92";
|
|
case 'g': return "\xc4\x9d";
|
|
case 'h': return "\xd1\x9b";
|
|
case 'i': return "\xcf\x8a";
|
|
case 'j': return "\xc4\xb5";
|
|
case 'k': return "\xc4\xb8";
|
|
case 'l': return "\xc4\xba";
|
|
case 'm': return "\xe1\xb8\xbf";
|
|
case 'n': return "\xd0\xb8";
|
|
case 'o': return "\xcf\x8c";
|
|
case 'p': return "\xcf\x81";
|
|
case 'q': return "\x51";
|
|
case 'r': return "\xd2\x91";
|
|
case 's': return "\xc5\xa1";
|
|
case 't': return "\xd1\x82";
|
|
case 'u': return "\xce\xb0";
|
|
case 'v': return "\x56";
|
|
case 'w': return "\xe1\xba\x85";
|
|
case 'x': return "\xd1\x85";
|
|
case 'y': return "\xe1\xbb\xb3";
|
|
case 'z': return "\xc5\xba";
|
|
case 'A': return "\xc3\x85";
|
|
case 'B': return "\xce\xb2";
|
|
case 'C': return "\xc4\x88";
|
|
case 'D': return "\xc4\x90";
|
|
case 'E': return "\xd0\x84";
|
|
case 'F': return "\xce\x93";
|
|
case 'G': return "\xc4\x9e";
|
|
case 'H': return "\xc4\xa6";
|
|
case 'I': return "\xd0\x87";
|
|
case 'J': return "\xc4\xb5";
|
|
case 'K': return "\xc4\xb6";
|
|
case 'L': return "\xc5\x81";
|
|
case 'M': return "\xe1\xb8\xbe";
|
|
case 'N': return "\xc5\x83";
|
|
case 'O': return "\xce\x98";
|
|
case 'P': return "\xcf\x81";
|
|
case 'Q': return "\x71";
|
|
case 'R': return "\xd0\xaf";
|
|
case 'S': return "\xc8\x98";
|
|
case 'T': return "\xc5\xa6";
|
|
case 'U': return "\xc5\xa8";
|
|
case 'V': return "\xce\xbd";
|
|
case 'W': return "\xe1\xba\x84";
|
|
case 'X': return "\xc3\x97";
|
|
case 'Y': return "\xc2\xa5";
|
|
case 'Z': return "\xc5\xbd";
|
|
default: return NULL;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Converts characters so they look like they've been localized.
|
|
*
|
|
* Note: This leaves escape sequences untouched so they can later be
|
|
* processed by ResTable::collectString in the normal way.
|
|
*/
|
|
string
|
|
pseudolocalize_string(const string& source)
|
|
{
|
|
const char* s = source.c_str();
|
|
string result;
|
|
const size_t I = source.length();
|
|
for (size_t i=0; i<I; i++) {
|
|
char c = s[i];
|
|
if (c == '\\') {
|
|
if (i<I-1) {
|
|
result += '\\';
|
|
i++;
|
|
c = s[i];
|
|
switch (c) {
|
|
case 'u':
|
|
// this one takes up 5 chars
|
|
result += string(s+i, 5);
|
|
i += 4;
|
|
break;
|
|
case 't':
|
|
case 'n':
|
|
case '#':
|
|
case '@':
|
|
case '?':
|
|
case '"':
|
|
case '\'':
|
|
case '\\':
|
|
default:
|
|
result += c;
|
|
break;
|
|
}
|
|
} else {
|
|
result += c;
|
|
}
|
|
} else {
|
|
const char* p = pseudolocalize_char(c);
|
|
if (p != NULL) {
|
|
result += p;
|
|
} else {
|
|
result += c;
|
|
}
|
|
}
|
|
}
|
|
|
|
//printf("result=\'%s\'\n", result.c_str());
|
|
return result;
|
|
}
|
|
|
|
|