t_ctype.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved.
  15.   Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved.
  16.   Permission to use, copy, modify, distribute and sell this software
  17.    and its documentation for any purpose is hereby granted without fee,
  18.    provided that the above copyright notice appear in all copies.
  19.    Smaphan Raruenrom and Pruet Boonma makes no representations about 
  20.    the suitability of this software for any purpose.  It is provided
  21.     "as is" without express or implied warranty.
  22. */
  23. /*
  24.   LC_COLLATE category + Level information
  25. */
  26. #ifndef _t_ctype_h
  27. #define _t_ctype_h
  28. typedef unsigned char tchar;
  29. #define TOT_LEVELS 5
  30. #define LAST_LEVEL 4  /* TOT_LEVELS - 1 */
  31. #define IGNORE 0
  32. /* level 1 symbols & order */
  33. enum l1_symbols {
  34.     L1_08 = TOT_LEVELS,
  35.     L1_18,
  36.     L1_28,
  37.     L1_38,
  38.     L1_48,
  39.     L1_58,
  40.     L1_68,
  41.     L1_78,
  42.     L1_88,
  43.     L1_98,
  44.     L1_A8,
  45.     L1_B8,
  46.     L1_C8,
  47.     L1_D8,
  48.     L1_E8,
  49.     L1_F8,
  50.     L1_G8,
  51.     L1_H8,
  52.     L1_I8,
  53.     L1_J8,
  54.     L1_K8,
  55.     L1_L8,
  56.     L1_M8,
  57.     L1_N8,
  58.     L1_O8,
  59.     L1_P8,
  60.     L1_Q8,
  61.     L1_R8,
  62.     L1_S8,
  63.     L1_T8,
  64.     L1_U8,
  65.     L1_V8,
  66.     L1_W8,
  67.     L1_X8,
  68.     L1_Y8,
  69.     L1_Z8,
  70.     L1_KO_KAI,
  71.     L1_KHO_KHAI,
  72.     L1_KHO_KHUAT,
  73.     L1_KHO_KHWAI,
  74.     L1_KHO_KHON,
  75.     L1_KHO_RAKHANG,
  76.     L1_NGO_NGU,
  77.     L1_CHO_CHAN,
  78.     L1_CHO_CHING,
  79.     L1_CHO_CHANG,
  80.     L1_SO_SO,
  81.     L1_CHO_CHOE,
  82.     L1_YO_YING,
  83.     L1_DO_CHADA,
  84.     L1_TO_PATAK,
  85.     L1_THO_THAN,
  86.     L1_THO_NANGMONTHO,
  87.     L1_THO_PHUTHAO,
  88.     L1_NO_NEN,
  89.     L1_DO_DEK,
  90.     L1_TO_TAO,
  91.     L1_THO_THUNG,
  92.     L1_THO_THAHAN,
  93.     L1_THO_THONG,
  94.     L1_NO_NU,
  95.     L1_BO_BAIMAI,
  96.     L1_PO_PLA,
  97.     L1_PHO_PHUNG,
  98.     L1_FO_FA,
  99.     L1_PHO_PHAN,
  100.     L1_FO_FAN,
  101.     L1_PHO_SAMPHAO,
  102.     L1_MO_MA,
  103.     L1_YO_YAK,
  104.     L1_RO_RUA,
  105.     L1_RU,
  106.     L1_LO_LING,
  107.     L1_LU,
  108.     L1_WO_WAEN,
  109.     L1_SO_SALA,
  110.     L1_SO_RUSI,
  111.     L1_SO_SUA,
  112.     L1_HO_HIP,
  113.     L1_LO_CHULA,
  114.     L1_O_ANG,
  115.     L1_HO_NOKHUK,
  116.     L1_NKHIT,
  117.     L1_SARA_A,
  118.     L1_MAI_HAN_AKAT,
  119.     L1_SARA_AA,
  120.     L1_SARA_AM,
  121.     L1_SARA_I,
  122.     L1_SARA_II,
  123.     L1_SARA_UE,
  124.     L1_SARA_UEE,
  125.     L1_SARA_U,
  126.     L1_SARA_UU,
  127.     L1_SARA_E,
  128.     L1_SARA_AE,
  129.     L1_SARA_O,
  130.     L1_SARA_AI_MAIMUAN,
  131.     L1_SARA_AI_MAIMALAI
  132. };
  133. /* level 2 symbols & order */
  134. enum l2_symbols {
  135.     L2_BLANK = TOT_LEVELS,
  136.     L2_THAII,
  137.     L2_YAMAK,
  138.     L2_PINTHU,
  139.     L2_GARAN,
  140.     L2_TYKHU,
  141.     L2_TONE1,
  142.     L2_TONE2,
  143.     L2_TONE3,
  144.     L2_TONE4
  145. };
  146. /* level 3 symbols & order */
  147. enum l3_symbols {
  148. L3_BLANK = TOT_LEVELS,
  149.     L3_SPACE,
  150.     L3_NB_SACE,
  151.     L3_LOW_LINE,
  152.     L3_HYPHEN,
  153.     L3_COMMA,
  154.     L3_SEMICOLON,
  155.     L3_COLON,
  156.     L3_EXCLAMATION,
  157.     L3_QUESTION,
  158.     L3_SOLIDUS,
  159.     L3_FULL_STOP,
  160.     L3_PAIYAN_NOI,
  161.     L3_MAI_YAMOK,
  162.     L3_GRAVE,
  163.     L3_CIRCUMFLEX,
  164.     L3_TILDE,
  165.     L3_APOSTROPHE,
  166.     L3_QUOTATION,
  167.     L3_L_PARANTHESIS,
  168.     L3_L_BRACKET,
  169.     L3_L_BRACE,
  170.     L3_R_BRACE,
  171.     L3_R_BRACKET,
  172.     L3_R_PARENTHESIS,
  173.     L3_AT,
  174.     L3_BAHT,
  175.     L3_DOLLAR,
  176.     L3_FONGMAN,
  177.     L3_ANGKHANKHU,
  178.     L3_KHOMUT,
  179.     L3_ASTERISK,
  180.     L3_BK_SOLIDUS,
  181.     L3_AMPERSAND,
  182.     L3_NUMBER,
  183.     L3_PERCENT,
  184.     L3_PLUS,
  185.     L3_LESS_THAN,
  186.     L3_EQUAL,
  187.     L3_GREATER_THAN,
  188.     L3_V_LINE
  189. };
  190. /* level 4 symbols & order */
  191. enum l4_symbols {
  192.     L4_BLANK = TOT_LEVELS,
  193.     L4_MIN,
  194.     L4_CAP,
  195.     L4_EXT
  196. };
  197. enum level_symbols {
  198.     L_UPRUPR = TOT_LEVELS,
  199.     L_UPPER,
  200.     L_MIDDLE,
  201.     L_LOWER
  202. };
  203. #define _is(c) (t_ctype[(c)][LAST_LEVEL])
  204. #define _level 8
  205. #define _consnt 16
  206. #define _ldvowel 32
  207. #define _fllwvowel 64
  208. #define _uprvowel 128
  209. #define _lwrvowel 256
  210. #define _tone 512
  211. #define _diacrt1 1024
  212. #define _diacrt2 2048
  213. #define _combine 4096
  214. #define _stone 8192
  215. #define _tdig 16384
  216. #define _rearvowel (_fllwvowel | _uprvowel | _lwrvowel)
  217. #define _diacrt (_diacrt1 | _diacrt2)
  218. #define levelof(c) ( _is(c) & _level )
  219. #define isthai(c) ( (c) >= 128 )
  220. #define istalpha(c) ( _is(c) & (_consnt|_ldvowel|_rearvowel|
  221.                          _tone|_diacrt1|_diacrt2) )
  222. #define isconsnt(c) ( _is(c) & _consnt )
  223. #define isldvowel(c) ( _is(c) & _ldvowel )
  224. #define isfllwvowel(c) ( _is(c) & _fllwvowel )
  225. #define ismidvowel(c) ( _is(c) & (_ldvowel|_fllwvowel) )
  226. #define isuprvowel(c) ( _is(c) & _uprvowel )
  227. #define islwrvowel(c) ( _is(c) & _lwrvowel )
  228. #define isuprlwrvowel(c) ( _is(c) & (_lwrvowel | _uprvowel))
  229. #define isrearvowel(c) ( _is(c) & _rearvowel )
  230. #define isvowel(c)      ( _is(c) & (_ldvowel|_rearvowel) )
  231. #define istone(c)       ( _is(c) & _tone )
  232. #define isunldable(c)   ( _is(c) & (_rearvowel|_tone|_diacrt1|_diacrt2) )
  233. #define iscombinable(c) ( _is(c) & _combine )
  234. #define istdigit(c)     ( _is(c) & _tdig )
  235. #define isstone(c)      ( _is(c) & _stone )
  236. #define isdiacrt1(c) ( _is(c) & _diacrt1)
  237. #define isdiacrt2(c) ( _is(c) & _diacrt2)
  238. #define isdiacrt(c) ( _is(c) & _diacrt) 
  239. /* Function prototype called by sql/field.cc */
  240. void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length);
  241. #endif