1 /***************************************************************************
2  *   Copyright (C) 2011~2011 by CSSlayer                                   *
3  *   wengxt@gmail.com                                                      *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.              *
19  ***************************************************************************/
20 
21 #include <assert.h>
22 #include <iostream>
23 #include "enummap.h"
24 
FcitxLibPinyinTransAmbiguity(FCITX_AMBIGUITY ambiguity)25 PinyinAmbiguity2 FcitxLibPinyinTransAmbiguity(FCITX_AMBIGUITY ambiguity)
26 {
27     switch(ambiguity) {
28         case FCITX_AMB_CiChi:
29             return PINYIN_AMB_C_CH;
30         case FCITX_AMB_ZiZhi:
31             return PINYIN_AMB_Z_ZH;
32         case FCITX_AMB_SiShi:
33             return PINYIN_AMB_S_SH;
34         case FCITX_AMB_LeNe:
35             return PINYIN_AMB_L_N;
36         case FCITX_AMB_FoHe:
37             return PINYIN_AMB_F_H;
38         case FCITX_AMB_LeRi:
39             return PINYIN_AMB_L_R;
40         case FCITX_AMB_GeKe:
41             return PINYIN_AMB_G_K;
42         case FCITX_AMB_AnAng:
43             return PINYIN_AMB_AN_ANG;
44         case FCITX_AMB_EnEng:
45             return PINYIN_AMB_EN_ENG;
46         case FCITX_AMB_InIng:
47             return PINYIN_AMB_IN_ING;
48         default:
49             return PINYIN_AMB_ALL;
50     }
51 }
52 
FcitxLibPinyinTransCorrection(FCITX_CORRECTION correction)53 PinyinCorrection2 FcitxLibPinyinTransCorrection(FCITX_CORRECTION correction)
54 {
55     switch(correction) {
56         case FCITX_CR_V_U:
57             return PINYIN_CORRECT_V_U;
58         case FCITX_CR_GN_NG:
59             return PINYIN_CORRECT_GN_NG;
60         case FCITX_CR_MG_NG:
61             return PINYIN_CORRECT_MG_NG;
62         case FCITX_CR_IOU_IU:
63             return PINYIN_CORRECT_IOU_IU;
64         case FCITX_CR_UEI_UI:
65             return PINYIN_CORRECT_UEI_UI;
66         case FCITX_CR_UEN_UN:
67             return PINYIN_CORRECT_UEN_UN;
68         case FCITX_CR_UE_VE:
69             return PINYIN_CORRECT_UE_VE;
70         case FCITX_CR_ON_ONG:
71             return PINYIN_CORRECT_ON_ONG;
72         default:
73             return PINYIN_CORRECT_ALL;
74     }
75 }
76 
FcitxLibPinyinTransShuangpinScheme(FCITX_SHUANGPIN_SCHEME scheme)77 DoublePinyinScheme FcitxLibPinyinTransShuangpinScheme(FCITX_SHUANGPIN_SCHEME scheme)
78 {
79     switch(scheme) {
80         case FCITX_SHUANG_PIN_ZRM:
81             return DOUBLE_PINYIN_ZRM;
82         case FCITX_SHUANG_PIN_MS:
83             return DOUBLE_PINYIN_MS;
84         case FCITX_SHUANG_PIN_ZIGUANG:
85             return DOUBLE_PINYIN_ZIGUANG;
86         case FCITX_SHUANG_PIN_ABC:
87             return DOUBLE_PINYIN_ABC;
88         case FCITX_SHUANG_PIN_PYJJ:
89             return DOUBLE_PINYIN_PYJJ;
90         case FCITX_SHUANG_PIN_XHE:
91             return DOUBLE_PINYIN_XHE;
92         default:
93             return DOUBLE_PINYIN_ZRM;
94     }
95 }
96 
FcitxLibPinyinTransZhuyinLayout(FCITX_ZHUYIN_LAYOUT layout)97 ZhuyinScheme FcitxLibPinyinTransZhuyinLayout(FCITX_ZHUYIN_LAYOUT layout)
98 {
99     switch(layout) {
100         case FCITX_ZHUYIN_STANDARD:
101             return ZHUYIN_STANDARD;
102         case FCITX_ZHUYIN_IBM:
103             return ZHUYIN_IBM;
104         case FCITX_ZHUYIN_GIN_YIEH:
105             return ZHUYIN_GINYIEH;
106         case FCITX_ZHUYIN_ET:
107             return ZHUYIN_ETEN;
108         default:
109             return ZHUYIN_STANDARD;
110     }
111 }
112 
113 static const int dictMap[] =
114 {
115     4,
116     5,
117     6,
118     7,
119     8,
120     9,
121     10,
122     11,
123     12,
124     13,
125     14,
126     15,
127 };
128 
FcitxLibPinyinTransDictionary(FCITX_DICTIONARY dict)129 int FcitxLibPinyinTransDictionary(FCITX_DICTIONARY dict)
130 {
131     int sz = sizeof(dictMap) / sizeof(dictMap[0]);
132     int sz2 = FCITX_DICT_LAST + 1;
133     assert(sz == sz2);
134     return dictMap[dict];
135 }
136 
137 static const int dictMapZhuyin[] =
138 {
139     4,
140     5,
141     6,
142     7,
143     8,
144     9,
145     10,
146     11,
147     12,
148     13
149 };
150 
FcitxLibPinyinTransZhuyinDictionary(FCITX_ZHUYIN_DICTIONARY dict)151 int FcitxLibPinyinTransZhuyinDictionary(FCITX_ZHUYIN_DICTIONARY dict)
152 {
153     int sz = sizeof(dictMapZhuyin) / sizeof(dictMapZhuyin[0]);
154     int sz2 = FCITX_ZHUYIN_DICT_LAST + 1;
155     assert(sz == sz2);
156     return dictMapZhuyin[dict];
157 }
158 
FcitxLibPinyinTransSortOption(FCITX_LIBPINYIN_SORT sort)159 sort_option_t FcitxLibPinyinTransSortOption(FCITX_LIBPINYIN_SORT sort) {
160     switch(sort) {
161         case FLS_PhraseLengthAndFreq:
162             return SORT_BY_PHRASE_LENGTH_AND_FREQUENCY;
163         case FLS_PhraseLengthAndPinyinLengthAndFreq:
164         default:
165             return SORT_BY_PHRASE_LENGTH_AND_PINYIN_LENGTH_AND_FREQUENCY;
166     }
167 }
168