diff options
Diffstat (limited to 'collation.c')
-rwxr-xr-x | collation.c | 1743 |
1 files changed, 1743 insertions, 0 deletions
diff --git a/collation.c b/collation.c new file mode 100755 index 0000000..29062e4 --- /dev/null +++ b/collation.c @@ -0,0 +1,1743 @@ +/* + * libslp-db-util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Hakjoo Ko <hakjoo.ko@samsung.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <math.h> +#include <wchar.h> +#include <wctype.h> +#include <stdio.h> +#include "collation.h" +#include "string.h" +#include "stdlib.h" + +typedef unsigned short DB_UINT16; +typedef unsigned int DB_UINT32; +typedef unsigned short DB_WCHAR; + +#define WSC_UNICODE_TO_ALPHA_ORDER_COUNT 491+59 +#define WSC_CAP_TO_SMALL_OFFSET 0x0020 + +/* It represents the alphabetical order of unicode. */ +/* Note : A collation table should be ascending order by unicode! */ +typedef struct { + DB_UINT16 wchCode; + DB_UINT32 uAlphabeticalOrder; + +} UnicodeToAlphaOrder; + +/* Alpha order for unicode characters */ + +/* + CAP = Capital letter + SMA = Small letter + + LIG = Ligature + AFR = African + + DIA = Diaresis + STR = Stroke + BAR = Bar + CED = Cedilla + ACU = Acute + GRA = Grave + CIR = Circumflex + RIN = Ring above + TIL = Tilde + MAC = Macron + BRE = Breve + DOU = Double Acute + OGO = Ogonek + DOM = Dot middle + DOA = Dot above + DOL = Dotless + CAR = Caron + HOR = Horn + ACL = Accented Ligature + APO = Preceded by apostrophe + +*/ + +enum { + /* Null value : Added by SYKim (2005-07-18) */ + ALP_ORDER_NULL = 0x0000, + /* CJK Unified ideographs */ + ALP_ORDER_CJK_UNIFIED = 0x0001, + /* CJK Symbols and Punctuations */ + ALP_ORDER_CJK_SYMBOLS = 0x0010, + /* Thai characters */ + ALP_ORDER_THAI_CHARS = 0x0100, + /* digits */ + ALP_ORDER_DIGIT_ZERO = 0x1200, + ALP_ORDER_DIGIT_ONE = 0x1201, + ALP_ORDER_DIGIT_TWO = 0x1202, + ALP_ORDER_DIGIT_THREE = 0x1203, + ALP_ORDER_DIGIT_FOUR = 0x1204, + ALP_ORDER_DIGIT_FIVE = 0x1205, + ALP_ORDER_DIGIT_SIX = 0x1206, + ALP_ORDER_DIGIT_SEVEN = 0x1207, + ALP_ORDER_DIGIT_EIGHT = 0x1208, + ALP_ORDER_DIGIT_NINE = 0x1209, + + /* Cyrillic characters */ + ALP_ORDER_CYRILLIC_CAP_A = 0xF300, + ALP_ORDER_CYRILLIC_SMA_A = 0xF301, + ALP_ORDER_CYRILLIC_CAP_BE = 0xF302, + ALP_ORDER_CYRILLIC_SMA_BE = 0xF303, + ALP_ORDER_CYRILLIC_CAP_VE = 0xF304, + ALP_ORDER_CYRILLIC_SMA_VE = 0xF305, + ALP_ORDER_CYRILLIC_CAP_GHE = 0xF306, + ALP_ORDER_CYRILLIC_SMA_GHE = 0xF307, + ALP_ORDER_CYRILLIC_CAP_DE = 0xF308, + ALP_ORDER_CYRILLIC_SMA_DE = 0xF309, + ALP_ORDER_CYRILLIC_CAP_IE = 0xF30A, + ALP_ORDER_CYRILLIC_SMA_IE = 0xF30B, + ALP_ORDER_CYRILLIC_CAP_ZHE = 0xF30C, + ALP_ORDER_CYRILLIC_SMA_ZHE = 0xF30D, + ALP_ORDER_CYRILLIC_CAP_ZE = 0xF30E, + ALP_ORDER_CYRILLIC_SMA_ZE = 0xF30F, + ALP_ORDER_CYRILLIC_CAP_I = 0xF310, + ALP_ORDER_CYRILLIC_SMA_I = 0xF311, + ALP_ORDER_CYRILLIC_CAP_SHORT_I = 0xF312, + ALP_ORDER_CYRILLIC_SMA_SHORT_I = 0xF313, + ALP_ORDER_CYRILLIC_CAP_KA = 0xF314, + ALP_ORDER_CYRILLIC_SMA_KA = 0xF315, + ALP_ORDER_CYRILLIC_CAP_EL = 0xF316, + ALP_ORDER_CYRILLIC_SMA_EL = 0xF317, + ALP_ORDER_CYRILLIC_CAP_EM = 0xF318, + ALP_ORDER_CYRILLIC_SMA_EM = 0xF319, + ALP_ORDER_CYRILLIC_CAP_EN = 0xF31A, + ALP_ORDER_CYRILLIC_SMA_EN = 0xF31B, + ALP_ORDER_CYRILLIC_CAP_O = 0xF31C, + ALP_ORDER_CYRILLIC_SMA_O = 0xF31D, + ALP_ORDER_CYRILLIC_CAP_PE = 0xF31E, + ALP_ORDER_CYRILLIC_SMA_PE = 0xF31F, + ALP_ORDER_CYRILLIC_CAP_ER = 0xF320, + ALP_ORDER_CYRILLIC_SMA_ER = 0xF321, + ALP_ORDER_CYRILLIC_CAP_ES = 0xF322, + ALP_ORDER_CYRILLIC_SMA_ES = 0xF323, + ALP_ORDER_CYRILLIC_CAP_TE = 0xF324, + ALP_ORDER_CYRILLIC_SMA_TE = 0xF325, + ALP_ORDER_CYRILLIC_CAP_U = 0xF326, + ALP_ORDER_CYRILLIC_SMA_U = 0xF327, + ALP_ORDER_CYRILLIC_CAP_EF = 0xF328, + ALP_ORDER_CYRILLIC_SMA_EF = 0xF329, + ALP_ORDER_CYRILLIC_CAP_HA = 0xF32A, + ALP_ORDER_CYRILLIC_SMA_HA = 0xF32B, + ALP_ORDER_CYRILLIC_CAP_TSE = 0xF32C, + ALP_ORDER_CYRILLIC_SMA_TSE = 0xF32D, + ALP_ORDER_CYRILLIC_CAP_CHE = 0xF32E, + ALP_ORDER_CYRILLIC_SMA_CHE = 0xF32F, + ALP_ORDER_CYRILLIC_CAP_SHA = 0xF330, + ALP_ORDER_CYRILLIC_SMA_SHA = 0xF331, + ALP_ORDER_CYRILLIC_CAP_SHCHA = 0xF332, + ALP_ORDER_CYRILLIC_SMA_SHCHA = 0xF333, + ALP_ORDER_CYRILLIC_CAP_HARD_SIGN = 0xF334, + ALP_ORDER_CYRILLIC_SMA_HARD_SIGN = 0xF335, + ALP_ORDER_CYRILLIC_CAP_YERU = 0xF336, + ALP_ORDER_CYRILLIC_SMA_YERU = 0xF337, + ALP_ORDER_CYRILLIC_CAP_SOFT_SIGN = 0xF338, + ALP_ORDER_CYRILLIC_SMA_SOFT_SIGN = 0xF339, + ALP_ORDER_CYRILLIC_CAP_E = 0xF33A, + ALP_ORDER_CYRILLIC_SMA_E = 0xF33B, + ALP_ORDER_CYRILLIC_CAP_YU = 0xF33C, + ALP_ORDER_CYRILLIC_SMA_YU = 0xF33D, + ALP_ORDER_CYRILLIC_CAP_YA = 0xF33E, + ALP_ORDER_CYRILLIC_SMA_YA = 0xF33F, + + /* Greek characters */ + ALP_ORDER_GREEK_CAP_ALPHA = 0x2400, + ALP_ORDER_GREEK_SMA_ALPHA = 0x2401, + ALP_ORDER_GREEK_CAP_BETA = 0x2402, + ALP_ORDER_GREEK_SMA_BETA = 0x2403, + ALP_ORDER_GREEK_CAP_GAMMA = 0x4404, + ALP_ORDER_GREEK_SMA_GAMMA = 0x4405, + ALP_ORDER_GREEK_CAP_DELTA = 0x3406, + ALP_ORDER_GREEK_SMA_DELTA = 0x3407, + ALP_ORDER_GREEK_CAP_EPSILON = 0x3408, + ALP_ORDER_GREEK_SMA_EPSILON = 0x3409, + ALP_ORDER_GREEK_CAP_ZETA = 0x940A, + ALP_ORDER_GREEK_SMA_ZETA = 0x940B, + ALP_ORDER_GREEK_CAP_ETA = 0x440C, + ALP_ORDER_GREEK_SMA_ETA = 0x440D, + ALP_ORDER_GREEK_CAP_THETA = 0x740E, + ALP_ORDER_GREEK_SMA_THETA = 0x740F, + ALP_ORDER_GREEK_CAP_IOTA = 0x4410, + ALP_ORDER_GREEK_SMA_IOTA = 0x4411, + ALP_ORDER_GREEK_CAP_KAPPA = 0x5412, + ALP_ORDER_GREEK_SMA_KAPPA = 0x5413, + ALP_ORDER_GREEK_CAP_LAMDA = 0x5414, + ALP_ORDER_GREEK_SMA_LAMDA = 0x5415, + ALP_ORDER_GREEK_CAP_MU = 0x6416, + ALP_ORDER_GREEK_SMA_MU = 0x6417, + ALP_ORDER_GREEK_CAP_NU = 0x6418, + ALP_ORDER_GREEK_SMA_NU = 0x6419, + ALP_ORDER_GREEK_CAP_XI = 0x941A, + ALP_ORDER_GREEK_SMA_XI = 0x941B, + ALP_ORDER_GREEK_CAP_OMICRON = 0x641C, + ALP_ORDER_GREEK_SMA_OMICRON = 0x641D, + ALP_ORDER_GREEK_CAP_PI = 0x741E, + ALP_ORDER_GREEK_SMA_PI = 0x741F, + ALP_ORDER_GREEK_CAP_RHO = 0x7420, + ALP_ORDER_GREEK_SMA_RHO = 0x7421, + ALP_ORDER_GREEK_CAP_SIGMA = 0x7422, + ALP_ORDER_GREEK_SMA_SIGMA = 0x7423, + ALP_ORDER_GREEK_CAP_TAU = 0x8424, + ALP_ORDER_GREEK_SMA_TAU = 0x8425, + ALP_ORDER_GREEK_CAP_UPSILON = 0x9426, + ALP_ORDER_GREEK_SMA_UPSILON = 0x9427, + ALP_ORDER_GREEK_CAP_PHI = 0x3428, + ALP_ORDER_GREEK_SMA_PHI = 0x3429, + ALP_ORDER_GREEK_CAP_CHI = 0x942A, + ALP_ORDER_GREEK_SMA_CHI = 0x942B, + ALP_ORDER_GREEK_CAP_PSI = 0x942C, + ALP_ORDER_GREEK_SMA_PSI = 0x942D, + ALP_ORDER_GREEK_CAP_OMEGA = 0x942E, + ALP_ORDER_GREEK_SMA_OMEGA = 0x942F, + + /* ISO-Latin characters */ + ALP_ORDER_ISOLAT_CAP_A = 0x2800, + ALP_ORDER_ISOLAT_SMA_A = 0x2801, + ALP_ORDER_ISOLAT_CAP_A_DIA = 0x2802, + ALP_ORDER_ISOLAT_SMA_A_DIA = 0x2802, + ALP_ORDER_ISOLAT_CAP_A_ACU = 0x2804, + ALP_ORDER_ISOLAT_SMA_A_ACU = 0x2804, + ALP_ORDER_ISOLAT_CAP_A_GRA = 0x2806, + ALP_ORDER_ISOLAT_SMA_A_GRA = 0x2806, + ALP_ORDER_ISOLAT_CAP_A_CIR = 0x2808, + ALP_ORDER_ISOLAT_SMA_A_CIR = 0x2808, + ALP_ORDER_ISOLAT_CAP_A_RIN = 0x280A, + ALP_ORDER_ISOLAT_SMA_A_RIN = 0x280A, + ALP_ORDER_ISOLAT_CAP_A_TIL = 0x280C, + ALP_ORDER_ISOLAT_SMA_A_TIL = 0x280C, + ALP_ORDER_ISOLAT_CAP_A_MAC = 0x280E, + ALP_ORDER_ISOLAT_SMA_A_MAC = 0x280E, + ALP_ORDER_ISOLAT_CAP_A_BRE = 0x2810, + ALP_ORDER_ISOLAT_SMA_A_BRE = 0x2810, + ALP_ORDER_ISOLAT_CAP_A_OGO = 0x2812, + ALP_ORDER_ISOLAT_SMA_A_OGO = 0x2812, + ALP_ORDER_ISOLAT_CAP_A_CAR = 0x2814, + ALP_ORDER_ISOLAT_SMA_A_CAR = 0x2814, + ALP_ORDER_ISOLAT_CAP_A_DIA_MAC = 0x2816, + ALP_ORDER_ISOLAT_SMA_A_DIA_MAC = 0x2816, + ALP_ORDER_ISOLAT_CAP_A_RIN_ACU = 0x2818, + ALP_ORDER_ISOLAT_SMA_A_RIN_ACU = 0x2818, + ALP_ORDER_ISOLAT_CAP_A_DOA_MAC = 0x281A, + ALP_ORDER_ISOLAT_SMA_A_DOA_MAC = 0x281A, + + ALP_ORDER_ISOLAT_CAP_LIG_AE = 0x281C, + ALP_ORDER_ISOLAT_SMA_LIG_AE = 0x281C, + ALP_ORDER_ISOLAT_CAP_LIG_AE_ACU = 0x281E, + ALP_ORDER_ISOLAT_SMA_LIG_AE_ACU = 0x281E, + ALP_ORDER_ISOLAT_CAP_LIG_AE_MAC = 0x2820, + ALP_ORDER_ISOLAT_SMA_LIG_AE_MAC = 0x2820, + + ALP_ORDER_ISOLAT_CAP_B = 0x2822, + ALP_ORDER_ISOLAT_SMA_B = 0x2823, + ALP_ORDER_ISOLAT_SMA_B_STR = 0x2822, + + ALP_ORDER_ISOLAT_CAP_C = 0x2825, + ALP_ORDER_ISOLAT_SMA_C = 0x2826, + ALP_ORDER_ISOLAT_CAP_C_CED = 0x2827, + ALP_ORDER_ISOLAT_SMA_C_CED = 0x2828, + ALP_ORDER_ISOLAT_CAP_C_ACU = 0x2829, + ALP_ORDER_ISOLAT_SMA_C_ACU = 0x2829, + ALP_ORDER_ISOLAT_CAP_C_CIR = 0x282B, + ALP_ORDER_ISOLAT_SMA_C_CIR = 0x282B, + ALP_ORDER_ISOLAT_CAP_C_DOA = 0x282D, + ALP_ORDER_ISOLAT_SMA_C_DOA = 0x282D, + ALP_ORDER_ISOLAT_CAP_C_CAR = 0x282F, + ALP_ORDER_ISOLAT_SMA_C_CAR = 0x282F, + + ALP_ORDER_ISOLAT_CAP_D = 0x3831, + ALP_ORDER_ISOLAT_SMA_D = 0x3832, + ALP_ORDER_ISOLAT_CAP_D_STR = 0x3833, + ALP_ORDER_ISOLAT_SMA_D_STR = 0x3833, + ALP_ORDER_ISOLAT_CAP_D_CAR = 0x3835, + ALP_ORDER_ISOLAT_SMA_D_CAR = 0x3835, + ALP_ORDER_ISOLAT_CAP_AFR_D = 0x3835, + + ALP_ORDER_ISOLAT_CAP_LIG_DZ = 0x3838, + ALP_ORDER_ISOLAT_CAP_D_SMA_Z = 0x3838, + ALP_ORDER_ISOLAT_SMA_LIG_DZ = 0x3838, + ALP_ORDER_ISOLAT_CAP_LIG_DZ_CAR = 0x383B, + ALP_ORDER_ISOLAT_CAP_D_SMA_Z_CAR = 0x383B, + ALP_ORDER_ISOLAT_SMA_LIG_DZ_CAR = 0x383B, + + ALP_ORDER_ISOLAT_CAP_E = 0x383E, + ALP_ORDER_ISOLAT_SMA_E = 0x383F, + ALP_ORDER_ISOLAT_CAP_E_DIA = 0x3840, + ALP_ORDER_ISOLAT_SMA_E_DIA = 0x3840, + ALP_ORDER_ISOLAT_CAP_E_ACU = 0x3842, + ALP_ORDER_ISOLAT_SMA_E_ACU = 0x3842, + ALP_ORDER_ISOLAT_CAP_E_GRA = 0x3844, + ALP_ORDER_ISOLAT_SMA_E_GRA = 0x3844, + ALP_ORDER_ISOLAT_CAP_E_CIR = 0x3846, + ALP_ORDER_ISOLAT_SMA_E_CIR = 0x3846, + ALP_ORDER_ISOLAT_CAP_E_MAC = 0x3848, + ALP_ORDER_ISOLAT_SMA_E_MAC = 0x3848, + ALP_ORDER_ISOLAT_CAP_E_BRE = 0x384A, + ALP_ORDER_ISOLAT_SMA_E_BRE = 0x384A, + ALP_ORDER_ISOLAT_CAP_E_OGO = 0x384C, + ALP_ORDER_ISOLAT_SMA_E_OGO = 0x384C, + ALP_ORDER_ISOLAT_CAP_E_DOA = 0x384E, + ALP_ORDER_ISOLAT_SMA_E_DOA = 0x384F, + ALP_ORDER_ISOLAT_CAP_E_CAR = 0x3850, + ALP_ORDER_ISOLAT_SMA_E_CAR = 0x3850, + + ALP_ORDER_ISOLAT_CAP_F = 0x3852, + ALP_ORDER_ISOLAT_SMA_F = 0x3853, + + ALP_ORDER_ISOLAT_CAP_G = 0x4854, + ALP_ORDER_ISOLAT_SMA_G = 0x4855, + ALP_ORDER_ISOLAT_CAP_G_STR = 0x4856, + ALP_ORDER_ISOLAT_SMA_G_STR = 0x4856, + ALP_ORDER_ISOLAT_CAP_G_CED = 0x4858, + ALP_ORDER_ISOLAT_SMA_G_CED = 0x4858, + ALP_ORDER_ISOLAT_CAP_G_ACU = 0x485A, + ALP_ORDER_ISOLAT_SMA_G_ACU = 0x485A, + ALP_ORDER_ISOLAT_CAP_G_CIR = 0x485C, + ALP_ORDER_ISOLAT_SMA_G_CIR = 0x485C, + ALP_ORDER_ISOLAT_CAP_G_BRE = 0x485E, + ALP_ORDER_ISOLAT_SMA_G_BRE = 0x485E, + ALP_ORDER_ISOLAT_CAP_G_DOA = 0x4860, + ALP_ORDER_ISOLAT_SMA_G_DOA = 0x4860, + ALP_ORDER_ISOLAT_CAP_G_CAR = 0x4862, + ALP_ORDER_ISOLAT_SMA_G_CAR = 0x4862, + + ALP_ORDER_ISOLAT_CAP_H = 0x4864, + ALP_ORDER_ISOLAT_SMA_H = 0x4865, + ALP_ORDER_ISOLAT_CAP_H_STR = 0x4866, + ALP_ORDER_ISOLAT_SMA_H_STR = 0x4866, + ALP_ORDER_ISOLAT_CAP_H_CIR = 0x4868, + ALP_ORDER_ISOLAT_SMA_H_CIR = 0x4868, + + ALP_ORDER_ISOLAT_CAP_I = 0x486A, + ALP_ORDER_ISOLAT_SMA_I = 0x486B, + ALP_ORDER_ISOLAT_CAP_I_DIA = 0x486C, + ALP_ORDER_ISOLAT_SMA_I_DIA = 0x486C, + ALP_ORDER_ISOLAT_CAP_I_STR = 0x486E, + ALP_ORDER_ISOLAT_CAP_I_ACU = 0x486F, + ALP_ORDER_ISOLAT_SMA_I_ACU = 0x4870, + ALP_ORDER_ISOLAT_CAP_I_GRA = 0x4870, + ALP_ORDER_ISOLAT_SMA_I_GRA = 0x4872, + ALP_ORDER_ISOLAT_CAP_I_CIR = 0x4873, + ALP_ORDER_ISOLAT_SMA_I_CIR = 0x4873, + ALP_ORDER_ISOLAT_CAP_I_TIL = 0x4875, + ALP_ORDER_ISOLAT_SMA_I_TIL = 0x4875, + ALP_ORDER_ISOLAT_CAP_I_MAC = 0x4877, + ALP_ORDER_ISOLAT_SMA_I_MAC = 0x4877, + ALP_ORDER_ISOLAT_CAP_I_BRE = 0x4879, + ALP_ORDER_ISOLAT_SMA_I_BRE = 0x4879, + ALP_ORDER_ISOLAT_CAP_I_OGO = 0x487B, + ALP_ORDER_ISOLAT_SMA_I_OGO = 0x487B, + ALP_ORDER_ISOLAT_CAP_I_DOA = 0x487D, + ALP_ORDER_ISOLAT_SMA_I_DOL = 0x487E, + ALP_ORDER_ISOLAT_CAP_I_CAR = 0x487F, + ALP_ORDER_ISOLAT_SMA_I_CAR = 0x487F, + + ALP_ORDER_ISOLAT_CAP_LIG_IJ = 0x4881, + ALP_ORDER_ISOLAT_SMA_LIG_IJ = 0x4881, + + ALP_ORDER_ISOLAT_CAP_J = 0x5883, + ALP_ORDER_ISOLAT_SMA_J = 0x5884, + ALP_ORDER_ISOLAT_CAP_J_CED = 0x5885, + ALP_ORDER_ISOLAT_SMA_J_CED = 0x5885, + ALP_ORDER_ISOLAT_CAP_J_CIR = 0x5887, + ALP_ORDER_ISOLAT_SMA_J_CIR = 0x5887, + ALP_ORDER_ISOLAT_SMA_J_CAR = 0x5889, + + ALP_ORDER_ISOLAT_CAP_K = 0x588A, + ALP_ORDER_ISOLAT_SMA_K = 0x588B, + ALP_ORDER_ISOLAT_CAP_K_CAR = 0x588C, + ALP_ORDER_ISOLAT_SMA_K_CAR = 0x588C, + + ALP_ORDER_ISOLAT_CAP_L = 0x588E, + ALP_ORDER_ISOLAT_SMA_L = 0x588F, + ALP_ORDER_ISOLAT_CAP_L_STR = 0x5890, + ALP_ORDER_ISOLAT_SMA_L_STR = 0x5890, + ALP_ORDER_ISOLAT_SMA_L_BAR = 0x5892, + ALP_ORDER_ISOLAT_CAP_L_CED = 0x5893, + ALP_ORDER_ISOLAT_SMA_L_CED = 0x5893, + ALP_ORDER_ISOLAT_CAP_L_ACU = 0x5895, + ALP_ORDER_ISOLAT_SMA_L_ACU = 0x5895, + ALP_ORDER_ISOLAT_CAP_L_DOM = 0x5897, + ALP_ORDER_ISOLAT_SMA_L_DOM = 0x5897, + ALP_ORDER_ISOLAT_CAP_L_CAR = 0x5899, + ALP_ORDER_ISOLAT_SMA_L_CAR = 0x5899, + + ALP_ORDER_ISOLAT_CAP_LIG_LJ = 0x589B, + ALP_ORDER_ISOLAT_CAP_L_SMA_J = 0x589B, + ALP_ORDER_ISOLAT_SMA_LIG_LJ = 0x589B, + + ALP_ORDER_ISOLAT_CAP_M = 0x689E, + ALP_ORDER_ISOLAT_SMA_M = 0x689F, + + ALP_ORDER_ISOLAT_CAP_N = 0x68A0, + ALP_ORDER_ISOLAT_SMA_N = 0x68A1, + ALP_ORDER_ISOLAT_CAP_N_CED = 0x68A2, + ALP_ORDER_ISOLAT_SMA_N_CED = 0x68A2, + ALP_ORDER_ISOLAT_CAP_N_ACU = 0x68A4, + ALP_ORDER_ISOLAT_SMA_N_ACU = 0x68A4, + ALP_ORDER_ISOLAT_CAP_N_TIL = 0x68A6, + ALP_ORDER_ISOLAT_SMA_N_TIL = 0x68A6, + ALP_ORDER_ISOLAT_CAP_N_CAR = 0x68A8, + ALP_ORDER_ISOLAT_SMA_N_CAR = 0x68A8, + ALP_ORDER_ISOLAT_SMA_N_APO = 0x68AA, + + ALP_ORDER_ISOLAT_CAP_LIG_NJ = 0x68AB, + ALP_ORDER_ISOLAT_CAP_N_SMA_J = 0x68AB, + ALP_ORDER_ISOLAT_SMA_LIG_NJ = 0x68AB, + + ALP_ORDER_ISOLAT_CAP_O = 0x68AE, + ALP_ORDER_ISOLAT_SMA_O = 0x68AF, + ALP_ORDER_ISOLAT_CAP_O_DIA = 0x68B0, + ALP_ORDER_ISOLAT_SMA_O_DIA = 0x68B0, + ALP_ORDER_ISOLAT_CAP_O_STR = 0x68B2, + ALP_ORDER_ISOLAT_SMA_O_STR = 0x68B2, + ALP_ORDER_ISOLAT_CAP_O_ACU = 0x68B4, + ALP_ORDER_ISOLAT_SMA_O_ACU = 0x68B4, + ALP_ORDER_ISOLAT_CAP_O_GRA = 0x68B6, + ALP_ORDER_ISOLAT_SMA_O_GRA = 0x68B6, + ALP_ORDER_ISOLAT_CAP_O_CIR = 0x68B8, + ALP_ORDER_ISOLAT_SMA_O_CIR = 0x68B8, + ALP_ORDER_ISOLAT_CAP_O_TIL = 0x68BA, + ALP_ORDER_ISOLAT_SMA_O_TIL = 0x68BA, + ALP_ORDER_ISOLAT_CAP_O_MAC = 0x68BC, + ALP_ORDER_ISOLAT_SMA_O_MAC = 0x68BC, + ALP_ORDER_ISOLAT_CAP_O_BRE = 0x68BE, + ALP_ORDER_ISOLAT_SMA_O_BRE = 0x68BE, + ALP_ORDER_ISOLAT_CAP_O_DOU = 0x68C0, + ALP_ORDER_ISOLAT_SMA_O_DOU = 0x68C0, + ALP_ORDER_ISOLAT_CAP_O_OGO = 0x68C2, + ALP_ORDER_ISOLAT_SMA_O_OGO = 0x68C2, + ALP_ORDER_ISOLAT_CAP_O_CAR = 0x68C4, + ALP_ORDER_ISOLAT_SMA_O_CAR = 0x68C4, + ALP_ORDER_ISOLAT_CAP_O_HOR = 0x68C6, + ALP_ORDER_ISOLAT_SMA_O_HOR = 0x68C6, + ALP_ORDER_ISOLAT_CAP_O_STR_ACU = 0x68C8, + ALP_ORDER_ISOLAT_SMA_O_STR_ACU = 0x68C8, + ALP_ORDER_ISOLAT_CAP_O_OGO_MAC = 0x68CA, + ALP_ORDER_ISOLAT_SMA_O_OGO_MAC = 0x68CA, + + ALP_ORDER_ISOLAT_CAP_LIG_OE = 0x68CC, + ALP_ORDER_ISOLAT_SMA_LIG_OE = 0x68CC, + + ALP_ORDER_ISOLAT_CAP_P = 0x78CE, + ALP_ORDER_ISOLAT_SMA_P = 0x78CF, + + ALP_ORDER_ISOLAT_CAP_Q = 0x78D0, + ALP_ORDER_ISOLAT_SMA_Q = 0x78D1, + + ALP_ORDER_ISOLAT_CAP_R = 0x78D2, + ALP_ORDER_ISOLAT_SMA_R = 0x78D3, + ALP_ORDER_ISOLAT_CAP_R_CED = 0x78D4, + ALP_ORDER_ISOLAT_SMA_R_CED = 0x78D4, + ALP_ORDER_ISOLAT_CAP_R_ACU = 0x78D6, + ALP_ORDER_ISOLAT_SMA_R_ACU = 0x78D6, + ALP_ORDER_ISOLAT_CAP_R_CAR = 0x78D8, + ALP_ORDER_ISOLAT_SMA_R_CAR = 0x78D8, + + ALP_ORDER_ISOLAT_CAP_S = 0x78DA, + ALP_ORDER_ISOLAT_SMA_S = 0x78DB, + ALP_ORDER_ISOLAT_CAP_S_CED = 0x78DC, + ALP_ORDER_ISOLAT_SMA_S_CED = 0x78DC, + ALP_ORDER_ISOLAT_CAP_S_ACU = 0x78DE, + ALP_ORDER_ISOLAT_SMA_S_ACU = 0x78DF, + ALP_ORDER_ISOLAT_CAP_S_CIR = 0x78E0, + ALP_ORDER_ISOLAT_SMA_S_CIR = 0x78E0, + ALP_ORDER_ISOLAT_CAP_S_CAR = 0x78E2, + ALP_ORDER_ISOLAT_SMA_S_CAR = 0x78E2, + ALP_ORDER_ISOLAT_SMA_SHARP_S = 0x78E4, + ALP_ORDER_ISOLAT_SMA_LONG_S = 0x78E5, + + ALP_ORDER_ISOLAT_CAP_T = 0x88E6, + ALP_ORDER_ISOLAT_SMA_T = 0x88E7, + ALP_ORDER_ISOLAT_CAP_T_STR = 0x88E8, + ALP_ORDER_ISOLAT_SMA_T_STR = 0x88E8, + ALP_ORDER_ISOLAT_CAP_T_CED = 0x88EA, + ALP_ORDER_ISOLAT_SMA_T_CED = 0x88EA, + ALP_ORDER_ISOLAT_CAP_T_CAR = 0x88EC, + ALP_ORDER_ISOLAT_SMA_T_CAR = 0x88EC, + + ALP_ORDER_ISOLAT_CAP_U = 0x88EE, + ALP_ORDER_ISOLAT_SMA_U = 0x88EF, + ALP_ORDER_ISOLAT_CAP_U_DIA = 0x88F0, + ALP_ORDER_ISOLAT_SMA_U_DIA = 0x88F0, + ALP_ORDER_ISOLAT_CAP_U_ACU = 0x88F2, + ALP_ORDER_ISOLAT_SMA_U_ACU = 0x88F2, + ALP_ORDER_ISOLAT_CAP_U_GRA = 0x88F4, + ALP_ORDER_ISOLAT_SMA_U_GRA = 0x88F4, + ALP_ORDER_ISOLAT_CAP_U_CIR = 0x88F6, + ALP_ORDER_ISOLAT_SMA_U_CIR = 0x88F6, + ALP_ORDER_ISOLAT_CAP_U_RIN = 0x88F8, + ALP_ORDER_ISOLAT_SMA_U_RIN = 0x88F8, + ALP_ORDER_ISOLAT_CAP_U_TIL = 0x88FA, + ALP_ORDER_ISOLAT_SMA_U_TIL = 0x88FA, + ALP_ORDER_ISOLAT_CAP_U_MAC = 0x88FC, + ALP_ORDER_ISOLAT_SMA_U_MAC = 0x88FC, + ALP_ORDER_ISOLAT_CAP_U_BRE = 0x88FE, + ALP_ORDER_ISOLAT_SMA_U_BRE = 0x88FE, + ALP_ORDER_ISOLAT_CAP_U_DOU = 0x8900, + ALP_ORDER_ISOLAT_SMA_U_DOU = 0x8900, + ALP_ORDER_ISOLAT_CAP_U_OGO = 0x8902, + ALP_ORDER_ISOLAT_SMA_U_OGO = 0x8902, + ALP_ORDER_ISOLAT_CAP_U_CAR = 0x8904, + ALP_ORDER_ISOLAT_SMA_U_CAR = 0x8904, + ALP_ORDER_ISOLAT_CAP_U_HOR = 0x8906, + ALP_ORDER_ISOLAT_SMA_U_HOR = 0x8906, + ALP_ORDER_ISOLAT_CAP_U_DIA_ACU = 0x8908, + ALP_ORDER_ISOLAT_SMA_U_DIA_ACU = 0x8908, + ALP_ORDER_ISOLAT_CAP_U_DIA_GRA = 0x890A, + ALP_ORDER_ISOLAT_SMA_U_DIA_GRA = 0x890A, + ALP_ORDER_ISOLAT_CAP_U_DIA_MAC = 0x890C, + ALP_ORDER_ISOLAT_SMA_U_DIA_MAC = 0x890C, + ALP_ORDER_ISOLAT_CAP_U_DIA_CAR = 0x890E, + ALP_ORDER_ISOLAT_SMA_U_DIA_CAR = 0x890E, + + ALP_ORDER_ISOLAT_CAP_V = 0x8910, + ALP_ORDER_ISOLAT_SMA_V = 0x8911, + + ALP_ORDER_ISOLAT_CAP_W = 0x9912, + ALP_ORDER_ISOLAT_SMA_W = 0x9913, + ALP_ORDER_ISOLAT_CAP_W_CIR = 0x9914, + ALP_ORDER_ISOLAT_SMA_W_CIR = 0x9914, + + ALP_ORDER_ISOLAT_CAP_X = 0x9916, + ALP_ORDER_ISOLAT_SMA_X = 0x9917, + + ALP_ORDER_ISOLAT_CAP_Y = 0x9918, + ALP_ORDER_ISOLAT_SMA_Y = 0x9919, + ALP_ORDER_ISOLAT_CAP_Y_DIA = 0x991A, + ALP_ORDER_ISOLAT_SMA_Y_DIA = 0x991A, + ALP_ORDER_ISOLAT_CAP_Y_ACU = 0x991C, + ALP_ORDER_ISOLAT_SMA_Y_ACU = 0x991C, + ALP_ORDER_ISOLAT_CAP_Y_CIR = 0x991E, + ALP_ORDER_ISOLAT_SMA_Y_CIR = 0x991E, + + ALP_ORDER_ISOLAT_CAP_Z = 0x9920, + ALP_ORDER_ISOLAT_SMA_Z = 0x9921, + ALP_ORDER_ISOLAT_CAP_Z_STR = 0x9922, + ALP_ORDER_ISOLAT_SMA_Z_STR = 0x9922, + ALP_ORDER_ISOLAT_CAP_Z_ACU = 0x9924, + ALP_ORDER_ISOLAT_SMA_Z_ACU = 0x9924, + ALP_ORDER_ISOLAT_CAP_Z_DOA = 0x9926, + ALP_ORDER_ISOLAT_SMA_Z_DOA = 0x9926, + ALP_ORDER_ISOLAT_CAP_Z_CAR = 0x9928, + ALP_ORDER_ISOLAT_SMA_Z_CAR = 0x9929, + + /* Symbols and punctation */ + ALP_ORDER_SYMB_COMMERCIAL_AT = 0x1E00, + ALP_ORDER_SYMB_POUND_SIGN = 0x1E01, + ALP_ORDER_SYMB_DOLLAR_SIGN = 0x1E02, + ALP_ORDER_SYMB_CENT_SIGN = 0xFE03, + ALP_ORDER_SYMB_YEN_SIGN = 0x1E04, + ALP_ORDER_SYMB_SPACE = 0x1E05, + ALP_ORDER_SYMB_NO_BREAK_SPACE = 0xFE06, + ALP_ORDER_SYMB_LOW_LINE = 0xFE07, + ALP_ORDER_SYMB_EXCLAMATION_MARK = 0x0E08, + ALP_ORDER_SYMB_QUOTATION_MARK = 0x0E09, + ALP_ORDER_SYMB_NUMBER_SIGN = 0x1E0A, + ALP_ORDER_SYMB_CURRENCY_SIGN = 0x1E0B, + ALP_ORDER_SYMB_PERCENT_SIGN = 0x0E0C, + ALP_ORDER_SYMB_AMPERSAND = 0x1E0D, + ALP_ORDER_SYMB_APOSTROPHE = 0x0E0E, + ALP_ORDER_SYMB_LEFT_PARENTHESIS = 0x1E0F, + ALP_ORDER_SYMB_RIGHT_PARENTHESIS = 0x1E10, + ALP_ORDER_SYMB_LEFT_SQUARE_BRACKET = 0xFE11, + ALP_ORDER_SYMB_RIGHT_SQUARE_BRACKET = 0xFE12, + ALP_ORDER_SYMB_LEFT_CURLY_BRACKET = 0xFE13, + ALP_ORDER_SYMB_RIGHT_CURLY_BRACKET = 0xFE14, + ALP_ORDER_SYMB_LEFT_POINTING_DBL_ANGLE_QUOTE_MARK = 0xFE15, + ALP_ORDER_SYMB_RIGHT_POINTING_DBL_ANGLE_QUOTE_MARK = 0xFE16, + ALP_ORDER_SYMB_ASTERISK = 0x0E17, + ALP_ORDER_SYMB_PLUS_SIGN = 0x0E18, + ALP_ORDER_SYMB_PLUS_MINUS_SIGN = 0xFE19, + ALP_ORDER_SYMB_COMMA = 0x0E1A, + ALP_ORDER_SYMB_HYPHEN_MINUS = 0x0E1B, + ALP_ORDER_SYMB_FULL_STOP = 0x0E1C, + ALP_ORDER_SYMB_MULTIPLICATION_SIGN = 0xFE1D, + ALP_ORDER_SYMB_DIVISION_SIGN = 0xFE1E, + ALP_ORDER_SYMB_VERTICAL_LINE = 0xFE1F, + ALP_ORDER_SYMB_BROKEN_BAR = 0xFE20, + ALP_ORDER_SYMB_SOLIDUS = 0x0E21, + ALP_ORDER_SYMB_REVERSED_SOLIDUS = 0xFE22, + ALP_ORDER_SYMB_COLON = 0x0E23, + ALP_ORDER_SYMB_SEMICOLON = 0xF0E4, + ALP_ORDER_SYMB_LESS_THAN_SIGN = 0x1E25, + ALP_ORDER_SYMB_EQUALS_SIGN = 0x1E26, + ALP_ORDER_SYMB_GREATER_THAN_SIGN = 0x1E27, + ALP_ORDER_SYMB_QUESTION_MARK = 0x0E28, + ALP_ORDER_SYMB_INVERTED_EXCLAMATION_MARK = 0x0E29, + ALP_ORDER_SYMB_SECTION_SIGN = 0x1E2A, + ALP_ORDER_SYMB_INVERTED_QUESTION_MARK = 0x0E2B, + ALP_ORDER_SYMB_COPYRIGHT_SIGN = 0xFE2C, + ALP_ORDER_SYMB_REGISTERED_SIGN = 0xFE2D, + ALP_ORDER_SYMB_VULGAR_FRACTION_ONE_QUARTER = 0xFE2E, + ALP_ORDER_SYMB_VULGAR_FRACTION_ONE_HALF = 0xFE2F, + ALP_ORDER_SYMB_VULGAR_FRACTION_THREE_QUARTER = 0xFE30, + ALP_ORDER_SYMB_SUPERSCRIPT_ONE = 0xFE31, + ALP_ORDER_SYMB_SUPERSCRIPT_TWO = 0xFE32, + ALP_ORDER_SYMB_SUPERSCRIPT_THREE = 0xFE33, + ALP_ORDER_SYMB_DEGREE_SIGN = 0xFE34, + ALP_ORDER_SYMB_MICRO_SIGN = 0xFE35, + ALP_ORDER_SYMB_NOT_SIGN = 0xFE36, + ALP_ORDER_SYMB_SOFT_HYPHEN = 0xFE37, + ALP_ORDER_SYMB_MASCULINE_ORDINAL_INDICATOR = 0xFE38, + ALP_ORDER_SYMB_FEMININE_ORDINAL_INDICATOR = 0xFE39, + ALP_ORDER_SYMB_DIARESIS = 0xFE3A, + ALP_ORDER_SYMB_CEDILLA = 0xFE3B, + ALP_ORDER_SYMB_ACUTE_ACCENT = 0xFE3C, + ALP_ORDER_SYMB_GRAVE_ACCENT = 0xFE3D, + ALP_ORDER_SYMB_CIRCUMFLEX_ACCENT = 0xFE3E, + ALP_ORDER_SYMB_TILDE = 0xFE3F, + ALP_ORDER_SYMB_MACRON = 0xFE40, + ALP_ORDER_SYMB_MIDDLE_DOT = 0xFE41, + + ALP_ORDER_HALFWIDTH_KATAKANA_MIDDLE_DOT = 0xFF65, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_A = 0xFF67, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_I = 0xFF68, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_U = 0xFF69, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_E = 0xFF6A, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_O = 0xFF6B, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_YA = 0xFF6C, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_YU = 0xFF6D, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_YO = 0xFF6E, + ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_TU = 0xFF6F, + ALP_ORDER_HALFWIDTH_KATAKANA_HIRAGANA_SOUND_MARK = 0xFF70, + ALP_ORDER_HALFWIDTH_KATAKANA_A = 0xFF71, + ALP_ORDER_HALFWIDTH_KATAKANA_I = 0xFF72, + ALP_ORDER_HALFWIDTH_KATAKANA_U = 0xFF73, + ALP_ORDER_HALFWIDTH_KATAKANA_E = 0xFF74, + ALP_ORDER_HALFWIDTH_KATAKANA_O = 0xFF75, + ALP_ORDER_HALFWIDTH_KATAKANA_KA = 0xFF76, + ALP_ORDER_HALFWIDTH_KATAKANA_KI = 0xFF77, + ALP_ORDER_HALFWIDTH_KATAKANA_KU = 0xFF78, + ALP_ORDER_HALFWIDTH_KATAKANA_KE = 0xFF79, + ALP_ORDER_HALFWIDTH_KATAKANA_KO = 0xFF7A, + ALP_ORDER_HALFWIDTH_KATAKANA_SA = 0xFF7B, + ALP_ORDER_HALFWIDTH_KATAKANA_SI = 0xFF7C, + ALP_ORDER_HALFWIDTH_KATAKANA_SU = 0XFF7D, + ALP_ORDER_HALFWIDTH_KATAKANA_SE = 0xFF7E, + ALP_ORDER_HALFWIDTH_KATAKANA_SO = 0xFF7F, + ALP_ORDER_HALFWIDTH_KATAKANA_TA = 0XFF80, + ALP_ORDER_HALFWIDTH_KATAKANA_TI = 0xFF81, + ALP_ORDER_HALFWIDTH_KATAKANA_TU = 0xFF82, + ALP_ORDER_HALFWIDTH_KATAKANA_TE = 0xFF83, + ALP_ORDER_HALFWIDTH_KATAKANA_TO = 0xFF84, + ALP_ORDER_HALFWIDTH_KATAKANA_NA = 0xFF85, + ALP_ORDER_HALFWIDTH_KATAKANA_NI = 0xFF86, + ALP_ORDER_HALFWIDTH_KATAKANA_NU = 0xFF87, + ALP_ORDER_HALFWIDTH_KATAKANA_NE = 0xFF88, + ALP_ORDER_HALFWIDTH_KATAKANA_NO = 0xFF89, + ALP_ORDER_HALFWIDTH_KATAKANA_HA = 0xFF8A, + ALP_ORDER_HALFWIDTH_KATAKANA_HI = 0xFF8B, + ALP_ORDER_HALFWIDTH_KATAKANA_HU = 0xFF8C, + ALP_ORDER_HALFWIDTH_KATAKANA_HE = 0xFF8D, + ALP_ORDER_HALFWIDTH_KATAKANA_HO = 0xFF8E, + ALP_ORDER_HALFWIDTH_KATAKANA_MA = 0xFF8F, + ALP_ORDER_HALFWIDTH_KATAKANA_MI = 0xFF90, + ALP_ORDER_HALFWIDTH_KATAKANA_MU = 0xFF91, + ALP_ORDER_HALFWIDTH_KATAKANA_ME = 0xFF92, + ALP_ORDER_HALFWIDTH_KATAKANA_MO = 0xFF93, + ALP_ORDER_HALFWIDTH_KATAKANA_YA = 0xFF94, + ALP_ORDER_HALFWIDTH_KATAKANA_YU = 0xFF95, + ALP_ORDER_HALFWIDTH_KATAKANA_YO = 0xFF96, + ALP_ORDER_HALFWIDTH_KATAKANA_RA = 0xFF97, + ALP_ORDER_HALFWIDTH_KATAKANA_RI = 0xFF98, + ALP_ORDER_HALFWIDTH_KATAKANA_RU = 0xFF99, + ALP_ORDER_HALFWIDTH_KATAKANA_RE = 0xFF9A, + ALP_ORDER_HALFWIDTH_KATAKANA_RO = 0xFF9B, + ALP_ORDER_HALFWIDTH_KATAKANA_WA = 0xFF9C, + ALP_ORDER_HALFWIDTH_KATAKANA_WO = 0xFF9D, + ALP_ORDER_HALFWIDTH_KATAKANA_N = 0xFF9E, + ALP_ORDER_HALFWIDTH_KATAKANA_VOICED_SOUND_MARK = 0xFF9F, + ALP_ORDER_HALFWIDTH_KATAKANA_SEMI_VOICED_SOUND_MARK = 0xFFA0, + + /* Control characters */ + ALP_ORDER_CTRL_LINE_FEED = 0xFFFB, + ALP_ORDER_CTRL_CARRIAGE_RETURN = 0xFFFC, + ALP_ORDER_CTRL_DEVICE_CONTROL_1 = 0xFFFD, + ALP_ORDER_CTRL_ESCAPE = 0xFFFE, + + ALP_ORDER_UNDEFINED_WEIGHT = 0xFFFF +}; + +const UnicodeToAlphaOrder + garUnicodeToAlphaOrderTable[WSC_UNICODE_TO_ALPHA_ORDER_COUNT] = { + {0x0000, ALP_ORDER_NULL}, + {0x000A, ALP_ORDER_CTRL_LINE_FEED}, + {0x000D, ALP_ORDER_CTRL_CARRIAGE_RETURN}, + {0x0011, ALP_ORDER_CTRL_DEVICE_CONTROL_1}, + {0x001B, ALP_ORDER_CTRL_ESCAPE}, + {0x0020, ALP_ORDER_SYMB_SPACE}, + {0x0021, ALP_ORDER_SYMB_EXCLAMATION_MARK}, + {0x0022, ALP_ORDER_SYMB_QUOTATION_MARK}, + {0x0023, ALP_ORDER_SYMB_NUMBER_SIGN}, + {0x0024, ALP_ORDER_SYMB_DOLLAR_SIGN}, + {0x0025, ALP_ORDER_SYMB_PERCENT_SIGN}, + {0x0026, ALP_ORDER_SYMB_AMPERSAND}, + {0x0027, ALP_ORDER_SYMB_APOSTROPHE}, + {0x0028, ALP_ORDER_SYMB_LEFT_PARENTHESIS}, + {0x0029, ALP_ORDER_SYMB_RIGHT_PARENTHESIS}, + {0x002A, ALP_ORDER_SYMB_ASTERISK}, + {0x002B, ALP_ORDER_SYMB_PLUS_SIGN}, + {0x002C, ALP_ORDER_SYMB_COMMA}, + {0x002D, ALP_ORDER_SYMB_HYPHEN_MINUS}, + {0x002E, ALP_ORDER_SYMB_FULL_STOP}, + {0x002F, ALP_ORDER_SYMB_SOLIDUS}, + {0x0030, ALP_ORDER_DIGIT_ZERO}, + {0x0031, ALP_ORDER_DIGIT_ONE}, + {0x0032, ALP_ORDER_DIGIT_TWO}, + {0x0033, ALP_ORDER_DIGIT_THREE}, + {0x0034, ALP_ORDER_DIGIT_FOUR}, + {0x0035, ALP_ORDER_DIGIT_FIVE}, + {0x0036, ALP_ORDER_DIGIT_SIX}, + {0x0037, ALP_ORDER_DIGIT_SEVEN}, + {0x0038, ALP_ORDER_DIGIT_EIGHT}, + {0x0039, ALP_ORDER_DIGIT_NINE}, + {0x003A, ALP_ORDER_SYMB_COLON}, + {0x003B, ALP_ORDER_SYMB_SEMICOLON}, + {0x003C, ALP_ORDER_SYMB_LESS_THAN_SIGN}, + {0x003D, ALP_ORDER_SYMB_EQUALS_SIGN}, + {0x003E, ALP_ORDER_SYMB_GREATER_THAN_SIGN}, + {0x003F, ALP_ORDER_SYMB_QUESTION_MARK}, + {0x0040, ALP_ORDER_SYMB_COMMERCIAL_AT}, + {0x0041, ALP_ORDER_ISOLAT_CAP_A}, + {0x0042, ALP_ORDER_ISOLAT_CAP_B}, + {0x0043, ALP_ORDER_ISOLAT_CAP_C}, + {0x0044, ALP_ORDER_ISOLAT_CAP_D}, + {0x0045, ALP_ORDER_ISOLAT_CAP_E}, + {0x0046, ALP_ORDER_ISOLAT_CAP_F}, + {0x0047, ALP_ORDER_ISOLAT_CAP_G}, + {0x0048, ALP_ORDER_ISOLAT_CAP_H}, + {0x0049, ALP_ORDER_ISOLAT_CAP_I}, + {0x004A, ALP_ORDER_ISOLAT_CAP_J}, + {0x004B, ALP_ORDER_ISOLAT_CAP_K}, + {0x004C, ALP_ORDER_ISOLAT_CAP_L}, + {0x004D, ALP_ORDER_ISOLAT_CAP_M}, + {0x004E, ALP_ORDER_ISOLAT_CAP_N}, + {0x004F, ALP_ORDER_ISOLAT_CAP_O}, + {0x0050, ALP_ORDER_ISOLAT_CAP_P}, + {0x0051, ALP_ORDER_ISOLAT_CAP_Q}, + {0x0052, ALP_ORDER_ISOLAT_CAP_R}, + {0x0053, ALP_ORDER_ISOLAT_CAP_S}, + {0x0054, ALP_ORDER_ISOLAT_CAP_T}, + {0x0055, ALP_ORDER_ISOLAT_CAP_U}, + {0x0056, ALP_ORDER_ISOLAT_CAP_V}, + {0x0057, ALP_ORDER_ISOLAT_CAP_W}, + {0x0058, ALP_ORDER_ISOLAT_CAP_X}, + {0x0059, ALP_ORDER_ISOLAT_CAP_Y}, + {0x005A, ALP_ORDER_ISOLAT_CAP_Z}, + {0x005B, ALP_ORDER_SYMB_LEFT_SQUARE_BRACKET}, + {0x005C, ALP_ORDER_SYMB_REVERSED_SOLIDUS}, + {0x005D, ALP_ORDER_SYMB_RIGHT_SQUARE_BRACKET}, + {0x005E, ALP_ORDER_SYMB_CIRCUMFLEX_ACCENT}, + {0x005F, ALP_ORDER_SYMB_LOW_LINE}, + {0x0060, ALP_ORDER_SYMB_GRAVE_ACCENT}, + {0x0061, ALP_ORDER_ISOLAT_SMA_A}, + {0x0062, ALP_ORDER_ISOLAT_SMA_B}, + {0x0063, ALP_ORDER_ISOLAT_SMA_C}, + {0x0064, ALP_ORDER_ISOLAT_SMA_D}, + {0x0065, ALP_ORDER_ISOLAT_SMA_E}, + {0x0066, ALP_ORDER_ISOLAT_SMA_F}, + {0x0067, ALP_ORDER_ISOLAT_SMA_G}, + {0x0068, ALP_ORDER_ISOLAT_SMA_H}, + {0x0069, ALP_ORDER_ISOLAT_SMA_I}, + {0x006A, ALP_ORDER_ISOLAT_SMA_J}, + {0x006B, ALP_ORDER_ISOLAT_SMA_K}, + {0x006C, ALP_ORDER_ISOLAT_SMA_L}, + {0x006D, ALP_ORDER_ISOLAT_SMA_M}, + {0x006E, ALP_ORDER_ISOLAT_SMA_N}, + {0x006F, ALP_ORDER_ISOLAT_SMA_O}, + {0x0070, ALP_ORDER_ISOLAT_SMA_P}, + {0x0071, ALP_ORDER_ISOLAT_SMA_Q}, + {0x0072, ALP_ORDER_ISOLAT_SMA_R}, + {0x0073, ALP_ORDER_ISOLAT_SMA_S}, + {0x0074, ALP_ORDER_ISOLAT_SMA_T}, + {0x0075, ALP_ORDER_ISOLAT_SMA_U}, + {0x0076, ALP_ORDER_ISOLAT_SMA_V}, + {0x0077, ALP_ORDER_ISOLAT_SMA_W}, + {0x0078, ALP_ORDER_ISOLAT_SMA_X}, + {0x0079, ALP_ORDER_ISOLAT_SMA_Y}, + {0x007A, ALP_ORDER_ISOLAT_SMA_Z}, + {0x007B, ALP_ORDER_SYMB_LEFT_CURLY_BRACKET}, + {0x007C, ALP_ORDER_SYMB_VERTICAL_LINE}, + {0x007D, ALP_ORDER_SYMB_RIGHT_CURLY_BRACKET}, + {0x007E, ALP_ORDER_SYMB_TILDE}, + {0x00A0, ALP_ORDER_SYMB_NO_BREAK_SPACE}, + {0x00A1, ALP_ORDER_SYMB_INVERTED_EXCLAMATION_MARK}, + {0x00A2, ALP_ORDER_SYMB_CENT_SIGN}, + {0x00A3, ALP_ORDER_SYMB_POUND_SIGN}, + {0x00A4, ALP_ORDER_SYMB_CURRENCY_SIGN}, + {0x00A5, ALP_ORDER_SYMB_YEN_SIGN}, + {0x00A6, ALP_ORDER_SYMB_BROKEN_BAR}, + {0x00A7, ALP_ORDER_SYMB_SECTION_SIGN}, + {0x00A8, ALP_ORDER_SYMB_DIARESIS}, + {0x00A9, ALP_ORDER_SYMB_COPYRIGHT_SIGN}, + {0x00AA, ALP_ORDER_SYMB_FEMININE_ORDINAL_INDICATOR}, + {0x00AB, ALP_ORDER_SYMB_LEFT_POINTING_DBL_ANGLE_QUOTE_MARK}, + {0x00AC, ALP_ORDER_SYMB_NOT_SIGN}, + {0x00AD, ALP_ORDER_SYMB_SOFT_HYPHEN}, + {0x00AE, ALP_ORDER_SYMB_REGISTERED_SIGN}, + {0x00AF, ALP_ORDER_SYMB_MACRON}, + {0x00B0, ALP_ORDER_SYMB_DEGREE_SIGN}, + {0x00B1, ALP_ORDER_SYMB_PLUS_MINUS_SIGN}, + {0x00B2, ALP_ORDER_SYMB_SUPERSCRIPT_TWO}, + {0x00B3, ALP_ORDER_SYMB_SUPERSCRIPT_THREE}, + {0x00B4, ALP_ORDER_SYMB_ACUTE_ACCENT}, + {0x00B6, ALP_ORDER_SYMB_MICRO_SIGN}, + {0x00B7, ALP_ORDER_SYMB_MIDDLE_DOT}, + {0x00B8, ALP_ORDER_SYMB_CEDILLA}, + {0x00B9, ALP_ORDER_SYMB_SUPERSCRIPT_ONE}, + {0x00BA, ALP_ORDER_SYMB_MASCULINE_ORDINAL_INDICATOR}, + {0x00BB, ALP_ORDER_SYMB_RIGHT_POINTING_DBL_ANGLE_QUOTE_MARK}, + {0x00BC, ALP_ORDER_SYMB_VULGAR_FRACTION_ONE_QUARTER}, + {0x00BD, ALP_ORDER_SYMB_VULGAR_FRACTION_ONE_HALF}, + {0x00BE, ALP_ORDER_SYMB_VULGAR_FRACTION_THREE_QUARTER}, + {0x00BF, ALP_ORDER_SYMB_INVERTED_QUESTION_MARK}, + {0x00C0, ALP_ORDER_ISOLAT_CAP_A_GRA}, + {0x00C1, ALP_ORDER_ISOLAT_CAP_A_ACU}, + {0x00C2, ALP_ORDER_ISOLAT_CAP_A_CIR}, + {0x00C3, ALP_ORDER_ISOLAT_CAP_A_TIL}, + {0x00C4, ALP_ORDER_ISOLAT_CAP_A_DIA}, + {0x00C5, ALP_ORDER_ISOLAT_CAP_A_RIN}, + {0x00C6, ALP_ORDER_ISOLAT_CAP_LIG_AE}, + {0x00C7, ALP_ORDER_ISOLAT_CAP_C_CED}, + {0x00C8, ALP_ORDER_ISOLAT_CAP_E_GRA}, + {0x00C9, ALP_ORDER_ISOLAT_CAP_E_ACU}, + {0x00CA, ALP_ORDER_ISOLAT_CAP_E_CIR}, + {0x00CB, ALP_ORDER_ISOLAT_CAP_E_DIA}, + {0x00CC, ALP_ORDER_ISOLAT_CAP_I_GRA}, + {0x00CD, ALP_ORDER_ISOLAT_CAP_I_ACU}, + {0x00CE, ALP_ORDER_ISOLAT_CAP_I_CIR}, + {0x00CF, ALP_ORDER_ISOLAT_CAP_I_DIA}, + {0x00D1, ALP_ORDER_ISOLAT_CAP_N_TIL}, + {0x00D2, ALP_ORDER_ISOLAT_CAP_O_GRA}, + {0x00D3, ALP_ORDER_ISOLAT_CAP_O_ACU}, + {0x00D4, ALP_ORDER_ISOLAT_CAP_O_CIR}, + {0x00D5, ALP_ORDER_ISOLAT_CAP_O_TIL}, + {0x00D6, ALP_ORDER_ISOLAT_CAP_O_DIA}, + {0x00D7, ALP_ORDER_SYMB_MULTIPLICATION_SIGN}, + {0x00D8, ALP_ORDER_ISOLAT_CAP_O_STR}, + {0x00D9, ALP_ORDER_ISOLAT_CAP_U_GRA}, + {0x00DA, ALP_ORDER_ISOLAT_CAP_U_ACU}, + {0x00DB, ALP_ORDER_ISOLAT_CAP_U_CIR}, + {0x00DC, ALP_ORDER_ISOLAT_CAP_U_DIA}, + {0x00DD, ALP_ORDER_ISOLAT_CAP_Y_ACU}, + {0x00DF, ALP_ORDER_ISOLAT_SMA_SHARP_S}, + {0x00E0, ALP_ORDER_ISOLAT_SMA_A_GRA}, + {0x00E1, ALP_ORDER_ISOLAT_SMA_A_ACU}, + {0x00E2, ALP_ORDER_ISOLAT_SMA_A_CIR}, + {0x00E3, ALP_ORDER_ISOLAT_SMA_A_TIL}, + {0x00E4, ALP_ORDER_ISOLAT_SMA_A_DIA}, + {0x00E5, ALP_ORDER_ISOLAT_SMA_A_RIN}, + {0x00E6, ALP_ORDER_ISOLAT_SMA_LIG_AE}, + {0x00E7, ALP_ORDER_ISOLAT_SMA_C_CED}, + {0x00E8, ALP_ORDER_ISOLAT_SMA_E_GRA}, + {0x00E9, ALP_ORDER_ISOLAT_SMA_E_ACU}, + {0x00EA, ALP_ORDER_ISOLAT_SMA_E_CIR}, + {0x00EB, ALP_ORDER_ISOLAT_SMA_E_DIA}, + {0x00EC, ALP_ORDER_ISOLAT_SMA_I_GRA}, + {0x00ED, ALP_ORDER_ISOLAT_SMA_I_ACU}, + {0x00EE, ALP_ORDER_ISOLAT_SMA_I_CIR}, + {0x00EF, ALP_ORDER_ISOLAT_SMA_I_DIA}, + {0x00F1, ALP_ORDER_ISOLAT_SMA_N_TIL}, + {0x00F2, ALP_ORDER_ISOLAT_SMA_O_GRA}, + {0x00F3, ALP_ORDER_ISOLAT_SMA_O_ACU}, + {0x00F4, ALP_ORDER_ISOLAT_SMA_O_CIR}, + {0x00F5, ALP_ORDER_ISOLAT_SMA_O_TIL}, + {0x00F6, ALP_ORDER_ISOLAT_SMA_O_DIA}, + {0x00F7, ALP_ORDER_SYMB_DIVISION_SIGN}, + {0x00F8, ALP_ORDER_ISOLAT_SMA_O_STR}, + {0x00F9, ALP_ORDER_ISOLAT_SMA_U_GRA}, + {0x00FA, ALP_ORDER_ISOLAT_SMA_U_ACU}, + {0x00FB, ALP_ORDER_ISOLAT_SMA_U_CIR}, + {0x00FC, ALP_ORDER_ISOLAT_SMA_U_DIA}, + {0x00FD, ALP_ORDER_ISOLAT_SMA_Y_ACU}, + {0x00FF, ALP_ORDER_ISOLAT_SMA_Y_DIA}, + {0x0100, ALP_ORDER_ISOLAT_CAP_A_MAC}, + {0x0101, ALP_ORDER_ISOLAT_SMA_A_MAC}, + {0x0102, ALP_ORDER_ISOLAT_CAP_A_BRE}, + {0x0103, ALP_ORDER_ISOLAT_SMA_A_BRE}, + {0x0104, ALP_ORDER_ISOLAT_CAP_A_OGO}, + {0x0105, ALP_ORDER_ISOLAT_SMA_A_OGO}, + {0x0106, ALP_ORDER_ISOLAT_CAP_C_ACU}, + {0x0107, ALP_ORDER_ISOLAT_SMA_C_ACU}, + {0x0108, ALP_ORDER_ISOLAT_CAP_C_CIR}, + {0x0109, ALP_ORDER_ISOLAT_SMA_C_CIR}, + {0x010A, ALP_ORDER_ISOLAT_CAP_C_DOA}, + {0x010B, ALP_ORDER_ISOLAT_SMA_C_DOA}, + {0x010C, ALP_ORDER_ISOLAT_CAP_C_CAR}, + {0x010D, ALP_ORDER_ISOLAT_SMA_C_CAR}, + {0x010E, ALP_ORDER_ISOLAT_CAP_D_CAR}, + {0x010F, ALP_ORDER_ISOLAT_SMA_D_CAR}, + {0x0110, ALP_ORDER_ISOLAT_CAP_D_STR}, + {0x0111, ALP_ORDER_ISOLAT_SMA_D_STR}, + {0x0112, ALP_ORDER_ISOLAT_CAP_E_MAC}, + {0x0113, ALP_ORDER_ISOLAT_SMA_E_MAC}, + {0x0114, ALP_ORDER_ISOLAT_CAP_E_BRE}, + {0x0115, ALP_ORDER_ISOLAT_SMA_E_BRE}, + {0x0116, ALP_ORDER_ISOLAT_CAP_E_DOA}, + {0x0117, ALP_ORDER_ISOLAT_SMA_E_DOA}, + {0x0118, ALP_ORDER_ISOLAT_CAP_E_OGO}, + {0x0119, ALP_ORDER_ISOLAT_SMA_E_OGO}, + {0x011A, ALP_ORDER_ISOLAT_CAP_E_CAR}, + {0x011B, ALP_ORDER_ISOLAT_SMA_E_CAR}, + {0x011C, ALP_ORDER_ISOLAT_CAP_G_CIR}, + {0x011D, ALP_ORDER_ISOLAT_SMA_G_CIR}, + {0x011E, ALP_ORDER_ISOLAT_CAP_G_BRE}, + {0x011F, ALP_ORDER_ISOLAT_SMA_G_BRE}, + {0x0120, ALP_ORDER_ISOLAT_CAP_G_DOA}, + {0x0121, ALP_ORDER_ISOLAT_SMA_G_DOA}, + {0x0122, ALP_ORDER_ISOLAT_CAP_G_CED}, + {0x0123, ALP_ORDER_ISOLAT_SMA_G_CED}, + {0x0124, ALP_ORDER_ISOLAT_CAP_H_CIR}, + {0x0125, ALP_ORDER_ISOLAT_SMA_H_CIR}, + {0x0126, ALP_ORDER_ISOLAT_CAP_H_STR}, + {0x0127, ALP_ORDER_ISOLAT_SMA_H_STR}, + {0x0128, ALP_ORDER_ISOLAT_CAP_I_TIL}, + {0x0129, ALP_ORDER_ISOLAT_SMA_I_TIL}, + {0x012A, ALP_ORDER_ISOLAT_CAP_I_MAC}, + {0x012B, ALP_ORDER_ISOLAT_SMA_I_MAC}, + {0x012C, ALP_ORDER_ISOLAT_CAP_I_BRE}, + {0x012D, ALP_ORDER_ISOLAT_SMA_I_BRE}, + {0x012E, ALP_ORDER_ISOLAT_CAP_I_OGO}, + {0x012F, ALP_ORDER_ISOLAT_SMA_I_OGO}, + {0x0130, ALP_ORDER_ISOLAT_CAP_I_DOA}, + {0x0131, ALP_ORDER_ISOLAT_SMA_I_DOL}, + {0x0132, ALP_ORDER_ISOLAT_CAP_LIG_IJ}, + {0x0133, ALP_ORDER_ISOLAT_SMA_LIG_IJ}, + {0x0134, ALP_ORDER_ISOLAT_CAP_J_CIR}, + {0x0135, ALP_ORDER_ISOLAT_SMA_J_CIR}, + {0x0136, ALP_ORDER_ISOLAT_CAP_J_CED}, + {0x0137, ALP_ORDER_ISOLAT_SMA_J_CED}, + {0x0139, ALP_ORDER_ISOLAT_CAP_L_ACU}, + {0x013A, ALP_ORDER_ISOLAT_SMA_L_ACU}, + {0x013B, ALP_ORDER_ISOLAT_CAP_L_CED}, + {0x013C, ALP_ORDER_ISOLAT_SMA_L_CED}, + {0x013D, ALP_ORDER_ISOLAT_CAP_L_CAR}, + {0x013E, ALP_ORDER_ISOLAT_SMA_L_CAR}, + {0x013F, ALP_ORDER_ISOLAT_CAP_L_DOM}, + {0x0140, ALP_ORDER_ISOLAT_SMA_L_DOM}, + {0x0141, ALP_ORDER_ISOLAT_CAP_L_STR}, + {0x0142, ALP_ORDER_ISOLAT_SMA_L_STR}, + {0x0143, ALP_ORDER_ISOLAT_CAP_N_ACU}, + {0x0144, ALP_ORDER_ISOLAT_SMA_N_ACU}, + {0x0145, ALP_ORDER_ISOLAT_CAP_N_CED}, + {0x0146, ALP_ORDER_ISOLAT_SMA_N_CED}, + {0x0147, ALP_ORDER_ISOLAT_CAP_N_CAR}, + {0x0148, ALP_ORDER_ISOLAT_SMA_N_CAR}, + {0x0149, ALP_ORDER_ISOLAT_SMA_N_APO}, + {0x014C, ALP_ORDER_ISOLAT_CAP_O_MAC}, + {0x014D, ALP_ORDER_ISOLAT_SMA_O_MAC}, + {0x014E, ALP_ORDER_ISOLAT_CAP_O_BRE}, + {0x014F, ALP_ORDER_ISOLAT_SMA_O_BRE}, + {0x0150, ALP_ORDER_ISOLAT_CAP_O_DOU}, + {0x0151, ALP_ORDER_ISOLAT_SMA_O_DOU}, + {0x0152, ALP_ORDER_ISOLAT_CAP_LIG_OE}, + {0x0153, ALP_ORDER_ISOLAT_SMA_LIG_OE}, + {0x0154, ALP_ORDER_ISOLAT_CAP_R_ACU}, + {0x0155, ALP_ORDER_ISOLAT_SMA_R_ACU}, + {0x0156, ALP_ORDER_ISOLAT_CAP_R_CED}, + {0x0157, ALP_ORDER_ISOLAT_SMA_R_CED}, + {0x0158, ALP_ORDER_ISOLAT_CAP_R_CAR}, + {0x0159, ALP_ORDER_ISOLAT_SMA_R_CAR}, + {0x015A, ALP_ORDER_ISOLAT_CAP_S_ACU}, + {0x015B, ALP_ORDER_ISOLAT_SMA_S_ACU}, + {0x015C, ALP_ORDER_ISOLAT_CAP_S_CIR}, + {0x015D, ALP_ORDER_ISOLAT_SMA_S_CIR}, + {0x015E, ALP_ORDER_ISOLAT_CAP_S_CED}, + {0x015F, ALP_ORDER_ISOLAT_SMA_S_CED}, + {0x0160, ALP_ORDER_ISOLAT_CAP_S_CAR}, + {0x0161, ALP_ORDER_ISOLAT_SMA_S_CAR}, + {0x0162, ALP_ORDER_ISOLAT_CAP_T_CED}, + {0x0163, ALP_ORDER_ISOLAT_SMA_T_CED}, + {0x0164, ALP_ORDER_ISOLAT_CAP_T_CAR}, + {0x0165, ALP_ORDER_ISOLAT_SMA_T_CAR}, + {0x0166, ALP_ORDER_ISOLAT_CAP_T_STR}, + {0x0167, ALP_ORDER_ISOLAT_SMA_T_STR}, + {0x0168, ALP_ORDER_ISOLAT_CAP_U_TIL}, + {0x0169, ALP_ORDER_ISOLAT_SMA_U_TIL}, + {0x016A, ALP_ORDER_ISOLAT_CAP_U_MAC}, + {0x016B, ALP_ORDER_ISOLAT_SMA_U_MAC}, + {0x016C, ALP_ORDER_ISOLAT_CAP_U_BRE}, + {0x016D, ALP_ORDER_ISOLAT_SMA_U_BRE}, + {0x016E, ALP_ORDER_ISOLAT_CAP_U_RIN}, + {0x016F, ALP_ORDER_ISOLAT_SMA_U_RIN}, + {0x0170, ALP_ORDER_ISOLAT_CAP_U_DOU}, + {0x0171, ALP_ORDER_ISOLAT_SMA_U_DOU}, + {0x0172, ALP_ORDER_ISOLAT_CAP_U_OGO}, + {0x0173, ALP_ORDER_ISOLAT_SMA_U_OGO}, + {0x0174, ALP_ORDER_ISOLAT_CAP_W_CIR}, + {0x0175, ALP_ORDER_ISOLAT_SMA_W_CIR}, + {0x0176, ALP_ORDER_ISOLAT_CAP_Y_CIR}, + {0x0177, ALP_ORDER_ISOLAT_SMA_Y_CIR}, + {0x0178, ALP_ORDER_ISOLAT_CAP_Y_DIA}, + {0x0179, ALP_ORDER_ISOLAT_CAP_Z_ACU}, + {0x017A, ALP_ORDER_ISOLAT_SMA_Z_ACU}, + {0x017B, ALP_ORDER_ISOLAT_CAP_Z_DOA}, + {0x017C, ALP_ORDER_ISOLAT_SMA_Z_DOA}, + {0x017D, ALP_ORDER_ISOLAT_CAP_Z_CAR}, + {0x017E, ALP_ORDER_ISOLAT_SMA_Z_CAR}, + {0x017F, ALP_ORDER_ISOLAT_SMA_LONG_S}, + {0x0180, ALP_ORDER_ISOLAT_SMA_B_STR}, + {0x0189, ALP_ORDER_ISOLAT_CAP_AFR_D}, + {0x0197, ALP_ORDER_ISOLAT_CAP_I_STR}, + {0x019A, ALP_ORDER_ISOLAT_SMA_L_BAR}, + {0x01A0, ALP_ORDER_ISOLAT_CAP_O_HOR}, + {0x01A1, ALP_ORDER_ISOLAT_SMA_O_HOR}, + {0x01AF, ALP_ORDER_ISOLAT_CAP_U_HOR}, + {0x01B0, ALP_ORDER_ISOLAT_SMA_U_HOR}, + {0x01B5, ALP_ORDER_ISOLAT_CAP_Z_STR}, + {0x01B6, ALP_ORDER_ISOLAT_SMA_Z_STR}, + {0x01C4, ALP_ORDER_ISOLAT_CAP_LIG_DZ_CAR}, + {0x01C5, ALP_ORDER_ISOLAT_CAP_D_SMA_Z_CAR}, + {0x01C6, ALP_ORDER_ISOLAT_SMA_LIG_DZ_CAR}, + {0x01C7, ALP_ORDER_ISOLAT_CAP_LIG_LJ}, + {0x01C8, ALP_ORDER_ISOLAT_CAP_L_SMA_J}, + {0x01C9, ALP_ORDER_ISOLAT_SMA_LIG_LJ}, + {0x01CA, ALP_ORDER_ISOLAT_CAP_LIG_NJ}, + {0x01CB, ALP_ORDER_ISOLAT_CAP_N_SMA_J}, + {0x01CC, ALP_ORDER_ISOLAT_SMA_LIG_NJ}, + {0x01CD, ALP_ORDER_ISOLAT_CAP_A_CAR}, + {0x01CE, ALP_ORDER_ISOLAT_SMA_A_CAR}, + {0x01CF, ALP_ORDER_ISOLAT_CAP_I_CAR}, + {0x01D0, ALP_ORDER_ISOLAT_SMA_I_CAR}, + {0x01D1, ALP_ORDER_ISOLAT_CAP_O_CAR}, + {0x01D2, ALP_ORDER_ISOLAT_SMA_O_CAR}, + {0x01D3, ALP_ORDER_ISOLAT_CAP_U_CAR}, + {0x01D4, ALP_ORDER_ISOLAT_SMA_U_CAR}, + {0x01D5, ALP_ORDER_ISOLAT_CAP_U_DIA_MAC}, + {0x01D6, ALP_ORDER_ISOLAT_SMA_U_DIA_MAC}, + {0x01D7, ALP_ORDER_ISOLAT_CAP_U_DIA_ACU}, + {0x01D8, ALP_ORDER_ISOLAT_SMA_U_DIA_ACU}, + {0x01D9, ALP_ORDER_ISOLAT_CAP_U_DIA_CAR}, + {0x01DA, ALP_ORDER_ISOLAT_SMA_U_DIA_CAR}, + {0x01DB, ALP_ORDER_ISOLAT_CAP_U_DIA_GRA}, + {0x01DC, ALP_ORDER_ISOLAT_SMA_U_DIA_GRA}, + {0x01DE, ALP_ORDER_ISOLAT_CAP_A_DIA_MAC}, + {0x01DF, ALP_ORDER_ISOLAT_SMA_A_DIA_MAC}, + {0x01E0, ALP_ORDER_ISOLAT_CAP_A_DOA_MAC}, + {0x01E1, ALP_ORDER_ISOLAT_SMA_A_DOA_MAC}, + {0x01E2, ALP_ORDER_ISOLAT_CAP_LIG_AE_MAC}, + {0x01E3, ALP_ORDER_ISOLAT_SMA_LIG_AE_MAC}, + {0x01E4, ALP_ORDER_ISOLAT_CAP_G_STR}, + {0x01E5, ALP_ORDER_ISOLAT_SMA_G_STR}, + {0x01E6, ALP_ORDER_ISOLAT_CAP_G_CAR}, + {0x01E7, ALP_ORDER_ISOLAT_SMA_G_CAR}, + {0x01E8, ALP_ORDER_ISOLAT_CAP_K_CAR}, + {0x01E9, ALP_ORDER_ISOLAT_SMA_K_CAR}, + {0x01EA, ALP_ORDER_ISOLAT_CAP_O_OGO}, + {0x01EB, ALP_ORDER_ISOLAT_SMA_O_OGO}, + {0x01EC, ALP_ORDER_ISOLAT_CAP_O_OGO_MAC}, + {0x01ED, ALP_ORDER_ISOLAT_SMA_O_OGO_MAC}, + {0x01F0, ALP_ORDER_ISOLAT_SMA_J_CAR}, + {0x01F1, ALP_ORDER_ISOLAT_CAP_LIG_DZ}, + {0x01F2, ALP_ORDER_ISOLAT_CAP_D_SMA_Z}, + {0x01F3, ALP_ORDER_ISOLAT_SMA_LIG_DZ}, + {0x01F4, ALP_ORDER_ISOLAT_CAP_G_ACU}, + {0x01F5, ALP_ORDER_ISOLAT_SMA_G_ACU}, + {0x01FA, ALP_ORDER_ISOLAT_CAP_A_RIN_ACU}, + {0x01FB, ALP_ORDER_ISOLAT_SMA_A_RIN_ACU}, + {0x01FC, ALP_ORDER_ISOLAT_CAP_LIG_AE_ACU}, + {0x01FD, ALP_ORDER_ISOLAT_SMA_LIG_AE_ACU}, + {0x01FE, ALP_ORDER_ISOLAT_CAP_O_STR_ACU}, + {0x01FF, ALP_ORDER_ISOLAT_SMA_O_STR_ACU}, + {0x0391, ALP_ORDER_GREEK_CAP_ALPHA}, + {0x0392, ALP_ORDER_GREEK_CAP_BETA}, + {0x0393, ALP_ORDER_GREEK_CAP_GAMMA}, + {0x0394, ALP_ORDER_GREEK_CAP_DELTA}, + {0x0395, ALP_ORDER_GREEK_CAP_EPSILON}, + {0x0396, ALP_ORDER_GREEK_CAP_ZETA}, + {0x0397, ALP_ORDER_GREEK_CAP_ETA}, + {0x0398, ALP_ORDER_GREEK_CAP_THETA}, + {0x0399, ALP_ORDER_GREEK_CAP_IOTA}, + {0x039A, ALP_ORDER_GREEK_CAP_KAPPA}, + {0x039B, ALP_ORDER_GREEK_CAP_LAMDA}, + {0x039C, ALP_ORDER_GREEK_CAP_MU}, + {0x039D, ALP_ORDER_GREEK_CAP_NU}, + {0x039E, ALP_ORDER_GREEK_CAP_XI}, + {0x039F, ALP_ORDER_GREEK_CAP_OMICRON}, + {0x03A0, ALP_ORDER_GREEK_CAP_PI}, + {0x03A1, ALP_ORDER_GREEK_CAP_RHO}, + {0x03A3, ALP_ORDER_GREEK_CAP_SIGMA}, + {0x03A4, ALP_ORDER_GREEK_CAP_TAU}, + {0x03A5, ALP_ORDER_GREEK_CAP_UPSILON}, + {0x03A6, ALP_ORDER_GREEK_CAP_PHI}, + {0x03A7, ALP_ORDER_GREEK_CAP_CHI}, + {0x03A8, ALP_ORDER_GREEK_CAP_PSI}, + {0x03A9, ALP_ORDER_GREEK_CAP_OMEGA}, + {0x03B1, ALP_ORDER_GREEK_SMA_ALPHA}, + {0x03B2, ALP_ORDER_GREEK_SMA_BETA}, + {0x03B3, ALP_ORDER_GREEK_SMA_GAMMA}, + {0x03B4, ALP_ORDER_GREEK_SMA_DELTA}, + {0x03B5, ALP_ORDER_GREEK_SMA_EPSILON}, + {0x03B6, ALP_ORDER_GREEK_SMA_ZETA}, + {0x03B7, ALP_ORDER_GREEK_SMA_ETA}, + {0x03B8, ALP_ORDER_GREEK_SMA_THETA}, + {0x03B9, ALP_ORDER_GREEK_SMA_IOTA}, + {0x03BA, ALP_ORDER_GREEK_SMA_KAPPA}, + {0x03BB, ALP_ORDER_GREEK_SMA_LAMDA}, + {0x03BC, ALP_ORDER_GREEK_SMA_MU}, + {0x03BD, ALP_ORDER_GREEK_SMA_NU}, + {0x03BE, ALP_ORDER_GREEK_SMA_XI}, + {0x03BF, ALP_ORDER_GREEK_SMA_OMICRON}, + {0x03C0, ALP_ORDER_GREEK_SMA_PI}, + {0x03C1, ALP_ORDER_GREEK_SMA_RHO}, + {0x03C3, ALP_ORDER_GREEK_SMA_SIGMA}, + {0x03C4, ALP_ORDER_GREEK_SMA_TAU}, + {0x03C5, ALP_ORDER_GREEK_SMA_UPSILON}, + {0x03C6, ALP_ORDER_GREEK_SMA_PHI}, + {0x03C7, ALP_ORDER_GREEK_SMA_CHI}, + {0x03C8, ALP_ORDER_GREEK_SMA_PSI}, + {0x03C9, ALP_ORDER_GREEK_SMA_OMEGA}, + {0x0410, ALP_ORDER_CYRILLIC_CAP_A}, + {0x0411, ALP_ORDER_CYRILLIC_CAP_BE}, + {0x0412, ALP_ORDER_CYRILLIC_CAP_VE}, + {0x0413, ALP_ORDER_CYRILLIC_CAP_GHE}, + {0x0414, ALP_ORDER_CYRILLIC_CAP_DE}, + {0x0415, ALP_ORDER_CYRILLIC_CAP_IE}, + {0x0416, ALP_ORDER_CYRILLIC_CAP_ZHE}, + {0x0417, ALP_ORDER_CYRILLIC_CAP_ZE}, + {0x0418, ALP_ORDER_CYRILLIC_CAP_I}, + {0x0419, ALP_ORDER_CYRILLIC_CAP_SHORT_I}, + {0x041A, ALP_ORDER_CYRILLIC_CAP_KA}, + {0x041B, ALP_ORDER_CYRILLIC_CAP_EL}, + {0x041C, ALP_ORDER_CYRILLIC_CAP_EM}, + {0x041D, ALP_ORDER_CYRILLIC_CAP_EN}, + {0x041E, ALP_ORDER_CYRILLIC_CAP_O}, + {0x041F, ALP_ORDER_CYRILLIC_CAP_PE}, + {0x0420, ALP_ORDER_CYRILLIC_CAP_ER}, + {0x0421, ALP_ORDER_CYRILLIC_CAP_ES}, + {0x0422, ALP_ORDER_CYRILLIC_CAP_TE}, + {0x0423, ALP_ORDER_CYRILLIC_CAP_U}, + {0x0424, ALP_ORDER_CYRILLIC_CAP_EF}, + {0x0425, ALP_ORDER_CYRILLIC_CAP_HA}, + {0x0426, ALP_ORDER_CYRILLIC_CAP_TSE}, + {0x0427, ALP_ORDER_CYRILLIC_CAP_CHE}, + {0x0428, ALP_ORDER_CYRILLIC_CAP_SHA}, + {0x0429, ALP_ORDER_CYRILLIC_CAP_SHCHA}, + {0x042A, ALP_ORDER_CYRILLIC_CAP_HARD_SIGN}, + {0x042B, ALP_ORDER_CYRILLIC_CAP_YERU}, + {0x042C, ALP_ORDER_CYRILLIC_CAP_SOFT_SIGN}, + {0x042D, ALP_ORDER_CYRILLIC_CAP_E}, + {0x042E, ALP_ORDER_CYRILLIC_CAP_YU}, + {0x042F, ALP_ORDER_CYRILLIC_CAP_YA}, + {0x0430, ALP_ORDER_CYRILLIC_SMA_A}, + {0x0431, ALP_ORDER_CYRILLIC_SMA_BE}, + {0x0432, ALP_ORDER_CYRILLIC_SMA_VE}, + {0x0433, ALP_ORDER_CYRILLIC_SMA_GHE}, + {0x0434, ALP_ORDER_CYRILLIC_SMA_DE}, + {0x0435, ALP_ORDER_CYRILLIC_SMA_IE}, + {0x0436, ALP_ORDER_CYRILLIC_SMA_ZHE}, + {0x0437, ALP_ORDER_CYRILLIC_SMA_ZE}, + {0x0438, ALP_ORDER_CYRILLIC_SMA_I}, + {0x0439, ALP_ORDER_CYRILLIC_SMA_SHORT_I}, + {0x043A, ALP_ORDER_CYRILLIC_SMA_KA}, + {0x043B, ALP_ORDER_CYRILLIC_SMA_EL}, + {0x043C, ALP_ORDER_CYRILLIC_SMA_EM}, + {0x043D, ALP_ORDER_CYRILLIC_SMA_EN}, + {0x043E, ALP_ORDER_CYRILLIC_SMA_O}, + {0x043F, ALP_ORDER_CYRILLIC_SMA_PE}, + {0x0440, ALP_ORDER_CYRILLIC_SMA_ER}, + {0x0441, ALP_ORDER_CYRILLIC_SMA_ES}, + {0x0442, ALP_ORDER_CYRILLIC_SMA_TE}, + {0x0443, ALP_ORDER_CYRILLIC_SMA_U}, + {0x0444, ALP_ORDER_CYRILLIC_SMA_EF}, + {0x0445, ALP_ORDER_CYRILLIC_SMA_HA}, + {0x0446, ALP_ORDER_CYRILLIC_SMA_TSE}, + {0x0447, ALP_ORDER_CYRILLIC_SMA_CHE}, + {0x0448, ALP_ORDER_CYRILLIC_SMA_SHA}, + {0x0449, ALP_ORDER_CYRILLIC_SMA_SHCHA}, + {0x044A, ALP_ORDER_CYRILLIC_SMA_HARD_SIGN}, + {0x044B, ALP_ORDER_CYRILLIC_SMA_YERU}, + {0x044C, ALP_ORDER_CYRILLIC_SMA_SOFT_SIGN}, + {0x044D, ALP_ORDER_CYRILLIC_SMA_E}, + {0x044E, ALP_ORDER_CYRILLIC_SMA_YU}, + {0x044F, ALP_ORDER_CYRILLIC_SMA_YA}, + + {0xFF65, ALP_ORDER_HALFWIDTH_KATAKANA_MIDDLE_DOT}, + {0xFF66, ALP_ORDER_HALFWIDTH_KATAKANA_WO}, + {0xFF67, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_A}, + {0xFF68, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_I}, + {0xFF69, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_U}, + {0xFF6A, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_E}, + {0xFF6B, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_O}, + {0xFF6C, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_YA}, + {0xFF6D, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_YU}, + {0xFF6E, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_YO}, + {0xFF6F, ALP_ORDER_HALFWIDTH_KATAKANA_SMALL_TU}, + {0xFF70, ALP_ORDER_HALFWIDTH_KATAKANA_HIRAGANA_SOUND_MARK}, + {0xFF71, ALP_ORDER_HALFWIDTH_KATAKANA_A}, + {0xFF72, ALP_ORDER_HALFWIDTH_KATAKANA_I}, + {0xFF73, ALP_ORDER_HALFWIDTH_KATAKANA_U}, + {0xFF74, ALP_ORDER_HALFWIDTH_KATAKANA_E}, + {0xFF75, ALP_ORDER_HALFWIDTH_KATAKANA_O}, + {0xFF76, ALP_ORDER_HALFWIDTH_KATAKANA_KA}, + {0xFF77, ALP_ORDER_HALFWIDTH_KATAKANA_KI}, + {0xFF78, ALP_ORDER_HALFWIDTH_KATAKANA_KU}, + {0xFF79, ALP_ORDER_HALFWIDTH_KATAKANA_KE}, + {0xFF7A, ALP_ORDER_HALFWIDTH_KATAKANA_KO}, + {0xFF7B, ALP_ORDER_HALFWIDTH_KATAKANA_SA}, + {0xFF7C, ALP_ORDER_HALFWIDTH_KATAKANA_SI}, + {0xFF7D, ALP_ORDER_HALFWIDTH_KATAKANA_SU}, + {0xFF7E, ALP_ORDER_HALFWIDTH_KATAKANA_SE}, + {0xFF7F, ALP_ORDER_HALFWIDTH_KATAKANA_SO}, + {0xFF80, ALP_ORDER_HALFWIDTH_KATAKANA_TA}, + {0xFF81, ALP_ORDER_HALFWIDTH_KATAKANA_TI}, + {0xFF82, ALP_ORDER_HALFWIDTH_KATAKANA_TU}, + {0xFF83, ALP_ORDER_HALFWIDTH_KATAKANA_TE}, + {0xFF84, ALP_ORDER_HALFWIDTH_KATAKANA_TO}, + {0xFF85, ALP_ORDER_HALFWIDTH_KATAKANA_NA}, + {0xFF86, ALP_ORDER_HALFWIDTH_KATAKANA_NI}, + {0xFF87, ALP_ORDER_HALFWIDTH_KATAKANA_NU}, + {0xFF88, ALP_ORDER_HALFWIDTH_KATAKANA_NE}, + {0xFF89, ALP_ORDER_HALFWIDTH_KATAKANA_NO}, + {0xFF8A, ALP_ORDER_HALFWIDTH_KATAKANA_HA}, + {0xFF8B, ALP_ORDER_HALFWIDTH_KATAKANA_HI}, + {0xFF8C, ALP_ORDER_HALFWIDTH_KATAKANA_HU}, + {0xFF8D, ALP_ORDER_HALFWIDTH_KATAKANA_HE}, + {0xFF8E, ALP_ORDER_HALFWIDTH_KATAKANA_HO}, + {0xFF8F, ALP_ORDER_HALFWIDTH_KATAKANA_MA}, + {0xFF90, ALP_ORDER_HALFWIDTH_KATAKANA_MI}, + {0xFF91, ALP_ORDER_HALFWIDTH_KATAKANA_MU}, + {0xFF92, ALP_ORDER_HALFWIDTH_KATAKANA_ME}, + {0xFF93, ALP_ORDER_HALFWIDTH_KATAKANA_MO}, + {0xFF94, ALP_ORDER_HALFWIDTH_KATAKANA_YA}, + {0xFF95, ALP_ORDER_HALFWIDTH_KATAKANA_YU}, + {0xFF96, ALP_ORDER_HALFWIDTH_KATAKANA_YO}, + {0xFF97, ALP_ORDER_HALFWIDTH_KATAKANA_RA}, + {0xFF98, ALP_ORDER_HALFWIDTH_KATAKANA_RI}, + {0xFF99, ALP_ORDER_HALFWIDTH_KATAKANA_RU}, + {0xFF9A, ALP_ORDER_HALFWIDTH_KATAKANA_RE}, + {0xFF9B, ALP_ORDER_HALFWIDTH_KATAKANA_RO}, + {0xFF9C, ALP_ORDER_HALFWIDTH_KATAKANA_WA}, + {0xFF9D, ALP_ORDER_HALFWIDTH_KATAKANA_N}, + {0xFF9E, ALP_ORDER_HALFWIDTH_KATAKANA_VOICED_SOUND_MARK}, + {0xFF9F, ALP_ORDER_HALFWIDTH_KATAKANA_SEMI_VOICED_SOUND_MARK} +}; + +static UnicodeToAlphaOrder *gpUnicodeToAlphaOrderTable = + (UnicodeToAlphaOrder *)garUnicodeToAlphaOrderTable; +static DB_UINT16 gLineCntInUniToAlpahOrderTable = + WSC_UNICODE_TO_ALPHA_ORDER_COUNT; + +int sc_strcmp_user1(const char *str1, const char *str2); +int sc_strcmp_user2(const char *str1, const char *str2); +int sc_strcmp_user3(const char *str1, const char *str2); + +int sc_strncmp_user1(const char *s1, const char *s2, int n); +int sc_strncmp_user2(const char *s1, const char *s2, int n); +int sc_strncmp_user3(const char *s1, const char *s2, int n); + +char *sc_strstr_user1(const char *haystack, const char *needle); +char *sc_strstr_user2(const char *haystack, const char *needle); +char *sc_strstr_user3(const char *haystack, const char *needle); + +char *sc_strchr_user1(const char *string, const char *pEnd, int ch); +char *sc_strchr_user2(const char *string, const char *pEnd, int ch); +char *sc_strchr_user3(const char *string, const char *pEnd, int ch); + +int AcWStrCaseCollate(const DB_UINT16 *ws1, const DB_UINT16 *ws2); +int AcWStrnCaseCollate(const DB_UINT16 *ws1, const DB_UINT16 *ws2, + size_t count); +DB_UINT16 *AcWcsCasestr(const DB_UINT16 *s1, const DB_UINT16 *s2); +size_t AcWcslen(const wchar_t *s); +DB_UINT16 AcWCharlwr(DB_UINT16 wchCode); + +/*! \breif compare the string pointed to by s1 to the string pointed to by s2 + ************************************ + * \param str1(in) : + * \param str2(in) : + ************************************ + * \return + ************************************ + * \note ³»ºÎ ¾Ë°í¸®Áò + * - 20061206 ÇÔ¼ö »ý¼º + * - TODO : + * Æ÷Æýà »ç¿ëÀÚ°¡ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù + *****************************************************************************/ +/* UNICODE¿¡ ´ëÇؼ Case InsensitiveÇÏ°Ô µ¿ÀÛ */ +/* sc_strdcmp(str1, str2);¿Í µ¿ÀÏÇÑ µ¿ÀÛ */ +int sc_strcmp_user1(const char *str1, const char *str2) +{ + return AcWStrCaseCollate((const DB_UINT16 *)str1, + (const DB_UINT16 *)str2); +} + +int sc_strcmp_user2(const char *str1, const char *str2) +{ + return AcWStrCaseCollate((const DB_UINT16 *)str1, + (const DB_UINT16 *)str2); +} + +int sc_strcmp_user3(const char *str1, const char *str2) +{ + return 1; +} + +/*****************************************************************************/ +/* sc_strncmp_user1 */ + +/*! \breif compare the string pointed to by s1 to the string pointed to by s2 + * in n- bytes + ************************************ + * \param s1(in) : + * \param s2(in) : + * \param n(in) : + ************************************ + * \return + ************************************ + * \note ³»ºÎ ¾Ë°í¸®Áò + * - 20061206 ÇÔ¼ö »ý¼º + * - TODO : + * Æ÷Æýà »ç¿ëÀÚ°¡ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù + *****************************************************************************/ +/* UNICODE¿¡ ´ëÇؼ Case InsensitiveÇÏ°Ô µ¿ÀÛ */ +/* sc_strndcmp(s1, s2, n)¿Í µ¿ÀÏÇÑ µ¿ÀÛ */ +int sc_strncmp_user1(const char *s1, const char *s2, int n) +{ + return AcWStrnCaseCollate((const DB_UINT16 *)s1, (const DB_UINT16 *)s2, + n); +} + +int sc_strncmp_user2(const char *s1, const char *s2, int n) +{ + return AcWStrnCaseCollate((const DB_UINT16 *)s1, (const DB_UINT16 *)s2, + n); +} + +int sc_strncmp_user3(const char *s1, const char *s2, int n) +{ + return 1; +} + +/*****************************************************************************/ +/*! sc_strchr_user1 */ +/*! \breif locate the first occurrence of ch in the string + ************************************ + * \param string(in): + * \param pEnd(in) : + * \param ch(in) : + ************************************ + * \return + ************************************ + * \note ³»ºÎ ¾Ë°í¸®Áò + * like operation¿¡¼ »ç¿ëµÊ + * - 20061206 ÇÔ¼ö »ý¼º + * - TODO : + * Æ÷Æýà »ç¿ëÀÚ°¡ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù + **********************************************************************/ +/* UNICODE¿¡ ´ëÇؼ Case InsensitiveÇÏ°Ô µ¿ÀÛ */ +char *sc_strchr_user1(const char *string, const char *pEnd, int ch) +{ + DB_UINT16 *wstr1; + DB_UINT16 *tmp_wstr; + wint_t wstr2 = towupper((DB_UINT16)pEnd); + int string_len; + DB_WCHAR *ptr; + + if (wstr2 == (DB_UINT16)'\0') + return NULL; + + string_len = wcslen((wchar_t *) string); + + wstr1 = (DB_UINT16 *)malloc(sizeof(DB_UINT16)*(string_len + 1)); + if (!wstr1) + return NULL; + + memset(wstr1, 0x00, sizeof(DB_UINT16)*(string_len + 1)); + + ptr = (DB_WCHAR *) string; + tmp_wstr = wstr1; + for (; *ptr; ++ptr, ++tmp_wstr) + *tmp_wstr = (DB_UINT16)*ptr; + tmp_wstr = wstr1; + + for (; *tmp_wstr; tmp_wstr++, string++) { + if (towupper(*tmp_wstr) == wstr2) { + free(wstr1); + + return (char *)string; + } + } + + free(wstr1); + + return NULL; +} + +char *sc_strchr_user2(const char *string, const char *pEnd, int ch) +{ + return NULL; +} + +char *sc_strchr_user3(const char *string, const char *pEnd, int ch) +{ + return NULL; +} + +/* End of JINKI_COLLATION */ + +char *sc_strstr_user1(const char *haystack, const char *needle) +{ + return (char *)AcWcsCasestr((DB_UINT16 *)haystack, (DB_UINT16 *)needle); +} + +char *sc_strstr_user2(const char *haystack, const char *needle) +{ + return NULL; +} + +char *sc_strstr_user3(const char *haystack, const char *needle) +{ + return NULL; +} + +/* AcWStrColl.c AcWStrColl.c AcWStrColl.c AcWStrColl.c + AcWStrColl.c AcWStrColl.c AcWStrColl.c AcWStrColl.c */ + +int +__CmpUnicodeToAlphaOrder(const UnicodeToAlphaOrder *pEle1, + const UnicodeToAlphaOrder *pEle2) +{ + return ((pEle1->wchCode) - (pEle2->wchCode)); +} + +DB_UINT16 __GetAlphabeticalCaseOrderByUnicode(DB_UINT16 wchCode) +{ + UnicodeToAlphaOrder key = { 0 }; + UnicodeToAlphaOrder *pFindElement = NULL; + + if ((wchCode >= 0x0041 && wchCode <= 0x005A) + || (wchCode >= 0x00C0 && wchCode <= 0x00D6) || (wchCode >= 0x00D8 + && wchCode <= + 0x00DD) + || (wchCode >= 0x0391 && wchCode <= 0x03A9) || (wchCode >= 0x0410 + && wchCode <= + 0x042F)) { + wchCode = wchCode + WSC_CAP_TO_SMALL_OFFSET; + } + + key.wchCode = wchCode; + + pFindElement = + bsearch(&key, gpUnicodeToAlphaOrderTable, + gLineCntInUniToAlpahOrderTable, sizeof(UnicodeToAlphaOrder), + (int (*)(const void *, const void *)) + __CmpUnicodeToAlphaOrder); + + if (pFindElement != NULL) + return pFindElement->uAlphabeticalOrder; + + return ALP_ORDER_UNDEFINED_WEIGHT; +} + +/** + * @purpose : This function compares two strings in alphabetical order without + Case-Sensitive. A collation table that is set by + SetUnicodeToAlphaOrederTable is used to compare two strings + ( To Convert Lowcase ). If either char in compared two strings + has not a corresponding alphabetical oreder, comparison is done + by unicode order for these two characters. + * @param : ws1[In] : Null-terminated strings to compare. + ws2[In]: Null-terminated strings to compare. + * @return : This function returns a value indicating the relationship of + string1 to string2, as follows. + Return Value Relationship of string1 to string2 + < 0 string1 less than string2 + 0 string1 identical to string2 + > 0 string1 greater than string2 + * @author: Jayoun Lee + */ + +int AcWStrCaseCollate(const DB_UINT16 *ws1, const DB_UINT16 *ws2) +{ + int ret = 0; + DB_UINT16 nCmp1, nCmp2; + + if (!((int)ws1 & 0x1) && !((int)ws2 & 0x1)) { + /* 2-byte aligned */ + + nCmp1 = __GetAlphabeticalCaseOrderByUnicode(*ws1); + nCmp2 = __GetAlphabeticalCaseOrderByUnicode(*ws2); + + /* SYKim : The one which is not defined in the table is ALWAYS + have larger number than the one which is defined in the table */ + if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = *ws1; + nCmp2 = *ws2; + } else if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 != ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 1; + nCmp2 = 0; + } else if ((nCmp1 != ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 0; + nCmp2 = 1; + } + + while (((ret = (int)(nCmp1 - nCmp2)) == 0) && *ws2) { + + ++ws1; + ++ws2; + nCmp1 = __GetAlphabeticalCaseOrderByUnicode(*ws1); + nCmp2 = __GetAlphabeticalCaseOrderByUnicode(*ws2); + + if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + || (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = *ws1; + nCmp2 = *ws2; + } + } + } else { + /* not-aligned, byte to byte approach - slow */ + char *pc1 = (char *)ws1; + char *pc2 = (char *)ws2; + + while (!ret && (*pc2 || *(pc2 + 1))) { + DB_UINT16 wc1 = + (*(pc1 + 1) << 8) + ((*pc1 >> 8) & 0xFF); + DB_UINT16 wc2 = + (*(pc2 + 1) << 8) + ((*pc2 >> 8) & 0xFF); + + nCmp1 = __GetAlphabeticalCaseOrderByUnicode(wc1); + nCmp2 = __GetAlphabeticalCaseOrderByUnicode(wc2); + + /*SYKim : The one which is not defined in the table is + ALWAYS have larger number than the one which is defined + in the table. */ + if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = wc1; + nCmp2 = wc2; + } else if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 != ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 1; + nCmp2 = 0; + } else if ((nCmp1 != ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 0; + nCmp2 = 1; + } + + ret = nCmp1 - nCmp2; + + pc1 += 2; + pc2 += 2; + } + } + + return (ret); +} + + /* + * @purpose : This function compares two strings in alphabetical order without + Case-Sensitive. A collation table that is set by + SetUnicodeToAlphaOrederTable is used to compare two strings + ( To Convert Lowcase ). If either char in compared two strings + has not a corresponding alphabetical order, comparison is done + by unicode order for these two characters. + * @param : ws1[In] : Null-terminated strings to compare. + ws2[In]: Null-terminated strings to compare. + count[In]: the initial number of characters to compare + * @return : This function returns a value indicating the relationship of + string1 to string2, as follows. + Return Value Relationship of string1 to string2 + < 0 string1 less than string2 + 0 string1 identical to string2 + > 0 string1 greater than string2 + * @author: Jayoun Lee + */ + +int AcWStrnCaseCollate(const DB_UINT16 *ws1, const DB_UINT16 *ws2, size_t count) +{ + DB_UINT16 nCmp1, nCmp2; + + if (!count) + return 0; + + if (!((DB_UINT16)ws1 & 0x1) && !((DB_UINT16)ws2 & 0x1)) { + /* 2-byte aligned */ + nCmp1 = __GetAlphabeticalCaseOrderByUnicode(*ws1); + nCmp2 = __GetAlphabeticalCaseOrderByUnicode(*ws2); + + /* SYKim : The one which is not defined in the table is ALWAYS + have larger number than the one which is defined in the table. */ + if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = *ws1; + nCmp2 = *ws2; + } else if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 != ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 1; + nCmp2 = 0; + } else if ((nCmp1 != ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 0; + nCmp2 = 1; + } + + while (--count && *ws1 && nCmp1 == nCmp2) { + ws1++; + ws2++; + + nCmp1 = __GetAlphabeticalCaseOrderByUnicode(*ws1); + nCmp2 = __GetAlphabeticalCaseOrderByUnicode(*ws2); + + /* SYKim : The one which is not defined in the table is + ALWAYS have larger number than the one which is + defined in the table. */ + if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = *ws1; + nCmp2 = *ws2; + } else if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 != ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 1; + nCmp2 = 0; + } else if ((nCmp1 != ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 0; + nCmp2 = 1; + } + } + + return (int)(nCmp1 - nCmp2); + } else { + /* not-aligned, byte to byte approach - slow */ + char *pc1 = (char *)ws1; + char *pc2 = (char *)ws2; + + while (--count && (*pc1 || *pc1 + 1)) { + DB_UINT16 wc1 = + (*(pc1 + 1) << 8) + ((*pc1 >> 8) & 0xFF); + DB_UINT16 wc2 = + (*(pc2 + 1) << 8) + ((*pc2 >> 8) & 0xFF); + + nCmp1 = __GetAlphabeticalCaseOrderByUnicode(wc1); + nCmp2 = __GetAlphabeticalCaseOrderByUnicode(wc2); + + /* SYKim : The one which is not defined in the table is + ALWAYS have larger number than the one which is defined + in the table.*/ + + if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = wc1; + nCmp2 = wc2; + } else if ((nCmp1 == ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 != ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 1; + nCmp2 = 0; + } else if ((nCmp1 != ALP_ORDER_UNDEFINED_WEIGHT) + && (nCmp2 == ALP_ORDER_UNDEFINED_WEIGHT)) { + nCmp1 = 0; + nCmp2 = 1; + } + if (nCmp1 != nCmp2) { + return ((int)nCmp1 - nCmp2); + } + pc1 += 2; + pc2 += 2; + } + return 0; + } +} + +DB_UINT16 *AcWcsCasestr(const DB_UINT16 *s1, const DB_UINT16 *s2) +{ + const DB_UINT16 *p; + const DB_UINT16 *q; + const DB_UINT16 *r; + + if (!*s2) { + /* LINTED interface specification */ + return (DB_UINT16 *)s1; + } + /*vodakk upgrade 2005.10.03 */ + if (AcWcslen((wchar_t *)s1) < AcWcslen((wchar_t *)s2)) + return NULL; + + p = s1; + q = s2; + while (*p) { + q = s2; + r = p; + while (*q) { + if (AcWCharlwr(*r) != AcWCharlwr(*q)) + break; + q++; + r++; + } + if (!*q) { + /* LINTED interface specification */ + return (DB_UINT16 *)p; + } + p++; + } + return NULL; +} + +size_t AcWcslen(const wchar_t *s) +{ + if (!((int)s & 0x1)) { + /* 2-byte aligned */ + wchar_t *temp = (wchar_t *)s; + + while (*temp++) { + /* DO NOTHING */ ; + } + + return ((size_t) (temp - s - 1)); + } else { + /* not-aligned, byte to byte approach - slow */ + unsigned char *temp = (unsigned char *)s; + + while (*temp || *(temp + 1)) { + temp += 2; + } + return ((size_t) (temp - (unsigned char *)s) / 2); + } +} + +DB_UINT16 AcWCharlwr(DB_UINT16 wchCode) +{ + if (wchCode >= 0x0041 && wchCode <= 0x005A) { + wchCode = wchCode + WSC_CAP_TO_SMALL_OFFSET; + } + return wchCode; +} + +int dbutil_collation(void *data, int l1, const void *s1, int l2, const void *s2) +{ + int i = 0, j; + char *str1; + char *str2; + str1 = (char *)calloc(1, l1 + 2); + str2 = (char *)calloc(1, l2 + 2); + memcpy(str1, s1, l1); + memcpy(str2, s2, l2); + i = AcWStrCaseCollate((const DB_UINT16 *)str1, (const DB_UINT16 *)str2); + free(str1); + free(str2); + return i; +} |