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