| #include "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; | |
| } | |