intl/uconv/ucvko/jamoclusters.h

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 /* 
     6  * The mapping table converting a sequence of 'basic' jamos to a cluster jamo.
     7  * There are 4 groups in the table. Group 1 and Group 2 are obtained by the 
     8  * direct translation of  Hangul Jamo compatibility decomposition mapping 
     9  * found in  Unicode 2.0 data  table at 
    10  * ftp://ftp.unicode.org/Public/2.0-update  to  
    11  * JamoNormMap type struct.  Group 3 and Group 4 are derived from Group 1
    12  * entries mapping a sequence of three Jamos to a cluster Jamo. In Group 3 and
    13  * Group 4, the first two Jamos or the last two Jamos in Group 1 are combined
    14  * together, if possible, to form a new 'basic' Jamo that, in turn is mapped
    15  * along with the last Jamo (in case of Group 3) or the first Jamo (in Group 4)
    16  * to a cluster jamo. 
    17  *
    18  * The full list is available at http://jshin.net/i18n/korean/jamocomp.html.
    19  */
    21 // To reduce memory footprint, array elements are shifted by 0x1100
    22 // from their actual positions at 0x1100.
    24 // group 1: cluster jamos made of three basic jamos sorted for binary search 
    26 const static JamoNormMap gJamoClustersGroup1[] =
    27 {
    28   {{0x07, 0x07, 0x0b}, 0x2c},
    29   {{0x07, 0x09, 0x00}, 0x22},
    30   {{0x07, 0x09, 0x03}, 0x23},
    31   {{0x07, 0x09, 0x07}, 0x24},
    32   {{0x07, 0x09, 0x09}, 0x25},
    33   {{0x07, 0x09, 0x0c}, 0x26},
    34   {{0x09, 0x07, 0x00}, 0x33},
    35   {{0x09, 0x09, 0x09}, 0x34},
    36   {{0x69, 0x61, 0x75}, 0x6b},
    37   {{0x69, 0x65, 0x75}, 0x80},
    38   {{0x69, 0x67, 0x75}, 0x81},
    39   {{0x6d, 0x63, 0x75}, 0x85},
    40   {{0x6e, 0x61, 0x75}, 0x8a},
    41   {{0x6e, 0x65, 0x73}, 0x8b},
    42   {{0x6e, 0x65, 0x75}, 0x70},
    43   {{0x6e, 0x67, 0x75}, 0x8c},
    44   {{0x72, 0x65, 0x75}, 0x90},
    45   {{0x72, 0x67, 0x75}, 0x92},
    46   {{0x73, 0x75, 0x6e}, 0x97},
    47   {{0xa8, 0xba, 0xa8}, 0xc4},
    48   {{0xaf, 0xa8, 0xba}, 0xcc},
    49   {{0xaf, 0xae, 0xc2}, 0xcf},
    50   {{0xaf, 0xb7, 0xa8}, 0xd1},
    51   {{0xaf, 0xb7, 0xba}, 0xd2},
    52   {{0xaf, 0xb8, 0xba}, 0xd3},
    53   {{0xaf, 0xb8, 0xbc}, 0xd5},
    54   {{0xaf, 0xb8, 0xc2}, 0xd4},
    55   {{0xaf, 0xba, 0xba}, 0xd6},
    56   {{0xb7, 0xba, 0xba}, 0xde},
    57   {{0xbc, 0xa8, 0xa8}, 0xed}
    58 };
    60 const static JamoNormMap gJamoClustersGroup234[] =
    61 {
    62   {{0x00, 0x00,    0}, 0x01},
    63   {{0x02, 0x00,    0}, 0x13},
    64   {{0x02, 0x02,    0}, 0x14},
    65   {{0x02, 0x03,    0}, 0x15},
    66   {{0x02, 0x07,    0}, 0x16},
    67   {{0x03, 0x00,    0}, 0x17},
    68   {{0x03, 0x03,    0}, 0x04},
    69   {{0x05, 0x02,    0}, 0x18},
    70   {{0x05, 0x05,    0}, 0x19},
    71   {{0x05, 0x0b,    0}, 0x1b},
    72   {{0x05, 0x12,    0}, 0x1a},
    73   {{0x06, 0x07,    0}, 0x1c},
    74   {{0x06, 0x0b,    0}, 0x1d},
    75   {{0x07, 0x00,    0}, 0x1e},
    76   {{0x07, 0x02,    0}, 0x1f},
    77   {{0x07, 0x03,    0}, 0x20},
    78   {{0x07, 0x07,    0}, 0x08},
    79   {{0x07, 0x09,    0}, 0x21},
    80   {{0x07, 0x0a,    0}, 0x25},
    81   {{0x07, 0x0b,    0}, 0x2b},
    82   {{0x07, 0x0c,    0}, 0x27},
    83   {{0x07, 0x0e,    0}, 0x28},
    84   {{0x07, 0x10,    0}, 0x29},
    85   {{0x07, 0x11,    0}, 0x2a},
    86   {{0x07, 0x2b,    0}, 0x2c},
    87   {{0x07, 0x2d,    0}, 0x22},
    88   {{0x07, 0x2f,    0}, 0x23},
    89   {{0x07, 0x32,    0}, 0x24},
    90   {{0x07, 0x36,    0}, 0x26},
    91   {{0x08, 0x0b,    0}, 0x2c},
    92   {{0x09, 0x00,    0}, 0x2d},
    93   {{0x09, 0x02,    0}, 0x2e},
    94   {{0x09, 0x03,    0}, 0x2f},
    95   {{0x09, 0x05,    0}, 0x30},
    96   {{0x09, 0x06,    0}, 0x31},
    97   {{0x09, 0x07,    0}, 0x32},
    98   {{0x09, 0x09,    0}, 0x0a},
    99   {{0x09, 0x0a,    0}, 0x34},
   100   {{0x09, 0x0b,    0}, 0x35},
   101   {{0x09, 0x0c,    0}, 0x36},
   102   {{0x09, 0x0e,    0}, 0x37},
   103   {{0x09, 0x0f,    0}, 0x38},
   104   {{0x09, 0x10,    0}, 0x39},
   105   {{0x09, 0x11,    0}, 0x3a},
   106   {{0x09, 0x12,    0}, 0x3b},
   107   {{0x09, 0x1e,    0}, 0x33},
   108   {{0x0a, 0x09,    0}, 0x34},
   109   {{0x0b, 0x00,    0}, 0x41},
   110   {{0x0b, 0x03,    0}, 0x42},
   111   {{0x0b, 0x06,    0}, 0x43},
   112   {{0x0b, 0x07,    0}, 0x44},
   113   {{0x0b, 0x09,    0}, 0x45},
   114   {{0x0b, 0x0b,    0}, 0x47},
   115   {{0x0b, 0x0c,    0}, 0x48},
   116   {{0x0b, 0x0e,    0}, 0x49},
   117   {{0x0b, 0x10,    0}, 0x4a},
   118   {{0x0b, 0x11,    0}, 0x4b},
   119   {{0x0b, 0x40,    0}, 0x46},
   120   {{0x0c, 0x0b,    0}, 0x4d},
   121   {{0x0c, 0x0c,    0}, 0x0d},
   122   {{0x0e, 0x0f,    0}, 0x52},
   123   {{0x0e, 0x12,    0}, 0x53},
   124   {{0x11, 0x07,    0}, 0x56},
   125   {{0x11, 0x0b,    0}, 0x57},
   126   {{0x12, 0x12,    0}, 0x58},
   127   {{0x21, 0x00,    0}, 0x22},
   128   {{0x21, 0x03,    0}, 0x23},
   129   {{0x21, 0x07,    0}, 0x24},
   130   {{0x21, 0x09,    0}, 0x25},
   131   {{0x21, 0x0c,    0}, 0x26},
   132   {{0x32, 0x00,    0}, 0x33},
   133   {{0x3c, 0x3c,    0}, 0x3d},
   134   {{0x3e, 0x3e,    0}, 0x3f},
   135   {{0x4e, 0x4e,    0}, 0x4f},
   136   {{0x50, 0x50,    0}, 0x51},
   137   {{0x61, 0x69,    0}, 0x76},
   138   {{0x61, 0x6e,    0}, 0x77},
   139   {{0x61, 0x75,    0}, 0x62},
   140   {{0x63, 0x69,    0}, 0x78},
   141   {{0x63, 0x6d,    0}, 0x79},
   142   {{0x63, 0x75,    0}, 0x64},
   143   {{0x65, 0x69,    0}, 0x7a},
   144   {{0x65, 0x6e,    0}, 0x7b},
   145   {{0x65, 0x73,    0}, 0x7c},
   146   {{0x65, 0x75,    0}, 0x66},
   147   {{0x67, 0x69,    0}, 0x7d},
   148   {{0x67, 0x6e,    0}, 0x7e},
   149   {{0x67, 0x75,    0}, 0x68},
   150   {{0x69, 0x61,    0}, 0x6a},
   151   {{0x69, 0x62,    0}, 0x6b},
   152   {{0x69, 0x65,    0}, 0x7f},
   153   {{0x69, 0x66,    0}, 0x80},
   154   {{0x69, 0x68,    0}, 0x81},
   155   {{0x69, 0x69,    0}, 0x82},
   156   {{0x69, 0x6e,    0}, 0x83},
   157   {{0x69, 0x75,    0}, 0x6c},
   158   {{0x6a, 0x75,    0}, 0x6b},
   159   {{0x6d, 0x63,    0}, 0x84},
   160   {{0x6d, 0x64,    0}, 0x85},
   161   {{0x6d, 0x67,    0}, 0x86},
   162   {{0x6d, 0x69,    0}, 0x87},
   163   {{0x6d, 0x75,    0}, 0x88},
   164   {{0x6e, 0x61,    0}, 0x89},
   165   {{0x6e, 0x62,    0}, 0x8a},
   166   {{0x6e, 0x65,    0}, 0x6f},
   167   {{0x6e, 0x66,    0}, 0x70},
   168   {{0x6e, 0x68,    0}, 0x8c},
   169   {{0x6e, 0x6e,    0}, 0x8d},
   170   {{0x6e, 0x75,    0}, 0x71},
   171   {{0x6e, 0x7c,    0}, 0x8b},
   172   {{0x6f, 0x73,    0}, 0x8b},
   173   {{0x6f, 0x75,    0}, 0x70},
   174   {{0x72, 0x61,    0}, 0x8e},
   175   {{0x72, 0x65,    0}, 0x8f},
   176   {{0x72, 0x66,    0}, 0x90},
   177   {{0x72, 0x67,    0}, 0x91},
   178   {{0x72, 0x68,    0}, 0x92},
   179   {{0x72, 0x6e,    0}, 0x93},
   180   {{0x72, 0x75,    0}, 0x94},
   181   {{0x73, 0x6e,    0}, 0x95},
   182   {{0x73, 0x73,    0}, 0x96},
   183   {{0x73, 0x75,    0}, 0x74},
   184   {{0x73, 0x9b,    0}, 0x97},
   185   {{0x74, 0x6e,    0}, 0x97},
   186   {{0x75, 0x61,    0}, 0x98},
   187   {{0x75, 0x63,    0}, 0x99},
   188   {{0x75, 0x69,    0}, 0x9a},
   189   {{0x75, 0x6e,    0}, 0x9b},
   190   {{0x75, 0x73,    0}, 0x9c},
   191   {{0x75, 0x9e,    0}, 0x9d},
   192   {{0x7f, 0x75,    0}, 0x80},
   193   {{0x84, 0x75,    0}, 0x85},
   194   {{0x89, 0x75,    0}, 0x8a},
   195   {{0x8f, 0x75,    0}, 0x90},
   196   {{0x91, 0x75,    0}, 0x92},
   197   {{0x9e, 0x65,    0}, 0x9f},
   198   {{0x9e, 0x6e,    0}, 0xa0},
   199   {{0x9e, 0x75,    0}, 0xa1},
   200   {{0x9e, 0x9e,    0}, 0xa2},
   201   {{0xa8, 0xa8,    0}, 0xa9},
   202   {{0xa8, 0xaf,    0}, 0xc3},
   203   {{0xa8, 0xba,    0}, 0xaa},
   204   {{0xa8, 0xe7,    0}, 0xc4},
   205   {{0xaa, 0xa8,    0}, 0xc4},
   206   {{0xab, 0xa8,    0}, 0xc5},
   207   {{0xab, 0xae,    0}, 0xc6},
   208   {{0xab, 0xba,    0}, 0xc7},
   209   {{0xab, 0xbd,    0}, 0xac},
   210   {{0xab, 0xc0,    0}, 0xc9},
   211   {{0xab, 0xc2,    0}, 0xad},
   212   {{0xab, 0xeb,    0}, 0xc8},
   213   {{0xae, 0xa8,    0}, 0xca},
   214   {{0xae, 0xaf,    0}, 0xcb},
   215   {{0xaf, 0xa8,    0}, 0xb0},
   216   {{0xaf, 0xaa,    0}, 0xcc},
   217   {{0xaf, 0xab,    0}, 0xcd},
   218   {{0xaf, 0xae,    0}, 0xce},
   219   {{0xaf, 0xaf,    0}, 0xd0},
   220   {{0xaf, 0xb7,    0}, 0xb1},
   221   {{0xaf, 0xb8,    0}, 0xb2},
   222   {{0xaf, 0xb9,    0}, 0xd3},
   223   {{0xaf, 0xba,    0}, 0xb3},
   224   {{0xaf, 0xbb,    0}, 0xd6},
   225   {{0xaf, 0xbf,    0}, 0xd8},
   226   {{0xaf, 0xc0,    0}, 0xb4},
   227   {{0xaf, 0xc1,    0}, 0xb5},
   228   {{0xaf, 0xc2,    0}, 0xb6},
   229   {{0xaf, 0xda,    0}, 0xd1},
   230   {{0xaf, 0xdd,    0}, 0xd2},
   231   {{0xaf, 0xe5,    0}, 0xd4},
   232   {{0xaf, 0xe6,    0}, 0xd5},
   233   {{0xaf, 0xeb,    0}, 0xd7},
   234   {{0xaf, 0xf9,    0}, 0xd9},
   235   {{0xb0, 0xba,    0}, 0xcc},
   236   {{0xb1, 0xa8,    0}, 0xd1},
   237   {{0xb1, 0xba,    0}, 0xd2},
   238   {{0xb2, 0xba,    0}, 0xd3},
   239   {{0xb2, 0xbc,    0}, 0xd5},
   240   {{0xb2, 0xc2,    0}, 0xd4},
   241   {{0xb3, 0xba,    0}, 0xd6},
   242   {{0xb7, 0xa8,    0}, 0xda},
   243   {{0xb7, 0xaf,    0}, 0xdb},
   244   {{0xb7, 0xb8,    0}, 0xdc},
   245   {{0xb7, 0xba,    0}, 0xdd},
   246   {{0xb7, 0xbb,    0}, 0xde},
   247   {{0xb7, 0xbc,    0}, 0xe2},
   248   {{0xb7, 0xbe,    0}, 0xe0},
   249   {{0xb7, 0xc2,    0}, 0xe1},
   250   {{0xb7, 0xeb,    0}, 0xdf},
   251   {{0xb8, 0xaf,    0}, 0xe3},
   252   {{0xb8, 0xba,    0}, 0xb9},
   253   {{0xb8, 0xbc,    0}, 0xe6},
   254   {{0xb8, 0xc1,    0}, 0xe4},
   255   {{0xb8, 0xc2,    0}, 0xe5},
   256   {{0xba, 0xa8,    0}, 0xe7},
   257   {{0xba, 0xae,    0}, 0xe8},
   258   {{0xba, 0xaf,    0}, 0xe9},
   259   {{0xba, 0xb8,    0}, 0xea},
   260   {{0xba, 0xba,    0}, 0xbb},
   261   {{0xbc, 0xa8,    0}, 0xec},
   262   {{0xbc, 0xa9,    0}, 0xed},
   263   {{0xbc, 0xbc,    0}, 0xee},
   264   {{0xbc, 0xbf,    0}, 0xef},
   265   {{0xc1, 0xb8,    0}, 0xf3},
   266   {{0xc1, 0xbc,    0}, 0xf4},
   267   {{0xc2, 0xab,    0}, 0xf5},
   268   {{0xc2, 0xaf,    0}, 0xf6},
   269   {{0xc2, 0xb7,    0}, 0xf7},
   270   {{0xc2, 0xb8,    0}, 0xf8},
   271   {{0xce, 0xc2,    0}, 0xcf},
   272   {{0xdd, 0xba,    0}, 0xde},
   273   {{0xec, 0xa8,    0}, 0xed},
   274   {{0xf0, 0xba,    0}, 0xf1},
   275   {{0xf0, 0xeb,    0}, 0xf2}
   276 };
   278 /**
   279  * Extended  Jamo clusters included below were identified by Korean linguists
   280  * consulted by Microsoft Korea and the list is available at
   281  * http://www.microsoft.com/typography/otfntdev/hangulot/appen.htm
   282  * as well as obtainable from  truetype fonts supporting them.
   283  */
   285 /**
   286  * The map from sequences of leading consonants forming consonant clusters
   287  * not encoded in U+1100 block to  temporary code points in the 0xf000 block.
   288  * To reduce memory footprint, array elements are shifted by 0xf000
   289  * from their actual positions.
   290  */
   292 const static JamoNormMap gExtLcClustersGroup1[]=
   293 {
   294   {{0x05, 0x00, 0x00}, 0x6a}, // U+1105 U+1100 U+1100 => lc # 0x6a
   295   {{0x05, 0x03, 0x03}, 0x6c}, // U+1105 U+1103 U+1103 => lc # 0x6c
   296   {{0x05, 0x07, 0x07}, 0x6f}, // U+1105 U+1107 U+1107 => lc # 0x6f
   297   {{0x05, 0x07, 0x0b}, 0x70}, // U+1105 U+1107 U+110b => lc # 0x70
   298   {{0x07, 0x09, 0x10}, 0x77}, // U+1107 U+1109 U+1110 => lc # 0x77
   299   {{0x09, 0x09, 0x07}, 0x7a}, // U+1109 U+1109 U+1107 => lc # 0x7a
   300   {{0x0c, 0x0c, 0x12}, 0x7d}, // U+110c U+110c U+1112 => lc # 0x7d
   301 };
   303 const static JamoNormMap gExtLcClustersGroup2[]=
   304 {
   305   {{0x00, 0x03,    0}, 0x60}, // U+1100 U+1103        => lc # 0x60
   306   {{0x02, 0x09,    0}, 0x61}, // U+1102 U+1109        => lc # 0x61
   307   {{0x02, 0x0c,    0}, 0x62}, // U+1102 U+110c        => lc # 0x62
   308   {{0x02, 0x12,    0}, 0x63}, // U+1102 U+1112        => lc # 0x63
   309   {{0x03, 0x05,    0}, 0x64}, // U+1103 U+1105        => lc # 0x64
   310   {{0x03, 0x06,    0}, 0x65}, // U+1103 U+1106        => lc # 0x65
   311   {{0x03, 0x07,    0}, 0x66}, // U+1103 U+1107        => lc # 0x66
   312   {{0x03, 0x09,    0}, 0x67}, // U+1103 U+1109        => lc # 0x67
   313   {{0x03, 0x0c,    0}, 0x68}, // U+1103 U+110c        => lc # 0x68
   314   {{0x05, 0x00,    0}, 0x69}, // U+1105 U+1100        => lc # 0x69
   315   {{0x05, 0x01,    0}, 0x6a}, // U+1105 U+1101        => lc # 0x6a
   316   {{0x05, 0x03,    0}, 0x6b}, // U+1105 U+1103        => lc # 0x6b
   317   {{0x05, 0x04,    0}, 0x6c}, // U+1105 U+1104        => lc # 0x6c
   318   {{0x05, 0x06,    0}, 0x6d}, // U+1105 U+1106        => lc # 0x6d
   319   {{0x05, 0x07,    0}, 0x6e}, // U+1105 U+1107        => lc # 0x6e
   320   {{0x05, 0x08,    0}, 0x6f}, // U+1105 U+1108        => lc # 0x6f
   321   {{0x05, 0x09,    0}, 0x71}, // U+1105 U+1109        => lc # 0x71
   322   {{0x05, 0x0c,    0}, 0x72}, // U+1105 U+110c        => lc # 0x72
   323   {{0x05, 0x0f,    0}, 0x73}, // U+1105 U+110f        => lc # 0x73
   324   {{0x05, 0x2b,    0}, 0x70}, // U+1105 U+112b        => lc # 0x70
   325   {{0x06, 0x00,    0}, 0x74}, // U+1106 U+1100        => lc # 0x74
   326   {{0x06, 0x03,    0}, 0x75}, // U+1106 U+1103        => lc # 0x75
   327   {{0x06, 0x09,    0}, 0x76}, // U+1106 U+1109        => lc # 0x76
   328   {{0x07, 0x0f,    0}, 0x78}, // U+1107 U+110f        => lc # 0x78
   329   {{0x07, 0x12,    0}, 0x79}, // U+1107 U+1112        => lc # 0x79
   330   {{0x0a, 0x07,    0}, 0x7a}, // U+110a U+1107        => lc # 0x7a
   331   {{0x0b, 0x05,    0}, 0x7b}, // U+110b U+1105        => lc # 0x7b
   332   {{0x0b, 0x12,    0}, 0x7c}, // U+110b U+1112        => lc # 0x7c
   333   {{0x0d, 0x12,    0}, 0x7d}, // U+110d U+1112        => lc # 0x7d
   334   {{0x10, 0x10,    0}, 0x7e}, // U+1110 U+1110        => lc # 0x7e
   335   {{0x11, 0x12,    0}, 0x7f}, // U+1111 U+1112        => lc # 0x7f
   336   {{0x12, 0x09,    0}, 0x80}, // U+1112 U+1109        => lc # 0x80
   337   {{0x59, 0x59,    0}, 0x81}, // U+1159 U+1159        => lc # 0x81
   338 };
   340 /**
   341  * The map from sequences of vowels  forming vowels clusters
   342  * not encoded in U+1100 block to  temporary code points in the 0xf100 block.
   343  * To reduce memory footprint, array elements are shifted by 0xf100
   344  * from their actual positions.
   345  */
   347 const static JamoNormMap gExtVoClustersGroup1[]=
   348 {
   349   {{0x09, 0x03, 0x15}, 0x47}, // U+1169 U+1163 U+1175 => vowel # 0x47
   350   {{0x09, 0x0e, 0x3e}, 0x49}, // U+1169 U+116e U+119e => vowel # 0x49
   351   {{0x0d, 0x01, 0x15}, 0x4b}, // U+116d U+1161 U+1175 => vowel # 0x4b
   352   {{0x0e, 0x15, 0x15}, 0x4e}, // U+116e U+1175 U+1175 => vowel # 0x4e
   353   {{0x12, 0x01, 0x15}, 0x4f}, // U+1172 U+1161 U+1175 => vowel # 0x4f
   354   {{0x13, 0x05, 0x15}, 0x53}, // U+1173 U+1165 U+1175 => vowel # 0x53
   355   {{0x15, 0x03, 0x09}, 0x55}, // U+1175 U+1163 U+1169 => vowel # 0x55
   356   {{0x15, 0x03, 0x15}, 0x56}, // U+1175 U+1163 U+1175 => vowel # 0x56
   357   {{0x15, 0x07, 0x15}, 0x58}, // U+1175 U+1167 U+1175 => vowel # 0x58
   358   {{0x15, 0x09, 0x3e}, 0x59}, // U+1175 U+1169 U+119e => vowel # 0x59
   359   {{0x3e, 0x05, 0x15}, 0x5e}, // U+119e U+1165 U+1175 => vowel # 0x5e
   360 };
   362 const static JamoNormMap gExtVoClustersGroup2[]=
   363 {
   364   {{0x01, 0x13,    0}, 0x43}, // U+1161 U+1173        => vowel # 0x43
   365   {{0x03, 0x0e,    0}, 0x44}, // U+1163 U+116e        => vowel # 0x44
   366   {{0x07, 0x03,    0}, 0x45}, // U+1167 U+1163        => vowel # 0x45
   367   {{0x09, 0x03,    0}, 0x46}, // U+1169 U+1163        => vowel # 0x46
   368   {{0x09, 0x04,    0}, 0x47}, // U+1169 U+1164        => vowel # 0x47
   369   {{0x09, 0x07,    0}, 0x48}, // U+1169 U+1167        => vowel # 0x48
   370   {{0x0d, 0x01,    0}, 0x4a}, // U+116d U+1161        => vowel # 0x4a
   371   {{0x0d, 0x02,    0}, 0x4b}, // U+116d U+1162        => vowel # 0x4b
   372   {{0x0d, 0x05,    0}, 0x4c}, // U+116d U+1165        => vowel # 0x4c
   373   {{0x0e, 0x07,    0}, 0x4d}, // U+116e U+1167        => vowel # 0x4d
   374   {{0x11, 0x15,    0}, 0x4e}, // U+1171 U+1175        => vowel # 0x4e
   375   {{0x12, 0x02,    0}, 0x4f}, // U+1172 U+1162        => vowel # 0x4f
   376   {{0x12, 0x09,    0}, 0x50}, // U+1172 U+1169        => vowel # 0x50
   377   {{0x13, 0x01,    0}, 0x51}, // U+1173 U+1161        => vowel # 0x51
   378   {{0x13, 0x05,    0}, 0x52}, // U+1173 U+1165        => vowel # 0x52
   379   {{0x13, 0x06,    0}, 0x53}, // U+1173 U+1166        => vowel # 0x53
   380   {{0x13, 0x09,    0}, 0x54}, // U+1173 U+1169        => vowel # 0x54
   381   {{0x15, 0x04,    0}, 0x56}, // U+1175 U+1164        => vowel # 0x56
   382   {{0x15, 0x07,    0}, 0x57}, // U+1175 U+1167        => vowel # 0x57
   383   {{0x15, 0x08,    0}, 0x58}, // U+1175 U+1168        => vowel # 0x58
   384   {{0x15, 0x0d,    0}, 0x5a}, // U+1175 U+116d        => vowel # 0x5a
   385   {{0x15, 0x12,    0}, 0x5b}, // U+1175 U+1172        => vowel # 0x5b
   386   {{0x15, 0x15,    0}, 0x5c}, // U+1175 U+1175        => vowel # 0x5c
   387   {{0x23, 0x3e,    0}, 0x49}, // U+1183 U+119e        => vowel # 0x49
   388   {{0x2e, 0x15,    0}, 0x4f}, // U+118e U+1175        => vowel # 0x4f
   389   {{0x3a, 0x3e,    0}, 0x59}, // U+119a U+119e        => vowel # 0x59
   390   {{0x3e, 0x01,    0}, 0x5d}, // U+119e U+1161        => vowel # 0x5d
   391   {{0x3e, 0x06,    0}, 0x5e}, // U+119e U+1166        => vowel # 0x5e
   392   {{0x3f, 0x15,    0}, 0x5e}, // U+119f U+1175        => vowel # 0x5e
   393 };
   395 /**
   396  * The map from sequences of trailing consonants  forming consonant clusters
   397  * not encoded in U+1100 block to  temporary code points in the 0xf200 block.
   398  * To reduce memory footprint, array elements are shifted by 0xf200
   399  * from their actual positions.
   400  */
   402 const static JamoNormMap gExtTcClustersGroup1[]=
   403 {
   404   {{0x06, 0x06, 0x10}, 0x5b}, // U+11ae U+11ae U+11b8 => tc # 0x5b
   405   {{0x06, 0x12, 0x00}, 0x5e}, // U+11ae U+11ba U+11a8 => tc # 0x5e
   406   {{0x07, 0x00, 0x00}, 0x62}, // U+11af U+11a8 U+11a8 => tc # 0x62
   407   {{0x07, 0x00, 0x1a}, 0x63}, // U+11af U+11a8 U+11c2 => tc # 0x63
   408   {{0x07, 0x07, 0x17}, 0x64}, // U+11af U+11af U+11bf => tc # 0x64
   409   {{0x07, 0x0f, 0x1a}, 0x65}, // U+11af U+11b7 U+11c2 => tc # 0x65
   410   {{0x07, 0x10, 0x06}, 0x66}, // U+11af U+11b8 U+11ae => tc # 0x66
   411   {{0x07, 0x10, 0x19}, 0x67}, // U+11af U+11b8 U+11c1 => tc # 0x67
   412   {{0x07, 0x51, 0x1a}, 0x69}, // U+11af U+11f9 U+11c2 => tc # 0x69
   413   {{0x0f, 0x03, 0x03}, 0x6c}, // U+11b7 U+11ab U+11ab => tc # 0x6c
   414   {{0x0f, 0x10, 0x12}, 0x6e}, // U+11b7 U+11b8 U+11ba => tc # 0x6e
   415   {{0x10, 0x07, 0x19}, 0x71}, // U+11b8 U+11af U+11c1 => tc # 0x71
   416   {{0x10, 0x12, 0x06}, 0x74}, // U+11b8 U+11ba U+11ae => tc # 0x74
   417   {{0x12, 0x10, 0x14}, 0x78}, // U+11ba U+11b8 U+11bc => tc # 0x78
   418   {{0x12, 0x12, 0x00}, 0x79}, // U+11ba U+11ba U+11a8 => tc # 0x79
   419   {{0x12, 0x12, 0x06}, 0x7a}, // U+11ba U+11ba U+11ae => tc # 0x7a
   420   {{0x15, 0x10, 0x10}, 0x89}, // U+11bd U+11b8 U+11b8 => tc # 0x89
   421   {{0x43, 0x10, 0x14}, 0x81}, // U+11eb U+11b8 U+11bc => tc # 0x81
   422 };
   424 const static JamoNormMap gExtTcClustersGroup2[]=
   425 {
   426   {{0x00, 0x03,    0}, 0x52}, // U+11a8 U+11ab        => tc # 0x52
   427   {{0x00, 0x10,    0}, 0x53}, // U+11a8 U+11b8        => tc # 0x53
   428   {{0x00, 0x16,    0}, 0x54}, // U+11a8 U+11be        => tc # 0x54
   429   {{0x00, 0x17,    0}, 0x55}, // U+11a8 U+11bf        => tc # 0x55
   430   {{0x00, 0x1a,    0}, 0x56}, // U+11a8 U+11c2        => tc # 0x56
   431   {{0x03, 0x03,    0}, 0x57}, // U+11ab U+11ab        => tc # 0x57
   432   {{0x03, 0x07,    0}, 0x58}, // U+11ab U+11af        => tc # 0x58
   433   {{0x03, 0x16,    0}, 0x59}, // U+11ab U+11be        => tc # 0x59
   434   {{0x06, 0x06,    0}, 0x5a}, // U+11ae U+11ae        => tc # 0x5a
   435   {{0x06, 0x10,    0}, 0x5c}, // U+11ae U+11b8        => tc # 0x5c
   436   {{0x06, 0x12,    0}, 0x5d}, // U+11ae U+11ba        => tc # 0x5d
   437   {{0x06, 0x15,    0}, 0x5f}, // U+11ae U+11bd        => tc # 0x5f
   438   {{0x06, 0x16,    0}, 0x60}, // U+11ae U+11be        => tc # 0x60
   439   {{0x06, 0x18,    0}, 0x61}, // U+11ae U+11c0        => tc # 0x61
   440   {{0x06, 0x3f,    0}, 0x5e}, // U+11ae U+11e7        => tc # 0x5e
   441   {{0x07, 0x01,    0}, 0x62}, // U+11af U+11a9        => tc # 0x62
   442   {{0x07, 0x14,    0}, 0x6a}, // U+11af U+11bc        => tc # 0x6a
   443   {{0x07, 0x30,    0}, 0x64}, // U+11af U+11d8        => tc # 0x64
   444   {{0x07, 0x39,    0}, 0x65}, // U+11af U+11e1        => tc # 0x65
   445   {{0x07, 0x3c,    0}, 0x67}, // U+11af U+11e4        => tc # 0x67
   446   {{0x07, 0x48,    0}, 0x68}, // U+11af U+11f0        => tc # 0x68
   447   {{0x08, 0x00,    0}, 0x62}, // U+11b0 U+11a8        => tc # 0x62
   448   {{0x08, 0x1a,    0}, 0x63}, // U+11b0 U+11c2        => tc # 0x63
   449   {{0x09, 0x1a,    0}, 0x65}, // U+11b1 U+11c2        => tc # 0x65
   450   {{0x0a, 0x06,    0}, 0x66}, // U+11b2 U+11ae        => tc # 0x66
   451   {{0x0a, 0x19,    0}, 0x67}, // U+11b2 U+11c1        => tc # 0x67
   452   {{0x0f, 0x03,    0}, 0x6b}, // U+11b7 U+11ab        => tc # 0x6b
   453   {{0x0f, 0x0f,    0}, 0x6d}, // U+11b7 U+11b7        => tc # 0x6d
   454   {{0x0f, 0x11,    0}, 0x6e}, // U+11b7 U+11b9        => tc # 0x6e
   455   {{0x0f, 0x15,    0}, 0x6f}, // U+11b7 U+11bd        => tc # 0x6f
   456   {{0x10, 0x06,    0}, 0x70}, // U+11b8 U+11ae        => tc # 0x70
   457   {{0x10, 0x0f,    0}, 0x72}, // U+11b8 U+11b7        => tc # 0x72
   458   {{0x10, 0x10,    0}, 0x73}, // U+11b8 U+11b8        => tc # 0x73
   459   {{0x10, 0x15,    0}, 0x75}, // U+11b8 U+11bd        => tc # 0x75
   460   {{0x10, 0x16,    0}, 0x76}, // U+11b8 U+11be        => tc # 0x76
   461   {{0x10, 0x40,    0}, 0x74}, // U+11b8 U+11e8        => tc # 0x74
   462   {{0x11, 0x06,    0}, 0x74}, // U+11b9 U+11ae        => tc # 0x74
   463   {{0x12, 0x0f,    0}, 0x77}, // U+11ba U+11b7        => tc # 0x77
   464   {{0x12, 0x15,    0}, 0x7c}, // U+11ba U+11bd        => tc # 0x7c
   465   {{0x12, 0x16,    0}, 0x7d}, // U+11ba U+11be        => tc # 0x7d
   466   {{0x12, 0x18,    0}, 0x7e}, // U+11ba U+11c0        => tc # 0x7e
   467   {{0x12, 0x1a,    0}, 0x7f}, // U+11ba U+11c2        => tc # 0x7f
   468   {{0x12, 0x3e,    0}, 0x78}, // U+11ba U+11e6        => tc # 0x78
   469   {{0x12, 0x3f,    0}, 0x79}, // U+11ba U+11e7        => tc # 0x79
   470   {{0x12, 0x40,    0}, 0x7a}, // U+11ba U+11e8        => tc # 0x7a
   471   {{0x12, 0x43,    0}, 0x7b}, // U+11ba U+11eb        => tc # 0x7b
   472   {{0x13, 0x00,    0}, 0x79}, // U+11bb U+11a8        => tc # 0x79
   473   {{0x13, 0x06,    0}, 0x7a}, // U+11bb U+11ae        => tc # 0x7a
   474   {{0x14, 0x0f,    0}, 0x82}, // U+11bc U+11b7        => tc # 0x82
   475   {{0x14, 0x12,    0}, 0x83}, // U+11bc U+11ba        => tc # 0x83
   476   {{0x14, 0x1a,    0}, 0x84}, // U+11bc U+11c2        => tc # 0x84
   477   {{0x15, 0x10,    0}, 0x88}, // U+11bd U+11b8        => tc # 0x88
   478   {{0x15, 0x15,    0}, 0x8a}, // U+11bd U+11bd        => tc # 0x8a
   479   {{0x19, 0x14,    0}, 0x8c}, // U+11c1 U+11bc        => tc # 0x8c
   480   {{0x19, 0x18,    0}, 0x8b}, // U+11c1 U+11c0        => tc # 0x8b
   481   {{0x28, 0x17,    0}, 0x64}, // U+11d0 U+11bf        => tc # 0x64
   482   {{0x31, 0x1a,    0}, 0x69}, // U+11d9 U+11c2        => tc # 0x69
   483   {{0x34, 0x12,    0}, 0x6e}, // U+11dc U+11ba        => tc # 0x6e
   484   {{0x3b, 0x19,    0}, 0x71}, // U+11e3 U+11c1        => tc # 0x71
   485   {{0x42, 0x14,    0}, 0x78}, // U+11ea U+11bc        => tc # 0x78
   486   {{0x43, 0x10,    0}, 0x80}, // U+11eb U+11b8        => tc # 0x80
   487   {{0x43, 0x3e,    0}, 0x81}, // U+11eb U+11e6        => tc # 0x81
   488   {{0x48, 0x00,    0}, 0x85}, // U+11f0 U+11a8        => tc # 0x85
   489   {{0x48, 0x17,    0}, 0x86}, // U+11f0 U+11bf        => tc # 0x86
   490   {{0x48, 0x1a,    0}, 0x87}, // U+11f0 U+11c2        => tc # 0x87
   491 };

mercurial