diff options
author | Tomer Shalev <shalev.tomer@gmail.com> | 2009-11-28 17:07:57 +0000 |
---|---|---|
committer | Tomer Shalev <shalev.tomer@gmail.com> | 2009-11-28 17:07:57 +0000 |
commit | c2617dc4ed76eceaefd4ca39c0159498eb5e9762 (patch) | |
tree | 72ba77525fae0b356e6976175ddfe114d5a12c02 /firmware | |
parent | c074c76211621ab15518649a4a835aeb5798bf29 (diff) | |
download | rockbox-c2617dc4ed76eceaefd4ca39c0159498eb5e9762.tar.gz rockbox-c2617dc4ed76eceaefd4ca39c0159498eb5e9762.zip |
Diacritic display enhancements
- Use the fact that unicode code currently does not support chars above 0xffff
(see utf8decode()), and change diacritic database's char code type to
unsigned short from int. Also comment out database entries above unsupported
range.
- Use const when possible.
- Iterate over buffer using the buffer's pointer, thus avoiding usage of some
variables, and avoiding multiple access to the same array item.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23776 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/diacritic.c | 610 | ||||
-rw-r--r-- | firmware/drivers/lcd-bitmap-common.c | 33 | ||||
-rw-r--r-- | firmware/include/diacritic.h | 2 |
3 files changed, 326 insertions, 319 deletions
diff --git a/firmware/drivers/diacritic.c b/firmware/drivers/diacritic.c index 728492a06e..576fe174e6 100644 --- a/firmware/drivers/diacritic.c +++ b/firmware/drivers/diacritic.c | |||
@@ -26,309 +26,319 @@ | |||
26 | #include "diacritic.h" | 26 | #include "diacritic.h" |
27 | #include "system.h" | 27 | #include "system.h" |
28 | 28 | ||
29 | #define DIAC_FLAG_DIACRITIC (1 << 31) | 29 | #define DIAC_FLAG_NONE 0 |
30 | #define DIAC_FLAG_RTL (1 << 30) | 30 | #define DIAC_FLAG_DIACRITIC (1 << 0) |
31 | #define DIAC_MASK 0x000FFFFF | 31 | #define DIAC_FLAG_RTL (1 << 1) |
32 | 32 | ||
33 | #define DIAC_VAL(i) (diac_range[(i)] & DIAC_MASK) | 33 | #define DIAC_VAL(i) (diac_ranges[(i)].last) |
34 | #define DIAC_IS_DIACRITIC(i) ((diac_range[(i)] & DIAC_FLAG_DIACRITIC) ? 1 : 0) | 34 | #define DIAC_IS_DIACRITIC(i) (diac_ranges[(i)].flags & DIAC_FLAG_DIACRITIC) |
35 | #define DIAC_IS_RTL(i) ((diac_range[(i)] & DIAC_FLAG_RTL) ? 1 : 0) | 35 | #define DIAC_IS_RTL(i) (diac_ranges[(i)].flags & DIAC_FLAG_RTL) |
36 | #define DIAC_NUM_RANGES (ARRAYLEN(diac_range)) | 36 | #define DIAC_NUM_RANGES (ARRAYLEN(diac_ranges)) |
37 | |||
38 | struct diac_range | ||
39 | { | ||
40 | unsigned short last; | ||
41 | unsigned char flags; | ||
42 | }; | ||
37 | 43 | ||
38 | /* Sorted by Unicode value */ | 44 | /* Sorted by Unicode value */ |
39 | static const int diac_range[] = | 45 | static const struct diac_range diac_ranges[] = |
40 | { | 46 | { |
41 | 0x00000, | 47 | { 0x0000, DIAC_FLAG_NONE }, |
42 | 0x002ff, | 48 | { 0x02ff, DIAC_FLAG_NONE }, |
43 | 0x0036f | DIAC_FLAG_DIACRITIC, /* Combining Diacritical Marks */ | 49 | { 0x036f, DIAC_FLAG_DIACRITIC }, /* Combining Diacritical Marks */ |
44 | 0x00482, | 50 | { 0x0482, DIAC_FLAG_NONE }, |
45 | 0x00489 | DIAC_FLAG_DIACRITIC, /* Cyrillic */ | 51 | { 0x0489, DIAC_FLAG_DIACRITIC }, /* Cyrillic */ |
46 | 0x00590, | 52 | { 0x0590, DIAC_FLAG_NONE }, |
47 | 0x005bd | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Hebrew */ | 53 | { 0x05bd, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Hebrew */ |
48 | 0x005be | DIAC_FLAG_RTL, | 54 | { 0x05be, DIAC_FLAG_RTL }, |
49 | 0x005bf | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Hebrew */ | 55 | { 0x05bf, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Hebrew */ |
50 | 0x005c0 | DIAC_FLAG_RTL, | 56 | { 0x05c0, DIAC_FLAG_RTL }, |
51 | 0x005c2 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Hebrew */ | 57 | { 0x05c2, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Hebrew */ |
52 | 0x005c3 | DIAC_FLAG_RTL, | 58 | { 0x05c3, DIAC_FLAG_RTL }, |
53 | 0x005c5 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Hebrew */ | 59 | { 0x05c5, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Hebrew */ |
54 | 0x005c6 | DIAC_FLAG_RTL, | 60 | { 0x05c6, DIAC_FLAG_RTL }, |
55 | 0x005c7 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Hebrew */ | 61 | { 0x05c7, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Hebrew */ |
56 | 0x0060f | DIAC_FLAG_RTL, | 62 | { 0x060f, DIAC_FLAG_RTL }, |
57 | 0x0061a | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 63 | { 0x061a, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
58 | 0x0064a | DIAC_FLAG_RTL, | 64 | { 0x064a, DIAC_FLAG_RTL }, |
59 | 0x0065e | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 65 | { 0x065e, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
60 | 0x0066f | DIAC_FLAG_RTL, | 66 | { 0x066f, DIAC_FLAG_RTL }, |
61 | 0x00670 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 67 | { 0x0670, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
62 | 0x006d5 | DIAC_FLAG_RTL, | 68 | { 0x06d5, DIAC_FLAG_RTL }, |
63 | 0x006dc | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 69 | { 0x06dc, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
64 | 0x006de | DIAC_FLAG_RTL, | 70 | { 0x06de, DIAC_FLAG_RTL }, |
65 | 0x006e4 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 71 | { 0x06e4, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
66 | 0x006e6 | DIAC_FLAG_RTL, | 72 | { 0x06e6, DIAC_FLAG_RTL }, |
67 | 0x006e8 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 73 | { 0x06e8, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
68 | 0x006e9 | DIAC_FLAG_RTL, | 74 | { 0x06e9, DIAC_FLAG_RTL }, |
69 | 0x006ed | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Arabic */ | 75 | { 0x06ed, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Arabic */ |
70 | 0x00710 | DIAC_FLAG_RTL, | 76 | { 0x0710, DIAC_FLAG_RTL }, |
71 | 0x00711 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Syriac */ | 77 | { 0x0711, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Syriac */ |
72 | 0x0072f | DIAC_FLAG_RTL, | 78 | { 0x072f, DIAC_FLAG_RTL }, |
73 | 0x0074a | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Syriac */ | 79 | { 0x074a, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Syriac */ |
74 | 0x007a5 | DIAC_FLAG_RTL, | 80 | { 0x07a5, DIAC_FLAG_RTL }, |
75 | 0x007b0 | DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL, /* Thaana */ | 81 | { 0x07b0, DIAC_FLAG_DIACRITIC | DIAC_FLAG_RTL }, /* Thaana */ |
76 | 0x007c0 | DIAC_FLAG_RTL, | 82 | { 0x07c0, DIAC_FLAG_RTL }, |
77 | 0x007ea, | 83 | { 0x07ea, DIAC_FLAG_NONE }, |
78 | 0x007f3 | DIAC_FLAG_DIACRITIC, /* NKo */ | 84 | { 0x07f3, DIAC_FLAG_DIACRITIC }, /* NKo */ |
79 | 0x00815, | 85 | { 0x0815, DIAC_FLAG_NONE }, |
80 | 0x00819 | DIAC_FLAG_DIACRITIC, /* Samaritan */ | 86 | { 0x0819, DIAC_FLAG_DIACRITIC }, /* Samaritan */ |
81 | 0x0081a, | 87 | { 0x081a, DIAC_FLAG_NONE }, |
82 | 0x00823 | DIAC_FLAG_DIACRITIC, /* Samaritan */ | 88 | { 0x0823, DIAC_FLAG_DIACRITIC }, /* Samaritan */ |
83 | 0x00824, | 89 | { 0x0824, DIAC_FLAG_NONE }, |
84 | 0x00827 | DIAC_FLAG_DIACRITIC, /* Samaritan */ | 90 | { 0x0827, DIAC_FLAG_DIACRITIC }, /* Samaritan */ |
85 | 0x00828, | 91 | { 0x0828, DIAC_FLAG_NONE }, |
86 | 0x0082d | DIAC_FLAG_DIACRITIC, /* Samaritan */ | 92 | { 0x082d, DIAC_FLAG_DIACRITIC }, /* Samaritan */ |
87 | 0x008ff, | 93 | { 0x08ff, DIAC_FLAG_NONE }, |
88 | 0x00903 | DIAC_FLAG_DIACRITIC, /* Devanagari */ | 94 | { 0x0903, DIAC_FLAG_DIACRITIC }, /* Devanagari */ |
89 | 0x0093b, | 95 | { 0x093b, DIAC_FLAG_NONE }, |
90 | 0x0093c | DIAC_FLAG_DIACRITIC, /* Devanagari */ | 96 | { 0x093c, DIAC_FLAG_DIACRITIC }, /* Devanagari */ |
91 | 0x0093d, | 97 | { 0x093d, DIAC_FLAG_NONE }, |
92 | 0x0094e | DIAC_FLAG_DIACRITIC, /* Devanagari */ | 98 | { 0x094e, DIAC_FLAG_DIACRITIC }, /* Devanagari */ |
93 | 0x00950, | 99 | { 0x0950, DIAC_FLAG_NONE }, |
94 | 0x00955 | DIAC_FLAG_DIACRITIC, /* Devanagari */ | 100 | { 0x0955, DIAC_FLAG_DIACRITIC }, /* Devanagari */ |
95 | 0x00961, | 101 | { 0x0961, DIAC_FLAG_NONE }, |
96 | 0x00963 | DIAC_FLAG_DIACRITIC, /* Devanagari */ | 102 | { 0x0963, DIAC_FLAG_DIACRITIC }, /* Devanagari */ |
97 | 0x00980, | 103 | { 0x0980, DIAC_FLAG_NONE }, |
98 | 0x00983 | DIAC_FLAG_DIACRITIC, /* Bengali */ | 104 | { 0x0983, DIAC_FLAG_DIACRITIC }, /* Bengali */ |
99 | 0x009bb, | 105 | { 0x09bb, DIAC_FLAG_NONE }, |
100 | 0x009bc | DIAC_FLAG_DIACRITIC, /* Bengali */ | 106 | { 0x09bc, DIAC_FLAG_DIACRITIC }, /* Bengali */ |
101 | 0x009bd, | 107 | { 0x09bd, DIAC_FLAG_NONE }, |
102 | 0x009cd | DIAC_FLAG_DIACRITIC, /* Bengali */ | 108 | { 0x09cd, DIAC_FLAG_DIACRITIC }, /* Bengali */ |
103 | 0x009d6, | 109 | { 0x09d6, DIAC_FLAG_NONE }, |
104 | 0x009d7 | DIAC_FLAG_DIACRITIC, /* Bengali */ | 110 | { 0x09d7, DIAC_FLAG_DIACRITIC }, /* Bengali */ |
105 | 0x009e1, | 111 | { 0x09e1, DIAC_FLAG_NONE }, |
106 | 0x009e3 | DIAC_FLAG_DIACRITIC, /* Bengali */ | 112 | { 0x09e3, DIAC_FLAG_DIACRITIC }, /* Bengali */ |
107 | 0x00a00, | 113 | { 0x0a00, DIAC_FLAG_NONE }, |
108 | 0x00a03 | DIAC_FLAG_DIACRITIC, /* Gurmukhi */ | 114 | { 0x0a03, DIAC_FLAG_DIACRITIC }, /* Gurmukhi */ |
109 | 0x00a3b, | 115 | { 0x0a3b, DIAC_FLAG_NONE }, |
110 | 0x00a51 | DIAC_FLAG_DIACRITIC, /* Gurmukhi */ | 116 | { 0x0a51, DIAC_FLAG_DIACRITIC }, /* Gurmukhi */ |
111 | 0x00a6f, | 117 | { 0x0a6f, DIAC_FLAG_NONE }, |
112 | 0x00a71 | DIAC_FLAG_DIACRITIC, /* Gurmukhi */ | 118 | { 0x0a71, DIAC_FLAG_DIACRITIC }, /* Gurmukhi */ |
113 | 0x00a74, | 119 | { 0x0a74, DIAC_FLAG_NONE }, |
114 | 0x00a75 | DIAC_FLAG_DIACRITIC, /* Gurmukhi */ | 120 | { 0x0a75, DIAC_FLAG_DIACRITIC }, /* Gurmukhi */ |
115 | 0x00a80, | 121 | { 0x0a80, DIAC_FLAG_NONE }, |
116 | 0x00a83 | DIAC_FLAG_DIACRITIC, /* Gujarati */ | 122 | { 0x0a83, DIAC_FLAG_DIACRITIC }, /* Gujarati */ |
117 | 0x00abb, | 123 | { 0x0abb, DIAC_FLAG_NONE }, |
118 | 0x00abc | DIAC_FLAG_DIACRITIC, /* Gujarati */ | 124 | { 0x0abc, DIAC_FLAG_DIACRITIC }, /* Gujarati */ |
119 | 0x00abd, | 125 | { 0x0abd, DIAC_FLAG_NONE }, |
120 | 0x00acd | DIAC_FLAG_DIACRITIC, /* Gujarati */ | 126 | { 0x0acd, DIAC_FLAG_DIACRITIC }, /* Gujarati */ |
121 | 0x00ae1, | 127 | { 0x0ae1, DIAC_FLAG_NONE }, |
122 | 0x00ae3 | DIAC_FLAG_DIACRITIC, /* Gujarati */ | 128 | { 0x0ae3, DIAC_FLAG_DIACRITIC }, /* Gujarati */ |
123 | 0x00b00, | 129 | { 0x0b00, DIAC_FLAG_NONE }, |
124 | 0x00b03 | DIAC_FLAG_DIACRITIC, /* Oriya */ | 130 | { 0x0b03, DIAC_FLAG_DIACRITIC }, /* Oriya */ |
125 | 0x00b3b, | 131 | { 0x0b3b, DIAC_FLAG_NONE }, |
126 | 0x00b3c | DIAC_FLAG_DIACRITIC, /* Oriya */ | 132 | { 0x0b3c, DIAC_FLAG_DIACRITIC }, /* Oriya */ |
127 | 0x00b3d, | 133 | { 0x0b3d, DIAC_FLAG_NONE }, |
128 | 0x00b57 | DIAC_FLAG_DIACRITIC, /* Oriya */ | 134 | { 0x0b57, DIAC_FLAG_DIACRITIC }, /* Oriya */ |
129 | 0x00b81, | 135 | { 0x0b81, DIAC_FLAG_NONE }, |
130 | 0x00b82 | DIAC_FLAG_DIACRITIC, /* Tamil */ | 136 | { 0x0b82, DIAC_FLAG_DIACRITIC }, /* Tamil */ |
131 | 0x00bbd, | 137 | { 0x0bbd, DIAC_FLAG_NONE }, |
132 | 0x00bcd | DIAC_FLAG_DIACRITIC, /* Tamil */ | 138 | { 0x0bcd, DIAC_FLAG_DIACRITIC }, /* Tamil */ |
133 | 0x00bd6, | 139 | { 0x0bd6, DIAC_FLAG_NONE }, |
134 | 0x00bd7 | DIAC_FLAG_DIACRITIC, /* Tamil */ | 140 | { 0x0bd7, DIAC_FLAG_DIACRITIC }, /* Tamil */ |
135 | 0x00c00, | 141 | { 0x0c00, DIAC_FLAG_NONE }, |
136 | 0x00c03 | DIAC_FLAG_DIACRITIC, /* Telugu */ | 142 | { 0x0c03, DIAC_FLAG_DIACRITIC }, /* Telugu */ |
137 | 0x00c3d, | 143 | { 0x0c3d, DIAC_FLAG_NONE }, |
138 | 0x00c56 | DIAC_FLAG_DIACRITIC, /* Telugu */ | 144 | { 0x0c56, DIAC_FLAG_DIACRITIC }, /* Telugu */ |
139 | 0x00c61, | 145 | { 0x0c61, DIAC_FLAG_NONE }, |
140 | 0x00c63 | DIAC_FLAG_DIACRITIC, /* Telugu */ | 146 | { 0x0c63, DIAC_FLAG_DIACRITIC }, /* Telugu */ |
141 | 0x00c81, | 147 | { 0x0c81, DIAC_FLAG_NONE }, |
142 | 0x00c83 | DIAC_FLAG_DIACRITIC, /* Kannada */ | 148 | { 0x0c83, DIAC_FLAG_DIACRITIC }, /* Kannada */ |
143 | 0x00cbb, | 149 | { 0x0cbb, DIAC_FLAG_NONE }, |
144 | 0x00cbc | DIAC_FLAG_DIACRITIC, /* Kannada */ | 150 | { 0x0cbc, DIAC_FLAG_DIACRITIC }, /* Kannada */ |
145 | 0x00cbd, | 151 | { 0x0cbd, DIAC_FLAG_NONE }, |
146 | 0x00cd6 | DIAC_FLAG_DIACRITIC, /* Kannada */ | 152 | { 0x0cd6, DIAC_FLAG_DIACRITIC }, /* Kannada */ |
147 | 0x00ce1, | 153 | { 0x0ce1, DIAC_FLAG_NONE }, |
148 | 0x00ce3 | DIAC_FLAG_DIACRITIC, /* Kannada */ | 154 | { 0x0ce3, DIAC_FLAG_DIACRITIC }, /* Kannada */ |
149 | 0x00d01, | 155 | { 0x0d01, DIAC_FLAG_NONE }, |
150 | 0x00d03 | DIAC_FLAG_DIACRITIC, /* Malayalam */ | 156 | { 0x0d03, DIAC_FLAG_DIACRITIC }, /* Malayalam */ |
151 | 0x00d3d, | 157 | { 0x0d3d, DIAC_FLAG_NONE }, |
152 | 0x00d57 | DIAC_FLAG_DIACRITIC, /* Malayalam */ | 158 | { 0x0d57, DIAC_FLAG_DIACRITIC }, /* Malayalam */ |
153 | 0x00d61, | 159 | { 0x0d61, DIAC_FLAG_NONE }, |
154 | 0x00d63 | DIAC_FLAG_DIACRITIC, /* Malayalam */ | 160 | { 0x0d63, DIAC_FLAG_DIACRITIC }, /* Malayalam */ |
155 | 0x00d81, | 161 | { 0x0d81, DIAC_FLAG_NONE }, |
156 | 0x00d83 | DIAC_FLAG_DIACRITIC, /* Sinhala */ | 162 | { 0x0d83, DIAC_FLAG_DIACRITIC }, /* Sinhala */ |
157 | 0x00dc9, | 163 | { 0x0dc9, DIAC_FLAG_NONE }, |
158 | 0x00df3 | DIAC_FLAG_DIACRITIC, /* Sinhala */ | 164 | { 0x0df3, DIAC_FLAG_DIACRITIC }, /* Sinhala */ |
159 | 0x00e30, | 165 | { 0x0e30, DIAC_FLAG_NONE }, |
160 | 0x00e31 | DIAC_FLAG_DIACRITIC, /* Thai */ | 166 | { 0x0e31, DIAC_FLAG_DIACRITIC }, /* Thai */ |
161 | 0x00e33, | 167 | { 0x0e33, DIAC_FLAG_NONE }, |
162 | 0x00e3a | DIAC_FLAG_DIACRITIC, /* Thai */ | 168 | { 0x0e3a, DIAC_FLAG_DIACRITIC }, /* Thai */ |
163 | 0x00e46, | 169 | { 0x0e46, DIAC_FLAG_NONE }, |
164 | 0x00e4e | DIAC_FLAG_DIACRITIC, /* Thai */ | 170 | { 0x0e4e, DIAC_FLAG_DIACRITIC }, /* Thai */ |
165 | 0x00eb0, | 171 | { 0x0eb0, DIAC_FLAG_NONE }, |
166 | 0x00eb1 | DIAC_FLAG_DIACRITIC, /* Lao */ | 172 | { 0x0eb1, DIAC_FLAG_DIACRITIC }, /* Lao */ |
167 | 0x00eb3, | 173 | { 0x0eb3, DIAC_FLAG_NONE }, |
168 | 0x00ebc | DIAC_FLAG_DIACRITIC, /* Lao */ | 174 | { 0x0ebc, DIAC_FLAG_DIACRITIC }, /* Lao */ |
169 | 0x00ec7, | 175 | { 0x0ec7, DIAC_FLAG_NONE }, |
170 | 0x00ecd | DIAC_FLAG_DIACRITIC, /* Lao */ | 176 | { 0x0ecd, DIAC_FLAG_DIACRITIC }, /* Lao */ |
171 | 0x00f17, | 177 | { 0x0f17, DIAC_FLAG_NONE }, |
172 | 0x00f19 | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 178 | { 0x0f19, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
173 | 0x00f34, | 179 | { 0x0f34, DIAC_FLAG_NONE }, |
174 | 0x00f35 | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 180 | { 0x0f35, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
175 | 0x00f36, | 181 | { 0x0f36, DIAC_FLAG_NONE }, |
176 | 0x00f37 | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 182 | { 0x0f37, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
177 | 0x00f38, | 183 | { 0x0f38, DIAC_FLAG_NONE }, |
178 | 0x00f39 | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 184 | { 0x0f39, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
179 | 0x00f3d, | 185 | { 0x0f3d, DIAC_FLAG_NONE }, |
180 | 0x00f3f | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 186 | { 0x0f3f, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
181 | 0x00f70, | 187 | { 0x0f70, DIAC_FLAG_NONE }, |
182 | 0x00f84 | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 188 | { 0x0f84, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
183 | 0x00f85, | 189 | { 0x0f85, DIAC_FLAG_NONE }, |
184 | 0x00f87 | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 190 | { 0x0f87, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
185 | 0x00f8f, | 191 | { 0x0f8f, DIAC_FLAG_NONE }, |
186 | 0x00fbc | DIAC_FLAG_DIACRITIC, /* Tibetan */ | 192 | { 0x0fbc, DIAC_FLAG_DIACRITIC }, /* Tibetan */ |
187 | 0x0102a, | 193 | { 0x102a, DIAC_FLAG_NONE }, |
188 | 0x0103e | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 194 | { 0x103e, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
189 | 0x01055, | 195 | { 0x1055, DIAC_FLAG_NONE }, |
190 | 0x01059 | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 196 | { 0x1059, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
191 | 0x0105d, | 197 | { 0x105d, DIAC_FLAG_NONE }, |
192 | 0x01060 | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 198 | { 0x1060, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
193 | 0x01061, | 199 | { 0x1061, DIAC_FLAG_NONE }, |
194 | 0x01064 | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 200 | { 0x1064, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
195 | 0x01066, | 201 | { 0x1066, DIAC_FLAG_NONE }, |
196 | 0x0106d | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 202 | { 0x106d, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
197 | 0x01070, | 203 | { 0x1070, DIAC_FLAG_NONE }, |
198 | 0x01074 | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 204 | { 0x1074, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
199 | 0x01081, | 205 | { 0x1081, DIAC_FLAG_NONE }, |
200 | 0x0108d | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 206 | { 0x108d, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
201 | 0x0108e, | 207 | { 0x108e, DIAC_FLAG_NONE }, |
202 | 0x0108f | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 208 | { 0x108f, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
203 | 0x01099, | 209 | { 0x1099, DIAC_FLAG_NONE }, |
204 | 0x0109d | DIAC_FLAG_DIACRITIC, /* Myanmar */ | 210 | { 0x109d, DIAC_FLAG_DIACRITIC }, /* Myanmar */ |
205 | 0x0135e, | 211 | { 0x135e, DIAC_FLAG_NONE }, |
206 | 0x0135f | DIAC_FLAG_DIACRITIC, /* Ethiopic */ | 212 | { 0x135f, DIAC_FLAG_DIACRITIC }, /* Ethiopic */ |
207 | 0x01711, | 213 | { 0x1711, DIAC_FLAG_NONE }, |
208 | 0x01714 | DIAC_FLAG_DIACRITIC, /* Tagalog */ | 214 | { 0x1714, DIAC_FLAG_DIACRITIC }, /* Tagalog */ |
209 | 0x01731, | 215 | { 0x1731, DIAC_FLAG_NONE }, |
210 | 0x01734 | DIAC_FLAG_DIACRITIC, /* Hanunoo */ | 216 | { 0x1734, DIAC_FLAG_DIACRITIC }, /* Hanunoo */ |
211 | 0x01751, | 217 | { 0x1751, DIAC_FLAG_NONE }, |
212 | 0x01753 | DIAC_FLAG_DIACRITIC, /* Buhid */ | 218 | { 0x1753, DIAC_FLAG_DIACRITIC }, /* Buhid */ |
213 | 0x01771, | 219 | { 0x1771, DIAC_FLAG_NONE }, |
214 | 0x01773 | DIAC_FLAG_DIACRITIC, /* Tagbanwa */ | 220 | { 0x1773, DIAC_FLAG_DIACRITIC }, /* Tagbanwa */ |
215 | 0x017b5, | 221 | { 0x17b5, DIAC_FLAG_NONE }, |
216 | 0x017d3 | DIAC_FLAG_DIACRITIC, /* Khmer */ | 222 | { 0x17d3, DIAC_FLAG_DIACRITIC }, /* Khmer */ |
217 | 0x017dc, | 223 | { 0x17dc, DIAC_FLAG_NONE }, |
218 | 0x017dd | DIAC_FLAG_DIACRITIC, /* Khmer */ | 224 | { 0x17dd, DIAC_FLAG_DIACRITIC }, /* Khmer */ |
219 | 0x018a8, | 225 | { 0x18a8, DIAC_FLAG_NONE }, |
220 | 0x018a9 | DIAC_FLAG_DIACRITIC, /* Mongolian */ | 226 | { 0x18a9, DIAC_FLAG_DIACRITIC }, /* Mongolian */ |
221 | 0x0191f, | 227 | { 0x191f, DIAC_FLAG_NONE }, |
222 | 0x0193b | DIAC_FLAG_DIACRITIC, /* Limbu */ | 228 | { 0x193b, DIAC_FLAG_DIACRITIC }, /* Limbu */ |
223 | 0x019af, | 229 | { 0x19af, DIAC_FLAG_NONE }, |
224 | 0x019c0 | DIAC_FLAG_DIACRITIC, /* New Tai Lue */ | 230 | { 0x19c0, DIAC_FLAG_DIACRITIC }, /* New Tai Lue */ |
225 | 0x019c7, | 231 | { 0x19c7, DIAC_FLAG_NONE }, |
226 | 0x019c9 | DIAC_FLAG_DIACRITIC, /* New Tai Lue */ | 232 | { 0x19c9, DIAC_FLAG_DIACRITIC }, /* New Tai Lue */ |
227 | 0x01a16, | 233 | { 0x1a16, DIAC_FLAG_NONE }, |
228 | 0x01a1b | DIAC_FLAG_DIACRITIC, /* Buginese */ | 234 | { 0x1a1b, DIAC_FLAG_DIACRITIC }, /* Buginese */ |
229 | 0x01a54, | 235 | { 0x1a54, DIAC_FLAG_NONE }, |
230 | 0x01a7f | DIAC_FLAG_DIACRITIC, /* Tai Tham */ | 236 | { 0x1a7f, DIAC_FLAG_DIACRITIC }, /* Tai Tham */ |
231 | 0x01aff, | 237 | { 0x1aff, DIAC_FLAG_NONE }, |
232 | 0x01b04 | DIAC_FLAG_DIACRITIC, /* Balinese */ | 238 | { 0x1b04, DIAC_FLAG_DIACRITIC }, /* Balinese */ |
233 | 0x01b33, | 239 | { 0x1b33, DIAC_FLAG_NONE }, |
234 | 0x01b44 | DIAC_FLAG_DIACRITIC, /* Balinese */ | 240 | { 0x1b44, DIAC_FLAG_DIACRITIC }, /* Balinese */ |
235 | 0x01b6a, | 241 | { 0x1b6a, DIAC_FLAG_NONE }, |
236 | 0x01b73 | DIAC_FLAG_DIACRITIC, /* Balinese */ | 242 | { 0x1b73, DIAC_FLAG_DIACRITIC }, /* Balinese */ |
237 | 0x01b7f, | 243 | { 0x1b7f, DIAC_FLAG_NONE }, |
238 | 0x01b82 | DIAC_FLAG_DIACRITIC, /* Sundanese */ | 244 | { 0x1b82, DIAC_FLAG_DIACRITIC }, /* Sundanese */ |
239 | 0x01ba0, | 245 | { 0x1ba0, DIAC_FLAG_NONE }, |
240 | 0x01baa | DIAC_FLAG_DIACRITIC, /* Sundanese */ | 246 | { 0x1baa, DIAC_FLAG_DIACRITIC }, /* Sundanese */ |
241 | 0x01c23, | 247 | { 0x1c23, DIAC_FLAG_NONE }, |
242 | 0x01c37 | DIAC_FLAG_DIACRITIC, /* Lepcha */ | 248 | { 0x1c37, DIAC_FLAG_DIACRITIC }, /* Lepcha */ |
243 | 0x01ccf, | 249 | { 0x1ccf, DIAC_FLAG_NONE }, |
244 | 0x01cd2 | DIAC_FLAG_DIACRITIC, /* Vedic Extensions */ | 250 | { 0x1cd2, DIAC_FLAG_DIACRITIC }, /* Vedic Extensions */ |
245 | 0x01cd3, | 251 | { 0x1cd3, DIAC_FLAG_NONE }, |
246 | 0x01ce8 | DIAC_FLAG_DIACRITIC, /* Vedic Extensions */ | 252 | { 0x1ce8, DIAC_FLAG_DIACRITIC }, /* Vedic Extensions */ |
247 | 0x01cec, | 253 | { 0x1cec, DIAC_FLAG_NONE }, |
248 | 0x01ced | DIAC_FLAG_DIACRITIC, /* Vedic Extensions */ | 254 | { 0x1ced, DIAC_FLAG_DIACRITIC }, /* Vedic Extensions */ |
249 | 0x01cf1, | 255 | { 0x1cf1, DIAC_FLAG_NONE }, |
250 | 0x01cf2 | DIAC_FLAG_DIACRITIC, /* Vedic Extensions */ | 256 | { 0x1cf2, DIAC_FLAG_DIACRITIC }, /* Vedic Extensions */ |
251 | 0x01dbf, | 257 | { 0x1dbf, DIAC_FLAG_NONE }, |
252 | 0x01dff | DIAC_FLAG_DIACRITIC, /* Combining Diacritical Marks Supplement */ | 258 | { 0x1dff, DIAC_FLAG_DIACRITIC }, /* Combining Diacritical Marks Supplement */ |
253 | 0x020cf, | 259 | { 0x20cf, DIAC_FLAG_NONE }, |
254 | 0x020f0 | DIAC_FLAG_DIACRITIC, /* Combining Diacritical Marks for Symbols */ | 260 | { 0x20f0, DIAC_FLAG_DIACRITIC }, /* Combining Diacritical Marks for Symbols */ |
255 | 0x02cee, | 261 | { 0x2cee, DIAC_FLAG_NONE }, |
256 | 0x02cf1 | DIAC_FLAG_DIACRITIC, /* Coptic */ | 262 | { 0x2cf1, DIAC_FLAG_DIACRITIC }, /* Coptic */ |
257 | 0x02ddf, | 263 | { 0x2ddf, DIAC_FLAG_NONE }, |
258 | 0x02dff | DIAC_FLAG_DIACRITIC, /* Coptic */ | 264 | { 0x2dff, DIAC_FLAG_DIACRITIC }, /* Coptic */ |
259 | 0x03029, | 265 | { 0x3029, DIAC_FLAG_NONE }, |
260 | 0x0302f | DIAC_FLAG_DIACRITIC, /* CJK Symbols and Punctuation */ | 266 | { 0x302f, DIAC_FLAG_DIACRITIC }, /* CJK Symbols and Punctuation */ |
261 | 0x03098, | 267 | { 0x3098, DIAC_FLAG_NONE }, |
262 | 0x0309a | DIAC_FLAG_DIACRITIC, /* Hiragana */ | 268 | { 0x309a, DIAC_FLAG_DIACRITIC }, /* Hiragana */ |
263 | 0x0a66e, | 269 | { 0xa66e, DIAC_FLAG_NONE }, |
264 | 0x0a672 | DIAC_FLAG_DIACRITIC, /* Hiragana */ | 270 | { 0xa672, DIAC_FLAG_DIACRITIC }, /* Hiragana */ |
265 | 0x0a67b, | 271 | { 0xa67b, DIAC_FLAG_NONE }, |
266 | 0x0a67d | DIAC_FLAG_DIACRITIC, /* Hiragana */ | 272 | { 0xa67d, DIAC_FLAG_DIACRITIC }, /* Hiragana */ |
267 | 0x0a6ef, | 273 | { 0xa6ef, DIAC_FLAG_NONE }, |
268 | 0x0a6f1 | DIAC_FLAG_DIACRITIC, /* Bamum */ | 274 | { 0xa6f1, DIAC_FLAG_DIACRITIC }, /* Bamum */ |
269 | 0x0a801, | 275 | { 0xa801, DIAC_FLAG_NONE }, |
270 | 0x0a802 | DIAC_FLAG_DIACRITIC, /* Syloti Nagri */ | 276 | { 0xa802, DIAC_FLAG_DIACRITIC }, /* Syloti Nagri */ |
271 | 0x0a805, | 277 | { 0xa805, DIAC_FLAG_NONE }, |
272 | 0x0a806 | DIAC_FLAG_DIACRITIC, /* Syloti Nagri */ | 278 | { 0xa806, DIAC_FLAG_DIACRITIC }, /* Syloti Nagri */ |
273 | 0x0a80a, | 279 | { 0xa80a, DIAC_FLAG_NONE }, |
274 | 0x0a80b | DIAC_FLAG_DIACRITIC, /* Syloti Nagri */ | 280 | { 0xa80b, DIAC_FLAG_DIACRITIC }, /* Syloti Nagri */ |
275 | 0x0a822, | 281 | { 0xa822, DIAC_FLAG_NONE }, |
276 | 0x0a827 | DIAC_FLAG_DIACRITIC, /* Syloti Nagri */ | 282 | { 0xa827, DIAC_FLAG_DIACRITIC }, /* Syloti Nagri */ |
277 | 0x0a87f, | 283 | { 0xa87f, DIAC_FLAG_NONE }, |
278 | 0x0a881 | DIAC_FLAG_DIACRITIC, /* Saurashtra */ | 284 | { 0xa881, DIAC_FLAG_DIACRITIC }, /* Saurashtra */ |
279 | 0x0a8b3, | 285 | { 0xa8b3, DIAC_FLAG_NONE }, |
280 | 0x0a8c4 | DIAC_FLAG_DIACRITIC, /* Saurashtra */ | 286 | { 0xa8c4, DIAC_FLAG_DIACRITIC }, /* Saurashtra */ |
281 | 0x0a8df, | 287 | { 0xa8df, DIAC_FLAG_NONE }, |
282 | 0x0a8f1 | DIAC_FLAG_DIACRITIC, /* Devanagari Extended */ | 288 | { 0xa8f1, DIAC_FLAG_DIACRITIC }, /* Devanagari Extended */ |
283 | 0x0a925, | 289 | { 0xa925, DIAC_FLAG_NONE }, |
284 | 0x0a92d | DIAC_FLAG_DIACRITIC, /* Kayah Li */ | 290 | { 0xa92d, DIAC_FLAG_DIACRITIC }, /* Kayah Li */ |
285 | 0x0a946, | 291 | { 0xa946, DIAC_FLAG_NONE }, |
286 | 0x0a953 | DIAC_FLAG_DIACRITIC, /* Rejang */ | 292 | { 0xa953, DIAC_FLAG_DIACRITIC }, /* Rejang */ |
287 | 0x0a97f, | 293 | { 0xa97f, DIAC_FLAG_NONE }, |
288 | 0x0a983 | DIAC_FLAG_DIACRITIC, /* Javanese */ | 294 | { 0xa983, DIAC_FLAG_DIACRITIC }, /* Javanese */ |
289 | 0x0a9b2, | 295 | { 0xa9b2, DIAC_FLAG_NONE }, |
290 | 0x0a9c0 | DIAC_FLAG_DIACRITIC, /* Javanese */ | 296 | { 0xa9c0, DIAC_FLAG_DIACRITIC }, /* Javanese */ |
291 | 0x0aa28, | 297 | { 0xaa28, DIAC_FLAG_NONE }, |
292 | 0x0aa36 | DIAC_FLAG_DIACRITIC, /* Cham */ | 298 | { 0xaa36, DIAC_FLAG_DIACRITIC }, /* Cham */ |
293 | 0x0aa42, | 299 | { 0xaa42, DIAC_FLAG_NONE }, |
294 | 0x0aa43 | DIAC_FLAG_DIACRITIC, /* Cham */ | 300 | { 0xaa43, DIAC_FLAG_DIACRITIC }, /* Cham */ |
295 | 0x0aa4b, | 301 | { 0xaa4b, DIAC_FLAG_NONE }, |
296 | 0x0aa4d | DIAC_FLAG_DIACRITIC, /* Cham */ | 302 | { 0xaa4d, DIAC_FLAG_DIACRITIC }, /* Cham */ |
297 | 0x0aa7a, | 303 | { 0xaa7a, DIAC_FLAG_NONE }, |
298 | 0x0aa7b | DIAC_FLAG_DIACRITIC, /* Cham */ | 304 | { 0xaa7b, DIAC_FLAG_DIACRITIC }, /* Cham */ |
299 | 0x0aaaf, | 305 | { 0xaaaf, DIAC_FLAG_NONE }, |
300 | 0x0aab0 | DIAC_FLAG_DIACRITIC, /* Tai Viet */ | 306 | { 0xaab0, DIAC_FLAG_DIACRITIC }, /* Tai Viet */ |
301 | 0x0aab1, | 307 | { 0xaab1, DIAC_FLAG_NONE }, |
302 | 0x0aab4 | DIAC_FLAG_DIACRITIC, /* Tai Viet */ | 308 | { 0xaab4, DIAC_FLAG_DIACRITIC }, /* Tai Viet */ |
303 | 0x0aab6, | 309 | { 0xaab6, DIAC_FLAG_NONE }, |
304 | 0x0aab8 | DIAC_FLAG_DIACRITIC, /* Tai Viet */ | 310 | { 0xaab8, DIAC_FLAG_DIACRITIC }, /* Tai Viet */ |
305 | 0x0aabd, | 311 | { 0xaabd, DIAC_FLAG_NONE }, |
306 | 0x0aabf | DIAC_FLAG_DIACRITIC, /* Tai Viet */ | 312 | { 0xaabf, DIAC_FLAG_DIACRITIC }, /* Tai Viet */ |
307 | 0x0aac0, | 313 | { 0xaac0, DIAC_FLAG_NONE }, |
308 | 0x0aac1 | DIAC_FLAG_DIACRITIC, /* Tai Viet */ | 314 | { 0xaac1, DIAC_FLAG_DIACRITIC }, /* Tai Viet */ |
309 | 0x0abe2, | 315 | { 0xabe2, DIAC_FLAG_NONE }, |
310 | 0x0abea | DIAC_FLAG_DIACRITIC, /* Meetei Mayek */ | 316 | { 0xabea, DIAC_FLAG_DIACRITIC }, /* Meetei Mayek */ |
311 | 0x0abeb, | 317 | { 0xabeb, DIAC_FLAG_NONE }, |
312 | 0x0abed | DIAC_FLAG_DIACRITIC, /* Meetei Mayek */ | 318 | { 0xabed, DIAC_FLAG_DIACRITIC }, /* Meetei Mayek */ |
313 | 0x0fb1d, | 319 | { 0xfb1d, DIAC_FLAG_NONE }, |
314 | 0x0fb1e | DIAC_FLAG_DIACRITIC, /* Alphabetic Presentation Forms */ | 320 | { 0xfb1e, DIAC_FLAG_DIACRITIC }, /* Alphabetic Presentation Forms */ |
315 | 0x0fe1f, | 321 | { 0xfe1f, DIAC_FLAG_NONE }, |
316 | 0x0fe26 | DIAC_FLAG_DIACRITIC, /* Combining Half Marks */ | 322 | { 0xfe26, DIAC_FLAG_DIACRITIC }, /* Combining Half Marks */ |
317 | 0x1107f, | 323 | /* Currently we don't support chars above U-FFFF */ |
318 | 0x11082 | DIAC_FLAG_DIACRITIC, /* Kaithi */ | 324 | { 0xffff, DIAC_FLAG_NONE }, |
319 | 0x110af, | 325 | #if 0 |
320 | 0x110ba | DIAC_FLAG_DIACRITIC, /* Kaithi */ | 326 | { 0x1107f, DIAC_FLAG_NONE }, |
321 | 0x1d164, | 327 | { 0x11082, DIAC_FLAG_DIACRITIC }, /* Kaithi */ |
322 | 0x1d169 | DIAC_FLAG_DIACRITIC, /* Musical Symbols */ | 328 | { 0x110af, DIAC_FLAG_NONE }, |
323 | 0x1d16c, | 329 | { 0x110ba, DIAC_FLAG_DIACRITIC }, /* Kaithi */ |
324 | 0x1d182 | DIAC_FLAG_DIACRITIC, /* Musical Symbols */ | 330 | { 0x1d164, DIAC_FLAG_NONE }, |
325 | 0x1d184, | 331 | { 0x1d169, DIAC_FLAG_DIACRITIC }, /* Musical Symbols */ |
326 | 0x1d18b | DIAC_FLAG_DIACRITIC, /* Musical Symbols */ | 332 | { 0x1d16c, DIAC_FLAG_NONE }, |
327 | 0x1d1a9, | 333 | { 0x1d182, DIAC_FLAG_DIACRITIC }, /* Musical Symbols */ |
328 | 0x1d1ad | DIAC_FLAG_DIACRITIC, /* Musical Symbols */ | 334 | { 0x1d184, DIAC_FLAG_NONE }, |
329 | 0x1d241, | 335 | { 0x1d18b, DIAC_FLAG_DIACRITIC }, /* Musical Symbols */ |
330 | 0x1d244 | DIAC_FLAG_DIACRITIC, /* Ancient Greek Musical Notation */ | 336 | { 0x1d1a9, DIAC_FLAG_NONE }, |
331 | 0xe01ef, | 337 | { 0x1d1ad, DIAC_FLAG_DIACRITIC }, /* Musical Symbols */ |
338 | { 0x1d241, DIAC_FLAG_NONE }, | ||
339 | { 0x1d244, DIAC_FLAG_DIACRITIC }, /* Ancient Greek Musical Notation */ | ||
340 | { 0xe01ef, DIAC_FLAG_NONE }, | ||
341 | #endif | ||
332 | }; | 342 | }; |
333 | 343 | ||
334 | #define MRU_MAX_LEN 32 | 344 | #define MRU_MAX_LEN 32 |
@@ -336,7 +346,7 @@ static const int diac_range[] = | |||
336 | static unsigned short mru_len = 0; | 346 | static unsigned short mru_len = 0; |
337 | static unsigned short diacritic_mru[MRU_MAX_LEN]; | 347 | static unsigned short diacritic_mru[MRU_MAX_LEN]; |
338 | 348 | ||
339 | int is_diacritic(unsigned short char_code, bool *is_rtl) | 349 | int is_diacritic(const unsigned short char_code, bool *is_rtl) |
340 | { | 350 | { |
341 | unsigned short mru, i; | 351 | unsigned short mru, i; |
342 | 352 | ||
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c index 4a711d5378..78ceb848d5 100644 --- a/firmware/drivers/lcd-bitmap-common.c +++ b/firmware/drivers/lcd-bitmap-common.c | |||
@@ -83,11 +83,10 @@ static void lcd_gradient_rect(int x1, int x2, int y, unsigned h, | |||
83 | /* put a string at a given pixel position, skipping first ofs pixel columns */ | 83 | /* put a string at a given pixel position, skipping first ofs pixel columns */ |
84 | static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str) | 84 | static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str) |
85 | { | 85 | { |
86 | unsigned short ch, *ucs; | 86 | unsigned short *ucs; |
87 | struct font* pf = font_get(current_vp->font); | 87 | struct font* pf = font_get(current_vp->font); |
88 | int vp_flags = current_vp->flags; | 88 | int vp_flags = current_vp->flags; |
89 | unsigned i; | 89 | int rtl_next_non_diac_width, last_non_diacritic_width; |
90 | static int rtl_next_non_diacritic_width, last_non_diacritic_width; | ||
91 | 90 | ||
92 | if ((vp_flags & VP_FLAG_ALIGNMENT_MASK) != 0) | 91 | if ((vp_flags & VP_FLAG_ALIGNMENT_MASK) != 0) |
93 | { | 92 | { |
@@ -109,25 +108,23 @@ static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str) | |||
109 | } | 108 | } |
110 | } | 109 | } |
111 | 110 | ||
112 | ucs = bidi_l2v(str, 1); | 111 | rtl_next_non_diac_width = 0; |
113 | |||
114 | rtl_next_non_diacritic_width = 0; | ||
115 | last_non_diacritic_width = 0; | 112 | last_non_diacritic_width = 0; |
116 | /* Mark diacritic and rtl flags for each character */ | 113 | /* Mark diacritic and rtl flags for each character */ |
117 | for (i = 0; i < SCROLL_LINE_SIZE && (ch = ucs[i]); i++) | 114 | for (ucs = bidi_l2v(str, 1); *ucs; ucs++) |
118 | { | 115 | { |
119 | bool is_rtl, is_diac; | 116 | bool is_rtl, is_diac; |
120 | const unsigned char *bits; | 117 | const unsigned char *bits; |
121 | int width, base_width, drawmode = 0, base_ofs = 0; | 118 | int width, base_width, drawmode = 0, base_ofs = 0; |
122 | unsigned short next_ch = ucs[i + 1]; | 119 | const unsigned short next_ch = ucs[1]; |
123 | 120 | ||
124 | if (x >= current_vp->width) | 121 | if (x >= current_vp->width) |
125 | break; | 122 | break; |
126 | 123 | ||
127 | is_diac = is_diacritic(ch, &is_rtl); | 124 | is_diac = is_diacritic(*ucs, &is_rtl); |
128 | 125 | ||
129 | /* Get proportional width and glyph bits */ | 126 | /* Get proportional width and glyph bits */ |
130 | width = font_get_width(pf, ch); | 127 | width = font_get_width(pf, *ucs); |
131 | 128 | ||
132 | /* Calculate base width */ | 129 | /* Calculate base width */ |
133 | if (is_rtl) | 130 | if (is_rtl) |
@@ -135,20 +132,20 @@ static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str) | |||
135 | /* Forward-seek the next non-diacritic character for base width */ | 132 | /* Forward-seek the next non-diacritic character for base width */ |
136 | if (is_diac) | 133 | if (is_diac) |
137 | { | 134 | { |
138 | if (!rtl_next_non_diacritic_width) | 135 | if (!rtl_next_non_diac_width) |
139 | { | 136 | { |
140 | unsigned j; | 137 | const unsigned short *u; |
141 | 138 | ||
142 | /* Jump to next non-diacritic char, and calc its width */ | 139 | /* Jump to next non-diacritic char, and calc its width */ |
143 | for (j = i + 1; ucs[j] && is_diacritic(ucs[j], NULL); j++); | 140 | for (u = &ucs[1]; *u && is_diacritic(*u, NULL); u++); |
144 | rtl_next_non_diacritic_width = ucs[j] ? | 141 | |
145 | font_get_width(pf, ucs[j]) : 0; | 142 | rtl_next_non_diac_width = *u ? font_get_width(pf, *u) : 0; |
146 | } | 143 | } |
147 | base_width = rtl_next_non_diacritic_width; | 144 | base_width = rtl_next_non_diac_width; |
148 | } | 145 | } |
149 | else | 146 | else |
150 | { | 147 | { |
151 | rtl_next_non_diacritic_width = 0; /* Mark */ | 148 | rtl_next_non_diac_width = 0; /* Mark */ |
152 | base_width = width; | 149 | base_width = width; |
153 | } | 150 | } |
154 | } | 151 | } |
@@ -188,7 +185,7 @@ static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str) | |||
188 | base_ofs = (base_width - width) / 2; | 185 | base_ofs = (base_width - width) / 2; |
189 | } | 186 | } |
190 | 187 | ||
191 | bits = font_get_bits(pf, ch); | 188 | bits = font_get_bits(pf, *ucs); |
192 | LCDFN(mono_bitmap_part)(bits, ofs, 0, width, MAX(x + base_ofs, 0), y, | 189 | LCDFN(mono_bitmap_part)(bits, ofs, 0, width, MAX(x + base_ofs, 0), y, |
193 | width - ofs, pf->height); | 190 | width - ofs, pf->height); |
194 | 191 | ||
diff --git a/firmware/include/diacritic.h b/firmware/include/diacritic.h index ebcb3bb79a..5bc275ab9b 100644 --- a/firmware/include/diacritic.h +++ b/firmware/include/diacritic.h | |||
@@ -22,5 +22,5 @@ | |||
22 | #define _DIACRITIC_H_ | 22 | #define _DIACRITIC_H_ |
23 | #include "system.h" | 23 | #include "system.h" |
24 | 24 | ||
25 | int is_diacritic(unsigned short char_code, bool *is_rtl); | 25 | int is_diacritic(const unsigned short char_code, bool *is_rtl); |
26 | #endif | 26 | #endif |