Panda3D
unicodeLatinMap.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file unicodeLatinMap.cxx
10  * @author drose
11  * @date 2003-02-01
12  */
13 
14 #include "unicodeLatinMap.h"
15 
16 bool UnicodeLatinMap::_initialized = false;
17 UnicodeLatinMap::ByCharacter *UnicodeLatinMap::_by_character;
18 const UnicodeLatinMap::Entry *UnicodeLatinMap::_direct_chars[UnicodeLatinMap::max_direct_chars];
19 
20 static const UnicodeLatinMap::Entry latin_map[] = {
21  { 0x00a1, UnicodeLatinMap::CT_punct, '!', 0, 0x00a1, 0x00a1,
22  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
23  { 0x00bf, UnicodeLatinMap::CT_punct, '?', 0, 0x00bf, 0x00bf,
24  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
25  { 0x0061, UnicodeLatinMap::CT_lower, 'a', 0, 0x0061, 0x0041,
26  UnicodeLatinMap::AT_none, 0 },
27  { 0x0041, UnicodeLatinMap::CT_upper, 'A', 0, 0x0061, 0x0041,
28  UnicodeLatinMap::AT_none, 0 },
29  { 0x00e1, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e1, 0x00c1,
30  UnicodeLatinMap::AT_acute, 0 },
31  { 0x00c1, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e1, 0x00c1,
32  UnicodeLatinMap::AT_acute, 0 },
33  { 0x00e0, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e0, 0x00c0,
34  UnicodeLatinMap::AT_grave, 0 },
35  { 0x00c0, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e0, 0x00c0,
36  UnicodeLatinMap::AT_grave, 0 },
37  { 0x0103, UnicodeLatinMap::CT_lower, 'a', 0, 0x0103, 0x0102,
38  UnicodeLatinMap::AT_breve, 0 },
39  { 0x0102, UnicodeLatinMap::CT_upper, 'A', 0, 0x0103, 0x0102,
40  UnicodeLatinMap::AT_breve, 0 },
41  { 0x1eaf, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eaf, 0x1eae,
42  UnicodeLatinMap::AT_breve_and_acute, 0 },
43  { 0x1eae, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eaf, 0x1eae,
44  UnicodeLatinMap::AT_breve_and_acute, 0 },
45  { 0x1eb1, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb1, 0x1eb0,
46  UnicodeLatinMap::AT_breve_and_grave, 0 },
47  { 0x1eb0, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb1, 0x1eb0,
48  UnicodeLatinMap::AT_breve_and_grave, 0 },
49  { 0x1eb5, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb5, 0x1eb4,
50  UnicodeLatinMap::AT_breve_and_tilde, 0 },
51  { 0x1eb4, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb5, 0x1eb4,
52  UnicodeLatinMap::AT_breve_and_tilde, 0 },
53  { 0x1eb3, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb3, 0x1eb2,
54  UnicodeLatinMap::AT_breve_and_hook_above, 0 },
55  { 0x1eb2, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb3, 0x1eb2,
56  UnicodeLatinMap::AT_breve_and_hook_above, 0 },
57  { 0x00e2, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e2, 0x00c2,
58  UnicodeLatinMap::AT_circumflex, 0 },
59  { 0x00c2, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e2, 0x00c2,
60  UnicodeLatinMap::AT_circumflex, 0 },
61  { 0x1ea5, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea5, 0x1ea4,
62  UnicodeLatinMap::AT_circumflex_and_acute, 0 },
63  { 0x1ea4, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea5, 0x1ea4,
64  UnicodeLatinMap::AT_circumflex_and_acute, 0 },
65  { 0x1ea7, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea7, 0x1ea6,
66  UnicodeLatinMap::AT_circumflex_and_grave, 0 },
67  { 0x1ea6, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea7, 0x1ea6,
68  UnicodeLatinMap::AT_circumflex_and_grave, 0 },
69  { 0x1eab, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eab, 0x1eaa,
70  UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
71  { 0x1eaa, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eab, 0x1eaa,
72  UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
73  { 0x1ea9, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea9, 0x1ea8,
74  UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
75  { 0x1ea8, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea9, 0x1ea8,
76  UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
77  { 0x01ce, UnicodeLatinMap::CT_lower, 'a', 0, 0x01ce, 0x01cd,
78  UnicodeLatinMap::AT_caron, 0 },
79  { 0x01cd, UnicodeLatinMap::CT_upper, 'A', 0, 0x01ce, 0x01cd,
80  UnicodeLatinMap::AT_caron, 0 },
81  { 0x00e5, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e5, 0x00c5,
82  UnicodeLatinMap::AT_ring_above, 0 },
83  { 0x00c5, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e5, 0x00c5,
84  UnicodeLatinMap::AT_ring_above, 0 },
85  { 0x01fb, UnicodeLatinMap::CT_lower, 'a', 0, 0x01fb, 0x01fa,
86  UnicodeLatinMap::AT_ring_above_and_acute, 0 },
87  { 0x01fa, UnicodeLatinMap::CT_upper, 'A', 0, 0x01fb, 0x01fa,
88  UnicodeLatinMap::AT_ring_above_and_acute, 0 },
89  { 0x00e4, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e4, 0x00c4,
90  UnicodeLatinMap::AT_diaeresis, 0 },
91  { 0x00c4, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e4, 0x00c4,
92  UnicodeLatinMap::AT_diaeresis, 0 },
93  { 0x01df, UnicodeLatinMap::CT_lower, 'a', 0, 0x01df, 0x01de,
94  UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
95  { 0x01de, UnicodeLatinMap::CT_upper, 'A', 0, 0x01df, 0x01de,
96  UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
97  { 0x00e3, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e3, 0x00c3,
98  UnicodeLatinMap::AT_tilde, 0 },
99  { 0x00c3, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e3, 0x00c3,
100  UnicodeLatinMap::AT_tilde, 0 },
101  { 0x0227, UnicodeLatinMap::CT_lower, 'a', 0, 0x0227, 0x0226,
102  UnicodeLatinMap::AT_dot_above, 0 },
103  { 0x0226, UnicodeLatinMap::CT_upper, 'A', 0, 0x0227, 0x0226,
104  UnicodeLatinMap::AT_dot_above, 0 },
105  { 0x01e1, UnicodeLatinMap::CT_lower, 'a', 0, 0x01e1, 0x01e0,
106  UnicodeLatinMap::AT_dot_above_and_macron, 0 },
107  { 0x01e0, UnicodeLatinMap::CT_upper, 'A', 0, 0x01e1, 0x01e0,
108  UnicodeLatinMap::AT_dot_above_and_macron, 0 },
109  { 0x0105, UnicodeLatinMap::CT_lower, 'a', 0, 0x0105, 0x0104,
110  UnicodeLatinMap::AT_ogonek, 0 },
111  { 0x0104, UnicodeLatinMap::CT_upper, 'A', 0, 0x0105, 0x0104,
112  UnicodeLatinMap::AT_ogonek, 0 },
113  { 0x0101, UnicodeLatinMap::CT_lower, 'a', 0, 0x0101, 0x0100,
114  UnicodeLatinMap::AT_macron, 0 },
115  { 0x0100, UnicodeLatinMap::CT_upper, 'A', 0, 0x0101, 0x0100,
116  UnicodeLatinMap::AT_macron, 0 },
117  { 0x1ea3, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea3, 0x1ea2,
118  UnicodeLatinMap::AT_hook_above, 0 },
119  { 0x1ea2, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea3, 0x1ea2,
120  UnicodeLatinMap::AT_hook_above, 0 },
121  { 0x0201, UnicodeLatinMap::CT_lower, 'a', 0, 0x0201, 0x0200,
122  UnicodeLatinMap::AT_double_grave, 0 },
123  { 0x0200, UnicodeLatinMap::CT_upper, 'A', 0, 0x0201, 0x0200,
124  UnicodeLatinMap::AT_double_grave, 0 },
125  { 0x0203, UnicodeLatinMap::CT_lower, 'a', 0, 0x0203, 0x0202,
126  UnicodeLatinMap::AT_inverted_breve, 0 },
127  { 0x0202, UnicodeLatinMap::CT_upper, 'A', 0, 0x0203, 0x0202,
128  UnicodeLatinMap::AT_inverted_breve, 0 },
129  { 0x1ea1, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea1, 0x1ea0,
130  UnicodeLatinMap::AT_dot_below, 0 },
131  { 0x1ea0, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea1, 0x1ea0,
132  UnicodeLatinMap::AT_dot_below, 0 },
133  { 0x1eb7, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb7, 0x1eb6,
134  UnicodeLatinMap::AT_breve_and_dot_below, 0 },
135  { 0x1eb6, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb7, 0x1eb6,
136  UnicodeLatinMap::AT_breve_and_dot_below, 0 },
137  { 0x1ead, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ead, 0x1eac,
138  UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
139  { 0x1eac, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ead, 0x1eac,
140  UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
141  { 0x1e01, UnicodeLatinMap::CT_lower, 'a', 0, 0x1e01, 0x1e00,
142  UnicodeLatinMap::AT_ring_below, 0 },
143  { 0x1e00, UnicodeLatinMap::CT_upper, 'A', 0, 0x1e01, 0x1e00,
144  UnicodeLatinMap::AT_ring_below, 0 },
145  { 0x00e6, UnicodeLatinMap::CT_lower, 'a', 'e', 0x00e6, 0x00c6,
146  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
147  { 0x00c6, UnicodeLatinMap::CT_upper, 'A', 'E', 0x00e6, 0x00c6,
148  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
149  { 0x01fd, UnicodeLatinMap::CT_lower, 'a', 'e', 0x01fd, 0x01fc,
150  UnicodeLatinMap::AT_acute, UnicodeLatinMap::AF_ligature },
151  { 0x01fc, UnicodeLatinMap::CT_upper, 'A', 'E', 0x01fd, 0x01fc,
152  UnicodeLatinMap::AT_acute, UnicodeLatinMap::AF_ligature },
153  { 0x01e3, UnicodeLatinMap::CT_lower, 'a', 'e', 0x01e3, 0x01e2,
154  UnicodeLatinMap::AT_macron, UnicodeLatinMap::AF_ligature },
155  { 0x01e2, UnicodeLatinMap::CT_upper, 'A', 'E', 0x01e3, 0x01e2,
156  UnicodeLatinMap::AT_macron, UnicodeLatinMap::AF_ligature },
157  { 0x0250, UnicodeLatinMap::CT_lower, 'a', 0, 0x0250, 0x0041,
158  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
159  { 0x0062, UnicodeLatinMap::CT_lower, 'b', 0, 0x0062, 0x0042,
160  UnicodeLatinMap::AT_none, 0 },
161  { 0x0042, UnicodeLatinMap::CT_upper, 'B', 0, 0x0062, 0x0042,
162  UnicodeLatinMap::AT_none, 0 },
163  { 0x1e03, UnicodeLatinMap::CT_lower, 'b', 0, 0x1e03, 0x1e02,
164  UnicodeLatinMap::AT_dot_above, 0 },
165  { 0x1e02, UnicodeLatinMap::CT_upper, 'B', 0, 0x1e03, 0x1e02,
166  UnicodeLatinMap::AT_dot_above, 0 },
167  { 0x1e05, UnicodeLatinMap::CT_lower, 'b', 0, 0x1e05, 0x1e04,
168  UnicodeLatinMap::AT_dot_below, 0 },
169  { 0x1e04, UnicodeLatinMap::CT_upper, 'B', 0, 0x1e05, 0x1e04,
170  UnicodeLatinMap::AT_dot_below, 0 },
171  { 0x1e07, UnicodeLatinMap::CT_lower, 'b', 0, 0x1e07, 0x1e06,
172  UnicodeLatinMap::AT_line_below, 0 },
173  { 0x1e06, UnicodeLatinMap::CT_upper, 'B', 0, 0x1e07, 0x1e06,
174  UnicodeLatinMap::AT_line_below, 0 },
175  { 0x0299, UnicodeLatinMap::CT_upper, 'B', 0, 0x0062, 0x0299,
176  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
177  { 0x0180, UnicodeLatinMap::CT_lower, 'b', 0, 0x0180, 0x0042,
178  UnicodeLatinMap::AT_stroke, 0 },
179  { 0x0253, UnicodeLatinMap::CT_lower, 'b', 0, 0x0253, 0x0181,
180  UnicodeLatinMap::AT_hook, 0 },
181  { 0x0181, UnicodeLatinMap::CT_upper, 'B', 0, 0x0253, 0x0181,
182  UnicodeLatinMap::AT_hook, 0 },
183  { 0x0183, UnicodeLatinMap::CT_lower, 'b', 0, 0x0183, 0x0182,
184  UnicodeLatinMap::AT_topbar, 0 },
185  { 0x0182, UnicodeLatinMap::CT_upper, 'B', 0, 0x0183, 0x0182,
186  UnicodeLatinMap::AT_topbar, 0 },
187  { 0x0063, UnicodeLatinMap::CT_lower, 'c', 0, 0x0063, 0x0043,
188  UnicodeLatinMap::AT_none, 0 },
189  { 0x0043, UnicodeLatinMap::CT_upper, 'C', 0, 0x0063, 0x0043,
190  UnicodeLatinMap::AT_none, 0 },
191  { 0x0107, UnicodeLatinMap::CT_lower, 'c', 0, 0x0107, 0x0106,
192  UnicodeLatinMap::AT_acute, 0 },
193  { 0x0106, UnicodeLatinMap::CT_upper, 'C', 0, 0x0107, 0x0106,
194  UnicodeLatinMap::AT_acute, 0 },
195  { 0x0109, UnicodeLatinMap::CT_lower, 'c', 0, 0x0109, 0x0108,
196  UnicodeLatinMap::AT_circumflex, 0 },
197  { 0x0108, UnicodeLatinMap::CT_upper, 'C', 0, 0x0109, 0x0108,
198  UnicodeLatinMap::AT_circumflex, 0 },
199  { 0x010d, UnicodeLatinMap::CT_lower, 'c', 0, 0x010d, 0x010c,
200  UnicodeLatinMap::AT_caron, 0 },
201  { 0x010c, UnicodeLatinMap::CT_upper, 'C', 0, 0x010d, 0x010c,
202  UnicodeLatinMap::AT_caron, 0 },
203  { 0x010b, UnicodeLatinMap::CT_lower, 'c', 0, 0x010b, 0x010a,
204  UnicodeLatinMap::AT_dot_above, 0 },
205  { 0x010a, UnicodeLatinMap::CT_upper, 'C', 0, 0x010b, 0x010a,
206  UnicodeLatinMap::AT_dot_above, 0 },
207  { 0x00e7, UnicodeLatinMap::CT_lower, 'c', 0, 0x00e7, 0x00c7,
208  UnicodeLatinMap::AT_cedilla, 0 },
209  { 0x00c7, UnicodeLatinMap::CT_upper, 'C', 0, 0x00e7, 0x00c7,
210  UnicodeLatinMap::AT_cedilla, 0 },
211  { 0x1e09, UnicodeLatinMap::CT_lower, 'c', 0, 0x1e09, 0x1e08,
212  UnicodeLatinMap::AT_cedilla_and_acute, 0 },
213  { 0x1e08, UnicodeLatinMap::CT_upper, 'C', 0, 0x1e09, 0x1e08,
214  UnicodeLatinMap::AT_cedilla_and_acute, 0 },
215  { 0x0188, UnicodeLatinMap::CT_lower, 'c', 0, 0x0188, 0x0187,
216  UnicodeLatinMap::AT_hook, 0 },
217  { 0x0187, UnicodeLatinMap::CT_upper, 'C', 0, 0x0188, 0x0187,
218  UnicodeLatinMap::AT_hook, 0 },
219  { 0x0255, UnicodeLatinMap::CT_lower, 'c', 0, 0x0255, 0x0043,
220  UnicodeLatinMap::AT_curl, 0 },
221  { 0x0064, UnicodeLatinMap::CT_lower, 'd', 0, 0x0064, 0x0044,
222  UnicodeLatinMap::AT_none, 0 },
223  { 0x0044, UnicodeLatinMap::CT_upper, 'D', 0, 0x0064, 0x0044,
224  UnicodeLatinMap::AT_none, 0 },
225  { 0x010f, UnicodeLatinMap::CT_lower, 'd', 0, 0x010f, 0x010e,
226  UnicodeLatinMap::AT_caron, 0 },
227  { 0x010e, UnicodeLatinMap::CT_upper, 'D', 0, 0x010f, 0x010e,
228  UnicodeLatinMap::AT_caron, 0 },
229  { 0x1e0b, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e0b, 0x1e0a,
230  UnicodeLatinMap::AT_dot_above, 0 },
231  { 0x1e0a, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e0b, 0x1e0a,
232  UnicodeLatinMap::AT_dot_above, 0 },
233  { 0x1e11, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e11, 0x1e10,
234  UnicodeLatinMap::AT_cedilla, 0 },
235  { 0x1e10, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e11, 0x1e10,
236  UnicodeLatinMap::AT_cedilla, 0 },
237  { 0x1e0d, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e0d, 0x1e0c,
238  UnicodeLatinMap::AT_dot_below, 0 },
239  { 0x1e0c, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e0d, 0x1e0c,
240  UnicodeLatinMap::AT_dot_below, 0 },
241  { 0x1e13, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e13, 0x1e12,
242  UnicodeLatinMap::AT_circumflex_below, 0 },
243  { 0x1e12, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e13, 0x1e12,
244  UnicodeLatinMap::AT_circumflex_below, 0 },
245  { 0x1e0f, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e0f, 0x1e0e,
246  UnicodeLatinMap::AT_line_below, 0 },
247  { 0x1e0e, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e0f, 0x1e0e,
248  UnicodeLatinMap::AT_line_below, 0 },
249  { 0x0111, UnicodeLatinMap::CT_lower, 'd', 0, 0x0111, 0x0110,
250  UnicodeLatinMap::AT_stroke, 0 },
251  { 0x0110, UnicodeLatinMap::CT_upper, 'D', 0, 0x0111, 0x0110,
252  UnicodeLatinMap::AT_stroke, 0 },
253  { 0x0257, UnicodeLatinMap::CT_lower, 'd', 0, 0x0257, 0x018a,
254  UnicodeLatinMap::AT_hook, 0 },
255  { 0x018a, UnicodeLatinMap::CT_upper, 'D', 0, 0x0257, 0x018a,
256  UnicodeLatinMap::AT_hook, 0 },
257  { 0x018c, UnicodeLatinMap::CT_lower, 'd', 0, 0x018c, 0x018b,
258  UnicodeLatinMap::AT_topbar, 0 },
259  { 0x018b, UnicodeLatinMap::CT_upper, 'D', 0, 0x018c, 0x018b,
260  UnicodeLatinMap::AT_topbar, 0 },
261  { 0x0065, UnicodeLatinMap::CT_lower, 'e', 0, 0x0065, 0x0045,
262  UnicodeLatinMap::AT_none, 0 },
263  { 0x0045, UnicodeLatinMap::CT_upper, 'E', 0, 0x0065, 0x0045,
264  UnicodeLatinMap::AT_none, 0 },
265  { 0x00e9, UnicodeLatinMap::CT_lower, 'e', 0, 0x00e9, 0x00c9,
266  UnicodeLatinMap::AT_acute, 0 },
267  { 0x00c9, UnicodeLatinMap::CT_upper, 'E', 0, 0x00e9, 0x00c9,
268  UnicodeLatinMap::AT_acute, 0 },
269  { 0x00e8, UnicodeLatinMap::CT_lower, 'e', 0, 0x00e8, 0x00c8,
270  UnicodeLatinMap::AT_grave, 0 },
271  { 0x00c8, UnicodeLatinMap::CT_upper, 'E', 0, 0x00e8, 0x00c8,
272  UnicodeLatinMap::AT_grave, 0 },
273  { 0x0115, UnicodeLatinMap::CT_lower, 'e', 0, 0x0115, 0x0114,
274  UnicodeLatinMap::AT_breve, 0 },
275  { 0x0114, UnicodeLatinMap::CT_upper, 'E', 0, 0x0115, 0x0114,
276  UnicodeLatinMap::AT_breve, 0 },
277  { 0x00ea, UnicodeLatinMap::CT_lower, 'e', 0, 0x00ea, 0x00ca,
278  UnicodeLatinMap::AT_circumflex, 0 },
279  { 0x00ca, UnicodeLatinMap::CT_upper, 'E', 0, 0x00ea, 0x00ca,
280  UnicodeLatinMap::AT_circumflex, 0 },
281  { 0x1ebf, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ebf, 0x1ebe,
282  UnicodeLatinMap::AT_circumflex_and_acute, 0 },
283  { 0x1ebe, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ebf, 0x1ebe,
284  UnicodeLatinMap::AT_circumflex_and_acute, 0 },
285  { 0x1ec1, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec1, 0x1ec0,
286  UnicodeLatinMap::AT_circumflex_and_grave, 0 },
287  { 0x1ec0, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec1, 0x1ec0,
288  UnicodeLatinMap::AT_circumflex_and_grave, 0 },
289  { 0x1ec5, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec5, 0x1ec4,
290  UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
291  { 0x1ec4, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec5, 0x1ec4,
292  UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
293  { 0x1ec3, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec3, 0x1ec2,
294  UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
295  { 0x1ec2, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec3, 0x1ec2,
296  UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
297  { 0x011b, UnicodeLatinMap::CT_lower, 'e', 0, 0x011b, 0x011a,
298  UnicodeLatinMap::AT_caron, 0 },
299  { 0x011a, UnicodeLatinMap::CT_upper, 'E', 0, 0x011b, 0x011a,
300  UnicodeLatinMap::AT_caron, 0 },
301  { 0x00eb, UnicodeLatinMap::CT_lower, 'e', 0, 0x00eb, 0x00cb,
302  UnicodeLatinMap::AT_diaeresis, 0 },
303  { 0x00cb, UnicodeLatinMap::CT_upper, 'E', 0, 0x00eb, 0x00cb,
304  UnicodeLatinMap::AT_diaeresis, 0 },
305  { 0x1ebd, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ebd, 0x1ebc,
306  UnicodeLatinMap::AT_tilde, 0 },
307  { 0x1ebc, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ebd, 0x1ebc,
308  UnicodeLatinMap::AT_tilde, 0 },
309  { 0x0117, UnicodeLatinMap::CT_lower, 'e', 0, 0x0117, 0x0116,
310  UnicodeLatinMap::AT_dot_above, 0 },
311  { 0x0116, UnicodeLatinMap::CT_upper, 'E', 0, 0x0117, 0x0116,
312  UnicodeLatinMap::AT_dot_above, 0 },
313  { 0x0229, UnicodeLatinMap::CT_lower, 'e', 0, 0x0229, 0x0228,
314  UnicodeLatinMap::AT_cedilla, 0 },
315  { 0x0228, UnicodeLatinMap::CT_upper, 'E', 0, 0x0229, 0x0228,
316  UnicodeLatinMap::AT_cedilla, 0 },
317  { 0x1e1d, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e1d, 0x1e1c,
318  UnicodeLatinMap::AT_cedilla_and_breve, 0 },
319  { 0x1e1c, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e1d, 0x1e1c,
320  UnicodeLatinMap::AT_cedilla_and_breve, 0 },
321  { 0x0119, UnicodeLatinMap::CT_lower, 'e', 0, 0x0119, 0x0118,
322  UnicodeLatinMap::AT_ogonek, 0 },
323  { 0x0118, UnicodeLatinMap::CT_upper, 'E', 0, 0x0119, 0x0118,
324  UnicodeLatinMap::AT_ogonek, 0 },
325  { 0x0113, UnicodeLatinMap::CT_lower, 'e', 0, 0x0113, 0x0112,
326  UnicodeLatinMap::AT_macron, 0 },
327  { 0x0112, UnicodeLatinMap::CT_upper, 'E', 0, 0x0113, 0x0112,
328  UnicodeLatinMap::AT_macron, 0 },
329  { 0x1e17, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e17, 0x1e16,
330  UnicodeLatinMap::AT_macron_and_acute, 0 },
331  { 0x1e16, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e17, 0x1e16,
332  UnicodeLatinMap::AT_macron_and_acute, 0 },
333  { 0x1e15, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e15, 0x1e14,
334  UnicodeLatinMap::AT_macron_and_grave, 0 },
335  { 0x1e14, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e15, 0x1e14,
336  UnicodeLatinMap::AT_macron_and_grave, 0 },
337  { 0x1ebb, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ebb, 0x1eba,
338  UnicodeLatinMap::AT_hook_above, 0 },
339  { 0x1eba, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ebb, 0x1eba,
340  UnicodeLatinMap::AT_hook_above, 0 },
341  { 0x0205, UnicodeLatinMap::CT_lower, 'e', 0, 0x0205, 0x0204,
342  UnicodeLatinMap::AT_double_grave, 0 },
343  { 0x0204, UnicodeLatinMap::CT_upper, 'E', 0, 0x0205, 0x0204,
344  UnicodeLatinMap::AT_double_grave, 0 },
345  { 0x0207, UnicodeLatinMap::CT_lower, 'e', 0, 0x0207, 0x0206,
346  UnicodeLatinMap::AT_inverted_breve, 0 },
347  { 0x0206, UnicodeLatinMap::CT_upper, 'E', 0, 0x0207, 0x0206,
348  UnicodeLatinMap::AT_inverted_breve, 0 },
349  { 0x1eb9, UnicodeLatinMap::CT_lower, 'e', 0, 0x1eb9, 0x1eb8,
350  UnicodeLatinMap::AT_dot_below, 0 },
351  { 0x1eb8, UnicodeLatinMap::CT_upper, 'E', 0, 0x1eb9, 0x1eb8,
352  UnicodeLatinMap::AT_dot_below, 0 },
353  { 0x1ec7, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec7, 0x1ec6,
354  UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
355  { 0x1ec6, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec7, 0x1ec6,
356  UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
357  { 0x1e19, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e19, 0x1e18,
358  UnicodeLatinMap::AT_circumflex_below, 0 },
359  { 0x1e18, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e19, 0x1e18,
360  UnicodeLatinMap::AT_circumflex_below, 0 },
361  { 0x1e1b, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e1b, 0x1e1a,
362  UnicodeLatinMap::AT_tilde_below, 0 },
363  { 0x1e1a, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e1b, 0x1e1a,
364  UnicodeLatinMap::AT_tilde_below, 0 },
365  { 0x01dd, UnicodeLatinMap::CT_lower, 'e', 0, 0x01dd, 0x0045,
366  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
367  { 0x018e, UnicodeLatinMap::CT_upper, 'E', 0, 0x0258, 0x018e,
368  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_reversed },
369  { 0x0258, UnicodeLatinMap::CT_lower, 'e', 0, 0x0258, 0x018e,
370  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_reversed },
371  { 0x0259, UnicodeLatinMap::CT_lower, 'e', 0, 0x0259, 0x018f,
372  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
373  { 0x0066, UnicodeLatinMap::CT_lower, 'f', 0, 0x0066, 0x0046,
374  UnicodeLatinMap::AT_none, 0 },
375  { 0x0046, UnicodeLatinMap::CT_upper, 'F', 0, 0x0066, 0x0046,
376  UnicodeLatinMap::AT_none, 0 },
377  { 0x1e1f, UnicodeLatinMap::CT_lower, 'f', 0, 0x1e1f, 0x1e1e,
378  UnicodeLatinMap::AT_dot_above, 0 },
379  { 0x1e1e, UnicodeLatinMap::CT_upper, 'F', 0, 0x1e1f, 0x1e1e,
380  UnicodeLatinMap::AT_dot_above, 0 },
381  { 0x0192, UnicodeLatinMap::CT_lower, 'f', 0, 0x0192, 0x0191,
382  UnicodeLatinMap::AT_hook, 0 },
383  { 0x0191, UnicodeLatinMap::CT_upper, 'F', 0, 0x0192, 0x0191,
384  UnicodeLatinMap::AT_hook, 0 },
385  { 0x0067, UnicodeLatinMap::CT_lower, 'g', 0, 0x0067, 0x0047,
386  UnicodeLatinMap::AT_none, 0 },
387  { 0x0047, UnicodeLatinMap::CT_upper, 'G', 0, 0x0067, 0x0047,
388  UnicodeLatinMap::AT_none, 0 },
389  { 0x01f5, UnicodeLatinMap::CT_lower, 'g', 0, 0x01f5, 0x01f4,
390  UnicodeLatinMap::AT_acute, 0 },
391  { 0x01f4, UnicodeLatinMap::CT_upper, 'G', 0, 0x01f5, 0x01f4,
392  UnicodeLatinMap::AT_acute, 0 },
393  { 0x011f, UnicodeLatinMap::CT_lower, 'g', 0, 0x011f, 0x011e,
394  UnicodeLatinMap::AT_breve, 0 },
395  { 0x011e, UnicodeLatinMap::CT_upper, 'G', 0, 0x011f, 0x011e,
396  UnicodeLatinMap::AT_breve, 0 },
397  { 0x011d, UnicodeLatinMap::CT_lower, 'g', 0, 0x011d, 0x011c,
398  UnicodeLatinMap::AT_circumflex, 0 },
399  { 0x011c, UnicodeLatinMap::CT_upper, 'G', 0, 0x011d, 0x011c,
400  UnicodeLatinMap::AT_circumflex, 0 },
401  { 0x01e7, UnicodeLatinMap::CT_lower, 'g', 0, 0x01e7, 0x01e6,
402  UnicodeLatinMap::AT_caron, 0 },
403  { 0x01e6, UnicodeLatinMap::CT_upper, 'G', 0, 0x01e7, 0x01e6,
404  UnicodeLatinMap::AT_caron, 0 },
405  { 0x0121, UnicodeLatinMap::CT_lower, 'g', 0, 0x0121, 0x0120,
406  UnicodeLatinMap::AT_dot_above, 0 },
407  { 0x0120, UnicodeLatinMap::CT_upper, 'G', 0, 0x0121, 0x0120,
408  UnicodeLatinMap::AT_dot_above, 0 },
409  { 0x0123, UnicodeLatinMap::CT_lower, 'g', 0, 0x0123, 0x0122,
410  UnicodeLatinMap::AT_cedilla, 0 },
411  { 0x0122, UnicodeLatinMap::CT_upper, 'G', 0, 0x0123, 0x0122,
412  UnicodeLatinMap::AT_cedilla, 0 },
413  { 0x1e21, UnicodeLatinMap::CT_lower, 'g', 0, 0x1e21, 0x1e20,
414  UnicodeLatinMap::AT_macron, 0 },
415  { 0x1e20, UnicodeLatinMap::CT_upper, 'G', 0, 0x1e21, 0x1e20,
416  UnicodeLatinMap::AT_macron, 0 },
417  { 0x0262, UnicodeLatinMap::CT_upper, 'G', 0, 0x0067, 0x0262,
418  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
419  { 0x01e5, UnicodeLatinMap::CT_lower, 'g', 0, 0x01e5, 0x01e4,
420  UnicodeLatinMap::AT_stroke, 0 },
421  { 0x01e4, UnicodeLatinMap::CT_upper, 'G', 0, 0x01e5, 0x01e4,
422  UnicodeLatinMap::AT_stroke, 0 },
423  { 0x0260, UnicodeLatinMap::CT_lower, 'g', 0, 0x0260, 0x0193,
424  UnicodeLatinMap::AT_hook, 0 },
425  { 0x0193, UnicodeLatinMap::CT_upper, 'G', 0, 0x0260, 0x0193,
426  UnicodeLatinMap::AT_hook, 0 },
427  { 0x029b, UnicodeLatinMap::CT_upper, 'G', 0, 0x0067, 0x029b,
428  UnicodeLatinMap::AT_hook, UnicodeLatinMap::AF_smallcap },
429  { 0x01a3, UnicodeLatinMap::CT_lower, 'o', 'i', 0x01a3, 0x01a2,
430  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
431  { 0x01a2, UnicodeLatinMap::CT_upper, 'O', 'I', 0x01a3, 0x01a2,
432  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
433  { 0x0068, UnicodeLatinMap::CT_lower, 'h', 0, 0x0068, 0x0048,
434  UnicodeLatinMap::AT_none, 0 },
435  { 0x0048, UnicodeLatinMap::CT_upper, 'H', 0, 0x0068, 0x0048,
436  UnicodeLatinMap::AT_none, 0 },
437  { 0x0125, UnicodeLatinMap::CT_lower, 'h', 0, 0x0125, 0x0124,
438  UnicodeLatinMap::AT_circumflex, 0 },
439  { 0x0124, UnicodeLatinMap::CT_upper, 'H', 0, 0x0125, 0x0124,
440  UnicodeLatinMap::AT_circumflex, 0 },
441  { 0x021f, UnicodeLatinMap::CT_lower, 'h', 0, 0x021f, 0x021e,
442  UnicodeLatinMap::AT_caron, 0 },
443  { 0x021e, UnicodeLatinMap::CT_upper, 'H', 0, 0x021f, 0x021e,
444  UnicodeLatinMap::AT_caron, 0 },
445  { 0x1e27, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e27, 0x1e26,
446  UnicodeLatinMap::AT_diaeresis, 0 },
447  { 0x1e26, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e27, 0x1e26,
448  UnicodeLatinMap::AT_diaeresis, 0 },
449  { 0x1e23, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e23, 0x1e22,
450  UnicodeLatinMap::AT_dot_above, 0 },
451  { 0x1e22, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e23, 0x1e22,
452  UnicodeLatinMap::AT_dot_above, 0 },
453  { 0x1e29, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e29, 0x1e28,
454  UnicodeLatinMap::AT_cedilla, 0 },
455  { 0x1e28, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e29, 0x1e28,
456  UnicodeLatinMap::AT_cedilla, 0 },
457  { 0x1e25, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e25, 0x1e24,
458  UnicodeLatinMap::AT_dot_below, 0 },
459  { 0x1e24, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e25, 0x1e24,
460  UnicodeLatinMap::AT_dot_below, 0 },
461  { 0x1e2b, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e2b, 0x1e2a,
462  UnicodeLatinMap::AT_breve_below, 0 },
463  { 0x1e2a, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e2b, 0x1e2a,
464  UnicodeLatinMap::AT_breve_below, 0 },
465  { 0x1e96, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e96, 0x0048,
466  UnicodeLatinMap::AT_line_below, 0 },
467  { 0x029c, UnicodeLatinMap::CT_upper, 'H', 0, 0x0068, 0x029c,
468  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
469  { 0x0195, UnicodeLatinMap::CT_lower, 'h', 'v', 0x0195, 0x01f6,
470  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
471  { 0x01f6, UnicodeLatinMap::CT_upper, 'H', 'v', 0x0195, 0x01f6,
472  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
473  { 0x0127, UnicodeLatinMap::CT_lower, 'h', 0, 0x0127, 0x0126,
474  UnicodeLatinMap::AT_stroke, 0 },
475  { 0x0126, UnicodeLatinMap::CT_upper, 'H', 0, 0x0127, 0x0126,
476  UnicodeLatinMap::AT_stroke, 0 },
477  { 0x0266, UnicodeLatinMap::CT_lower, 'h', 0, 0x0266, 0x0048,
478  UnicodeLatinMap::AT_hook, 0 },
479  { 0x0069, UnicodeLatinMap::CT_lower, 'i', 0, 0x0069, 0x0049,
480  UnicodeLatinMap::AT_none, 0 },
481  { 0x0049, UnicodeLatinMap::CT_upper, 'I', 0, 0x0069, 0x0049,
482  UnicodeLatinMap::AT_none, 0 },
483  { 0x00ed, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ed, 0x00cd,
484  UnicodeLatinMap::AT_acute, 0 },
485  { 0x00cd, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ed, 0x00cd,
486  UnicodeLatinMap::AT_acute, 0 },
487  { 0x00ec, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ec, 0x00cc,
488  UnicodeLatinMap::AT_grave, 0 },
489  { 0x00cc, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ec, 0x00cc,
490  UnicodeLatinMap::AT_grave, 0 },
491  { 0x012d, UnicodeLatinMap::CT_lower, 'i', 0, 0x012d, 0x012c,
492  UnicodeLatinMap::AT_breve, 0 },
493  { 0x012c, UnicodeLatinMap::CT_upper, 'I', 0, 0x012d, 0x012c,
494  UnicodeLatinMap::AT_breve, 0 },
495  { 0x00ee, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ee, 0x00ce,
496  UnicodeLatinMap::AT_circumflex, 0 },
497  { 0x00ce, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ee, 0x00ce,
498  UnicodeLatinMap::AT_circumflex, 0 },
499  { 0x01d0, UnicodeLatinMap::CT_lower, 'i', 0, 0x01d0, 0x01cf,
500  UnicodeLatinMap::AT_caron, 0 },
501  { 0x01cf, UnicodeLatinMap::CT_upper, 'I', 0, 0x01d0, 0x01cf,
502  UnicodeLatinMap::AT_caron, 0 },
503  { 0x00ef, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ef, 0x00cf,
504  UnicodeLatinMap::AT_diaeresis, 0 },
505  { 0x00cf, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ef, 0x00cf,
506  UnicodeLatinMap::AT_diaeresis, 0 },
507  { 0x1e2f, UnicodeLatinMap::CT_lower, 'i', 0, 0x1e2f, 0x1e2e,
508  UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
509  { 0x1e2e, UnicodeLatinMap::CT_upper, 'I', 0, 0x1e2f, 0x1e2e,
510  UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
511  { 0x0129, UnicodeLatinMap::CT_lower, 'i', 0, 0x0129, 0x0128,
512  UnicodeLatinMap::AT_tilde, 0 },
513  { 0x0128, UnicodeLatinMap::CT_upper, 'I', 0, 0x0129, 0x0128,
514  UnicodeLatinMap::AT_tilde, 0 },
515  { 0x0130, UnicodeLatinMap::CT_upper, 'I', 0, 0x0069, 0x0130,
516  UnicodeLatinMap::AT_dot_above, 0 },
517  { 0x012f, UnicodeLatinMap::CT_lower, 'i', 0, 0x012f, 0x012e,
518  UnicodeLatinMap::AT_ogonek, 0 },
519  { 0x012e, UnicodeLatinMap::CT_upper, 'I', 0, 0x012f, 0x012e,
520  UnicodeLatinMap::AT_ogonek, 0 },
521  { 0x012b, UnicodeLatinMap::CT_lower, 'i', 0, 0x012b, 0x012a,
522  UnicodeLatinMap::AT_macron, 0 },
523  { 0x012a, UnicodeLatinMap::CT_upper, 'I', 0, 0x012b, 0x012a,
524  UnicodeLatinMap::AT_macron, 0 },
525  { 0x1ec9, UnicodeLatinMap::CT_lower, 'i', 0, 0x1ec9, 0x1ec8,
526  UnicodeLatinMap::AT_hook_above, 0 },
527  { 0x1ec8, UnicodeLatinMap::CT_upper, 'I', 0, 0x1ec9, 0x1ec8,
528  UnicodeLatinMap::AT_hook_above, 0 },
529  { 0x0209, UnicodeLatinMap::CT_lower, 'i', 0, 0x0209, 0x0208,
530  UnicodeLatinMap::AT_double_grave, 0 },
531  { 0x0208, UnicodeLatinMap::CT_upper, 'I', 0, 0x0209, 0x0208,
532  UnicodeLatinMap::AT_double_grave, 0 },
533  { 0x020b, UnicodeLatinMap::CT_lower, 'i', 0, 0x020b, 0x020a,
534  UnicodeLatinMap::AT_inverted_breve, 0 },
535  { 0x020a, UnicodeLatinMap::CT_upper, 'I', 0, 0x020b, 0x020a,
536  UnicodeLatinMap::AT_inverted_breve, 0 },
537  { 0x1ecb, UnicodeLatinMap::CT_lower, 'i', 0, 0x1ecb, 0x1eca,
538  UnicodeLatinMap::AT_dot_below, 0 },
539  { 0x1eca, UnicodeLatinMap::CT_upper, 'I', 0, 0x1ecb, 0x1eca,
540  UnicodeLatinMap::AT_dot_below, 0 },
541  { 0x1e2d, UnicodeLatinMap::CT_lower, 'i', 0, 0x1e2d, 0x1e2c,
542  UnicodeLatinMap::AT_tilde_below, 0 },
543  { 0x1e2c, UnicodeLatinMap::CT_upper, 'I', 0, 0x1e2d, 0x1e2c,
544  UnicodeLatinMap::AT_tilde_below, 0 },
545  { 0x0131, UnicodeLatinMap::CT_lower, 'i', 0, 0x0131, 0x0049,
546  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_dotless },
547  { 0x026a, UnicodeLatinMap::CT_upper, 'I', 0, 0x0069, 0x026a,
548  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
549  { 0x0268, UnicodeLatinMap::CT_lower, 'i', 0, 0x0268, 0x0197,
550  UnicodeLatinMap::AT_stroke, 0 },
551  { 0x0197, UnicodeLatinMap::CT_upper, 'I', 0, 0x0268, 0x0197,
552  UnicodeLatinMap::AT_stroke, 0 },
553  { 0x006a, UnicodeLatinMap::CT_lower, 'j', 0, 0x006a, 0x004a,
554  UnicodeLatinMap::AT_none, 0 },
555  { 0x004a, UnicodeLatinMap::CT_upper, 'J', 0, 0x006a, 0x004a,
556  UnicodeLatinMap::AT_none, 0 },
557  { 0x0135, UnicodeLatinMap::CT_lower, 'j', 0, 0x0135, 0x0134,
558  UnicodeLatinMap::AT_circumflex, 0 },
559  { 0x0134, UnicodeLatinMap::CT_upper, 'J', 0, 0x0135, 0x0134,
560  UnicodeLatinMap::AT_circumflex, 0 },
561  { 0x01f0, UnicodeLatinMap::CT_lower, 'j', 0, 0x01f0, 0x004a,
562  UnicodeLatinMap::AT_caron, 0 },
563  { 0x025f, UnicodeLatinMap::CT_lower, 'j', 0, 0x025f, 0x004a,
564  UnicodeLatinMap::AT_stroke, UnicodeLatinMap::AF_dotless },
565  { 0x0284, UnicodeLatinMap::CT_lower, 'j', 0, 0x0284, 0x004a,
566  UnicodeLatinMap::AT_stroke_and_hook, UnicodeLatinMap::AF_dotless },
567  { 0x006b, UnicodeLatinMap::CT_lower, 'k', 0, 0x006b, 0x004b,
568  UnicodeLatinMap::AT_none, 0 },
569  { 0x004b, UnicodeLatinMap::CT_upper, 'K', 0, 0x006b, 0x004b,
570  UnicodeLatinMap::AT_none, 0 },
571  { 0x1e31, UnicodeLatinMap::CT_lower, 'k', 0, 0x1e31, 0x1e30,
572  UnicodeLatinMap::AT_acute, 0 },
573  { 0x1e30, UnicodeLatinMap::CT_upper, 'K', 0, 0x1e31, 0x1e30,
574  UnicodeLatinMap::AT_acute, 0 },
575  { 0x01e9, UnicodeLatinMap::CT_lower, 'k', 0, 0x01e9, 0x01e8,
576  UnicodeLatinMap::AT_caron, 0 },
577  { 0x01e8, UnicodeLatinMap::CT_upper, 'K', 0, 0x01e9, 0x01e8,
578  UnicodeLatinMap::AT_caron, 0 },
579  { 0x0137, UnicodeLatinMap::CT_lower, 'k', 0, 0x0137, 0x0136,
580  UnicodeLatinMap::AT_cedilla, 0 },
581  { 0x0136, UnicodeLatinMap::CT_upper, 'K', 0, 0x0137, 0x0136,
582  UnicodeLatinMap::AT_cedilla, 0 },
583  { 0x1e33, UnicodeLatinMap::CT_lower, 'k', 0, 0x1e33, 0x1e32,
584  UnicodeLatinMap::AT_dot_below, 0 },
585  { 0x1e32, UnicodeLatinMap::CT_upper, 'K', 0, 0x1e33, 0x1e32,
586  UnicodeLatinMap::AT_dot_below, 0 },
587  { 0x1e35, UnicodeLatinMap::CT_lower, 'k', 0, 0x1e35, 0x1e34,
588  UnicodeLatinMap::AT_line_below, 0 },
589  { 0x1e34, UnicodeLatinMap::CT_upper, 'K', 0, 0x1e35, 0x1e34,
590  UnicodeLatinMap::AT_line_below, 0 },
591  { 0x0199, UnicodeLatinMap::CT_lower, 'k', 0, 0x0199, 0x0198,
592  UnicodeLatinMap::AT_hook, 0 },
593  { 0x0198, UnicodeLatinMap::CT_upper, 'K', 0, 0x0199, 0x0198,
594  UnicodeLatinMap::AT_hook, 0 },
595  { 0x029e, UnicodeLatinMap::CT_lower, 'k', 0, 0x029e, 0x004b,
596  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
597  { 0x006c, UnicodeLatinMap::CT_lower, 'l', 0, 0x006c, 0x004c,
598  UnicodeLatinMap::AT_none, 0 },
599  { 0x004c, UnicodeLatinMap::CT_upper, 'L', 0, 0x006c, 0x004c,
600  UnicodeLatinMap::AT_none, 0 },
601  { 0x013a, UnicodeLatinMap::CT_lower, 'l', 0, 0x013a, 0x0139,
602  UnicodeLatinMap::AT_acute, 0 },
603  { 0x0139, UnicodeLatinMap::CT_upper, 'L', 0, 0x013a, 0x0139,
604  UnicodeLatinMap::AT_acute, 0 },
605  { 0x013e, UnicodeLatinMap::CT_lower, 'l', 0, 0x013e, 0x013d,
606  UnicodeLatinMap::AT_caron, 0 },
607  { 0x013d, UnicodeLatinMap::CT_upper, 'L', 0, 0x013e, 0x013d,
608  UnicodeLatinMap::AT_caron, 0 },
609  { 0x013c, UnicodeLatinMap::CT_lower, 'l', 0, 0x013c, 0x013b,
610  UnicodeLatinMap::AT_cedilla, 0 },
611  { 0x013b, UnicodeLatinMap::CT_upper, 'L', 0, 0x013c, 0x013b,
612  UnicodeLatinMap::AT_cedilla, 0 },
613  { 0x1e37, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e37, 0x1e36,
614  UnicodeLatinMap::AT_dot_below, 0 },
615  { 0x1e36, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e37, 0x1e36,
616  UnicodeLatinMap::AT_dot_below, 0 },
617  { 0x1e39, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e39, 0x1e38,
618  UnicodeLatinMap::AT_dot_below_and_macron, 0 },
619  { 0x1e38, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e39, 0x1e38,
620  UnicodeLatinMap::AT_dot_below_and_macron, 0 },
621  { 0x1e3d, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e3d, 0x1e3c,
622  UnicodeLatinMap::AT_circumflex_below, 0 },
623  { 0x1e3c, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e3d, 0x1e3c,
624  UnicodeLatinMap::AT_circumflex_below, 0 },
625  { 0x1e3b, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e3b, 0x1e3a,
626  UnicodeLatinMap::AT_line_below, 0 },
627  { 0x1e3a, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e3b, 0x1e3a,
628  UnicodeLatinMap::AT_line_below, 0 },
629  { 0x01c9, UnicodeLatinMap::CT_lower, 'l', 'j', 0x01c9, 0x01c7,
630  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
631  { 0x01c8, UnicodeLatinMap::CT_upper, 'L', 'j', 0x01c9, 0x01c7,
632  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
633  { 0x01c7, UnicodeLatinMap::CT_upper, 'L', 'J', 0x01c9, 0x01c7,
634  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
635  { 0x029f, UnicodeLatinMap::CT_upper, 'L', 0, 0x006c, 0x029f,
636  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
637  { 0x0142, UnicodeLatinMap::CT_lower, 'l', 0, 0x0142, 0x0141,
638  UnicodeLatinMap::AT_stroke, 0 },
639  { 0x0141, UnicodeLatinMap::CT_upper, 'L', 0, 0x0142, 0x0141,
640  UnicodeLatinMap::AT_stroke, 0 },
641  { 0x028e, UnicodeLatinMap::CT_lower, 'y', 0, 0x028e, 0x0059,
642  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
643  { 0x006d, UnicodeLatinMap::CT_lower, 'm', 0, 0x006d, 0x004d,
644  UnicodeLatinMap::AT_none, 0 },
645  { 0x004d, UnicodeLatinMap::CT_upper, 'M', 0, 0x006d, 0x004d,
646  UnicodeLatinMap::AT_none, 0 },
647  { 0x1e3f, UnicodeLatinMap::CT_lower, 'm', 0, 0x1e3f, 0x1e3e,
648  UnicodeLatinMap::AT_acute, 0 },
649  { 0x1e3e, UnicodeLatinMap::CT_upper, 'M', 0, 0x1e3f, 0x1e3e,
650  UnicodeLatinMap::AT_acute, 0 },
651  { 0x1e41, UnicodeLatinMap::CT_lower, 'm', 0, 0x1e41, 0x1e40,
652  UnicodeLatinMap::AT_dot_above, 0 },
653  { 0x1e40, UnicodeLatinMap::CT_upper, 'M', 0, 0x1e41, 0x1e40,
654  UnicodeLatinMap::AT_dot_above, 0 },
655  { 0x1e43, UnicodeLatinMap::CT_lower, 'm', 0, 0x1e43, 0x1e42,
656  UnicodeLatinMap::AT_dot_below, 0 },
657  { 0x1e42, UnicodeLatinMap::CT_upper, 'M', 0, 0x1e43, 0x1e42,
658  UnicodeLatinMap::AT_dot_below, 0 },
659  { 0x0271, UnicodeLatinMap::CT_lower, 'm', 0, 0x0271, 0x004d,
660  UnicodeLatinMap::AT_hook, 0 },
661  { 0x006e, UnicodeLatinMap::CT_lower, 'n', 0, 0x006e, 0x004e,
662  UnicodeLatinMap::AT_none, 0 },
663  { 0x004e, UnicodeLatinMap::CT_upper, 'N', 0, 0x006e, 0x004e,
664  UnicodeLatinMap::AT_none, 0 },
665  { 0x0144, UnicodeLatinMap::CT_lower, 'n', 0, 0x0144, 0x0143,
666  UnicodeLatinMap::AT_acute, 0 },
667  { 0x0143, UnicodeLatinMap::CT_upper, 'N', 0, 0x0144, 0x0143,
668  UnicodeLatinMap::AT_acute, 0 },
669  { 0x01f9, UnicodeLatinMap::CT_lower, 'n', 0, 0x01f9, 0x01f8,
670  UnicodeLatinMap::AT_grave, 0 },
671  { 0x01f8, UnicodeLatinMap::CT_upper, 'N', 0, 0x01f9, 0x01f8,
672  UnicodeLatinMap::AT_grave, 0 },
673  { 0x0148, UnicodeLatinMap::CT_lower, 'n', 0, 0x0148, 0x0147,
674  UnicodeLatinMap::AT_caron, 0 },
675  { 0x0147, UnicodeLatinMap::CT_upper, 'N', 0, 0x0148, 0x0147,
676  UnicodeLatinMap::AT_caron, 0 },
677  { 0x00f1, UnicodeLatinMap::CT_lower, 'n', 0, 0x00f1, 0x00d1,
678  UnicodeLatinMap::AT_tilde, 0 },
679  { 0x00d1, UnicodeLatinMap::CT_upper, 'N', 0, 0x00f1, 0x00d1,
680  UnicodeLatinMap::AT_tilde, 0 },
681  { 0x1e45, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e45, 0x1e44,
682  UnicodeLatinMap::AT_dot_above, 0 },
683  { 0x1e44, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e45, 0x1e44,
684  UnicodeLatinMap::AT_dot_above, 0 },
685  { 0x0146, UnicodeLatinMap::CT_lower, 'n', 0, 0x0146, 0x0145,
686  UnicodeLatinMap::AT_cedilla, 0 },
687  { 0x0145, UnicodeLatinMap::CT_upper, 'N', 0, 0x0146, 0x0145,
688  UnicodeLatinMap::AT_cedilla, 0 },
689  { 0x1e47, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e47, 0x1e46,
690  UnicodeLatinMap::AT_dot_below, 0 },
691  { 0x1e46, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e47, 0x1e46,
692  UnicodeLatinMap::AT_dot_below, 0 },
693  { 0x1e4b, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e4b, 0x1e4a,
694  UnicodeLatinMap::AT_circumflex_below, 0 },
695  { 0x1e4a, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e4b, 0x1e4a,
696  UnicodeLatinMap::AT_circumflex_below, 0 },
697  { 0x1e49, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e49, 0x1e48,
698  UnicodeLatinMap::AT_line_below, 0 },
699  { 0x1e48, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e49, 0x1e48,
700  UnicodeLatinMap::AT_line_below, 0 },
701  { 0x01cc, UnicodeLatinMap::CT_lower, 'n', 'j', 0x01cc, 0x01ca,
702  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
703  { 0x01cb, UnicodeLatinMap::CT_upper, 'N', 'j', 0x01cc, 0x01ca,
704  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
705  { 0x01ca, UnicodeLatinMap::CT_upper, 'N', 'J', 0x01cc, 0x01ca,
706  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
707  { 0x0274, UnicodeLatinMap::CT_upper, 'N', 0, 0x006e, 0x0274,
708  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
709  { 0x006f, UnicodeLatinMap::CT_lower, 'o', 0, 0x006f, 0x004f,
710  UnicodeLatinMap::AT_none, 0 },
711  { 0x004f, UnicodeLatinMap::CT_upper, 'O', 0, 0x006f, 0x004f,
712  UnicodeLatinMap::AT_none, 0 },
713  { 0x00f3, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f3, 0x00d3,
714  UnicodeLatinMap::AT_acute, 0 },
715  { 0x00d3, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f3, 0x00d3,
716  UnicodeLatinMap::AT_acute, 0 },
717  { 0x00f2, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f2, 0x00d2,
718  UnicodeLatinMap::AT_grave, 0 },
719  { 0x00d2, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f2, 0x00d2,
720  UnicodeLatinMap::AT_grave, 0 },
721  { 0x014f, UnicodeLatinMap::CT_lower, 'o', 0, 0x014f, 0x014e,
722  UnicodeLatinMap::AT_breve, 0 },
723  { 0x014e, UnicodeLatinMap::CT_upper, 'O', 0, 0x014f, 0x014e,
724  UnicodeLatinMap::AT_breve, 0 },
725  { 0x00f4, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f4, 0x00d4,
726  UnicodeLatinMap::AT_circumflex, 0 },
727  { 0x00d4, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f4, 0x00d4,
728  UnicodeLatinMap::AT_circumflex, 0 },
729  { 0x1ed1, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed1, 0x1ed0,
730  UnicodeLatinMap::AT_circumflex_and_acute, 0 },
731  { 0x1ed0, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed1, 0x1ed0,
732  UnicodeLatinMap::AT_circumflex_and_acute, 0 },
733  { 0x1ed3, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed3, 0x1ed2,
734  UnicodeLatinMap::AT_circumflex_and_grave, 0 },
735  { 0x1ed2, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed3, 0x1ed2,
736  UnicodeLatinMap::AT_circumflex_and_grave, 0 },
737  { 0x1ed7, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed7, 0x1ed6,
738  UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
739  { 0x1ed6, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed7, 0x1ed6,
740  UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
741  { 0x1ed5, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed5, 0x1ed4,
742  UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
743  { 0x1ed4, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed5, 0x1ed4,
744  UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
745  { 0x01d2, UnicodeLatinMap::CT_lower, 'o', 0, 0x01d2, 0x01d1,
746  UnicodeLatinMap::AT_caron, 0 },
747  { 0x01d1, UnicodeLatinMap::CT_upper, 'O', 0, 0x01d2, 0x01d1,
748  UnicodeLatinMap::AT_caron, 0 },
749  { 0x00f6, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f6, 0x00d6,
750  UnicodeLatinMap::AT_diaeresis, 0 },
751  { 0x00d6, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f6, 0x00d6,
752  UnicodeLatinMap::AT_diaeresis, 0 },
753  { 0x022b, UnicodeLatinMap::CT_lower, 'o', 0, 0x022b, 0x022a,
754  UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
755  { 0x022a, UnicodeLatinMap::CT_upper, 'O', 0, 0x022b, 0x022a,
756  UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
757  { 0x0151, UnicodeLatinMap::CT_lower, 'o', 0, 0x0151, 0x0150,
758  UnicodeLatinMap::AT_double_acute, 0 },
759  { 0x0150, UnicodeLatinMap::CT_upper, 'O', 0, 0x0151, 0x0150,
760  UnicodeLatinMap::AT_double_acute, 0 },
761  { 0x00f5, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f5, 0x00d5,
762  UnicodeLatinMap::AT_tilde, 0 },
763  { 0x00d5, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f5, 0x00d5,
764  UnicodeLatinMap::AT_tilde, 0 },
765  { 0x1e4d, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e4d, 0x1e4c,
766  UnicodeLatinMap::AT_tilde_and_acute, 0 },
767  { 0x1e4c, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e4d, 0x1e4c,
768  UnicodeLatinMap::AT_tilde_and_acute, 0 },
769  { 0x1e4f, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e4f, 0x1e4e,
770  UnicodeLatinMap::AT_tilde_and_diaeresis, 0 },
771  { 0x1e4e, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e4f, 0x1e4e,
772  UnicodeLatinMap::AT_tilde_and_diaeresis, 0 },
773  { 0x022d, UnicodeLatinMap::CT_lower, 'o', 0, 0x022d, 0x022c,
774  UnicodeLatinMap::AT_tilde_and_macron, 0 },
775  { 0x022c, UnicodeLatinMap::CT_upper, 'O', 0, 0x022d, 0x022c,
776  UnicodeLatinMap::AT_tilde_and_macron, 0 },
777  { 0x022f, UnicodeLatinMap::CT_lower, 'o', 0, 0x022f, 0x022e,
778  UnicodeLatinMap::AT_dot_above, 0 },
779  { 0x022e, UnicodeLatinMap::CT_upper, 'O', 0, 0x022f, 0x022e,
780  UnicodeLatinMap::AT_dot_above, 0 },
781  { 0x0231, UnicodeLatinMap::CT_lower, 'o', 0, 0x0231, 0x0230,
782  UnicodeLatinMap::AT_dot_above_and_macron, 0 },
783  { 0x0230, UnicodeLatinMap::CT_upper, 'O', 0, 0x0231, 0x0230,
784  UnicodeLatinMap::AT_dot_above_and_macron, 0 },
785  { 0x01eb, UnicodeLatinMap::CT_lower, 'o', 0, 0x01eb, 0x01ea,
786  UnicodeLatinMap::AT_ogonek, 0 },
787  { 0x01ea, UnicodeLatinMap::CT_upper, 'O', 0, 0x01eb, 0x01ea,
788  UnicodeLatinMap::AT_ogonek, 0 },
789  { 0x01ed, UnicodeLatinMap::CT_lower, 'o', 0, 0x01ed, 0x01ec,
790  UnicodeLatinMap::AT_ogonek_and_macron, 0 },
791  { 0x01ec, UnicodeLatinMap::CT_upper, 'O', 0, 0x01ed, 0x01ec,
792  UnicodeLatinMap::AT_ogonek_and_macron, 0 },
793  { 0x014d, UnicodeLatinMap::CT_lower, 'o', 0, 0x014d, 0x014c,
794  UnicodeLatinMap::AT_macron, 0 },
795  { 0x014c, UnicodeLatinMap::CT_upper, 'O', 0, 0x014d, 0x014c,
796  UnicodeLatinMap::AT_macron, 0 },
797  { 0x1e53, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e53, 0x1e52,
798  UnicodeLatinMap::AT_macron_and_acute, 0 },
799  { 0x1e52, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e53, 0x1e52,
800  UnicodeLatinMap::AT_macron_and_acute, 0 },
801  { 0x1e51, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e51, 0x1e50,
802  UnicodeLatinMap::AT_macron_and_grave, 0 },
803  { 0x1e50, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e51, 0x1e50,
804  UnicodeLatinMap::AT_macron_and_grave, 0 },
805  { 0x1ecf, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ecf, 0x1ece,
806  UnicodeLatinMap::AT_hook_above, 0 },
807  { 0x1ece, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ecf, 0x1ece,
808  UnicodeLatinMap::AT_hook_above, 0 },
809  { 0x020d, UnicodeLatinMap::CT_lower, 'o', 0, 0x020d, 0x020c,
810  UnicodeLatinMap::AT_double_grave, 0 },
811  { 0x020c, UnicodeLatinMap::CT_upper, 'O', 0, 0x020d, 0x020c,
812  UnicodeLatinMap::AT_double_grave, 0 },
813  { 0x020f, UnicodeLatinMap::CT_lower, 'o', 0, 0x020f, 0x020e,
814  UnicodeLatinMap::AT_inverted_breve, 0 },
815  { 0x020e, UnicodeLatinMap::CT_upper, 'O', 0, 0x020f, 0x020e,
816  UnicodeLatinMap::AT_inverted_breve, 0 },
817  { 0x01a1, UnicodeLatinMap::CT_lower, 'o', 0, 0x01a1, 0x01a0,
818  UnicodeLatinMap::AT_horn, 0 },
819  { 0x01a0, UnicodeLatinMap::CT_upper, 'O', 0, 0x01a1, 0x01a0,
820  UnicodeLatinMap::AT_horn, 0 },
821  { 0x1edb, UnicodeLatinMap::CT_lower, 'o', 0, 0x1edb, 0x1eda,
822  UnicodeLatinMap::AT_horn_and_acute, 0 },
823  { 0x1eda, UnicodeLatinMap::CT_upper, 'O', 0, 0x1edb, 0x1eda,
824  UnicodeLatinMap::AT_horn_and_acute, 0 },
825  { 0x1edd, UnicodeLatinMap::CT_lower, 'o', 0, 0x1edd, 0x1edc,
826  UnicodeLatinMap::AT_horn_and_grave, 0 },
827  { 0x1edc, UnicodeLatinMap::CT_upper, 'O', 0, 0x1edd, 0x1edc,
828  UnicodeLatinMap::AT_horn_and_grave, 0 },
829  { 0x1ee1, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ee1, 0x1ee0,
830  UnicodeLatinMap::AT_horn_and_tilde, 0 },
831  { 0x1ee0, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ee1, 0x1ee0,
832  UnicodeLatinMap::AT_horn_and_tilde, 0 },
833  { 0x1edf, UnicodeLatinMap::CT_lower, 'o', 0, 0x1edf, 0x1ede,
834  UnicodeLatinMap::AT_horn_and_hook_above, 0 },
835  { 0x1ede, UnicodeLatinMap::CT_upper, 'O', 0, 0x1edf, 0x1ede,
836  UnicodeLatinMap::AT_horn_and_hook_above, 0 },
837  { 0x1ee3, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ee3, 0x1ee2,
838  UnicodeLatinMap::AT_horn_and_dot_below, 0 },
839  { 0x1ee2, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ee3, 0x1ee2,
840  UnicodeLatinMap::AT_horn_and_dot_below, 0 },
841  { 0x1ecd, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ecd, 0x1ecc,
842  UnicodeLatinMap::AT_dot_below, 0 },
843  { 0x1ecc, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ecd, 0x1ecc,
844  UnicodeLatinMap::AT_dot_below, 0 },
845  { 0x1ed9, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed9, 0x1ed8,
846  UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
847  { 0x1ed8, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed9, 0x1ed8,
848  UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
849  { 0x0153, UnicodeLatinMap::CT_lower, 'o', 'e', 0x0153, 0x0152,
850  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
851  { 0x0152, UnicodeLatinMap::CT_upper, 'O', 'E', 0x0153, 0x0152,
852  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
853  { 0x0276, UnicodeLatinMap::CT_upper, 'O', 'E', 0x0153, 0x0276,
854  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap | UnicodeLatinMap::AF_ligature },
855  { 0x00f8, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f8, 0x00d8,
856  UnicodeLatinMap::AT_stroke, 0 },
857  { 0x00d8, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f8, 0x00d8,
858  UnicodeLatinMap::AT_stroke, 0 },
859  { 0x01ff, UnicodeLatinMap::CT_lower, 'o', 0, 0x01ff, 0x01fe,
860  UnicodeLatinMap::AT_stroke_and_acute, 0 },
861  { 0x01fe, UnicodeLatinMap::CT_upper, 'O', 0, 0x01ff, 0x01fe,
862  UnicodeLatinMap::AT_stroke_and_acute, 0 },
863  { 0x0070, UnicodeLatinMap::CT_lower, 'p', 0, 0x0070, 0x0050,
864  UnicodeLatinMap::AT_none, 0 },
865  { 0x0050, UnicodeLatinMap::CT_upper, 'P', 0, 0x0070, 0x0050,
866  UnicodeLatinMap::AT_none, 0 },
867  { 0x1e55, UnicodeLatinMap::CT_lower, 'p', 0, 0x1e55, 0x1e54,
868  UnicodeLatinMap::AT_acute, 0 },
869  { 0x1e54, UnicodeLatinMap::CT_upper, 'P', 0, 0x1e55, 0x1e54,
870  UnicodeLatinMap::AT_acute, 0 },
871  { 0x1e57, UnicodeLatinMap::CT_lower, 'p', 0, 0x1e57, 0x1e56,
872  UnicodeLatinMap::AT_dot_above, 0 },
873  { 0x1e56, UnicodeLatinMap::CT_upper, 'P', 0, 0x1e57, 0x1e56,
874  UnicodeLatinMap::AT_dot_above, 0 },
875  { 0x01a5, UnicodeLatinMap::CT_lower, 'p', 0, 0x01a5, 0x01a4,
876  UnicodeLatinMap::AT_hook, 0 },
877  { 0x01a4, UnicodeLatinMap::CT_upper, 'P', 0, 0x01a5, 0x01a4,
878  UnicodeLatinMap::AT_hook, 0 },
879  { 0x0071, UnicodeLatinMap::CT_lower, 'q', 0, 0x0071, 0x0051,
880  UnicodeLatinMap::AT_none, 0 },
881  { 0x0051, UnicodeLatinMap::CT_upper, 'Q', 0, 0x0071, 0x0051,
882  UnicodeLatinMap::AT_none, 0 },
883  { 0x02a0, UnicodeLatinMap::CT_lower, 'q', 0, 0x02a0, 0x0051,
884  UnicodeLatinMap::AT_hook, 0 },
885  { 0x0072, UnicodeLatinMap::CT_lower, 'r', 0, 0x0072, 0x0052,
886  UnicodeLatinMap::AT_none, 0 },
887  { 0x0052, UnicodeLatinMap::CT_upper, 'R', 0, 0x0072, 0x0052,
888  UnicodeLatinMap::AT_none, 0 },
889  { 0x0155, UnicodeLatinMap::CT_lower, 'r', 0, 0x0155, 0x0154,
890  UnicodeLatinMap::AT_acute, 0 },
891  { 0x0154, UnicodeLatinMap::CT_upper, 'R', 0, 0x0155, 0x0154,
892  UnicodeLatinMap::AT_acute, 0 },
893  { 0x0159, UnicodeLatinMap::CT_lower, 'r', 0, 0x0159, 0x0158,
894  UnicodeLatinMap::AT_caron, 0 },
895  { 0x0158, UnicodeLatinMap::CT_upper, 'R', 0, 0x0159, 0x0158,
896  UnicodeLatinMap::AT_caron, 0 },
897  { 0x1e59, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e59, 0x1e58,
898  UnicodeLatinMap::AT_dot_above, 0 },
899  { 0x1e58, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e59, 0x1e58,
900  UnicodeLatinMap::AT_dot_above, 0 },
901  { 0x0157, UnicodeLatinMap::CT_lower, 'r', 0, 0x0157, 0x0156,
902  UnicodeLatinMap::AT_cedilla, 0 },
903  { 0x0156, UnicodeLatinMap::CT_upper, 'R', 0, 0x0157, 0x0156,
904  UnicodeLatinMap::AT_cedilla, 0 },
905  { 0x0211, UnicodeLatinMap::CT_lower, 'r', 0, 0x0211, 0x0210,
906  UnicodeLatinMap::AT_double_grave, 0 },
907  { 0x0210, UnicodeLatinMap::CT_upper, 'R', 0, 0x0211, 0x0210,
908  UnicodeLatinMap::AT_double_grave, 0 },
909  { 0x0213, UnicodeLatinMap::CT_lower, 'r', 0, 0x0213, 0x0212,
910  UnicodeLatinMap::AT_inverted_breve, 0 },
911  { 0x0212, UnicodeLatinMap::CT_upper, 'R', 0, 0x0213, 0x0212,
912  UnicodeLatinMap::AT_inverted_breve, 0 },
913  { 0x1e5b, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e5b, 0x1e5a,
914  UnicodeLatinMap::AT_dot_below, 0 },
915  { 0x1e5a, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e5b, 0x1e5a,
916  UnicodeLatinMap::AT_dot_below, 0 },
917  { 0x1e5d, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e5d, 0x1e5c,
918  UnicodeLatinMap::AT_dot_below_and_macron, 0 },
919  { 0x1e5c, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e5d, 0x1e5c,
920  UnicodeLatinMap::AT_dot_below_and_macron, 0 },
921  { 0x1e5f, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e5f, 0x1e5e,
922  UnicodeLatinMap::AT_line_below, 0 },
923  { 0x1e5e, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e5f, 0x1e5e,
924  UnicodeLatinMap::AT_line_below, 0 },
925  { 0x0280, UnicodeLatinMap::CT_upper, 'R', 0, 0x0072, 0x0280,
926  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
927  { 0x0279, UnicodeLatinMap::CT_lower, 'r', 0, 0x0279, 0x0052,
928  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
929  { 0x027b, UnicodeLatinMap::CT_lower, 'r', 0, 0x027b, 0x0052,
930  UnicodeLatinMap::AT_hook, UnicodeLatinMap::AF_turned },
931  { 0x0281, UnicodeLatinMap::CT_upper, 'R', 0, 0x0072, 0x0281,
932  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned | UnicodeLatinMap::AF_smallcap },
933  { 0x0073, UnicodeLatinMap::CT_lower, 's', 0, 0x0073, 0x0053,
934  UnicodeLatinMap::AT_none, 0 },
935  { 0x0053, UnicodeLatinMap::CT_upper, 'S', 0, 0x0073, 0x0053,
936  UnicodeLatinMap::AT_none, 0 },
937  { 0x015b, UnicodeLatinMap::CT_lower, 's', 0, 0x015b, 0x015a,
938  UnicodeLatinMap::AT_acute, 0 },
939  { 0x015a, UnicodeLatinMap::CT_upper, 'S', 0, 0x015b, 0x015a,
940  UnicodeLatinMap::AT_acute, 0 },
941  { 0x1e65, UnicodeLatinMap::CT_lower, 's', 0, 0x1e65, 0x1e64,
942  UnicodeLatinMap::AT_acute_and_dot_above, 0 },
943  { 0x1e64, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e65, 0x1e64,
944  UnicodeLatinMap::AT_acute_and_dot_above, 0 },
945  { 0x015d, UnicodeLatinMap::CT_lower, 's', 0, 0x015d, 0x015c,
946  UnicodeLatinMap::AT_circumflex, 0 },
947  { 0x015c, UnicodeLatinMap::CT_upper, 'S', 0, 0x015d, 0x015c,
948  UnicodeLatinMap::AT_circumflex, 0 },
949  { 0x0161, UnicodeLatinMap::CT_lower, 's', 0, 0x0161, 0x0160,
950  UnicodeLatinMap::AT_caron, 0 },
951  { 0x0160, UnicodeLatinMap::CT_upper, 'S', 0, 0x0161, 0x0160,
952  UnicodeLatinMap::AT_caron, 0 },
953  { 0x1e67, UnicodeLatinMap::CT_lower, 's', 0, 0x1e67, 0x1e66,
954  UnicodeLatinMap::AT_caron_and_dot_above, 0 },
955  { 0x1e66, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e67, 0x1e66,
956  UnicodeLatinMap::AT_caron_and_dot_above, 0 },
957  { 0x1e61, UnicodeLatinMap::CT_lower, 's', 0, 0x1e61, 0x1e60,
958  UnicodeLatinMap::AT_dot_above, 0 },
959  { 0x1e60, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e61, 0x1e60,
960  UnicodeLatinMap::AT_dot_above, 0 },
961  { 0x015f, UnicodeLatinMap::CT_lower, 's', 0, 0x015f, 0x015e,
962  UnicodeLatinMap::AT_cedilla, 0 },
963  { 0x015e, UnicodeLatinMap::CT_upper, 'S', 0, 0x015f, 0x015e,
964  UnicodeLatinMap::AT_cedilla, 0 },
965  { 0x1e63, UnicodeLatinMap::CT_lower, 's', 0, 0x1e63, 0x1e62,
966  UnicodeLatinMap::AT_dot_below, 0 },
967  { 0x1e62, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e63, 0x1e62,
968  UnicodeLatinMap::AT_dot_below, 0 },
969  { 0x1e69, UnicodeLatinMap::CT_lower, 's', 0, 0x1e69, 0x1e68,
970  UnicodeLatinMap::AT_dot_below_and_dot_above, 0 },
971  { 0x1e68, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e69, 0x1e68,
972  UnicodeLatinMap::AT_dot_below_and_dot_above, 0 },
973  { 0x0219, UnicodeLatinMap::CT_lower, 's', 0, 0x0219, 0x0218,
974  UnicodeLatinMap::AT_comma_below, 0 },
975  { 0x0218, UnicodeLatinMap::CT_upper, 'S', 0, 0x0219, 0x0218,
976  UnicodeLatinMap::AT_comma_below, 0 },
977  { 0x00df, UnicodeLatinMap::CT_lower, 's', 's', 0x00df, 0x00df,
978  UnicodeLatinMap::AT_none, 0 },
979  { 0x0282, UnicodeLatinMap::CT_lower, 's', 0, 0x0282, 0x0053,
980  UnicodeLatinMap::AT_hook, 0 },
981  { 0x0074, UnicodeLatinMap::CT_lower, 't', 0, 0x0074, 0x0054,
982  UnicodeLatinMap::AT_none, 0 },
983  { 0x0054, UnicodeLatinMap::CT_upper, 'T', 0, 0x0074, 0x0054,
984  UnicodeLatinMap::AT_none, 0 },
985  { 0x0165, UnicodeLatinMap::CT_lower, 't', 0, 0x0165, 0x0164,
986  UnicodeLatinMap::AT_caron, 0 },
987  { 0x0164, UnicodeLatinMap::CT_upper, 'T', 0, 0x0165, 0x0164,
988  UnicodeLatinMap::AT_caron, 0 },
989  { 0x1e97, UnicodeLatinMap::CT_lower, 't', 0, 0x1e97, 0x0054,
990  UnicodeLatinMap::AT_diaeresis, 0 },
991  { 0x1e6b, UnicodeLatinMap::CT_lower, 't', 0, 0x1e6b, 0x1e6a,
992  UnicodeLatinMap::AT_dot_above, 0 },
993  { 0x1e6a, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e6b, 0x1e6a,
994  UnicodeLatinMap::AT_dot_above, 0 },
995  { 0x0163, UnicodeLatinMap::CT_lower, 't', 0, 0x0163, 0x0162,
996  UnicodeLatinMap::AT_cedilla, 0 },
997  { 0x0162, UnicodeLatinMap::CT_upper, 'T', 0, 0x0163, 0x0162,
998  UnicodeLatinMap::AT_cedilla, 0 },
999  { 0x1e6d, UnicodeLatinMap::CT_lower, 't', 0, 0x1e6d, 0x1e6c,
1000  UnicodeLatinMap::AT_dot_below, 0 },
1001  { 0x1e6c, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e6d, 0x1e6c,
1002  UnicodeLatinMap::AT_dot_below, 0 },
1003  { 0x021b, UnicodeLatinMap::CT_lower, 't', 0, 0x021b, 0x021a,
1004  UnicodeLatinMap::AT_comma_below, 0 },
1005  { 0x021a, UnicodeLatinMap::CT_upper, 'T', 0, 0x021b, 0x021a,
1006  UnicodeLatinMap::AT_comma_below, 0 },
1007  { 0x1e71, UnicodeLatinMap::CT_lower, 't', 0, 0x1e71, 0x1e70,
1008  UnicodeLatinMap::AT_circumflex_below, 0 },
1009  { 0x1e70, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e71, 0x1e70,
1010  UnicodeLatinMap::AT_circumflex_below, 0 },
1011  { 0x1e6f, UnicodeLatinMap::CT_lower, 't', 0, 0x1e6f, 0x1e6e,
1012  UnicodeLatinMap::AT_line_below, 0 },
1013  { 0x1e6e, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e6f, 0x1e6e,
1014  UnicodeLatinMap::AT_line_below, 0 },
1015  { 0x0167, UnicodeLatinMap::CT_lower, 't', 0, 0x0167, 0x0166,
1016  UnicodeLatinMap::AT_stroke, 0 },
1017  { 0x0166, UnicodeLatinMap::CT_upper, 'T', 0, 0x0167, 0x0166,
1018  UnicodeLatinMap::AT_stroke, 0 },
1019  { 0x01ad, UnicodeLatinMap::CT_lower, 't', 0, 0x01ad, 0x01ac,
1020  UnicodeLatinMap::AT_hook, 0 },
1021  { 0x01ac, UnicodeLatinMap::CT_upper, 'T', 0, 0x01ad, 0x01ac,
1022  UnicodeLatinMap::AT_hook, 0 },
1023  { 0x0287, UnicodeLatinMap::CT_lower, 't', 0, 0x0287, 0x0054,
1024  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
1025  { 0x0075, UnicodeLatinMap::CT_lower, 'u', 0, 0x0075, 0x0055,
1026  UnicodeLatinMap::AT_none, 0 },
1027  { 0x0055, UnicodeLatinMap::CT_upper, 'U', 0, 0x0075, 0x0055,
1028  UnicodeLatinMap::AT_none, 0 },
1029  { 0x00fa, UnicodeLatinMap::CT_lower, 'u', 0, 0x00fa, 0x00da,
1030  UnicodeLatinMap::AT_acute, 0 },
1031  { 0x00da, UnicodeLatinMap::CT_upper, 'U', 0, 0x00fa, 0x00da,
1032  UnicodeLatinMap::AT_acute, 0 },
1033  { 0x00f9, UnicodeLatinMap::CT_lower, 'u', 0, 0x00f9, 0x00d9,
1034  UnicodeLatinMap::AT_grave, 0 },
1035  { 0x00d9, UnicodeLatinMap::CT_upper, 'U', 0, 0x00f9, 0x00d9,
1036  UnicodeLatinMap::AT_grave, 0 },
1037  { 0x016d, UnicodeLatinMap::CT_lower, 'u', 0, 0x016d, 0x016c,
1038  UnicodeLatinMap::AT_breve, 0 },
1039  { 0x016c, UnicodeLatinMap::CT_upper, 'U', 0, 0x016d, 0x016c,
1040  UnicodeLatinMap::AT_breve, 0 },
1041  { 0x00fb, UnicodeLatinMap::CT_lower, 'u', 0, 0x00fb, 0x00db,
1042  UnicodeLatinMap::AT_circumflex, 0 },
1043  { 0x00db, UnicodeLatinMap::CT_upper, 'U', 0, 0x00fb, 0x00db,
1044  UnicodeLatinMap::AT_circumflex, 0 },
1045  { 0x01d4, UnicodeLatinMap::CT_lower, 'u', 0, 0x01d4, 0x01d3,
1046  UnicodeLatinMap::AT_caron, 0 },
1047  { 0x01d3, UnicodeLatinMap::CT_upper, 'U', 0, 0x01d4, 0x01d3,
1048  UnicodeLatinMap::AT_caron, 0 },
1049  { 0x016f, UnicodeLatinMap::CT_lower, 'u', 0, 0x016f, 0x016e,
1050  UnicodeLatinMap::AT_ring_above, 0 },
1051  { 0x016e, UnicodeLatinMap::CT_upper, 'U', 0, 0x016f, 0x016e,
1052  UnicodeLatinMap::AT_ring_above, 0 },
1053  { 0x00fc, UnicodeLatinMap::CT_lower, 'u', 0, 0x00fc, 0x00dc,
1054  UnicodeLatinMap::AT_diaeresis, 0 },
1055  { 0x00dc, UnicodeLatinMap::CT_upper, 'U', 0, 0x00fc, 0x00dc,
1056  UnicodeLatinMap::AT_diaeresis, 0 },
1057  { 0x01d8, UnicodeLatinMap::CT_lower, 'u', 0, 0x01d8, 0x01d7,
1058  UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
1059  { 0x01d7, UnicodeLatinMap::CT_upper, 'U', 0, 0x01d8, 0x01d7,
1060  UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
1061  { 0x01dc, UnicodeLatinMap::CT_lower, 'u', 0, 0x01dc, 0x01db,
1062  UnicodeLatinMap::AT_diaeresis_and_grave, 0 },
1063  { 0x01db, UnicodeLatinMap::CT_upper, 'U', 0, 0x01dc, 0x01db,
1064  UnicodeLatinMap::AT_diaeresis_and_grave, 0 },
1065  { 0x01da, UnicodeLatinMap::CT_lower, 'u', 0, 0x01da, 0x01d9,
1066  UnicodeLatinMap::AT_diaeresis_and_caron, 0 },
1067  { 0x01d9, UnicodeLatinMap::CT_upper, 'U', 0, 0x01da, 0x01d9,
1068  UnicodeLatinMap::AT_diaeresis_and_caron, 0 },
1069  { 0x01d6, UnicodeLatinMap::CT_lower, 'u', 0, 0x01d6, 0x01d5,
1070  UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
1071  { 0x01d5, UnicodeLatinMap::CT_upper, 'U', 0, 0x01d6, 0x01d5,
1072  UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
1073  { 0x0171, UnicodeLatinMap::CT_lower, 'u', 0, 0x0171, 0x0170,
1074  UnicodeLatinMap::AT_double_acute, 0 },
1075  { 0x0170, UnicodeLatinMap::CT_upper, 'U', 0, 0x0171, 0x0170,
1076  UnicodeLatinMap::AT_double_acute, 0 },
1077  { 0x0169, UnicodeLatinMap::CT_lower, 'u', 0, 0x0169, 0x0168,
1078  UnicodeLatinMap::AT_tilde, 0 },
1079  { 0x0168, UnicodeLatinMap::CT_upper, 'U', 0, 0x0169, 0x0168,
1080  UnicodeLatinMap::AT_tilde, 0 },
1081  { 0x1e79, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e79, 0x1e78,
1082  UnicodeLatinMap::AT_tilde_and_acute, 0 },
1083  { 0x1e78, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e79, 0x1e78,
1084  UnicodeLatinMap::AT_tilde_and_acute, 0 },
1085  { 0x0173, UnicodeLatinMap::CT_lower, 'u', 0, 0x0173, 0x0172,
1086  UnicodeLatinMap::AT_ogonek, 0 },
1087  { 0x0172, UnicodeLatinMap::CT_upper, 'U', 0, 0x0173, 0x0172,
1088  UnicodeLatinMap::AT_ogonek, 0 },
1089  { 0x016b, UnicodeLatinMap::CT_lower, 'u', 0, 0x016b, 0x016a,
1090  UnicodeLatinMap::AT_macron, 0 },
1091  { 0x016a, UnicodeLatinMap::CT_upper, 'U', 0, 0x016b, 0x016a,
1092  UnicodeLatinMap::AT_macron, 0 },
1093  { 0x1e7b, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e7b, 0x1e7a,
1094  UnicodeLatinMap::AT_macron_and_diaeresis, 0 },
1095  { 0x1e7a, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e7b, 0x1e7a,
1096  UnicodeLatinMap::AT_macron_and_diaeresis, 0 },
1097  { 0x1ee7, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ee7, 0x1ee6,
1098  UnicodeLatinMap::AT_hook_above, 0 },
1099  { 0x1ee6, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ee7, 0x1ee6,
1100  UnicodeLatinMap::AT_hook_above, 0 },
1101  { 0x0215, UnicodeLatinMap::CT_lower, 'u', 0, 0x0215, 0x0214,
1102  UnicodeLatinMap::AT_double_grave, 0 },
1103  { 0x0214, UnicodeLatinMap::CT_upper, 'U', 0, 0x0215, 0x0214,
1104  UnicodeLatinMap::AT_double_grave, 0 },
1105  { 0x0217, UnicodeLatinMap::CT_lower, 'u', 0, 0x0217, 0x0216,
1106  UnicodeLatinMap::AT_inverted_breve, 0 },
1107  { 0x0216, UnicodeLatinMap::CT_upper, 'U', 0, 0x0217, 0x0216,
1108  UnicodeLatinMap::AT_inverted_breve, 0 },
1109  { 0x01b0, UnicodeLatinMap::CT_lower, 'u', 0, 0x01b0, 0x01af,
1110  UnicodeLatinMap::AT_horn, 0 },
1111  { 0x01af, UnicodeLatinMap::CT_upper, 'U', 0, 0x01b0, 0x01af,
1112  UnicodeLatinMap::AT_horn, 0 },
1113  { 0x1ee9, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ee9, 0x1ee8,
1114  UnicodeLatinMap::AT_horn_and_acute, 0 },
1115  { 0x1ee8, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ee9, 0x1ee8,
1116  UnicodeLatinMap::AT_horn_and_acute, 0 },
1117  { 0x1eeb, UnicodeLatinMap::CT_lower, 'u', 0, 0x1eeb, 0x1eea,
1118  UnicodeLatinMap::AT_horn_and_grave, 0 },
1119  { 0x1eea, UnicodeLatinMap::CT_upper, 'U', 0, 0x1eeb, 0x1eea,
1120  UnicodeLatinMap::AT_horn_and_grave, 0 },
1121  { 0x1eef, UnicodeLatinMap::CT_lower, 'u', 0, 0x1eef, 0x1eee,
1122  UnicodeLatinMap::AT_horn_and_tilde, 0 },
1123  { 0x1eee, UnicodeLatinMap::CT_upper, 'U', 0, 0x1eef, 0x1eee,
1124  UnicodeLatinMap::AT_horn_and_tilde, 0 },
1125  { 0x1eed, UnicodeLatinMap::CT_lower, 'u', 0, 0x1eed, 0x1eec,
1126  UnicodeLatinMap::AT_horn_and_hook_above, 0 },
1127  { 0x1eec, UnicodeLatinMap::CT_upper, 'U', 0, 0x1eed, 0x1eec,
1128  UnicodeLatinMap::AT_horn_and_hook_above, 0 },
1129  { 0x1ef1, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ef1, 0x1ef0,
1130  UnicodeLatinMap::AT_horn_and_dot_below, 0 },
1131  { 0x1ef0, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ef1, 0x1ef0,
1132  UnicodeLatinMap::AT_horn_and_dot_below, 0 },
1133  { 0x1ee5, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ee5, 0x1ee4,
1134  UnicodeLatinMap::AT_dot_below, 0 },
1135  { 0x1ee4, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ee5, 0x1ee4,
1136  UnicodeLatinMap::AT_dot_below, 0 },
1137  { 0x1e73, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e73, 0x1e72,
1138  UnicodeLatinMap::AT_diaeresis_below, 0 },
1139  { 0x1e72, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e73, 0x1e72,
1140  UnicodeLatinMap::AT_diaeresis_below, 0 },
1141  { 0x1e77, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e77, 0x1e76,
1142  UnicodeLatinMap::AT_circumflex_below, 0 },
1143  { 0x1e76, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e77, 0x1e76,
1144  UnicodeLatinMap::AT_circumflex_below, 0 },
1145  { 0x1e75, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e75, 0x1e74,
1146  UnicodeLatinMap::AT_tilde_below, 0 },
1147  { 0x1e74, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e75, 0x1e74,
1148  UnicodeLatinMap::AT_tilde_below, 0 },
1149  { 0x0265, UnicodeLatinMap::CT_lower, 'h', 0, 0x0265, 0x0048,
1150  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
1151  { 0x026f, UnicodeLatinMap::CT_lower, 'm', 0, 0x026f, 0x019c,
1152  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
1153  { 0x019c, UnicodeLatinMap::CT_upper, 'M', 0, 0x026f, 0x019c,
1154  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
1155  { 0x0076, UnicodeLatinMap::CT_lower, 'v', 0, 0x0076, 0x0056,
1156  UnicodeLatinMap::AT_none, 0 },
1157  { 0x0056, UnicodeLatinMap::CT_upper, 'V', 0, 0x0076, 0x0056,
1158  UnicodeLatinMap::AT_none, 0 },
1159  { 0x1e7d, UnicodeLatinMap::CT_lower, 'v', 0, 0x1e7d, 0x1e7c,
1160  UnicodeLatinMap::AT_tilde, 0 },
1161  { 0x1e7c, UnicodeLatinMap::CT_upper, 'V', 0, 0x1e7d, 0x1e7c,
1162  UnicodeLatinMap::AT_tilde, 0 },
1163  { 0x1e7f, UnicodeLatinMap::CT_lower, 'v', 0, 0x1e7f, 0x1e7e,
1164  UnicodeLatinMap::AT_dot_below, 0 },
1165  { 0x1e7e, UnicodeLatinMap::CT_upper, 'V', 0, 0x1e7f, 0x1e7e,
1166  UnicodeLatinMap::AT_dot_below, 0 },
1167  { 0x028b, UnicodeLatinMap::CT_lower, 'v', 0, 0x028b, 0x01b2,
1168  UnicodeLatinMap::AT_hook, 0 },
1169  { 0x01b2, UnicodeLatinMap::CT_upper, 'V', 0, 0x028b, 0x01b2,
1170  UnicodeLatinMap::AT_hook, 0 },
1171  { 0x028c, UnicodeLatinMap::CT_lower, 'v', 0, 0x028c, 0x0056,
1172  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
1173  { 0x0077, UnicodeLatinMap::CT_lower, 'w', 0, 0x0077, 0x0057,
1174  UnicodeLatinMap::AT_none, 0 },
1175  { 0x0057, UnicodeLatinMap::CT_upper, 'W', 0, 0x0077, 0x0057,
1176  UnicodeLatinMap::AT_none, 0 },
1177  { 0x1e83, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e83, 0x1e82,
1178  UnicodeLatinMap::AT_acute, 0 },
1179  { 0x1e82, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e83, 0x1e82,
1180  UnicodeLatinMap::AT_acute, 0 },
1181  { 0x1e81, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e81, 0x1e80,
1182  UnicodeLatinMap::AT_grave, 0 },
1183  { 0x1e80, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e81, 0x1e80,
1184  UnicodeLatinMap::AT_grave, 0 },
1185  { 0x0175, UnicodeLatinMap::CT_lower, 'w', 0, 0x0175, 0x0174,
1186  UnicodeLatinMap::AT_circumflex, 0 },
1187  { 0x0174, UnicodeLatinMap::CT_upper, 'W', 0, 0x0175, 0x0174,
1188  UnicodeLatinMap::AT_circumflex, 0 },
1189  { 0x1e98, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e98, 0x0057,
1190  UnicodeLatinMap::AT_ring_above, 0 },
1191  { 0x1e85, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e85, 0x1e84,
1192  UnicodeLatinMap::AT_diaeresis, 0 },
1193  { 0x1e84, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e85, 0x1e84,
1194  UnicodeLatinMap::AT_diaeresis, 0 },
1195  { 0x1e87, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e87, 0x1e86,
1196  UnicodeLatinMap::AT_dot_above, 0 },
1197  { 0x1e86, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e87, 0x1e86,
1198  UnicodeLatinMap::AT_dot_above, 0 },
1199  { 0x1e89, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e89, 0x1e88,
1200  UnicodeLatinMap::AT_dot_below, 0 },
1201  { 0x1e88, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e89, 0x1e88,
1202  UnicodeLatinMap::AT_dot_below, 0 },
1203  { 0x028d, UnicodeLatinMap::CT_lower, 'w', 0, 0x028d, 0x0057,
1204  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
1205  { 0x0078, UnicodeLatinMap::CT_lower, 'x', 0, 0x0078, 0x0058,
1206  UnicodeLatinMap::AT_none, 0 },
1207  { 0x0058, UnicodeLatinMap::CT_upper, 'X', 0, 0x0078, 0x0058,
1208  UnicodeLatinMap::AT_none, 0 },
1209  { 0x1e8d, UnicodeLatinMap::CT_lower, 'x', 0, 0x1e8d, 0x1e8c,
1210  UnicodeLatinMap::AT_diaeresis, 0 },
1211  { 0x1e8c, UnicodeLatinMap::CT_upper, 'X', 0, 0x1e8d, 0x1e8c,
1212  UnicodeLatinMap::AT_diaeresis, 0 },
1213  { 0x1e8b, UnicodeLatinMap::CT_lower, 'x', 0, 0x1e8b, 0x1e8a,
1214  UnicodeLatinMap::AT_dot_above, 0 },
1215  { 0x1e8a, UnicodeLatinMap::CT_upper, 'X', 0, 0x1e8b, 0x1e8a,
1216  UnicodeLatinMap::AT_dot_above, 0 },
1217  { 0x0079, UnicodeLatinMap::CT_lower, 'y', 0, 0x0079, 0x0059,
1218  UnicodeLatinMap::AT_none, 0 },
1219  { 0x0059, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0079, 0x0059,
1220  UnicodeLatinMap::AT_none, 0 },
1221  { 0x00fd, UnicodeLatinMap::CT_lower, 'y', 0, 0x00fd, 0x00dd,
1222  UnicodeLatinMap::AT_acute, 0 },
1223  { 0x00dd, UnicodeLatinMap::CT_upper, 'Y', 0, 0x00fd, 0x00dd,
1224  UnicodeLatinMap::AT_acute, 0 },
1225  { 0x1ef3, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef3, 0x1ef2,
1226  UnicodeLatinMap::AT_grave, 0 },
1227  { 0x1ef2, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef3, 0x1ef2,
1228  UnicodeLatinMap::AT_grave, 0 },
1229  { 0x0177, UnicodeLatinMap::CT_lower, 'y', 0, 0x0177, 0x0176,
1230  UnicodeLatinMap::AT_circumflex, 0 },
1231  { 0x0176, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0177, 0x0176,
1232  UnicodeLatinMap::AT_circumflex, 0 },
1233  { 0x1e99, UnicodeLatinMap::CT_lower, 'y', 0, 0x1e99, 0x0059,
1234  UnicodeLatinMap::AT_ring_above, 0 },
1235  { 0x00ff, UnicodeLatinMap::CT_lower, 'y', 0, 0x00ff, 0x0178,
1236  UnicodeLatinMap::AT_diaeresis, 0 },
1237  { 0x0178, UnicodeLatinMap::CT_upper, 'Y', 0, 0x00ff, 0x0178,
1238  UnicodeLatinMap::AT_diaeresis, 0 },
1239  { 0x1ef9, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef9, 0x1ef8,
1240  UnicodeLatinMap::AT_tilde, 0 },
1241  { 0x1ef8, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef9, 0x1ef8,
1242  UnicodeLatinMap::AT_tilde, 0 },
1243  { 0x1e8f, UnicodeLatinMap::CT_lower, 'y', 0, 0x1e8f, 0x1e8e,
1244  UnicodeLatinMap::AT_dot_above, 0 },
1245  { 0x1e8e, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1e8f, 0x1e8e,
1246  UnicodeLatinMap::AT_dot_above, 0 },
1247  { 0x0233, UnicodeLatinMap::CT_lower, 'y', 0, 0x0233, 0x0232,
1248  UnicodeLatinMap::AT_macron, 0 },
1249  { 0x0232, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0233, 0x0232,
1250  UnicodeLatinMap::AT_macron, 0 },
1251  { 0x1ef7, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef7, 0x1ef6,
1252  UnicodeLatinMap::AT_hook_above, 0 },
1253  { 0x1ef6, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef7, 0x1ef6,
1254  UnicodeLatinMap::AT_hook_above, 0 },
1255  { 0x1ef5, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef5, 0x1ef4,
1256  UnicodeLatinMap::AT_dot_below, 0 },
1257  { 0x1ef4, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef5, 0x1ef4,
1258  UnicodeLatinMap::AT_dot_below, 0 },
1259  { 0x028f, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0079, 0x028f,
1260  UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
1261  { 0x01b4, UnicodeLatinMap::CT_lower, 'y', 0, 0x01b4, 0x01b3,
1262  UnicodeLatinMap::AT_hook, 0 },
1263  { 0x01b3, UnicodeLatinMap::CT_upper, 'Y', 0, 0x01b4, 0x01b3,
1264  UnicodeLatinMap::AT_hook, 0 },
1265  { 0x007a, UnicodeLatinMap::CT_lower, 'z', 0, 0x007a, 0x005a,
1266  UnicodeLatinMap::AT_none, 0 },
1267  { 0x005a, UnicodeLatinMap::CT_upper, 'Z', 0, 0x007a, 0x005a,
1268  UnicodeLatinMap::AT_none, 0 },
1269  { 0x017a, UnicodeLatinMap::CT_lower, 'z', 0, 0x017a, 0x0179,
1270  UnicodeLatinMap::AT_acute, 0 },
1271  { 0x0179, UnicodeLatinMap::CT_upper, 'Z', 0, 0x017a, 0x0179,
1272  UnicodeLatinMap::AT_acute, 0 },
1273  { 0x1e91, UnicodeLatinMap::CT_lower, 'z', 0, 0x1e91, 0x1e90,
1274  UnicodeLatinMap::AT_circumflex, 0 },
1275  { 0x1e90, UnicodeLatinMap::CT_upper, 'Z', 0, 0x1e91, 0x1e90,
1276  UnicodeLatinMap::AT_circumflex, 0 },
1277  { 0x017e, UnicodeLatinMap::CT_lower, 'z', 0, 0x017e, 0x017d,
1278  UnicodeLatinMap::AT_caron, 0 },
1279  { 0x017d, UnicodeLatinMap::CT_upper, 'Z', 0, 0x017e, 0x017d,
1280  UnicodeLatinMap::AT_caron, 0 },
1281  { 0x017c, UnicodeLatinMap::CT_lower, 'z', 0, 0x017c, 0x017b,
1282  UnicodeLatinMap::AT_dot_above, 0 },
1283  { 0x017b, UnicodeLatinMap::CT_upper, 'Z', 0, 0x017c, 0x017b,
1284  UnicodeLatinMap::AT_dot_above, 0 },
1285  { 0x1e93, UnicodeLatinMap::CT_lower, 'z', 0, 0x1e93, 0x1e92,
1286  UnicodeLatinMap::AT_dot_below, 0 },
1287  { 0x1e92, UnicodeLatinMap::CT_upper, 'Z', 0, 0x1e93, 0x1e92,
1288  UnicodeLatinMap::AT_dot_below, 0 },
1289  { 0x1e95, UnicodeLatinMap::CT_lower, 'z', 0, 0x1e95, 0x1e94,
1290  UnicodeLatinMap::AT_line_below, 0 },
1291  { 0x1e94, UnicodeLatinMap::CT_upper, 'Z', 0, 0x1e95, 0x1e94,
1292  UnicodeLatinMap::AT_line_below, 0 },
1293  { 0x01b6, UnicodeLatinMap::CT_lower, 'z', 0, 0x01b6, 0x01b5,
1294  UnicodeLatinMap::AT_stroke, 0 },
1295  { 0x01b5, UnicodeLatinMap::CT_upper, 'Z', 0, 0x01b6, 0x01b5,
1296  UnicodeLatinMap::AT_stroke, 0 },
1297  { 0x0225, UnicodeLatinMap::CT_lower, 'z', 0, 0x0225, 0x0224,
1298  UnicodeLatinMap::AT_hook, 0 },
1299  { 0x0224, UnicodeLatinMap::CT_upper, 'Z', 0, 0x0225, 0x0224,
1300  UnicodeLatinMap::AT_hook, 0 },
1301  { 0x0291, UnicodeLatinMap::CT_lower, 'z', 0, 0x0291, 0x005a,
1302  UnicodeLatinMap::AT_curl, 0 },
1303 };
1304 #ifndef CPPPARSER
1305 static const size_t latin_map_length = sizeof(latin_map) / sizeof(UnicodeLatinMap::Entry);
1306 #endif
1307 
1308 static const wchar_t combining_accent_map[] = {
1309  0x0000, // none
1310  0x0301, // acute
1311  0x0000, // acute_and_dot_above
1312  0x0306, // breve
1313  0x0000, // breve_and_acute
1314  0x0000, // breve_and_dot_below
1315  0x0000, // breve_and_grave
1316  0x0000, // breve_and_hook_above
1317  0x0000, // breve_and_tilde
1318  0x032e, // breve_below
1319  0x030c, // caron
1320  0x0000, // caron_and_dot_above
1321  0x0327, // cedilla
1322  0x0000, // cedilla_and_acute
1323  0x0000, // cedilla_and_breve
1324  0x0302, // circumflex
1325  0x0000, // circumflex_and_acute
1326  0x0000, // circumflex_and_dot_below
1327  0x0000, // circumflex_and_grave
1328  0x0000, // circumflex_and_hook_above
1329  0x0000, // circumflex_and_tilde
1330  0x032d, // circumflex_below
1331  0x0326, // comma_below
1332  0x0000, // curl
1333  0x0308, // diaeresis
1334  0x0000, // diaeresis_and_acute
1335  0x0000, // diaeresis_and_caron
1336  0x0000, // diaeresis_and_grave
1337  0x0000, // diaeresis_and_macron
1338  0x0324, // diaeresis_below
1339  0x0307, // dot_above
1340  0x0000, // dot_above_and_macron
1341  0x0323, // dot_below
1342  0x0000, // dot_below_and_dot_above
1343  0x0000, // dot_below_and_macron
1344  0x030b, // double_acute
1345  0x030f, // double_grave
1346  0x0300, // grave
1347  0x0328, // hook
1348  0x0309, // hook_above
1349  0x031b, // horn
1350  0x0000, // horn_and_acute
1351  0x0000, // horn_and_dot_below
1352  0x0000, // horn_and_grave
1353  0x0000, // horn_and_hook_above
1354  0x0000, // horn_and_tilde
1355  0x0311, // inverted_breve
1356  0x0000, // line_below
1357  0x0304, // macron
1358  0x0000, // macron_and_acute
1359  0x0000, // macron_and_diaeresis
1360  0x0000, // macron_and_grave
1361  0x0328, // ogonek
1362  0x0000, // ogonek_and_macron
1363  0x030a, // ring_above
1364  0x0000, // ring_above_and_acute
1365  0x0325, // ring_below
1366  0x0000, // stroke
1367  0x0000, // stroke_and_acute
1368  0x0000, // stroke_and_hook
1369  0x0303, // tilde
1370  0x0000, // tilde_and_acute
1371  0x0000, // tilde_and_diaeresis
1372  0x0000, // tilde_and_macron
1373  0x0330, // tilde_below
1374  0x0000, // topbar
1375 };
1376 
1377 /**
1378  * Returns the Entry associated with the indicated character, if there is one.
1379  */
1381 look_up(char32_t character) {
1382  if (!_initialized) {
1383  init();
1384  }
1385 
1386  if (character < max_direct_chars) {
1387  return _direct_chars[character];
1388 
1389  } else {
1390  ByCharacter::const_iterator ci;
1391  ci = _by_character->find(character);
1392  if (ci != _by_character->end()) {
1393  return (*ci).second;
1394  }
1395  return nullptr;
1396  }
1397 }
1398 
1399 /**
1400  * Returns the unicode code point for the combining character corresponding
1401  * with the given accent type, or 0 if none is recorded.
1402  */
1403 wchar_t UnicodeLatinMap::
1404 get_combining_accent(AccentType accent) {
1405  return combining_accent_map[(size_t)accent];
1406 }
1407 
1408 /**
1409  * Initializes the map, if it has not already been initialized.
1410  */
1411 void UnicodeLatinMap::
1412 init() {
1413  if (!_initialized) {
1414  _by_character = new ByCharacter;
1415  for (size_t i = 0; i < latin_map_length; i++) {
1416  const UnicodeLatinMap::Entry *entry = &latin_map[i];
1417 
1418  // The first 256 characters are very common in Latin-alphabet languages,
1419  // so index those in an array for superfast lookup. Everything else
1420  // goes into the map.
1421  if (entry->_character < max_direct_chars) {
1422  _direct_chars[entry->_character] = entry;
1423  } else {
1424  (*_by_character)[entry->_character] = entry;
1425  }
1426  }
1427  _initialized = true;
1428  }
1429 }
static wchar_t get_combining_accent(AccentType accent)
Returns the unicode code point for the combining character corresponding with the given accent type,...
static const Entry * look_up(char32_t character)
Returns the Entry associated with the indicated character, if there is one.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.