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