update m_table_index name
[platform/upstream/libpinyin.git] / src / storage / chewing_key.h
1 /* 
2  *  libpinyin
3  *  Library to deal with pinyin.
4  *  
5  *  Copyright (C) 2011 Peng Wu <alexepico@gmail.com>
6  *  
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  * 
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *  
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21
22 #ifndef CHEWING_KEY_H
23 #define CHEWING_KEY_H
24
25 #include <glib.h>
26
27 /** @file chewing_key.h
28  *  @brief the definitions of chewing key related classes and structs.
29  */
30
31 namespace pinyin{
32 /**
33  * @brief enums of chewing initial element.
34  */
35 enum ChewingInitial
36 {
37     CHEWING_ZERO_INITIAL = 0,  /* zero initial. */
38     CHEWING_B  = 1,            /* "ㄅ". */
39     CHEWING_C  = 2,            /* "ㄘ". */
40     CHEWING_CH = 3,            /* "ㄔ". */
41     CHEWING_D  = 4,            /* "ㄉ". */
42     CHEWING_F  = 5,            /* "ㄈ". */
43     CHEWING_H  = 6,            /* "ㄏ". */
44     CHEWING_G  = 7,            /* "ㄍ". */
45     CHEWING_K  = 8,            /* "ㄎ". */
46     CHEWING_J  = 9,            /* "ㄐ". */
47     CHEWING_M  = 10,           /* "ㄇ". */
48     CHEWING_N  = 11,           /* "ㄋ". */
49     CHEWING_L  = 12,           /* "ㄌ". */
50     CHEWING_R  = 13,           /* "ㄖ". */
51     CHEWING_P  = 14,           /* "ㄆ". */
52     CHEWING_Q  = 15,           /* "ㄑ". */
53     CHEWING_S  = 16,           /* "ㄙ". */
54     CHEWING_SH = 17,           /* "ㄕ". */
55     CHEWING_T  = 18,           /* "ㄊ". */
56     PINYIN_W   = 19,           /* Invalid Chewing. */
57     CHEWING_X  = 20,           /* "ㄒ". */
58     PINYIN_Y   = 21,           /* Invalid Chewing. */
59     CHEWING_Z  = 22,           /* "ㄗ". */
60     CHEWING_ZH = 23,           /* "ㄓ". */
61     CHEWING_LAST_INITIAL = CHEWING_ZH,
62     CHEWING_NUMBER_OF_INITIALS = CHEWING_LAST_INITIAL + 1
63 };
64
65
66 /**
67  * @brief enums of chewing middle element.
68  */
69
70 enum ChewingMiddle
71 {
72     CHEWING_ZERO_MIDDLE = 0,   /* zero middle. */
73     CHEWING_I  = 1,            /* "ㄧ". */
74     CHEWING_U  = 2,            /* "ㄨ". */
75     CHEWING_V  = 3,            /* "ㄩ". */
76     CHEWING_LAST_MIDDLE = CHEWING_V,
77     CHEWING_NUMBER_OF_MIDDLES = CHEWING_LAST_MIDDLE + 1
78 };
79
80 /**
81  * @brief enums of chewing final element.
82  */
83 enum ChewingFinal
84 {
85     CHEWING_ZERO_FINAL = 0,   /* zero final */
86     CHEWING_A    = 1,         /* "ㄚ". */
87     CHEWING_AI   = 2,         /* "ㄞ". */
88     CHEWING_AN   = 3,         /* "ㄢ". */
89     CHEWING_ANG  = 4,         /* "ㄤ". */
90     CHEWING_AO   = 5,         /* "ㄠ". */
91     CHEWING_E    = 6,         /* "ㄝ" and "ㄜ". */
92     INVALID_EA   = 7,         /* Invalid Pinyin/Chewing. */
93     CHEWING_EI   = 8,         /* "ㄟ". */
94     CHEWING_EN   = 9,         /* "ㄣ". */
95     CHEWING_ENG  = 10,        /* "ㄥ". */
96     CHEWING_ER   = 11,        /* "ㄦ". */
97     CHEWING_NG   = 12,        /* "ㄫ". */
98     CHEWING_O    = 13,        /* "ㄛ". */
99     PINYIN_ONG   = 14,        /* "ueng". */
100     CHEWING_OU   = 15,        /* "ㄡ". */
101     PINYIN_IN    = 16,        /* "ien". */
102     PINYIN_ING   = 17,        /* "ieng". */
103     CHEWING_LAST_FINAL = PINYIN_ING,
104     CHEWING_NUMBER_OF_FINALS = CHEWING_LAST_FINAL + 1
105 };
106
107
108 /**
109  * @brief enums of chewing tone element.
110  */
111 enum ChewingTone
112 {
113     CHEWING_ZERO_TONE = 0,     /* zero tone. */
114     CHEWING_1  = 1,
115     CHEWING_2  = 2,
116     CHEWING_3  = 3,
117     CHEWING_4  = 4,
118     CHEWING_5  = 5,
119     CHEWING_LAST_TONE = CHEWING_5,
120     CHEWING_NUMBER_OF_TONES = CHEWING_LAST_TONE + 1
121 };
122
123 /**
124  * @brief enums of Double Pinyin Schemes.
125  */
126 enum DoublePinyinScheme
127 {
128     DOUBLE_PINYIN_ZRM        = 1,
129     DOUBLE_PINYIN_MS         = 2,
130     DOUBLE_PINYIN_ZIGUANG    = 3,
131     DOUBLE_PINYIN_ABC        = 4,
132     DOUBLE_PINYIN_PYJJ       = 6,
133     DOUBLE_PINYIN_XHE        = 7,
134     DOUBLE_PINYIN_CUSTOMIZED = 30,        /* for user's keyboard */
135     DOUBLE_PINYIN_DEFAULT    = DOUBLE_PINYIN_MS
136 };
137
138 /**
139  * @brief enums of Chewing Schemes.
140  */
141 enum ChewingScheme
142 {
143     CHEWING_STANDARD = 1,
144     CHEWING_HSU      = 2,
145     CHEWING_IBM      = 3,
146     CHEWING_GIN_YIEH = 4,
147     CHEWING_ET       = 5,
148     CHEWING_ET26     = 6,
149     CHEWING_DEFAULT  = CHEWING_STANDARD
150 };
151
152
153 /** Note: The parsed pinyins are stored in the following two
154  *          GArrays to speed up chewing table lookup.
155  *    As the chewing large table only contains information of struct ChewingKey.
156  */
157
158 struct ChewingKey
159 {
160     guint16 m_initial : 5;
161     guint16 m_middle  : 2;
162     guint16 m_final   : 5;
163     guint16 m_tone    : 3;
164
165     ChewingKey() {
166         m_initial = CHEWING_ZERO_INITIAL;
167         m_middle  = CHEWING_ZERO_MIDDLE;
168         m_final   = CHEWING_ZERO_FINAL;
169         m_tone    = CHEWING_ZERO_TONE;
170     }
171
172     ChewingKey(ChewingInitial initial, ChewingMiddle middle,
173                ChewingFinal final) {
174         m_initial = initial;
175         m_middle = middle;
176         m_final = final;
177         m_tone = CHEWING_ZERO_TONE;
178     }
179 };
180
181 struct ChewingKeyRest
182 {
183     guint16 m_table_index;         /* the index in pinyin parser table. */
184     guint16 m_raw_begin;           /* the begin of the raw input. */
185     guint16 m_raw_end;             /* the end of the raw input. */
186
187     ChewingKeyRest() {
188         /* the 0th item in pinyin parser table is reserved for invalid. */
189         m_table_index = 0;
190         m_raw_begin = 0;
191         m_raw_end = 0;
192     }
193
194     const char * get_pinyin_string();
195     const char * get_chewing_string();
196 };
197
198 };
199
200 #endif