/* * libthai - Thai Language Support Library * Copyright (C) 2001 Theppitak Karoonboonyanan * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* * wtt.h - WTT I/O implementation * Created: 2001-08-04 */ #ifndef THAI_WTT_H #define THAI_WTT_H /** * @file wtt.h * @brief WTT I/O implementation * * WTT stands for Wing Tuk Tee (in Thai, Runs everywhere). It was defined by * TACTIS (Thai API Consortium/Thai Industrial Standard) in the NECTEC Thai * Software Standard Project (1989-1991), and later endorsed by Thai * Industrial Standard Institute (TISI) as TIS 1566-2541 in 1998. * * WTT classifies Thai chracter(TIS-620) into 17 types below. * *
 * ITYPE  VALUE SHORT_DESCRIPTION
 * CTRL    0    control characters
 * NON     1    non composible characters
 * CONS    2    consonants
 * LV      3    leading vowels
 * FV1     4    following vowels 1
 * FV2     5    following vowels 2
 * FV3     6    following vowels 3
 * BV1     7    below vowels 1
 * BV2     8    below vowels 2
 * BD      9    below diacritics
 * TONE    10   tonemarks
 * AD1     11   above diacritics 1
 * AD2     12   above diacritics 2
 * AD3     13   above diacritics 3
 * AV1     14   above vowels 1
 * AV2     15   above vowels 2
 * AV3     16   above vowels 3
 * 
* * Functions in thctype.h do basic character classifications while * wtt.h classifies a chracter in detail. Please refer to the reference. * * TACio_op() checks how to compose two given chracters. The possiblities are * Composible (CP), Non-display (XC), Accept (AC), Reject (RJ) and Strict * Reject (SR). The values of CP, XC, AC, RJ and SR are difined in wtt.h. * And their meanings are: * * @li CP : second character is displayed in the same cell as the first, * also implies an acceptance. * @li XC : Do nothing. * @li AC : Display second character in the next cell. * @li RJ : Discard second character. * @li SR : Reject second character only in strict mode. * */ #include BEGIN_CDECL /** * @brief Classification of characters in TIS620 according to WTT */ typedef enum { CTRL = 0, /**< control chars */ NON = 1, /**< non composibles */ CONS = 2, /**< consonants */ LV = 3, /**< leading vowels */ FV1 = 4, /**< following vowels 1 */ FV2 = 5, /**< following vowels 2 */ FV3 = 6, /**< following vowels 3 */ BV1 = 7, /**< below vowels 1 */ BV2 = 8, /**< below vowels 2 */ BD = 9, /**< below diacritics */ TONE = 10, /**< tonemarks */ AD1 = 11, /**< above diacritics 1 */ AD2 = 12, /**< above diacritics 2 */ AD3 = 13, /**< above diacritics 3 */ AV1 = 14, /**< above vowels 1 */ AV2 = 15, /**< above vowels 2 */ AV3 = 16 /**< above vowels 3 */ } WTTClass; /** * @brief Composibility checking tables */ typedef enum { CP = 1, /**< COMPOSIBLE - following char is displayed in the same cell as leading char, also implies ACCEPT */ XC = 2, /**< Non-display */ AC = 3, /**< ACCEPT - display the following char in the next cell */ RJ = 4, /**< REJECT - discard that following char, ignore it */ SR = 5 /**< STRICT REJECT - REJECT only if in strict mode */ } WTTOp; extern WTTClass TACchtype(thchar_t c); extern WTTOp TACio_op(thchar_t c1, thchar_t c2); /* * implementation parts */ extern short TACchtype_[256]; extern short TACio_op_[17][17]; #define TACchtype(c) (TACchtype_[c]) #define TACio_op(c1, c2) (TACio_op_[TACchtype(c1)][TACchtype(c2)]) END_CDECL #endif /* THAI_WTT_H */