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