Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

panda/src/express/unicodeLatinMap.cxx

Go to the documentation of this file.
00001 // Filename: unicodeLatinMap.cxx
00002 // Created by:  drose (01Feb03)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
00008 //
00009 // All use of this software is subject to the terms of the Panda 3d
00010 // Software license.  You should have received a copy of this license
00011 // along with this source code; you will also find a current copy of
00012 // the license at http://www.panda3d.org/license.txt .
00013 //
00014 // To contact the maintainers of this program write to
00015 // panda3d@yahoogroups.com .
00016 //
00017 ////////////////////////////////////////////////////////////////////
00018 
00019 #include "unicodeLatinMap.h"
00020 
00021 bool UnicodeLatinMap::_initialized = false;
00022 UnicodeLatinMap::ByCharacter UnicodeLatinMap::_by_character;
00023 const UnicodeLatinMap::Entry *UnicodeLatinMap::_direct_chars[UnicodeLatinMap::max_direct_chars];
00024 
00025 static const UnicodeLatinMap::Entry latin_map[] = {
00026   { 0x00a1, UnicodeLatinMap::CT_punct, '!', 0, 0x00a1, 0x00a1,
00027     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00028   { 0x00bf, UnicodeLatinMap::CT_punct, '?', 0, 0x00bf, 0x00bf,
00029     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00030   { 0x0061, UnicodeLatinMap::CT_lower, 'a', 0, 0x0061, 0x0041,
00031     UnicodeLatinMap::AT_none, 0 },
00032   { 0x0041, UnicodeLatinMap::CT_upper, 'A', 0, 0x0061, 0x0041,
00033     UnicodeLatinMap::AT_none, 0 },
00034   { 0x00e1, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e1, 0x00c1,
00035     UnicodeLatinMap::AT_acute, 0 },
00036   { 0x00c1, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e1, 0x00c1,
00037     UnicodeLatinMap::AT_acute, 0 },
00038   { 0x00e0, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e0, 0x00c0,
00039     UnicodeLatinMap::AT_grave, 0 },
00040   { 0x00c0, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e0, 0x00c0,
00041     UnicodeLatinMap::AT_grave, 0 },
00042   { 0x0103, UnicodeLatinMap::CT_lower, 'a', 0, 0x0103, 0x0102,
00043     UnicodeLatinMap::AT_breve, 0 },
00044   { 0x0102, UnicodeLatinMap::CT_upper, 'A', 0, 0x0103, 0x0102,
00045     UnicodeLatinMap::AT_breve, 0 },
00046   { 0x1eaf, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eaf, 0x1eae,
00047     UnicodeLatinMap::AT_breve_and_acute, 0 },
00048   { 0x1eae, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eaf, 0x1eae,
00049     UnicodeLatinMap::AT_breve_and_acute, 0 },
00050   { 0x1eb1, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb1, 0x1eb0,
00051     UnicodeLatinMap::AT_breve_and_grave, 0 },
00052   { 0x1eb0, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb1, 0x1eb0,
00053     UnicodeLatinMap::AT_breve_and_grave, 0 },
00054   { 0x1eb5, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb5, 0x1eb4,
00055     UnicodeLatinMap::AT_breve_and_tilde, 0 },
00056   { 0x1eb4, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb5, 0x1eb4,
00057     UnicodeLatinMap::AT_breve_and_tilde, 0 },
00058   { 0x1eb3, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb3, 0x1eb2,
00059     UnicodeLatinMap::AT_breve_and_hook_above, 0 },
00060   { 0x1eb2, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb3, 0x1eb2,
00061     UnicodeLatinMap::AT_breve_and_hook_above, 0 },
00062   { 0x00e2, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e2, 0x00c2,
00063     UnicodeLatinMap::AT_circumflex, 0 },
00064   { 0x00c2, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e2, 0x00c2,
00065     UnicodeLatinMap::AT_circumflex, 0 },
00066   { 0x1ea5, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea5, 0x1ea4,
00067     UnicodeLatinMap::AT_circumflex_and_acute, 0 },
00068   { 0x1ea4, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea5, 0x1ea4,
00069     UnicodeLatinMap::AT_circumflex_and_acute, 0 },
00070   { 0x1ea7, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea7, 0x1ea6,
00071     UnicodeLatinMap::AT_circumflex_and_grave, 0 },
00072   { 0x1ea6, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea7, 0x1ea6,
00073     UnicodeLatinMap::AT_circumflex_and_grave, 0 },
00074   { 0x1eab, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eab, 0x1eaa,
00075     UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
00076   { 0x1eaa, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eab, 0x1eaa,
00077     UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
00078   { 0x1ea9, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea9, 0x1ea8,
00079     UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
00080   { 0x1ea8, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea9, 0x1ea8,
00081     UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
00082   { 0x01ce, UnicodeLatinMap::CT_lower, 'a', 0, 0x01ce, 0x01cd,
00083     UnicodeLatinMap::AT_caron, 0 },
00084   { 0x01cd, UnicodeLatinMap::CT_upper, 'A', 0, 0x01ce, 0x01cd,
00085     UnicodeLatinMap::AT_caron, 0 },
00086   { 0x00e5, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e5, 0x00c5,
00087     UnicodeLatinMap::AT_ring_above, 0 },
00088   { 0x00c5, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e5, 0x00c5,
00089     UnicodeLatinMap::AT_ring_above, 0 },
00090   { 0x01fb, UnicodeLatinMap::CT_lower, 'a', 0, 0x01fb, 0x01fa,
00091     UnicodeLatinMap::AT_ring_above_and_acute, 0 },
00092   { 0x01fa, UnicodeLatinMap::CT_upper, 'A', 0, 0x01fb, 0x01fa,
00093     UnicodeLatinMap::AT_ring_above_and_acute, 0 },
00094   { 0x00e4, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e4, 0x00c4,
00095     UnicodeLatinMap::AT_diaeresis, 0 },
00096   { 0x00c4, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e4, 0x00c4,
00097     UnicodeLatinMap::AT_diaeresis, 0 },
00098   { 0x01df, UnicodeLatinMap::CT_lower, 'a', 0, 0x01df, 0x01de,
00099     UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
00100   { 0x01de, UnicodeLatinMap::CT_upper, 'A', 0, 0x01df, 0x01de,
00101     UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
00102   { 0x00e3, UnicodeLatinMap::CT_lower, 'a', 0, 0x00e3, 0x00c3,
00103     UnicodeLatinMap::AT_tilde, 0 },
00104   { 0x00c3, UnicodeLatinMap::CT_upper, 'A', 0, 0x00e3, 0x00c3,
00105     UnicodeLatinMap::AT_tilde, 0 },
00106   { 0x0227, UnicodeLatinMap::CT_lower, 'a', 0, 0x0227, 0x0226,
00107     UnicodeLatinMap::AT_dot_above, 0 },
00108   { 0x0226, UnicodeLatinMap::CT_upper, 'A', 0, 0x0227, 0x0226,
00109     UnicodeLatinMap::AT_dot_above, 0 },
00110   { 0x01e1, UnicodeLatinMap::CT_lower, 'a', 0, 0x01e1, 0x01e0,
00111     UnicodeLatinMap::AT_dot_above_and_macron, 0 },
00112   { 0x01e0, UnicodeLatinMap::CT_upper, 'A', 0, 0x01e1, 0x01e0,
00113     UnicodeLatinMap::AT_dot_above_and_macron, 0 },
00114   { 0x0105, UnicodeLatinMap::CT_lower, 'a', 0, 0x0105, 0x0104,
00115     UnicodeLatinMap::AT_ogonek, 0 },
00116   { 0x0104, UnicodeLatinMap::CT_upper, 'A', 0, 0x0105, 0x0104,
00117     UnicodeLatinMap::AT_ogonek, 0 },
00118   { 0x0101, UnicodeLatinMap::CT_lower, 'a', 0, 0x0101, 0x0100,
00119     UnicodeLatinMap::AT_macron, 0 },
00120   { 0x0100, UnicodeLatinMap::CT_upper, 'A', 0, 0x0101, 0x0100,
00121     UnicodeLatinMap::AT_macron, 0 },
00122   { 0x1ea3, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea3, 0x1ea2,
00123     UnicodeLatinMap::AT_hook_above, 0 },
00124   { 0x1ea2, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea3, 0x1ea2,
00125     UnicodeLatinMap::AT_hook_above, 0 },
00126   { 0x0201, UnicodeLatinMap::CT_lower, 'a', 0, 0x0201, 0x0200,
00127     UnicodeLatinMap::AT_double_grave, 0 },
00128   { 0x0200, UnicodeLatinMap::CT_upper, 'A', 0, 0x0201, 0x0200,
00129     UnicodeLatinMap::AT_double_grave, 0 },
00130   { 0x0203, UnicodeLatinMap::CT_lower, 'a', 0, 0x0203, 0x0202,
00131     UnicodeLatinMap::AT_inverted_breve, 0 },
00132   { 0x0202, UnicodeLatinMap::CT_upper, 'A', 0, 0x0203, 0x0202,
00133     UnicodeLatinMap::AT_inverted_breve, 0 },
00134   { 0x1ea1, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ea1, 0x1ea0,
00135     UnicodeLatinMap::AT_dot_below, 0 },
00136   { 0x1ea0, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ea1, 0x1ea0,
00137     UnicodeLatinMap::AT_dot_below, 0 },
00138   { 0x1eb7, UnicodeLatinMap::CT_lower, 'a', 0, 0x1eb7, 0x1eb6,
00139     UnicodeLatinMap::AT_breve_and_dot_below, 0 },
00140   { 0x1eb6, UnicodeLatinMap::CT_upper, 'A', 0, 0x1eb7, 0x1eb6,
00141     UnicodeLatinMap::AT_breve_and_dot_below, 0 },
00142   { 0x1ead, UnicodeLatinMap::CT_lower, 'a', 0, 0x1ead, 0x1eac,
00143     UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
00144   { 0x1eac, UnicodeLatinMap::CT_upper, 'A', 0, 0x1ead, 0x1eac,
00145     UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
00146   { 0x1e01, UnicodeLatinMap::CT_lower, 'a', 0, 0x1e01, 0x1e00,
00147     UnicodeLatinMap::AT_ring_below, 0 },
00148   { 0x1e00, UnicodeLatinMap::CT_upper, 'A', 0, 0x1e01, 0x1e00,
00149     UnicodeLatinMap::AT_ring_below, 0 },
00150   { 0x00e6, UnicodeLatinMap::CT_lower, 'a', 'e', 0x00e6, 0x00c6,
00151     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00152   { 0x00c6, UnicodeLatinMap::CT_upper, 'A', 'E', 0x00e6, 0x00c6,
00153     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00154   { 0x01fd, UnicodeLatinMap::CT_lower, 'a', 'e', 0x01fd, 0x01fc,
00155     UnicodeLatinMap::AT_acute, UnicodeLatinMap::AF_ligature },
00156   { 0x01fc, UnicodeLatinMap::CT_upper, 'A', 'E', 0x01fd, 0x01fc,
00157     UnicodeLatinMap::AT_acute, UnicodeLatinMap::AF_ligature },
00158   { 0x01e3, UnicodeLatinMap::CT_lower, 'a', 'e', 0x01e3, 0x01e2,
00159     UnicodeLatinMap::AT_macron, UnicodeLatinMap::AF_ligature },
00160   { 0x01e2, UnicodeLatinMap::CT_upper, 'A', 'E', 0x01e3, 0x01e2,
00161     UnicodeLatinMap::AT_macron, UnicodeLatinMap::AF_ligature },
00162   { 0x0250, UnicodeLatinMap::CT_lower, 'a', 0, 0x0250, 0x0041,
00163     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00164   { 0x0062, UnicodeLatinMap::CT_lower, 'b', 0, 0x0062, 0x0042,
00165     UnicodeLatinMap::AT_none, 0 },
00166   { 0x0042, UnicodeLatinMap::CT_upper, 'B', 0, 0x0062, 0x0042,
00167     UnicodeLatinMap::AT_none, 0 },
00168   { 0x1e03, UnicodeLatinMap::CT_lower, 'b', 0, 0x1e03, 0x1e02,
00169     UnicodeLatinMap::AT_dot_above, 0 },
00170   { 0x1e02, UnicodeLatinMap::CT_upper, 'B', 0, 0x1e03, 0x1e02,
00171     UnicodeLatinMap::AT_dot_above, 0 },
00172   { 0x1e05, UnicodeLatinMap::CT_lower, 'b', 0, 0x1e05, 0x1e04,
00173     UnicodeLatinMap::AT_dot_below, 0 },
00174   { 0x1e04, UnicodeLatinMap::CT_upper, 'B', 0, 0x1e05, 0x1e04,
00175     UnicodeLatinMap::AT_dot_below, 0 },
00176   { 0x1e07, UnicodeLatinMap::CT_lower, 'b', 0, 0x1e07, 0x1e06,
00177     UnicodeLatinMap::AT_line_below, 0 },
00178   { 0x1e06, UnicodeLatinMap::CT_upper, 'B', 0, 0x1e07, 0x1e06,
00179     UnicodeLatinMap::AT_line_below, 0 },
00180   { 0x0299, UnicodeLatinMap::CT_upper, 'B', 0, 0x0062, 0x0299,
00181     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00182   { 0x0180, UnicodeLatinMap::CT_lower, 'b', 0, 0x0180, 0x0042,
00183     UnicodeLatinMap::AT_stroke, 0 },
00184   { 0x0253, UnicodeLatinMap::CT_lower, 'b', 0, 0x0253, 0x0181,
00185     UnicodeLatinMap::AT_hook, 0 },
00186   { 0x0181, UnicodeLatinMap::CT_upper, 'B', 0, 0x0253, 0x0181,
00187     UnicodeLatinMap::AT_hook, 0 },
00188   { 0x0183, UnicodeLatinMap::CT_lower, 'b', 0, 0x0183, 0x0182,
00189     UnicodeLatinMap::AT_topbar, 0 },
00190   { 0x0182, UnicodeLatinMap::CT_upper, 'B', 0, 0x0183, 0x0182,
00191     UnicodeLatinMap::AT_topbar, 0 },
00192   { 0x0063, UnicodeLatinMap::CT_lower, 'c', 0, 0x0063, 0x0043,
00193     UnicodeLatinMap::AT_none, 0 },
00194   { 0x0043, UnicodeLatinMap::CT_upper, 'C', 0, 0x0063, 0x0043,
00195     UnicodeLatinMap::AT_none, 0 },
00196   { 0x0107, UnicodeLatinMap::CT_lower, 'c', 0, 0x0107, 0x0106,
00197     UnicodeLatinMap::AT_acute, 0 },
00198   { 0x0106, UnicodeLatinMap::CT_upper, 'C', 0, 0x0107, 0x0106,
00199     UnicodeLatinMap::AT_acute, 0 },
00200   { 0x0109, UnicodeLatinMap::CT_lower, 'c', 0, 0x0109, 0x0108,
00201     UnicodeLatinMap::AT_circumflex, 0 },
00202   { 0x0108, UnicodeLatinMap::CT_upper, 'C', 0, 0x0109, 0x0108,
00203     UnicodeLatinMap::AT_circumflex, 0 },
00204   { 0x010d, UnicodeLatinMap::CT_lower, 'c', 0, 0x010d, 0x010c,
00205     UnicodeLatinMap::AT_caron, 0 },
00206   { 0x010c, UnicodeLatinMap::CT_upper, 'C', 0, 0x010d, 0x010c,
00207     UnicodeLatinMap::AT_caron, 0 },
00208   { 0x010b, UnicodeLatinMap::CT_lower, 'c', 0, 0x010b, 0x010a,
00209     UnicodeLatinMap::AT_dot_above, 0 },
00210   { 0x010a, UnicodeLatinMap::CT_upper, 'C', 0, 0x010b, 0x010a,
00211     UnicodeLatinMap::AT_dot_above, 0 },
00212   { 0x00e7, UnicodeLatinMap::CT_lower, 'c', 0, 0x00e7, 0x00c7,
00213     UnicodeLatinMap::AT_cedilla, 0 },
00214   { 0x00c7, UnicodeLatinMap::CT_upper, 'C', 0, 0x00e7, 0x00c7,
00215     UnicodeLatinMap::AT_cedilla, 0 },
00216   { 0x1e09, UnicodeLatinMap::CT_lower, 'c', 0, 0x1e09, 0x1e08,
00217     UnicodeLatinMap::AT_cedilla_and_acute, 0 },
00218   { 0x1e08, UnicodeLatinMap::CT_upper, 'C', 0, 0x1e09, 0x1e08,
00219     UnicodeLatinMap::AT_cedilla_and_acute, 0 },
00220   { 0x0188, UnicodeLatinMap::CT_lower, 'c', 0, 0x0188, 0x0187,
00221     UnicodeLatinMap::AT_hook, 0 },
00222   { 0x0187, UnicodeLatinMap::CT_upper, 'C', 0, 0x0188, 0x0187,
00223     UnicodeLatinMap::AT_hook, 0 },
00224   { 0x0255, UnicodeLatinMap::CT_lower, 'c', 0, 0x0255, 0x0043,
00225     UnicodeLatinMap::AT_curl, 0 },
00226   { 0x0064, UnicodeLatinMap::CT_lower, 'd', 0, 0x0064, 0x0044,
00227     UnicodeLatinMap::AT_none, 0 },
00228   { 0x0044, UnicodeLatinMap::CT_upper, 'D', 0, 0x0064, 0x0044,
00229     UnicodeLatinMap::AT_none, 0 },
00230   { 0x010f, UnicodeLatinMap::CT_lower, 'd', 0, 0x010f, 0x010e,
00231     UnicodeLatinMap::AT_caron, 0 },
00232   { 0x010e, UnicodeLatinMap::CT_upper, 'D', 0, 0x010f, 0x010e,
00233     UnicodeLatinMap::AT_caron, 0 },
00234   { 0x1e0b, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e0b, 0x1e0a,
00235     UnicodeLatinMap::AT_dot_above, 0 },
00236   { 0x1e0a, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e0b, 0x1e0a,
00237     UnicodeLatinMap::AT_dot_above, 0 },
00238   { 0x1e11, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e11, 0x1e10,
00239     UnicodeLatinMap::AT_cedilla, 0 },
00240   { 0x1e10, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e11, 0x1e10,
00241     UnicodeLatinMap::AT_cedilla, 0 },
00242   { 0x1e0d, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e0d, 0x1e0c,
00243     UnicodeLatinMap::AT_dot_below, 0 },
00244   { 0x1e0c, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e0d, 0x1e0c,
00245     UnicodeLatinMap::AT_dot_below, 0 },
00246   { 0x1e13, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e13, 0x1e12,
00247     UnicodeLatinMap::AT_circumflex_below, 0 },
00248   { 0x1e12, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e13, 0x1e12,
00249     UnicodeLatinMap::AT_circumflex_below, 0 },
00250   { 0x1e0f, UnicodeLatinMap::CT_lower, 'd', 0, 0x1e0f, 0x1e0e,
00251     UnicodeLatinMap::AT_line_below, 0 },
00252   { 0x1e0e, UnicodeLatinMap::CT_upper, 'D', 0, 0x1e0f, 0x1e0e,
00253     UnicodeLatinMap::AT_line_below, 0 },
00254   { 0x0111, UnicodeLatinMap::CT_lower, 'd', 0, 0x0111, 0x0110,
00255     UnicodeLatinMap::AT_stroke, 0 },
00256   { 0x0110, UnicodeLatinMap::CT_upper, 'D', 0, 0x0111, 0x0110,
00257     UnicodeLatinMap::AT_stroke, 0 },
00258   { 0x0257, UnicodeLatinMap::CT_lower, 'd', 0, 0x0257, 0x018a,
00259     UnicodeLatinMap::AT_hook, 0 },
00260   { 0x018a, UnicodeLatinMap::CT_upper, 'D', 0, 0x0257, 0x018a,
00261     UnicodeLatinMap::AT_hook, 0 },
00262   { 0x018c, UnicodeLatinMap::CT_lower, 'd', 0, 0x018c, 0x018b,
00263     UnicodeLatinMap::AT_topbar, 0 },
00264   { 0x018b, UnicodeLatinMap::CT_upper, 'D', 0, 0x018c, 0x018b,
00265     UnicodeLatinMap::AT_topbar, 0 },
00266   { 0x0065, UnicodeLatinMap::CT_lower, 'e', 0, 0x0065, 0x0045,
00267     UnicodeLatinMap::AT_none, 0 },
00268   { 0x0045, UnicodeLatinMap::CT_upper, 'E', 0, 0x0065, 0x0045,
00269     UnicodeLatinMap::AT_none, 0 },
00270   { 0x00e9, UnicodeLatinMap::CT_lower, 'e', 0, 0x00e9, 0x00c9,
00271     UnicodeLatinMap::AT_acute, 0 },
00272   { 0x00c9, UnicodeLatinMap::CT_upper, 'E', 0, 0x00e9, 0x00c9,
00273     UnicodeLatinMap::AT_acute, 0 },
00274   { 0x00e8, UnicodeLatinMap::CT_lower, 'e', 0, 0x00e8, 0x00c8,
00275     UnicodeLatinMap::AT_grave, 0 },
00276   { 0x00c8, UnicodeLatinMap::CT_upper, 'E', 0, 0x00e8, 0x00c8,
00277     UnicodeLatinMap::AT_grave, 0 },
00278   { 0x0115, UnicodeLatinMap::CT_lower, 'e', 0, 0x0115, 0x0114,
00279     UnicodeLatinMap::AT_breve, 0 },
00280   { 0x0114, UnicodeLatinMap::CT_upper, 'E', 0, 0x0115, 0x0114,
00281     UnicodeLatinMap::AT_breve, 0 },
00282   { 0x00ea, UnicodeLatinMap::CT_lower, 'e', 0, 0x00ea, 0x00ca,
00283     UnicodeLatinMap::AT_circumflex, 0 },
00284   { 0x00ca, UnicodeLatinMap::CT_upper, 'E', 0, 0x00ea, 0x00ca,
00285     UnicodeLatinMap::AT_circumflex, 0 },
00286   { 0x1ebf, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ebf, 0x1ebe,
00287     UnicodeLatinMap::AT_circumflex_and_acute, 0 },
00288   { 0x1ebe, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ebf, 0x1ebe,
00289     UnicodeLatinMap::AT_circumflex_and_acute, 0 },
00290   { 0x1ec1, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec1, 0x1ec0,
00291     UnicodeLatinMap::AT_circumflex_and_grave, 0 },
00292   { 0x1ec0, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec1, 0x1ec0,
00293     UnicodeLatinMap::AT_circumflex_and_grave, 0 },
00294   { 0x1ec5, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec5, 0x1ec4,
00295     UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
00296   { 0x1ec4, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec5, 0x1ec4,
00297     UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
00298   { 0x1ec3, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec3, 0x1ec2,
00299     UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
00300   { 0x1ec2, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec3, 0x1ec2,
00301     UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
00302   { 0x011b, UnicodeLatinMap::CT_lower, 'e', 0, 0x011b, 0x011a,
00303     UnicodeLatinMap::AT_caron, 0 },
00304   { 0x011a, UnicodeLatinMap::CT_upper, 'E', 0, 0x011b, 0x011a,
00305     UnicodeLatinMap::AT_caron, 0 },
00306   { 0x00eb, UnicodeLatinMap::CT_lower, 'e', 0, 0x00eb, 0x00cb,
00307     UnicodeLatinMap::AT_diaeresis, 0 },
00308   { 0x00cb, UnicodeLatinMap::CT_upper, 'E', 0, 0x00eb, 0x00cb,
00309     UnicodeLatinMap::AT_diaeresis, 0 },
00310   { 0x1ebd, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ebd, 0x1ebc,
00311     UnicodeLatinMap::AT_tilde, 0 },
00312   { 0x1ebc, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ebd, 0x1ebc,
00313     UnicodeLatinMap::AT_tilde, 0 },
00314   { 0x0117, UnicodeLatinMap::CT_lower, 'e', 0, 0x0117, 0x0116,
00315     UnicodeLatinMap::AT_dot_above, 0 },
00316   { 0x0116, UnicodeLatinMap::CT_upper, 'E', 0, 0x0117, 0x0116,
00317     UnicodeLatinMap::AT_dot_above, 0 },
00318   { 0x0229, UnicodeLatinMap::CT_lower, 'e', 0, 0x0229, 0x0228,
00319     UnicodeLatinMap::AT_cedilla, 0 },
00320   { 0x0228, UnicodeLatinMap::CT_upper, 'E', 0, 0x0229, 0x0228,
00321     UnicodeLatinMap::AT_cedilla, 0 },
00322   { 0x1e1d, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e1d, 0x1e1c,
00323     UnicodeLatinMap::AT_cedilla_and_breve, 0 },
00324   { 0x1e1c, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e1d, 0x1e1c,
00325     UnicodeLatinMap::AT_cedilla_and_breve, 0 },
00326   { 0x0119, UnicodeLatinMap::CT_lower, 'e', 0, 0x0119, 0x0118,
00327     UnicodeLatinMap::AT_ogonek, 0 },
00328   { 0x0118, UnicodeLatinMap::CT_upper, 'E', 0, 0x0119, 0x0118,
00329     UnicodeLatinMap::AT_ogonek, 0 },
00330   { 0x0113, UnicodeLatinMap::CT_lower, 'e', 0, 0x0113, 0x0112,
00331     UnicodeLatinMap::AT_macron, 0 },
00332   { 0x0112, UnicodeLatinMap::CT_upper, 'E', 0, 0x0113, 0x0112,
00333     UnicodeLatinMap::AT_macron, 0 },
00334   { 0x1e17, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e17, 0x1e16,
00335     UnicodeLatinMap::AT_macron_and_acute, 0 },
00336   { 0x1e16, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e17, 0x1e16,
00337     UnicodeLatinMap::AT_macron_and_acute, 0 },
00338   { 0x1e15, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e15, 0x1e14,
00339     UnicodeLatinMap::AT_macron_and_grave, 0 },
00340   { 0x1e14, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e15, 0x1e14,
00341     UnicodeLatinMap::AT_macron_and_grave, 0 },
00342   { 0x1ebb, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ebb, 0x1eba,
00343     UnicodeLatinMap::AT_hook_above, 0 },
00344   { 0x1eba, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ebb, 0x1eba,
00345     UnicodeLatinMap::AT_hook_above, 0 },
00346   { 0x0205, UnicodeLatinMap::CT_lower, 'e', 0, 0x0205, 0x0204,
00347     UnicodeLatinMap::AT_double_grave, 0 },
00348   { 0x0204, UnicodeLatinMap::CT_upper, 'E', 0, 0x0205, 0x0204,
00349     UnicodeLatinMap::AT_double_grave, 0 },
00350   { 0x0207, UnicodeLatinMap::CT_lower, 'e', 0, 0x0207, 0x0206,
00351     UnicodeLatinMap::AT_inverted_breve, 0 },
00352   { 0x0206, UnicodeLatinMap::CT_upper, 'E', 0, 0x0207, 0x0206,
00353     UnicodeLatinMap::AT_inverted_breve, 0 },
00354   { 0x1eb9, UnicodeLatinMap::CT_lower, 'e', 0, 0x1eb9, 0x1eb8,
00355     UnicodeLatinMap::AT_dot_below, 0 },
00356   { 0x1eb8, UnicodeLatinMap::CT_upper, 'E', 0, 0x1eb9, 0x1eb8,
00357     UnicodeLatinMap::AT_dot_below, 0 },
00358   { 0x1ec7, UnicodeLatinMap::CT_lower, 'e', 0, 0x1ec7, 0x1ec6,
00359     UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
00360   { 0x1ec6, UnicodeLatinMap::CT_upper, 'E', 0, 0x1ec7, 0x1ec6,
00361     UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
00362   { 0x1e19, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e19, 0x1e18,
00363     UnicodeLatinMap::AT_circumflex_below, 0 },
00364   { 0x1e18, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e19, 0x1e18,
00365     UnicodeLatinMap::AT_circumflex_below, 0 },
00366   { 0x1e1b, UnicodeLatinMap::CT_lower, 'e', 0, 0x1e1b, 0x1e1a,
00367     UnicodeLatinMap::AT_tilde_below, 0 },
00368   { 0x1e1a, UnicodeLatinMap::CT_upper, 'E', 0, 0x1e1b, 0x1e1a,
00369     UnicodeLatinMap::AT_tilde_below, 0 },
00370   { 0x01dd, UnicodeLatinMap::CT_lower, 'e', 0, 0x01dd, 0x0045,
00371     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00372   { 0x018e, UnicodeLatinMap::CT_upper, 'E', 0, 0x0258, 0x018e,
00373     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_reversed },
00374   { 0x0258, UnicodeLatinMap::CT_lower, 'e', 0, 0x0258, 0x018e,
00375     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_reversed },
00376   { 0x0066, UnicodeLatinMap::CT_lower, 'f', 0, 0x0066, 0x0046,
00377     UnicodeLatinMap::AT_none, 0 },
00378   { 0x0046, UnicodeLatinMap::CT_upper, 'F', 0, 0x0066, 0x0046,
00379     UnicodeLatinMap::AT_none, 0 },
00380   { 0x1e1f, UnicodeLatinMap::CT_lower, 'f', 0, 0x1e1f, 0x1e1e,
00381     UnicodeLatinMap::AT_dot_above, 0 },
00382   { 0x1e1e, UnicodeLatinMap::CT_upper, 'F', 0, 0x1e1f, 0x1e1e,
00383     UnicodeLatinMap::AT_dot_above, 0 },
00384   { 0x0192, UnicodeLatinMap::CT_lower, 'f', 0, 0x0192, 0x0191,
00385     UnicodeLatinMap::AT_hook, 0 },
00386   { 0x0191, UnicodeLatinMap::CT_upper, 'F', 0, 0x0192, 0x0191,
00387     UnicodeLatinMap::AT_hook, 0 },
00388   { 0x0067, UnicodeLatinMap::CT_lower, 'g', 0, 0x0067, 0x0047,
00389     UnicodeLatinMap::AT_none, 0 },
00390   { 0x0047, UnicodeLatinMap::CT_upper, 'G', 0, 0x0067, 0x0047,
00391     UnicodeLatinMap::AT_none, 0 },
00392   { 0x01f5, UnicodeLatinMap::CT_lower, 'g', 0, 0x01f5, 0x01f4,
00393     UnicodeLatinMap::AT_acute, 0 },
00394   { 0x01f4, UnicodeLatinMap::CT_upper, 'G', 0, 0x01f5, 0x01f4,
00395     UnicodeLatinMap::AT_acute, 0 },
00396   { 0x011f, UnicodeLatinMap::CT_lower, 'g', 0, 0x011f, 0x011e,
00397     UnicodeLatinMap::AT_breve, 0 },
00398   { 0x011e, UnicodeLatinMap::CT_upper, 'G', 0, 0x011f, 0x011e,
00399     UnicodeLatinMap::AT_breve, 0 },
00400   { 0x011d, UnicodeLatinMap::CT_lower, 'g', 0, 0x011d, 0x011c,
00401     UnicodeLatinMap::AT_circumflex, 0 },
00402   { 0x011c, UnicodeLatinMap::CT_upper, 'G', 0, 0x011d, 0x011c,
00403     UnicodeLatinMap::AT_circumflex, 0 },
00404   { 0x01e7, UnicodeLatinMap::CT_lower, 'g', 0, 0x01e7, 0x01e6,
00405     UnicodeLatinMap::AT_caron, 0 },
00406   { 0x01e6, UnicodeLatinMap::CT_upper, 'G', 0, 0x01e7, 0x01e6,
00407     UnicodeLatinMap::AT_caron, 0 },
00408   { 0x0121, UnicodeLatinMap::CT_lower, 'g', 0, 0x0121, 0x0120,
00409     UnicodeLatinMap::AT_dot_above, 0 },
00410   { 0x0120, UnicodeLatinMap::CT_upper, 'G', 0, 0x0121, 0x0120,
00411     UnicodeLatinMap::AT_dot_above, 0 },
00412   { 0x0123, UnicodeLatinMap::CT_lower, 'g', 0, 0x0123, 0x0122,
00413     UnicodeLatinMap::AT_cedilla, 0 },
00414   { 0x0122, UnicodeLatinMap::CT_upper, 'G', 0, 0x0123, 0x0122,
00415     UnicodeLatinMap::AT_cedilla, 0 },
00416   { 0x1e21, UnicodeLatinMap::CT_lower, 'g', 0, 0x1e21, 0x1e20,
00417     UnicodeLatinMap::AT_macron, 0 },
00418   { 0x1e20, UnicodeLatinMap::CT_upper, 'G', 0, 0x1e21, 0x1e20,
00419     UnicodeLatinMap::AT_macron, 0 },
00420   { 0x0262, UnicodeLatinMap::CT_upper, 'G', 0, 0x0067, 0x0262,
00421     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00422   { 0x01e5, UnicodeLatinMap::CT_lower, 'g', 0, 0x01e5, 0x01e4,
00423     UnicodeLatinMap::AT_stroke, 0 },
00424   { 0x01e4, UnicodeLatinMap::CT_upper, 'G', 0, 0x01e5, 0x01e4,
00425     UnicodeLatinMap::AT_stroke, 0 },
00426   { 0x0260, UnicodeLatinMap::CT_lower, 'g', 0, 0x0260, 0x0193,
00427     UnicodeLatinMap::AT_hook, 0 },
00428   { 0x0193, UnicodeLatinMap::CT_upper, 'G', 0, 0x0260, 0x0193,
00429     UnicodeLatinMap::AT_hook, 0 },
00430   { 0x029b, UnicodeLatinMap::CT_upper, 'G', 0, 0x0067, 0x029b,
00431     UnicodeLatinMap::AT_hook, UnicodeLatinMap::AF_smallcap },
00432   { 0x01a3, UnicodeLatinMap::CT_lower, 'o', 'i', 0x01a3, 0x01a2,
00433     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00434   { 0x01a2, UnicodeLatinMap::CT_upper, 'O', 'I', 0x01a3, 0x01a2,
00435     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00436   { 0x0068, UnicodeLatinMap::CT_lower, 'h', 0, 0x0068, 0x0048,
00437     UnicodeLatinMap::AT_none, 0 },
00438   { 0x0048, UnicodeLatinMap::CT_upper, 'H', 0, 0x0068, 0x0048,
00439     UnicodeLatinMap::AT_none, 0 },
00440   { 0x0125, UnicodeLatinMap::CT_lower, 'h', 0, 0x0125, 0x0124,
00441     UnicodeLatinMap::AT_circumflex, 0 },
00442   { 0x0124, UnicodeLatinMap::CT_upper, 'H', 0, 0x0125, 0x0124,
00443     UnicodeLatinMap::AT_circumflex, 0 },
00444   { 0x021f, UnicodeLatinMap::CT_lower, 'h', 0, 0x021f, 0x021e,
00445     UnicodeLatinMap::AT_caron, 0 },
00446   { 0x021e, UnicodeLatinMap::CT_upper, 'H', 0, 0x021f, 0x021e,
00447     UnicodeLatinMap::AT_caron, 0 },
00448   { 0x1e27, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e27, 0x1e26,
00449     UnicodeLatinMap::AT_diaeresis, 0 },
00450   { 0x1e26, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e27, 0x1e26,
00451     UnicodeLatinMap::AT_diaeresis, 0 },
00452   { 0x1e23, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e23, 0x1e22,
00453     UnicodeLatinMap::AT_dot_above, 0 },
00454   { 0x1e22, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e23, 0x1e22,
00455     UnicodeLatinMap::AT_dot_above, 0 },
00456   { 0x1e29, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e29, 0x1e28,
00457     UnicodeLatinMap::AT_cedilla, 0 },
00458   { 0x1e28, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e29, 0x1e28,
00459     UnicodeLatinMap::AT_cedilla, 0 },
00460   { 0x1e25, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e25, 0x1e24,
00461     UnicodeLatinMap::AT_dot_below, 0 },
00462   { 0x1e24, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e25, 0x1e24,
00463     UnicodeLatinMap::AT_dot_below, 0 },
00464   { 0x1e2b, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e2b, 0x1e2a,
00465     UnicodeLatinMap::AT_breve_below, 0 },
00466   { 0x1e2a, UnicodeLatinMap::CT_upper, 'H', 0, 0x1e2b, 0x1e2a,
00467     UnicodeLatinMap::AT_breve_below, 0 },
00468   { 0x1e96, UnicodeLatinMap::CT_lower, 'h', 0, 0x1e96, 0x0048,
00469     UnicodeLatinMap::AT_line_below, 0 },
00470   { 0x029c, UnicodeLatinMap::CT_upper, 'H', 0, 0x0068, 0x029c,
00471     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00472   { 0x0195, UnicodeLatinMap::CT_lower, 'h', 'v', 0x0195, 0x195,
00473     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00474   { 0x0127, UnicodeLatinMap::CT_lower, 'h', 0, 0x0127, 0x0126,
00475     UnicodeLatinMap::AT_stroke, 0 },
00476   { 0x0126, UnicodeLatinMap::CT_upper, 'H', 0, 0x0127, 0x0126,
00477     UnicodeLatinMap::AT_stroke, 0 },
00478   { 0x0266, UnicodeLatinMap::CT_lower, 'h', 0, 0x0266, 0x0048,
00479     UnicodeLatinMap::AT_hook, 0 },
00480   { 0x0069, UnicodeLatinMap::CT_lower, 'i', 0, 0x0069, 0x0049,
00481     UnicodeLatinMap::AT_none, 0 },
00482   { 0x0049, UnicodeLatinMap::CT_upper, 'I', 0, 0x0069, 0x0049,
00483     UnicodeLatinMap::AT_none, 0 },
00484   { 0x00ed, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ed, 0x00cd,
00485     UnicodeLatinMap::AT_acute, 0 },
00486   { 0x00cd, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ed, 0x00cd,
00487     UnicodeLatinMap::AT_acute, 0 },
00488   { 0x00ec, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ec, 0x00cc,
00489     UnicodeLatinMap::AT_grave, 0 },
00490   { 0x00cc, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ec, 0x00cc,
00491     UnicodeLatinMap::AT_grave, 0 },
00492   { 0x012d, UnicodeLatinMap::CT_lower, 'i', 0, 0x012d, 0x012c,
00493     UnicodeLatinMap::AT_breve, 0 },
00494   { 0x012c, UnicodeLatinMap::CT_upper, 'I', 0, 0x012d, 0x012c,
00495     UnicodeLatinMap::AT_breve, 0 },
00496   { 0x00ee, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ee, 0x00ce,
00497     UnicodeLatinMap::AT_circumflex, 0 },
00498   { 0x00ce, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ee, 0x00ce,
00499     UnicodeLatinMap::AT_circumflex, 0 },
00500   { 0x01d0, UnicodeLatinMap::CT_lower, 'i', 0, 0x01d0, 0x01cf,
00501     UnicodeLatinMap::AT_caron, 0 },
00502   { 0x01cf, UnicodeLatinMap::CT_upper, 'I', 0, 0x01d0, 0x01cf,
00503     UnicodeLatinMap::AT_caron, 0 },
00504   { 0x00ef, UnicodeLatinMap::CT_lower, 'i', 0, 0x00ef, 0x00cf,
00505     UnicodeLatinMap::AT_diaeresis, 0 },
00506   { 0x00cf, UnicodeLatinMap::CT_upper, 'I', 0, 0x00ef, 0x00cf,
00507     UnicodeLatinMap::AT_diaeresis, 0 },
00508   { 0x1e2f, UnicodeLatinMap::CT_lower, 'i', 0, 0x1e2f, 0x1e2e,
00509     UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
00510   { 0x1e2e, UnicodeLatinMap::CT_upper, 'I', 0, 0x1e2f, 0x1e2e,
00511     UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
00512   { 0x0129, UnicodeLatinMap::CT_lower, 'i', 0, 0x0129, 0x0128,
00513     UnicodeLatinMap::AT_tilde, 0 },
00514   { 0x0128, UnicodeLatinMap::CT_upper, 'I', 0, 0x0129, 0x0128,
00515     UnicodeLatinMap::AT_tilde, 0 },
00516   { 0x0130, UnicodeLatinMap::CT_upper, 'I', 0, 0x0069, 0x0130,
00517     UnicodeLatinMap::AT_dot_above, 0 },
00518   { 0x012f, UnicodeLatinMap::CT_lower, 'i', 0, 0x012f, 0x012e,
00519     UnicodeLatinMap::AT_ogonek, 0 },
00520   { 0x012e, UnicodeLatinMap::CT_upper, 'I', 0, 0x012f, 0x012e,
00521     UnicodeLatinMap::AT_ogonek, 0 },
00522   { 0x012b, UnicodeLatinMap::CT_lower, 'i', 0, 0x012b, 0x012a,
00523     UnicodeLatinMap::AT_macron, 0 },
00524   { 0x012a, UnicodeLatinMap::CT_upper, 'I', 0, 0x012b, 0x012a,
00525     UnicodeLatinMap::AT_macron, 0 },
00526   { 0x1ec9, UnicodeLatinMap::CT_lower, 'i', 0, 0x1ec9, 0x1ec8,
00527     UnicodeLatinMap::AT_hook_above, 0 },
00528   { 0x1ec8, UnicodeLatinMap::CT_upper, 'I', 0, 0x1ec9, 0x1ec8,
00529     UnicodeLatinMap::AT_hook_above, 0 },
00530   { 0x0209, UnicodeLatinMap::CT_lower, 'i', 0, 0x0209, 0x0208,
00531     UnicodeLatinMap::AT_double_grave, 0 },
00532   { 0x0208, UnicodeLatinMap::CT_upper, 'I', 0, 0x0209, 0x0208,
00533     UnicodeLatinMap::AT_double_grave, 0 },
00534   { 0x020b, UnicodeLatinMap::CT_lower, 'i', 0, 0x020b, 0x020a,
00535     UnicodeLatinMap::AT_inverted_breve, 0 },
00536   { 0x020a, UnicodeLatinMap::CT_upper, 'I', 0, 0x020b, 0x020a,
00537     UnicodeLatinMap::AT_inverted_breve, 0 },
00538   { 0x1ecb, UnicodeLatinMap::CT_lower, 'i', 0, 0x1ecb, 0x1eca,
00539     UnicodeLatinMap::AT_dot_below, 0 },
00540   { 0x1eca, UnicodeLatinMap::CT_upper, 'I', 0, 0x1ecb, 0x1eca,
00541     UnicodeLatinMap::AT_dot_below, 0 },
00542   { 0x1e2d, UnicodeLatinMap::CT_lower, 'i', 0, 0x1e2d, 0x1e2c,
00543     UnicodeLatinMap::AT_tilde_below, 0 },
00544   { 0x1e2c, UnicodeLatinMap::CT_upper, 'I', 0, 0x1e2d, 0x1e2c,
00545     UnicodeLatinMap::AT_tilde_below, 0 },
00546   { 0x0131, UnicodeLatinMap::CT_lower, 'i', 0, 0x0131, 0x0049,
00547     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_dotless },
00548   { 0x026a, UnicodeLatinMap::CT_upper, 'I', 0, 0x0069, 0x026a,
00549     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00550   { 0x0268, UnicodeLatinMap::CT_lower, 'i', 0, 0x0268, 0x0197,
00551     UnicodeLatinMap::AT_stroke, 0 },
00552   { 0x0197, UnicodeLatinMap::CT_upper, 'I', 0, 0x0268, 0x0197,
00553     UnicodeLatinMap::AT_stroke, 0 },
00554   { 0x006a, UnicodeLatinMap::CT_lower, 'j', 0, 0x006a, 0x004a,
00555     UnicodeLatinMap::AT_none, 0 },
00556   { 0x004a, UnicodeLatinMap::CT_upper, 'J', 0, 0x006a, 0x004a,
00557     UnicodeLatinMap::AT_none, 0 },
00558   { 0x0135, UnicodeLatinMap::CT_lower, 'j', 0, 0x0135, 0x0134,
00559     UnicodeLatinMap::AT_circumflex, 0 },
00560   { 0x0134, UnicodeLatinMap::CT_upper, 'J', 0, 0x0135, 0x0134,
00561     UnicodeLatinMap::AT_circumflex, 0 },
00562   { 0x01f0, UnicodeLatinMap::CT_lower, 'j', 0, 0x01f0, 0x004a,
00563     UnicodeLatinMap::AT_caron, 0 },
00564   { 0x025f, UnicodeLatinMap::CT_lower, 'j', 0, 0x025f, 0x004a,
00565     UnicodeLatinMap::AT_stroke, UnicodeLatinMap::AF_dotless },
00566   { 0x0284, UnicodeLatinMap::CT_lower, 'j', 0, 0x0284, 0x004a,
00567     UnicodeLatinMap::AT_stroke_and_hook, UnicodeLatinMap::AF_dotless },
00568   { 0x006b, UnicodeLatinMap::CT_lower, 'k', 0, 0x006b, 0x004b,
00569     UnicodeLatinMap::AT_none, 0 },
00570   { 0x004b, UnicodeLatinMap::CT_upper, 'K', 0, 0x006b, 0x004b,
00571     UnicodeLatinMap::AT_none, 0 },
00572   { 0x1e31, UnicodeLatinMap::CT_lower, 'k', 0, 0x1e31, 0x1e30,
00573     UnicodeLatinMap::AT_acute, 0 },
00574   { 0x1e30, UnicodeLatinMap::CT_upper, 'K', 0, 0x1e31, 0x1e30,
00575     UnicodeLatinMap::AT_acute, 0 },
00576   { 0x01e9, UnicodeLatinMap::CT_lower, 'k', 0, 0x01e9, 0x01e8,
00577     UnicodeLatinMap::AT_caron, 0 },
00578   { 0x01e8, UnicodeLatinMap::CT_upper, 'K', 0, 0x01e9, 0x01e8,
00579     UnicodeLatinMap::AT_caron, 0 },
00580   { 0x0137, UnicodeLatinMap::CT_lower, 'k', 0, 0x0137, 0x0136,
00581     UnicodeLatinMap::AT_cedilla, 0 },
00582   { 0x0136, UnicodeLatinMap::CT_upper, 'K', 0, 0x0137, 0x0136,
00583     UnicodeLatinMap::AT_cedilla, 0 },
00584   { 0x1e33, UnicodeLatinMap::CT_lower, 'k', 0, 0x1e33, 0x1e32,
00585     UnicodeLatinMap::AT_dot_below, 0 },
00586   { 0x1e32, UnicodeLatinMap::CT_upper, 'K', 0, 0x1e33, 0x1e32,
00587     UnicodeLatinMap::AT_dot_below, 0 },
00588   { 0x1e35, UnicodeLatinMap::CT_lower, 'k', 0, 0x1e35, 0x1e34,
00589     UnicodeLatinMap::AT_line_below, 0 },
00590   { 0x1e34, UnicodeLatinMap::CT_upper, 'K', 0, 0x1e35, 0x1e34,
00591     UnicodeLatinMap::AT_line_below, 0 },
00592   { 0x0199, UnicodeLatinMap::CT_lower, 'k', 0, 0x0199, 0x0198,
00593     UnicodeLatinMap::AT_hook, 0 },
00594   { 0x0198, UnicodeLatinMap::CT_upper, 'K', 0, 0x0199, 0x0198,
00595     UnicodeLatinMap::AT_hook, 0 },
00596   { 0x029e, UnicodeLatinMap::CT_lower, 'k', 0, 0x029e, 0x004b,
00597     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00598   { 0x006c, UnicodeLatinMap::CT_lower, 'l', 0, 0x006c, 0x004c,
00599     UnicodeLatinMap::AT_none, 0 },
00600   { 0x004c, UnicodeLatinMap::CT_upper, 'L', 0, 0x006c, 0x004c,
00601     UnicodeLatinMap::AT_none, 0 },
00602   { 0x013a, UnicodeLatinMap::CT_lower, 'l', 0, 0x013a, 0x0139,
00603     UnicodeLatinMap::AT_acute, 0 },
00604   { 0x0139, UnicodeLatinMap::CT_upper, 'L', 0, 0x013a, 0x0139,
00605     UnicodeLatinMap::AT_acute, 0 },
00606   { 0x013e, UnicodeLatinMap::CT_lower, 'l', 0, 0x013e, 0x013d,
00607     UnicodeLatinMap::AT_caron, 0 },
00608   { 0x013d, UnicodeLatinMap::CT_upper, 'L', 0, 0x013e, 0x013d,
00609     UnicodeLatinMap::AT_caron, 0 },
00610   { 0x013c, UnicodeLatinMap::CT_lower, 'l', 0, 0x013c, 0x013b,
00611     UnicodeLatinMap::AT_cedilla, 0 },
00612   { 0x013b, UnicodeLatinMap::CT_upper, 'L', 0, 0x013c, 0x013b,
00613     UnicodeLatinMap::AT_cedilla, 0 },
00614   { 0x1e37, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e37, 0x1e36,
00615     UnicodeLatinMap::AT_dot_below, 0 },
00616   { 0x1e36, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e37, 0x1e36,
00617     UnicodeLatinMap::AT_dot_below, 0 },
00618   { 0x1e39, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e39, 0x1e38,
00619     UnicodeLatinMap::AT_dot_below_and_macron, 0 },
00620   { 0x1e38, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e39, 0x1e38,
00621     UnicodeLatinMap::AT_dot_below_and_macron, 0 },
00622   { 0x1e3d, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e3d, 0x1e3c,
00623     UnicodeLatinMap::AT_circumflex_below, 0 },
00624   { 0x1e3c, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e3d, 0x1e3c,
00625     UnicodeLatinMap::AT_circumflex_below, 0 },
00626   { 0x1e3b, UnicodeLatinMap::CT_lower, 'l', 0, 0x1e3b, 0x1e3a,
00627     UnicodeLatinMap::AT_line_below, 0 },
00628   { 0x1e3a, UnicodeLatinMap::CT_upper, 'L', 0, 0x1e3b, 0x1e3a,
00629     UnicodeLatinMap::AT_line_below, 0 },
00630   { 0x01c9, UnicodeLatinMap::CT_lower, 'l', 'j', 0x01c9, 0x01c7,
00631     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00632   { 0x01c8, UnicodeLatinMap::CT_upper, 'L', 'j', 0x01c9, 0x01c7,
00633     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00634   { 0x01c7, UnicodeLatinMap::CT_upper, 'L', 'J', 0x01c9, 0x01c7,
00635     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00636   { 0x029f, UnicodeLatinMap::CT_upper, 'L', 0, 0x006c, 0x029f,
00637     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00638   { 0x0142, UnicodeLatinMap::CT_lower, 'l', 0, 0x0142, 0x0141,
00639     UnicodeLatinMap::AT_stroke, 0 },
00640   { 0x0141, UnicodeLatinMap::CT_upper, 'L', 0, 0x0142, 0x0141,
00641     UnicodeLatinMap::AT_stroke, 0 },
00642   { 0x028e, UnicodeLatinMap::CT_lower, 'y', 0, 0x028e, 0x0059,
00643     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00644   { 0x006d, UnicodeLatinMap::CT_lower, 'm', 0, 0x006d, 0x004d,
00645     UnicodeLatinMap::AT_none, 0 },
00646   { 0x004d, UnicodeLatinMap::CT_upper, 'M', 0, 0x006d, 0x004d,
00647     UnicodeLatinMap::AT_none, 0 },
00648   { 0x1e3f, UnicodeLatinMap::CT_lower, 'm', 0, 0x1e3f, 0x1e3e,
00649     UnicodeLatinMap::AT_acute, 0 },
00650   { 0x1e3e, UnicodeLatinMap::CT_upper, 'M', 0, 0x1e3f, 0x1e3e,
00651     UnicodeLatinMap::AT_acute, 0 },
00652   { 0x1e41, UnicodeLatinMap::CT_lower, 'm', 0, 0x1e41, 0x1e40,
00653     UnicodeLatinMap::AT_dot_above, 0 },
00654   { 0x1e40, UnicodeLatinMap::CT_upper, 'M', 0, 0x1e41, 0x1e40,
00655     UnicodeLatinMap::AT_dot_above, 0 },
00656   { 0x1e43, UnicodeLatinMap::CT_lower, 'm', 0, 0x1e43, 0x1e42,
00657     UnicodeLatinMap::AT_dot_below, 0 },
00658   { 0x1e42, UnicodeLatinMap::CT_upper, 'M', 0, 0x1e43, 0x1e42,
00659     UnicodeLatinMap::AT_dot_below, 0 },
00660   { 0x0271, UnicodeLatinMap::CT_lower, 'm', 0, 0x0271, 0x004d,
00661     UnicodeLatinMap::AT_hook, 0 },
00662   { 0x006e, UnicodeLatinMap::CT_lower, 'n', 0, 0x006e, 0x004e,
00663     UnicodeLatinMap::AT_none, 0 },
00664   { 0x004e, UnicodeLatinMap::CT_upper, 'N', 0, 0x006e, 0x004e,
00665     UnicodeLatinMap::AT_none, 0 },
00666   { 0x0144, UnicodeLatinMap::CT_lower, 'n', 0, 0x0144, 0x0143,
00667     UnicodeLatinMap::AT_acute, 0 },
00668   { 0x0143, UnicodeLatinMap::CT_upper, 'N', 0, 0x0144, 0x0143,
00669     UnicodeLatinMap::AT_acute, 0 },
00670   { 0x01f9, UnicodeLatinMap::CT_lower, 'n', 0, 0x01f9, 0x01f8,
00671     UnicodeLatinMap::AT_grave, 0 },
00672   { 0x01f8, UnicodeLatinMap::CT_upper, 'N', 0, 0x01f9, 0x01f8,
00673     UnicodeLatinMap::AT_grave, 0 },
00674   { 0x0148, UnicodeLatinMap::CT_lower, 'n', 0, 0x0148, 0x0147,
00675     UnicodeLatinMap::AT_caron, 0 },
00676   { 0x0147, UnicodeLatinMap::CT_upper, 'N', 0, 0x0148, 0x0147,
00677     UnicodeLatinMap::AT_caron, 0 },
00678   { 0x00f1, UnicodeLatinMap::CT_lower, 'n', 0, 0x00f1, 0x00d1,
00679     UnicodeLatinMap::AT_tilde, 0 },
00680   { 0x00d1, UnicodeLatinMap::CT_upper, 'N', 0, 0x00f1, 0x00d1,
00681     UnicodeLatinMap::AT_tilde, 0 },
00682   { 0x1e45, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e45, 0x1e44,
00683     UnicodeLatinMap::AT_dot_above, 0 },
00684   { 0x1e44, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e45, 0x1e44,
00685     UnicodeLatinMap::AT_dot_above, 0 },
00686   { 0x0146, UnicodeLatinMap::CT_lower, 'n', 0, 0x0146, 0x0145,
00687     UnicodeLatinMap::AT_cedilla, 0 },
00688   { 0x0145, UnicodeLatinMap::CT_upper, 'N', 0, 0x0146, 0x0145,
00689     UnicodeLatinMap::AT_cedilla, 0 },
00690   { 0x1e47, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e47, 0x1e46,
00691     UnicodeLatinMap::AT_dot_below, 0 },
00692   { 0x1e46, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e47, 0x1e46,
00693     UnicodeLatinMap::AT_dot_below, 0 },
00694   { 0x1e4b, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e4b, 0x1e4a,
00695     UnicodeLatinMap::AT_circumflex_below, 0 },
00696   { 0x1e4a, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e4b, 0x1e4a,
00697     UnicodeLatinMap::AT_circumflex_below, 0 },
00698   { 0x1e49, UnicodeLatinMap::CT_lower, 'n', 0, 0x1e49, 0x1e48,
00699     UnicodeLatinMap::AT_line_below, 0 },
00700   { 0x1e48, UnicodeLatinMap::CT_upper, 'N', 0, 0x1e49, 0x1e48,
00701     UnicodeLatinMap::AT_line_below, 0 },
00702   { 0x01cc, UnicodeLatinMap::CT_lower, 'n', 'j', 0x01cc, 0x01ca,
00703     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00704   { 0x01cb, UnicodeLatinMap::CT_upper, 'N', 'j', 0x01cc, 0x01ca,
00705     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00706   { 0x01ca, UnicodeLatinMap::CT_upper, 'N', 'J', 0x01cc, 0x01ca,
00707     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00708   { 0x0274, UnicodeLatinMap::CT_upper, 'N', 0, 0x006e, 0x0274,
00709     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00710   { 0x006f, UnicodeLatinMap::CT_lower, 'o', 0, 0x006f, 0x004f,
00711     UnicodeLatinMap::AT_none, 0 },
00712   { 0x004f, UnicodeLatinMap::CT_upper, 'O', 0, 0x006f, 0x004f,
00713     UnicodeLatinMap::AT_none, 0 },
00714   { 0x00f3, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f3, 0x00d3,
00715     UnicodeLatinMap::AT_acute, 0 },
00716   { 0x00d3, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f3, 0x00d3,
00717     UnicodeLatinMap::AT_acute, 0 },
00718   { 0x00f2, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f2, 0x00d2,
00719     UnicodeLatinMap::AT_grave, 0 },
00720   { 0x00d2, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f2, 0x00d2,
00721     UnicodeLatinMap::AT_grave, 0 },
00722   { 0x014f, UnicodeLatinMap::CT_lower, 'o', 0, 0x014f, 0x014e,
00723     UnicodeLatinMap::AT_breve, 0 },
00724   { 0x014e, UnicodeLatinMap::CT_upper, 'O', 0, 0x014f, 0x014e,
00725     UnicodeLatinMap::AT_breve, 0 },
00726   { 0x00f4, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f4, 0x00d4,
00727     UnicodeLatinMap::AT_circumflex, 0 },
00728   { 0x00d4, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f4, 0x00d4,
00729     UnicodeLatinMap::AT_circumflex, 0 },
00730   { 0x1ed1, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed1, 0x1ed0,
00731     UnicodeLatinMap::AT_circumflex_and_acute, 0 },
00732   { 0x1ed0, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed1, 0x1ed0,
00733     UnicodeLatinMap::AT_circumflex_and_acute, 0 },
00734   { 0x1ed3, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed3, 0x1ed2,
00735     UnicodeLatinMap::AT_circumflex_and_grave, 0 },
00736   { 0x1ed2, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed3, 0x1ed2,
00737     UnicodeLatinMap::AT_circumflex_and_grave, 0 },
00738   { 0x1ed7, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed7, 0x1ed6,
00739     UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
00740   { 0x1ed6, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed7, 0x1ed6,
00741     UnicodeLatinMap::AT_circumflex_and_tilde, 0 },
00742   { 0x1ed5, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed5, 0x1ed4,
00743     UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
00744   { 0x1ed4, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed5, 0x1ed4,
00745     UnicodeLatinMap::AT_circumflex_and_hook_above, 0 },
00746   { 0x01d2, UnicodeLatinMap::CT_lower, 'o', 0, 0x01d2, 0x01d1,
00747     UnicodeLatinMap::AT_caron, 0 },
00748   { 0x01d1, UnicodeLatinMap::CT_upper, 'O', 0, 0x01d2, 0x01d1,
00749     UnicodeLatinMap::AT_caron, 0 },
00750   { 0x00f6, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f6, 0x00d6,
00751     UnicodeLatinMap::AT_diaeresis, 0 },
00752   { 0x00d6, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f6, 0x00d6,
00753     UnicodeLatinMap::AT_diaeresis, 0 },
00754   { 0x022b, UnicodeLatinMap::CT_lower, 'o', 0, 0x022b, 0x022a,
00755     UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
00756   { 0x022a, UnicodeLatinMap::CT_upper, 'O', 0, 0x022b, 0x022a,
00757     UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
00758   { 0x0151, UnicodeLatinMap::CT_lower, 'o', 0, 0x0151, 0x0150,
00759     UnicodeLatinMap::AT_double_acute, 0 },
00760   { 0x0150, UnicodeLatinMap::CT_upper, 'O', 0, 0x0151, 0x0150,
00761     UnicodeLatinMap::AT_double_acute, 0 },
00762   { 0x00f5, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f5, 0x00d5,
00763     UnicodeLatinMap::AT_tilde, 0 },
00764   { 0x00d5, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f5, 0x00d5,
00765     UnicodeLatinMap::AT_tilde, 0 },
00766   { 0x1e4d, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e4d, 0x1e4c,
00767     UnicodeLatinMap::AT_tilde_and_acute, 0 },
00768   { 0x1e4c, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e4d, 0x1e4c,
00769     UnicodeLatinMap::AT_tilde_and_acute, 0 },
00770   { 0x1e4f, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e4f, 0x1e4e,
00771     UnicodeLatinMap::AT_tilde_and_diaeresis, 0 },
00772   { 0x1e4e, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e4f, 0x1e4e,
00773     UnicodeLatinMap::AT_tilde_and_diaeresis, 0 },
00774   { 0x022d, UnicodeLatinMap::CT_lower, 'o', 0, 0x022d, 0x022c,
00775     UnicodeLatinMap::AT_tilde_and_macron, 0 },
00776   { 0x022c, UnicodeLatinMap::CT_upper, 'O', 0, 0x022d, 0x022c,
00777     UnicodeLatinMap::AT_tilde_and_macron, 0 },
00778   { 0x022f, UnicodeLatinMap::CT_lower, 'o', 0, 0x022f, 0x022e,
00779     UnicodeLatinMap::AT_dot_above, 0 },
00780   { 0x022e, UnicodeLatinMap::CT_upper, 'O', 0, 0x022f, 0x022e,
00781     UnicodeLatinMap::AT_dot_above, 0 },
00782   { 0x0231, UnicodeLatinMap::CT_lower, 'o', 0, 0x0231, 0x0230,
00783     UnicodeLatinMap::AT_dot_above_and_macron, 0 },
00784   { 0x0230, UnicodeLatinMap::CT_upper, 'O', 0, 0x0231, 0x0230,
00785     UnicodeLatinMap::AT_dot_above_and_macron, 0 },
00786   { 0x01eb, UnicodeLatinMap::CT_lower, 'o', 0, 0x01eb, 0x01ea,
00787     UnicodeLatinMap::AT_ogonek, 0 },
00788   { 0x01ea, UnicodeLatinMap::CT_upper, 'O', 0, 0x01eb, 0x01ea,
00789     UnicodeLatinMap::AT_ogonek, 0 },
00790   { 0x01ed, UnicodeLatinMap::CT_lower, 'o', 0, 0x01ed, 0x01ec,
00791     UnicodeLatinMap::AT_ogonek_and_macron, 0 },
00792   { 0x01ec, UnicodeLatinMap::CT_upper, 'O', 0, 0x01ed, 0x01ec,
00793     UnicodeLatinMap::AT_ogonek_and_macron, 0 },
00794   { 0x014d, UnicodeLatinMap::CT_lower, 'o', 0, 0x014d, 0x014c,
00795     UnicodeLatinMap::AT_macron, 0 },
00796   { 0x014c, UnicodeLatinMap::CT_upper, 'O', 0, 0x014d, 0x014c,
00797     UnicodeLatinMap::AT_macron, 0 },
00798   { 0x1e53, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e53, 0x1e52,
00799     UnicodeLatinMap::AT_macron_and_acute, 0 },
00800   { 0x1e52, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e53, 0x1e52,
00801     UnicodeLatinMap::AT_macron_and_acute, 0 },
00802   { 0x1e51, UnicodeLatinMap::CT_lower, 'o', 0, 0x1e51, 0x1e50,
00803     UnicodeLatinMap::AT_macron_and_grave, 0 },
00804   { 0x1e50, UnicodeLatinMap::CT_upper, 'O', 0, 0x1e51, 0x1e50,
00805     UnicodeLatinMap::AT_macron_and_grave, 0 },
00806   { 0x1ecf, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ecf, 0x1ece,
00807     UnicodeLatinMap::AT_hook_above, 0 },
00808   { 0x1ece, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ecf, 0x1ece,
00809     UnicodeLatinMap::AT_hook_above, 0 },
00810   { 0x020d, UnicodeLatinMap::CT_lower, 'o', 0, 0x020d, 0x020c,
00811     UnicodeLatinMap::AT_double_grave, 0 },
00812   { 0x020c, UnicodeLatinMap::CT_upper, 'O', 0, 0x020d, 0x020c,
00813     UnicodeLatinMap::AT_double_grave, 0 },
00814   { 0x020f, UnicodeLatinMap::CT_lower, 'o', 0, 0x020f, 0x020e,
00815     UnicodeLatinMap::AT_inverted_breve, 0 },
00816   { 0x020e, UnicodeLatinMap::CT_upper, 'O', 0, 0x020f, 0x020e,
00817     UnicodeLatinMap::AT_inverted_breve, 0 },
00818   { 0x01a1, UnicodeLatinMap::CT_lower, 'o', 0, 0x01a1, 0x01a0,
00819     UnicodeLatinMap::AT_horn, 0 },
00820   { 0x01a0, UnicodeLatinMap::CT_upper, 'O', 0, 0x01a1, 0x01a0,
00821     UnicodeLatinMap::AT_horn, 0 },
00822   { 0x1edb, UnicodeLatinMap::CT_lower, 'o', 0, 0x1edb, 0x1eda,
00823     UnicodeLatinMap::AT_horn_and_acute, 0 },
00824   { 0x1eda, UnicodeLatinMap::CT_upper, 'O', 0, 0x1edb, 0x1eda,
00825     UnicodeLatinMap::AT_horn_and_acute, 0 },
00826   { 0x1edd, UnicodeLatinMap::CT_lower, 'o', 0, 0x1edd, 0x1edc,
00827     UnicodeLatinMap::AT_horn_and_grave, 0 },
00828   { 0x1edc, UnicodeLatinMap::CT_upper, 'O', 0, 0x1edd, 0x1edc,
00829     UnicodeLatinMap::AT_horn_and_grave, 0 },
00830   { 0x1ee1, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ee1, 0x1ee0,
00831     UnicodeLatinMap::AT_horn_and_tilde, 0 },
00832   { 0x1ee0, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ee1, 0x1ee0,
00833     UnicodeLatinMap::AT_horn_and_tilde, 0 },
00834   { 0x1edf, UnicodeLatinMap::CT_lower, 'o', 0, 0x1edf, 0x1ede,
00835     UnicodeLatinMap::AT_horn_and_hook_above, 0 },
00836   { 0x1ede, UnicodeLatinMap::CT_upper, 'O', 0, 0x1edf, 0x1ede,
00837     UnicodeLatinMap::AT_horn_and_hook_above, 0 },
00838   { 0x1ee3, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ee3, 0x1ee2,
00839     UnicodeLatinMap::AT_horn_and_dot_below, 0 },
00840   { 0x1ee2, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ee3, 0x1ee2,
00841     UnicodeLatinMap::AT_horn_and_dot_below, 0 },
00842   { 0x1ecd, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ecd, 0x1ecc,
00843     UnicodeLatinMap::AT_dot_below, 0 },
00844   { 0x1ecc, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ecd, 0x1ecc,
00845     UnicodeLatinMap::AT_dot_below, 0 },
00846   { 0x1ed9, UnicodeLatinMap::CT_lower, 'o', 0, 0x1ed9, 0x1ed8,
00847     UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
00848   { 0x1ed8, UnicodeLatinMap::CT_upper, 'O', 0, 0x1ed9, 0x1ed8,
00849     UnicodeLatinMap::AT_circumflex_and_dot_below, 0 },
00850   { 0x0153, UnicodeLatinMap::CT_lower, 'o', 'e', 0x0153, 0x0152,
00851     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00852   { 0x0152, UnicodeLatinMap::CT_upper, 'O', 'E', 0x0153, 0x0152,
00853     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_ligature },
00854   { 0x0276, UnicodeLatinMap::CT_upper, 'O', 'E', 0x0153, 0x0276,
00855     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap | UnicodeLatinMap::AF_ligature },
00856   { 0x00f8, UnicodeLatinMap::CT_lower, 'o', 0, 0x00f8, 0x00d8,
00857     UnicodeLatinMap::AT_stroke, 0 },
00858   { 0x00d8, UnicodeLatinMap::CT_upper, 'O', 0, 0x00f8, 0x00d8,
00859     UnicodeLatinMap::AT_stroke, 0 },
00860   { 0x01ff, UnicodeLatinMap::CT_lower, 'o', 0, 0x01ff, 0x01fe,
00861     UnicodeLatinMap::AT_stroke_and_acute, 0 },
00862   { 0x01fe, UnicodeLatinMap::CT_upper, 'O', 0, 0x01ff, 0x01fe,
00863     UnicodeLatinMap::AT_stroke_and_acute, 0 },
00864   { 0x0070, UnicodeLatinMap::CT_lower, 'p', 0, 0x0070, 0x0050,
00865     UnicodeLatinMap::AT_none, 0 },
00866   { 0x0050, UnicodeLatinMap::CT_upper, 'P', 0, 0x0070, 0x0050,
00867     UnicodeLatinMap::AT_none, 0 },
00868   { 0x1e55, UnicodeLatinMap::CT_lower, 'p', 0, 0x1e55, 0x1e54,
00869     UnicodeLatinMap::AT_acute, 0 },
00870   { 0x1e54, UnicodeLatinMap::CT_upper, 'P', 0, 0x1e55, 0x1e54,
00871     UnicodeLatinMap::AT_acute, 0 },
00872   { 0x1e57, UnicodeLatinMap::CT_lower, 'p', 0, 0x1e57, 0x1e56,
00873     UnicodeLatinMap::AT_dot_above, 0 },
00874   { 0x1e56, UnicodeLatinMap::CT_upper, 'P', 0, 0x1e57, 0x1e56,
00875     UnicodeLatinMap::AT_dot_above, 0 },
00876   { 0x01a5, UnicodeLatinMap::CT_lower, 'p', 0, 0x01a5, 0x01a4,
00877     UnicodeLatinMap::AT_hook, 0 },
00878   { 0x01a4, UnicodeLatinMap::CT_upper, 'P', 0, 0x01a5, 0x01a4,
00879     UnicodeLatinMap::AT_hook, 0 },
00880   { 0x0071, UnicodeLatinMap::CT_lower, 'q', 0, 0x0071, 0x0051,
00881     UnicodeLatinMap::AT_none, 0 },
00882   { 0x0051, UnicodeLatinMap::CT_upper, 'Q', 0, 0x0071, 0x0051,
00883     UnicodeLatinMap::AT_none, 0 },
00884   { 0x02a0, UnicodeLatinMap::CT_lower, 'q', 0, 0x02a0, 0x0051,
00885     UnicodeLatinMap::AT_hook, 0 },
00886   { 0x0072, UnicodeLatinMap::CT_lower, 'r', 0, 0x0072, 0x0052,
00887     UnicodeLatinMap::AT_none, 0 },
00888   { 0x0052, UnicodeLatinMap::CT_upper, 'R', 0, 0x0072, 0x0052,
00889     UnicodeLatinMap::AT_none, 0 },
00890   { 0x0155, UnicodeLatinMap::CT_lower, 'r', 0, 0x0155, 0x0154,
00891     UnicodeLatinMap::AT_acute, 0 },
00892   { 0x0154, UnicodeLatinMap::CT_upper, 'R', 0, 0x0155, 0x0154,
00893     UnicodeLatinMap::AT_acute, 0 },
00894   { 0x0159, UnicodeLatinMap::CT_lower, 'r', 0, 0x0159, 0x0158,
00895     UnicodeLatinMap::AT_caron, 0 },
00896   { 0x0158, UnicodeLatinMap::CT_upper, 'R', 0, 0x0159, 0x0158,
00897     UnicodeLatinMap::AT_caron, 0 },
00898   { 0x1e59, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e59, 0x1e58,
00899     UnicodeLatinMap::AT_dot_above, 0 },
00900   { 0x1e58, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e59, 0x1e58,
00901     UnicodeLatinMap::AT_dot_above, 0 },
00902   { 0x0157, UnicodeLatinMap::CT_lower, 'r', 0, 0x0157, 0x0156,
00903     UnicodeLatinMap::AT_cedilla, 0 },
00904   { 0x0156, UnicodeLatinMap::CT_upper, 'R', 0, 0x0157, 0x0156,
00905     UnicodeLatinMap::AT_cedilla, 0 },
00906   { 0x0211, UnicodeLatinMap::CT_lower, 'r', 0, 0x0211, 0x0210,
00907     UnicodeLatinMap::AT_double_grave, 0 },
00908   { 0x0210, UnicodeLatinMap::CT_upper, 'R', 0, 0x0211, 0x0210,
00909     UnicodeLatinMap::AT_double_grave, 0 },
00910   { 0x0213, UnicodeLatinMap::CT_lower, 'r', 0, 0x0213, 0x0212,
00911     UnicodeLatinMap::AT_inverted_breve, 0 },
00912   { 0x0212, UnicodeLatinMap::CT_upper, 'R', 0, 0x0213, 0x0212,
00913     UnicodeLatinMap::AT_inverted_breve, 0 },
00914   { 0x1e5b, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e5b, 0x1e5a,
00915     UnicodeLatinMap::AT_dot_below, 0 },
00916   { 0x1e5a, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e5b, 0x1e5a,
00917     UnicodeLatinMap::AT_dot_below, 0 },
00918   { 0x1e5d, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e5d, 0x1e5c,
00919     UnicodeLatinMap::AT_dot_below_and_macron, 0 },
00920   { 0x1e5c, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e5d, 0x1e5c,
00921     UnicodeLatinMap::AT_dot_below_and_macron, 0 },
00922   { 0x1e5f, UnicodeLatinMap::CT_lower, 'r', 0, 0x1e5f, 0x1e5e,
00923     UnicodeLatinMap::AT_line_below, 0 },
00924   { 0x1e5e, UnicodeLatinMap::CT_upper, 'R', 0, 0x1e5f, 0x1e5e,
00925     UnicodeLatinMap::AT_line_below, 0 },
00926   { 0x0280, UnicodeLatinMap::CT_upper, 'R', 0, 0x0072, 0x0280,
00927     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
00928   { 0x0279, UnicodeLatinMap::CT_lower, 'r', 0, 0x0279, 0x0052,
00929     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
00930   { 0x027b, UnicodeLatinMap::CT_lower, 'r', 0, 0x027b, 0x0052,
00931     UnicodeLatinMap::AT_hook, UnicodeLatinMap::AF_turned },
00932   { 0x0281, UnicodeLatinMap::CT_upper, 'R', 0, 0x0072, 0x0281,
00933     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned | UnicodeLatinMap::AF_smallcap },
00934   { 0x0073, UnicodeLatinMap::CT_lower, 's', 0, 0x0073, 0x0053,
00935     UnicodeLatinMap::AT_none, 0 },
00936   { 0x0053, UnicodeLatinMap::CT_upper, 'S', 0, 0x0073, 0x0053,
00937     UnicodeLatinMap::AT_none, 0 },
00938   { 0x015b, UnicodeLatinMap::CT_lower, 's', 0, 0x015b, 0x015a,
00939     UnicodeLatinMap::AT_acute, 0 },
00940   { 0x015a, UnicodeLatinMap::CT_upper, 'S', 0, 0x015b, 0x015a,
00941     UnicodeLatinMap::AT_acute, 0 },
00942   { 0x1e65, UnicodeLatinMap::CT_lower, 's', 0, 0x1e65, 0x1e64,
00943     UnicodeLatinMap::AT_acute_and_dot_above, 0 },
00944   { 0x1e64, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e65, 0x1e64,
00945     UnicodeLatinMap::AT_acute_and_dot_above, 0 },
00946   { 0x015d, UnicodeLatinMap::CT_lower, 's', 0, 0x015d, 0x015c,
00947     UnicodeLatinMap::AT_circumflex, 0 },
00948   { 0x015c, UnicodeLatinMap::CT_upper, 'S', 0, 0x015d, 0x015c,
00949     UnicodeLatinMap::AT_circumflex, 0 },
00950   { 0x0161, UnicodeLatinMap::CT_lower, 's', 0, 0x0161, 0x0160,
00951     UnicodeLatinMap::AT_caron, 0 },
00952   { 0x0160, UnicodeLatinMap::CT_upper, 'S', 0, 0x0161, 0x0160,
00953     UnicodeLatinMap::AT_caron, 0 },
00954   { 0x1e67, UnicodeLatinMap::CT_lower, 's', 0, 0x1e67, 0x1e66,
00955     UnicodeLatinMap::AT_caron_and_dot_above, 0 },
00956   { 0x1e66, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e67, 0x1e66,
00957     UnicodeLatinMap::AT_caron_and_dot_above, 0 },
00958   { 0x1e61, UnicodeLatinMap::CT_lower, 's', 0, 0x1e61, 0x1e60,
00959     UnicodeLatinMap::AT_dot_above, 0 },
00960   { 0x1e60, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e61, 0x1e60,
00961     UnicodeLatinMap::AT_dot_above, 0 },
00962   { 0x015f, UnicodeLatinMap::CT_lower, 's', 0, 0x015f, 0x015e,
00963     UnicodeLatinMap::AT_cedilla, 0 },
00964   { 0x015e, UnicodeLatinMap::CT_upper, 'S', 0, 0x015f, 0x015e,
00965     UnicodeLatinMap::AT_cedilla, 0 },
00966   { 0x1e63, UnicodeLatinMap::CT_lower, 's', 0, 0x1e63, 0x1e62,
00967     UnicodeLatinMap::AT_dot_below, 0 },
00968   { 0x1e62, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e63, 0x1e62,
00969     UnicodeLatinMap::AT_dot_below, 0 },
00970   { 0x1e69, UnicodeLatinMap::CT_lower, 's', 0, 0x1e69, 0x1e68,
00971     UnicodeLatinMap::AT_dot_below_and_dot_above, 0 },
00972   { 0x1e68, UnicodeLatinMap::CT_upper, 'S', 0, 0x1e69, 0x1e68,
00973     UnicodeLatinMap::AT_dot_below_and_dot_above, 0 },
00974   { 0x0219, UnicodeLatinMap::CT_lower, 's', 0, 0x0219, 0x0218,
00975     UnicodeLatinMap::AT_comma_below, 0 },
00976   { 0x0218, UnicodeLatinMap::CT_upper, 'S', 0, 0x0219, 0x0218,
00977     UnicodeLatinMap::AT_comma_below, 0 },
00978   { 0x00df, UnicodeLatinMap::CT_lower, 's', 's', 0x00df, 0x00df,
00979     UnicodeLatinMap::AT_none, 0 },
00980   { 0x0282, UnicodeLatinMap::CT_lower, 's', 0, 0x0282, 0x0053,
00981     UnicodeLatinMap::AT_hook, 0 },
00982   { 0x0074, UnicodeLatinMap::CT_lower, 't', 0, 0x0074, 0x0054,
00983     UnicodeLatinMap::AT_none, 0 },
00984   { 0x0054, UnicodeLatinMap::CT_upper, 'T', 0, 0x0074, 0x0054,
00985     UnicodeLatinMap::AT_none, 0 },
00986   { 0x0165, UnicodeLatinMap::CT_lower, 't', 0, 0x0165, 0x0164,
00987     UnicodeLatinMap::AT_caron, 0 },
00988   { 0x0164, UnicodeLatinMap::CT_upper, 'T', 0, 0x0165, 0x0164,
00989     UnicodeLatinMap::AT_caron, 0 },
00990   { 0x1e97, UnicodeLatinMap::CT_lower, 't', 0, 0x1e97, 0x0054,
00991     UnicodeLatinMap::AT_diaeresis, 0 },
00992   { 0x1e6b, UnicodeLatinMap::CT_lower, 't', 0, 0x1e6b, 0x1e6a,
00993     UnicodeLatinMap::AT_dot_above, 0 },
00994   { 0x1e6a, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e6b, 0x1e6a,
00995     UnicodeLatinMap::AT_dot_above, 0 },
00996   { 0x0163, UnicodeLatinMap::CT_lower, 't', 0, 0x0163, 0x0162,
00997     UnicodeLatinMap::AT_cedilla, 0 },
00998   { 0x0162, UnicodeLatinMap::CT_upper, 'T', 0, 0x0163, 0x0162,
00999     UnicodeLatinMap::AT_cedilla, 0 },
01000   { 0x1e6d, UnicodeLatinMap::CT_lower, 't', 0, 0x1e6d, 0x1e6c,
01001     UnicodeLatinMap::AT_dot_below, 0 },
01002   { 0x1e6c, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e6d, 0x1e6c,
01003     UnicodeLatinMap::AT_dot_below, 0 },
01004   { 0x021b, UnicodeLatinMap::CT_lower, 't', 0, 0x021b, 0x021a,
01005     UnicodeLatinMap::AT_comma_below, 0 },
01006   { 0x021a, UnicodeLatinMap::CT_upper, 'T', 0, 0x021b, 0x021a,
01007     UnicodeLatinMap::AT_comma_below, 0 },
01008   { 0x1e71, UnicodeLatinMap::CT_lower, 't', 0, 0x1e71, 0x1e70,
01009     UnicodeLatinMap::AT_circumflex_below, 0 },
01010   { 0x1e70, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e71, 0x1e70,
01011     UnicodeLatinMap::AT_circumflex_below, 0 },
01012   { 0x1e6f, UnicodeLatinMap::CT_lower, 't', 0, 0x1e6f, 0x1e6e,
01013     UnicodeLatinMap::AT_line_below, 0 },
01014   { 0x1e6e, UnicodeLatinMap::CT_upper, 'T', 0, 0x1e6f, 0x1e6e,
01015     UnicodeLatinMap::AT_line_below, 0 },
01016   { 0x0167, UnicodeLatinMap::CT_lower, 't', 0, 0x0167, 0x0166,
01017     UnicodeLatinMap::AT_stroke, 0 },
01018   { 0x0166, UnicodeLatinMap::CT_upper, 'T', 0, 0x0167, 0x0166,
01019     UnicodeLatinMap::AT_stroke, 0 },
01020   { 0x01ad, UnicodeLatinMap::CT_lower, 't', 0, 0x01ad, 0x01ac,
01021     UnicodeLatinMap::AT_hook, 0 },
01022   { 0x01ac, UnicodeLatinMap::CT_upper, 'T', 0, 0x01ad, 0x01ac,
01023     UnicodeLatinMap::AT_hook, 0 },
01024   { 0x0287, UnicodeLatinMap::CT_lower, 't', 0, 0x0287, 0x0054,
01025     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
01026   { 0x0075, UnicodeLatinMap::CT_lower, 'u', 0, 0x0075, 0x0055,
01027     UnicodeLatinMap::AT_none, 0 },
01028   { 0x0055, UnicodeLatinMap::CT_upper, 'U', 0, 0x0075, 0x0055,
01029     UnicodeLatinMap::AT_none, 0 },
01030   { 0x00fa, UnicodeLatinMap::CT_lower, 'u', 0, 0x00fa, 0x00da,
01031     UnicodeLatinMap::AT_acute, 0 },
01032   { 0x00da, UnicodeLatinMap::CT_upper, 'U', 0, 0x00fa, 0x00da,
01033     UnicodeLatinMap::AT_acute, 0 },
01034   { 0x00f9, UnicodeLatinMap::CT_lower, 'u', 0, 0x00f9, 0x00d9,
01035     UnicodeLatinMap::AT_grave, 0 },
01036   { 0x00d9, UnicodeLatinMap::CT_upper, 'U', 0, 0x00f9, 0x00d9,
01037     UnicodeLatinMap::AT_grave, 0 },
01038   { 0x016d, UnicodeLatinMap::CT_lower, 'u', 0, 0x016d, 0x016c,
01039     UnicodeLatinMap::AT_breve, 0 },
01040   { 0x016c, UnicodeLatinMap::CT_upper, 'U', 0, 0x016d, 0x016c,
01041     UnicodeLatinMap::AT_breve, 0 },
01042   { 0x00fb, UnicodeLatinMap::CT_lower, 'u', 0, 0x00fb, 0x00db,
01043     UnicodeLatinMap::AT_circumflex, 0 },
01044   { 0x00db, UnicodeLatinMap::CT_upper, 'U', 0, 0x00fb, 0x00db,
01045     UnicodeLatinMap::AT_circumflex, 0 },
01046   { 0x01d4, UnicodeLatinMap::CT_lower, 'u', 0, 0x01d4, 0x01d3,
01047     UnicodeLatinMap::AT_caron, 0 },
01048   { 0x01d3, UnicodeLatinMap::CT_upper, 'U', 0, 0x01d4, 0x01d3,
01049     UnicodeLatinMap::AT_caron, 0 },
01050   { 0x016f, UnicodeLatinMap::CT_lower, 'u', 0, 0x016f, 0x016e,
01051     UnicodeLatinMap::AT_ring_above, 0 },
01052   { 0x016e, UnicodeLatinMap::CT_upper, 'U', 0, 0x016f, 0x016e,
01053     UnicodeLatinMap::AT_ring_above, 0 },
01054   { 0x00fc, UnicodeLatinMap::CT_lower, 'u', 0, 0x00fc, 0x00dc,
01055     UnicodeLatinMap::AT_diaeresis, 0 },
01056   { 0x00dc, UnicodeLatinMap::CT_upper, 'U', 0, 0x00fc, 0x00dc,
01057     UnicodeLatinMap::AT_diaeresis, 0 },
01058   { 0x01d8, UnicodeLatinMap::CT_lower, 'u', 0, 0x01d8, 0x01d7,
01059     UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
01060   { 0x01d7, UnicodeLatinMap::CT_upper, 'U', 0, 0x01d8, 0x01d7,
01061     UnicodeLatinMap::AT_diaeresis_and_acute, 0 },
01062   { 0x01dc, UnicodeLatinMap::CT_lower, 'u', 0, 0x01dc, 0x01db,
01063     UnicodeLatinMap::AT_diaeresis_and_grave, 0 },
01064   { 0x01db, UnicodeLatinMap::CT_upper, 'U', 0, 0x01dc, 0x01db,
01065     UnicodeLatinMap::AT_diaeresis_and_grave, 0 },
01066   { 0x01da, UnicodeLatinMap::CT_lower, 'u', 0, 0x01da, 0x01d9,
01067     UnicodeLatinMap::AT_diaeresis_and_caron, 0 },
01068   { 0x01d9, UnicodeLatinMap::CT_upper, 'U', 0, 0x01da, 0x01d9,
01069     UnicodeLatinMap::AT_diaeresis_and_caron, 0 },
01070   { 0x01d6, UnicodeLatinMap::CT_lower, 'u', 0, 0x01d6, 0x01d5,
01071     UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
01072   { 0x01d5, UnicodeLatinMap::CT_upper, 'U', 0, 0x01d6, 0x01d5,
01073     UnicodeLatinMap::AT_diaeresis_and_macron, 0 },
01074   { 0x0171, UnicodeLatinMap::CT_lower, 'u', 0, 0x0171, 0x0170,
01075     UnicodeLatinMap::AT_double_acute, 0 },
01076   { 0x0170, UnicodeLatinMap::CT_upper, 'U', 0, 0x0171, 0x0170,
01077     UnicodeLatinMap::AT_double_acute, 0 },
01078   { 0x0169, UnicodeLatinMap::CT_lower, 'u', 0, 0x0169, 0x0168,
01079     UnicodeLatinMap::AT_tilde, 0 },
01080   { 0x0168, UnicodeLatinMap::CT_upper, 'U', 0, 0x0169, 0x0168,
01081     UnicodeLatinMap::AT_tilde, 0 },
01082   { 0x1e79, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e79, 0x1e78,
01083     UnicodeLatinMap::AT_tilde_and_acute, 0 },
01084   { 0x1e78, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e79, 0x1e78,
01085     UnicodeLatinMap::AT_tilde_and_acute, 0 },
01086   { 0x0173, UnicodeLatinMap::CT_lower, 'u', 0, 0x0173, 0x0172,
01087     UnicodeLatinMap::AT_ogonek, 0 },
01088   { 0x0172, UnicodeLatinMap::CT_upper, 'U', 0, 0x0173, 0x0172,
01089     UnicodeLatinMap::AT_ogonek, 0 },
01090   { 0x016b, UnicodeLatinMap::CT_lower, 'u', 0, 0x016b, 0x016a,
01091     UnicodeLatinMap::AT_macron, 0 },
01092   { 0x016a, UnicodeLatinMap::CT_upper, 'U', 0, 0x016b, 0x016a,
01093     UnicodeLatinMap::AT_macron, 0 },
01094   { 0x1e7b, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e7b, 0x1e7a,
01095     UnicodeLatinMap::AT_macron_and_diaeresis, 0 },
01096   { 0x1e7a, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e7b, 0x1e7a,
01097     UnicodeLatinMap::AT_macron_and_diaeresis, 0 },
01098   { 0x1ee7, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ee7, 0x1ee6,
01099     UnicodeLatinMap::AT_hook_above, 0 },
01100   { 0x1ee6, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ee7, 0x1ee6,
01101     UnicodeLatinMap::AT_hook_above, 0 },
01102   { 0x0215, UnicodeLatinMap::CT_lower, 'u', 0, 0x0215, 0x0214,
01103     UnicodeLatinMap::AT_double_grave, 0 },
01104   { 0x0214, UnicodeLatinMap::CT_upper, 'U', 0, 0x0215, 0x0214,
01105     UnicodeLatinMap::AT_double_grave, 0 },
01106   { 0x0217, UnicodeLatinMap::CT_lower, 'u', 0, 0x0217, 0x0216,
01107     UnicodeLatinMap::AT_inverted_breve, 0 },
01108   { 0x0216, UnicodeLatinMap::CT_upper, 'U', 0, 0x0217, 0x0216,
01109     UnicodeLatinMap::AT_inverted_breve, 0 },
01110   { 0x01b0, UnicodeLatinMap::CT_lower, 'u', 0, 0x01b0, 0x01af,
01111     UnicodeLatinMap::AT_horn, 0 },
01112   { 0x01af, UnicodeLatinMap::CT_upper, 'U', 0, 0x01b0, 0x01af,
01113     UnicodeLatinMap::AT_horn, 0 },
01114   { 0x1ee9, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ee9, 0x1ee8,
01115     UnicodeLatinMap::AT_horn_and_acute, 0 },
01116   { 0x1ee8, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ee9, 0x1ee8,
01117     UnicodeLatinMap::AT_horn_and_acute, 0 },
01118   { 0x1eeb, UnicodeLatinMap::CT_lower, 'u', 0, 0x1eeb, 0x1eea,
01119     UnicodeLatinMap::AT_horn_and_grave, 0 },
01120   { 0x1eea, UnicodeLatinMap::CT_upper, 'U', 0, 0x1eeb, 0x1eea,
01121     UnicodeLatinMap::AT_horn_and_grave, 0 },
01122   { 0x1eef, UnicodeLatinMap::CT_lower, 'u', 0, 0x1eef, 0x1eee,
01123     UnicodeLatinMap::AT_horn_and_tilde, 0 },
01124   { 0x1eee, UnicodeLatinMap::CT_upper, 'U', 0, 0x1eef, 0x1eee,
01125     UnicodeLatinMap::AT_horn_and_tilde, 0 },
01126   { 0x1eed, UnicodeLatinMap::CT_lower, 'u', 0, 0x1eed, 0x1eec,
01127     UnicodeLatinMap::AT_horn_and_hook_above, 0 },
01128   { 0x1eec, UnicodeLatinMap::CT_upper, 'U', 0, 0x1eed, 0x1eec,
01129     UnicodeLatinMap::AT_horn_and_hook_above, 0 },
01130   { 0x1ef1, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ef1, 0x1ef0,
01131     UnicodeLatinMap::AT_horn_and_dot_below, 0 },
01132   { 0x1ef0, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ef1, 0x1ef0,
01133     UnicodeLatinMap::AT_horn_and_dot_below, 0 },
01134   { 0x1ee5, UnicodeLatinMap::CT_lower, 'u', 0, 0x1ee5, 0x1ee4,
01135     UnicodeLatinMap::AT_dot_below, 0 },
01136   { 0x1ee4, UnicodeLatinMap::CT_upper, 'U', 0, 0x1ee5, 0x1ee4,
01137     UnicodeLatinMap::AT_dot_below, 0 },
01138   { 0x1e73, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e73, 0x1e72,
01139     UnicodeLatinMap::AT_diaeresis_below, 0 },
01140   { 0x1e72, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e73, 0x1e72,
01141     UnicodeLatinMap::AT_diaeresis_below, 0 },
01142   { 0x1e77, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e77, 0x1e76,
01143     UnicodeLatinMap::AT_circumflex_below, 0 },
01144   { 0x1e76, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e77, 0x1e76,
01145     UnicodeLatinMap::AT_circumflex_below, 0 },
01146   { 0x1e75, UnicodeLatinMap::CT_lower, 'u', 0, 0x1e75, 0x1e74,
01147     UnicodeLatinMap::AT_tilde_below, 0 },
01148   { 0x1e74, UnicodeLatinMap::CT_upper, 'U', 0, 0x1e75, 0x1e74,
01149     UnicodeLatinMap::AT_tilde_below, 0 },
01150   { 0x0265, UnicodeLatinMap::CT_lower, 'h', 0, 0x0265, 0x0048,
01151     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
01152   { 0x026f, UnicodeLatinMap::CT_lower, 'm', 0, 0x026f, 0x019c,
01153     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
01154   { 0x019c, UnicodeLatinMap::CT_upper, 'M', 0, 0x026f, 0x019c,
01155     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
01156   { 0x0076, UnicodeLatinMap::CT_lower, 'v', 0, 0x0076, 0x0056,
01157     UnicodeLatinMap::AT_none, 0 },
01158   { 0x0056, UnicodeLatinMap::CT_upper, 'V', 0, 0x0076, 0x0056,
01159     UnicodeLatinMap::AT_none, 0 },
01160   { 0x1e7d, UnicodeLatinMap::CT_lower, 'v', 0, 0x1e7d, 0x1e7c,
01161     UnicodeLatinMap::AT_tilde, 0 },
01162   { 0x1e7c, UnicodeLatinMap::CT_upper, 'V', 0, 0x1e7d, 0x1e7c,
01163     UnicodeLatinMap::AT_tilde, 0 },
01164   { 0x1e7f, UnicodeLatinMap::CT_lower, 'v', 0, 0x1e7f, 0x1e7e,
01165     UnicodeLatinMap::AT_dot_below, 0 },
01166   { 0x1e7e, UnicodeLatinMap::CT_upper, 'V', 0, 0x1e7f, 0x1e7e,
01167     UnicodeLatinMap::AT_dot_below, 0 },
01168   { 0x028b, UnicodeLatinMap::CT_lower, 'v', 0, 0x028b, 0x01b2,
01169     UnicodeLatinMap::AT_hook, 0 },
01170   { 0x01b2, UnicodeLatinMap::CT_upper, 'V', 0, 0x028b, 0x01b2,
01171     UnicodeLatinMap::AT_hook, 0 },
01172   { 0x028c, UnicodeLatinMap::CT_lower, 'v', 0, 0x028c, 0x0056,
01173     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
01174   { 0x0077, UnicodeLatinMap::CT_lower, 'w', 0, 0x0077, 0x0057,
01175     UnicodeLatinMap::AT_none, 0 },
01176   { 0x0057, UnicodeLatinMap::CT_upper, 'W', 0, 0x0077, 0x0057,
01177     UnicodeLatinMap::AT_none, 0 },
01178   { 0x1e83, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e83, 0x1e82,
01179     UnicodeLatinMap::AT_acute, 0 },
01180   { 0x1e82, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e83, 0x1e82,
01181     UnicodeLatinMap::AT_acute, 0 },
01182   { 0x1e81, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e81, 0x1e80,
01183     UnicodeLatinMap::AT_grave, 0 },
01184   { 0x1e80, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e81, 0x1e80,
01185     UnicodeLatinMap::AT_grave, 0 },
01186   { 0x0175, UnicodeLatinMap::CT_lower, 'w', 0, 0x0175, 0x0174,
01187     UnicodeLatinMap::AT_circumflex, 0 },
01188   { 0x0174, UnicodeLatinMap::CT_upper, 'W', 0, 0x0175, 0x0174,
01189     UnicodeLatinMap::AT_circumflex, 0 },
01190   { 0x1e98, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e98, 0x0057,
01191     UnicodeLatinMap::AT_ring_above, 0 },
01192   { 0x1e85, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e85, 0x1e84,
01193     UnicodeLatinMap::AT_diaeresis, 0 },
01194   { 0x1e84, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e85, 0x1e84,
01195     UnicodeLatinMap::AT_diaeresis, 0 },
01196   { 0x1e87, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e87, 0x1e86,
01197     UnicodeLatinMap::AT_dot_above, 0 },
01198   { 0x1e86, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e87, 0x1e86,
01199     UnicodeLatinMap::AT_dot_above, 0 },
01200   { 0x1e89, UnicodeLatinMap::CT_lower, 'w', 0, 0x1e89, 0x1e88,
01201     UnicodeLatinMap::AT_dot_below, 0 },
01202   { 0x1e88, UnicodeLatinMap::CT_upper, 'W', 0, 0x1e89, 0x1e88,
01203     UnicodeLatinMap::AT_dot_below, 0 },
01204   { 0x028d, UnicodeLatinMap::CT_lower, 'w', 0, 0x028d, 0x0057,
01205     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_turned },
01206   { 0x0078, UnicodeLatinMap::CT_lower, 'x', 0, 0x0078, 0x0058,
01207     UnicodeLatinMap::AT_none, 0 },
01208   { 0x0058, UnicodeLatinMap::CT_upper, 'X', 0, 0x0078, 0x0058,
01209     UnicodeLatinMap::AT_none, 0 },
01210   { 0x1e8d, UnicodeLatinMap::CT_lower, 'x', 0, 0x1e8d, 0x1e8c,
01211     UnicodeLatinMap::AT_diaeresis, 0 },
01212   { 0x1e8c, UnicodeLatinMap::CT_upper, 'X', 0, 0x1e8d, 0x1e8c,
01213     UnicodeLatinMap::AT_diaeresis, 0 },
01214   { 0x1e8b, UnicodeLatinMap::CT_lower, 'x', 0, 0x1e8b, 0x1e8a,
01215     UnicodeLatinMap::AT_dot_above, 0 },
01216   { 0x1e8a, UnicodeLatinMap::CT_upper, 'X', 0, 0x1e8b, 0x1e8a,
01217     UnicodeLatinMap::AT_dot_above, 0 },
01218   { 0x0079, UnicodeLatinMap::CT_lower, 'y', 0, 0x0079, 0x0059,
01219     UnicodeLatinMap::AT_none, 0 },
01220   { 0x0059, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0079, 0x0059,
01221     UnicodeLatinMap::AT_none, 0 },
01222   { 0x00fd, UnicodeLatinMap::CT_lower, 'y', 0, 0x00fd, 0x00dd,
01223     UnicodeLatinMap::AT_acute, 0 },
01224   { 0x00dd, UnicodeLatinMap::CT_upper, 'Y', 0, 0x00fd, 0x00dd,
01225     UnicodeLatinMap::AT_acute, 0 },
01226   { 0x1ef3, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef3, 0x1ef2,
01227     UnicodeLatinMap::AT_grave, 0 },
01228   { 0x1ef2, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef3, 0x1ef2,
01229     UnicodeLatinMap::AT_grave, 0 },
01230   { 0x0177, UnicodeLatinMap::CT_lower, 'y', 0, 0x0177, 0x0176,
01231     UnicodeLatinMap::AT_circumflex, 0 },
01232   { 0x0176, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0177, 0x0176,
01233     UnicodeLatinMap::AT_circumflex, 0 },
01234   { 0x1e99, UnicodeLatinMap::CT_lower, 'y', 0, 0x1e99, 0x0059,
01235     UnicodeLatinMap::AT_ring_above, 0 },
01236   { 0x00ff, UnicodeLatinMap::CT_lower, 'y', 0, 0x00ff, 0x0178,
01237     UnicodeLatinMap::AT_diaeresis, 0 },
01238   { 0x0178, UnicodeLatinMap::CT_upper, 'Y', 0, 0x00ff, 0x0178,
01239     UnicodeLatinMap::AT_diaeresis, 0 },
01240   { 0x1ef9, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef9, 0x1ef8,
01241     UnicodeLatinMap::AT_tilde, 0 },
01242   { 0x1ef8, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef9, 0x1ef8,
01243     UnicodeLatinMap::AT_tilde, 0 },
01244   { 0x1e8f, UnicodeLatinMap::CT_lower, 'y', 0, 0x1e8f, 0x1e8e,
01245     UnicodeLatinMap::AT_dot_above, 0 },
01246   { 0x1e8e, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1e8f, 0x1e8e,
01247     UnicodeLatinMap::AT_dot_above, 0 },
01248   { 0x0233, UnicodeLatinMap::CT_lower, 'y', 0, 0x0233, 0x0232,
01249     UnicodeLatinMap::AT_macron, 0 },
01250   { 0x0232, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0233, 0x0232,
01251     UnicodeLatinMap::AT_macron, 0 },
01252   { 0x1ef7, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef7, 0x1ef6,
01253     UnicodeLatinMap::AT_hook_above, 0 },
01254   { 0x1ef6, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef7, 0x1ef6,
01255     UnicodeLatinMap::AT_hook_above, 0 },
01256   { 0x1ef5, UnicodeLatinMap::CT_lower, 'y', 0, 0x1ef5, 0x1ef4,
01257     UnicodeLatinMap::AT_dot_below, 0 },
01258   { 0x1ef4, UnicodeLatinMap::CT_upper, 'Y', 0, 0x1ef5, 0x1ef4,
01259     UnicodeLatinMap::AT_dot_below, 0 },
01260   { 0x028f, UnicodeLatinMap::CT_upper, 'Y', 0, 0x0079, 0x028f,
01261     UnicodeLatinMap::AT_none, UnicodeLatinMap::AF_smallcap },
01262   { 0x01b4, UnicodeLatinMap::CT_lower, 'y', 0, 0x01b4, 0x01b3,
01263     UnicodeLatinMap::AT_hook, 0 },
01264   { 0x01b3, UnicodeLatinMap::CT_upper, 'Y', 0, 0x01b4, 0x01b3,
01265     UnicodeLatinMap::AT_hook, 0 },
01266   { 0x007a, UnicodeLatinMap::CT_lower, 'z', 0, 0x007a, 0x005a,
01267     UnicodeLatinMap::AT_none, 0 },
01268   { 0x005a, UnicodeLatinMap::CT_upper, 'Z', 0, 0x007a, 0x005a,
01269     UnicodeLatinMap::AT_none, 0 },
01270   { 0x017a, UnicodeLatinMap::CT_lower, 'z', 0, 0x017a, 0x0179,
01271     UnicodeLatinMap::AT_acute, 0 },
01272   { 0x0179, UnicodeLatinMap::CT_upper, 'Z', 0, 0x017a, 0x0179,
01273     UnicodeLatinMap::AT_acute, 0 },
01274   { 0x1e91, UnicodeLatinMap::CT_lower, 'z', 0, 0x1e91, 0x1e90,
01275     UnicodeLatinMap::AT_circumflex, 0 },
01276   { 0x1e90, UnicodeLatinMap::CT_upper, 'Z', 0, 0x1e91, 0x1e90,
01277     UnicodeLatinMap::AT_circumflex, 0 },
01278   { 0x017e, UnicodeLatinMap::CT_lower, 'z', 0, 0x017e, 0x017d,
01279     UnicodeLatinMap::AT_caron, 0 },
01280   { 0x017d, UnicodeLatinMap::CT_upper, 'Z', 0, 0x017e, 0x017d,
01281     UnicodeLatinMap::AT_caron, 0 },
01282   { 0x017c, UnicodeLatinMap::CT_lower, 'z', 0, 0x017c, 0x017b,
01283     UnicodeLatinMap::AT_dot_above, 0 },
01284   { 0x017b, UnicodeLatinMap::CT_upper, 'Z', 0, 0x017c, 0x017b,
01285     UnicodeLatinMap::AT_dot_above, 0 },
01286   { 0x1e93, UnicodeLatinMap::CT_lower, 'z', 0, 0x1e93, 0x1e92,
01287     UnicodeLatinMap::AT_dot_below, 0 },
01288   { 0x1e92, UnicodeLatinMap::CT_upper, 'Z', 0, 0x1e93, 0x1e92,
01289     UnicodeLatinMap::AT_dot_below, 0 },
01290   { 0x1e95, UnicodeLatinMap::CT_lower, 'z', 0, 0x1e95, 0x1e94,
01291     UnicodeLatinMap::AT_line_below, 0 },
01292   { 0x1e94, UnicodeLatinMap::CT_upper, 'Z', 0, 0x1e95, 0x1e94,
01293     UnicodeLatinMap::AT_line_below, 0 },
01294   { 0x01b6, UnicodeLatinMap::CT_lower, 'z', 0, 0x01b6, 0x01b5,
01295     UnicodeLatinMap::AT_stroke, 0 },
01296   { 0x01b5, UnicodeLatinMap::CT_upper, 'Z', 0, 0x01b6, 0x01b5,
01297     UnicodeLatinMap::AT_stroke, 0 },
01298   { 0x0225, UnicodeLatinMap::CT_lower, 'z', 0, 0x0225, 0x0224,
01299     UnicodeLatinMap::AT_hook, 0 },
01300   { 0x0224, UnicodeLatinMap::CT_upper, 'Z', 0, 0x0225, 0x0224,
01301     UnicodeLatinMap::AT_hook, 0 },
01302   { 0x0291, UnicodeLatinMap::CT_lower, 'z', 0, 0x0291, 0x005a,
01303     UnicodeLatinMap::AT_curl, 0 },
01304 };
01305 #ifndef CPPPARSER
01306 static const int latin_map_length = sizeof(latin_map) / sizeof(UnicodeLatinMap::Entry);
01307 #endif
01308 
01309 
01310 ////////////////////////////////////////////////////////////////////
01311 //     Function: UnicodeLatinMap::look_up
01312 //       Access: Public, Static
01313 //  Description: Returns the Entry associated with the indicated
01314 //               character, if there is one.
01315 ////////////////////////////////////////////////////////////////////
01316 const UnicodeLatinMap::Entry *UnicodeLatinMap::
01317 look_up(wchar_t character) {
01318   if (!_initialized) {
01319     init();
01320   }
01321 
01322   if (character < max_direct_chars) {
01323     return _direct_chars[character];
01324 
01325   } else {
01326     ByCharacter::const_iterator ci;
01327     ci = _by_character.find(character);
01328     if (ci != _by_character.end()) {
01329       return (*ci).second;
01330     }
01331     return NULL;
01332   }
01333 }
01334 
01335 ////////////////////////////////////////////////////////////////////
01336 //     Function: UnicodeLatinMap::init
01337 //       Access: Private, Static
01338 //  Description: Initializes the map, if it has not already been
01339 //               initialized.
01340 ////////////////////////////////////////////////////////////////////
01341 void UnicodeLatinMap::
01342 init() {
01343   if (!_initialized) {
01344     for (int i = 0; i < latin_map_length; i++) {
01345       const UnicodeLatinMap::Entry *entry = &latin_map[i];
01346 
01347       // The first 256 characters are very common in Latin-alphabet
01348       // languages, so index those in an array for superfast lookup.
01349       // Everything else goes into the map.
01350       if (entry->_character < max_direct_chars) {
01351         _direct_chars[entry->_character] = entry;
01352       } else {
01353         _by_character[entry->_character] = entry;
01354       }
01355     }
01356     _initialized = true;
01357   }
01358 }
01359 

Generated on Fri May 2 00:38:46 2003 for Panda by doxygen1.3