1fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert#include "pseudolocalize.h" 2fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert 3fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringertusing namespace std; 4fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert 5fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringertstatic const char* 6fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringertpseudolocalize_char(char c) 7fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert{ 8fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert switch (c) { 9fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'a': return "\xc4\x83"; 10fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'b': return "\xcf\x84"; 11fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'c': return "\xc4\x8b"; 12fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'd': return "\xc4\x8f"; 13fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'e': return "\xc4\x99"; 14fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'f': return "\xc6\x92"; 15fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'g': return "\xc4\x9d"; 16fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'h': return "\xd1\x9b"; 17fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'i': return "\xcf\x8a"; 18fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'j': return "\xc4\xb5"; 19fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'k': return "\xc4\xb8"; 20fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'l': return "\xc4\xba"; 21fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'm': return "\xe1\xb8\xbf"; 22fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'n': return "\xd0\xb8"; 23fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'o': return "\xcf\x8c"; 24fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'p': return "\xcf\x81"; 25fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'q': return "\x51"; 26fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'r': return "\xd2\x91"; 27fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 's': return "\xc5\xa1"; 28fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 't': return "\xd1\x82"; 29fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'u': return "\xce\xb0"; 30fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'v': return "\x56"; 31fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'w': return "\xe1\xba\x85"; 32fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'x': return "\xd1\x85"; 33fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'y': return "\xe1\xbb\xb3"; 34fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'z': return "\xc5\xba"; 35fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'A': return "\xc3\x85"; 36fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'B': return "\xce\xb2"; 37fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'C': return "\xc4\x88"; 38fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'D': return "\xc4\x90"; 39fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'E': return "\xd0\x84"; 40fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'F': return "\xce\x93"; 41fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'G': return "\xc4\x9e"; 42fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'H': return "\xc4\xa6"; 43fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'I': return "\xd0\x87"; 44fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'J': return "\xc4\xb5"; 45fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'K': return "\xc4\xb6"; 46fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'L': return "\xc5\x81"; 47fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'M': return "\xe1\xb8\xbe"; 48fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'N': return "\xc5\x83"; 49fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'O': return "\xce\x98"; 50fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'P': return "\xcf\x81"; 51fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'Q': return "\x71"; 52fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'R': return "\xd0\xaf"; 53fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'S': return "\xc8\x98"; 54fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'T': return "\xc5\xa6"; 55fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'U': return "\xc5\xa8"; 56fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'V': return "\xce\xbd"; 57fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'W': return "\xe1\xba\x84"; 58fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'X': return "\xc3\x97"; 59fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'Y': return "\xc2\xa5"; 60fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'Z': return "\xc5\xbd"; 61fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert default: return NULL; 62fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } 63fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert} 64fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert 65fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert/** 66fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert * Converts characters so they look like they've been localized. 67fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert * 68fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert * Note: This leaves escape sequences untouched so they can later be 69fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert * processed by ResTable::collectString in the normal way. 70fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert */ 71fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringertstring 72fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringertpseudolocalize_string(const string& source) 73fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert{ 74fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert const char* s = source.c_str(); 75fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert string result; 76fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert const size_t I = source.length(); 77fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert for (size_t i=0; i<I; i++) { 78fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert char c = s[i]; 79fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert if (c == '\\') { 80fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert if (i<I-1) { 81fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert result += '\\'; 82fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert i++; 83fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert c = s[i]; 84fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert switch (c) { 85fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'u': 86fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert // this one takes up 5 chars 87fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert result += string(s+i, 5); 88fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert i += 4; 89fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert break; 90fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 't': 91fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case 'n': 92fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case '#': 93fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case '@': 94fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case '?': 95fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case '"': 96fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case '\'': 97fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert case '\\': 98fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert default: 99fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert result += c; 100fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert break; 101fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } 102fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } else { 103fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert result += c; 104fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } 105fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } else { 106fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert const char* p = pseudolocalize_char(c); 107fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert if (p != NULL) { 108fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert result += p; 109fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } else { 110fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert result += c; 111fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } 112fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } 113fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert } 114fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert 115fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert //printf("result=\'%s\'\n", result.c_str()); 116fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert return result; 117fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert} 118fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert 119fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert 120