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


