00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef UNIHAN_PHONETIC_H_
00036 #define UNIHAN_PHONETIC_H_
00037
00038 #include <sqlite3.h>
00042 #define PINYIN_MAX_LENGTH 9
00043
00047 #define ZHUYIN_MAX_LENGTH 13
00048
00052 typedef gunichar ZhuYin_Symbol;
00053
00057 typedef char ZhuYin;
00058
00062 typedef char PinYin;
00063
00076 typedef enum {
00077 ZHUYIN_INVALID_SYMBOL= -1,
00078 ZHUYIN_SYMBOL_B,
00079 ZHUYIN_SYMBOL_P,
00080 ZHUYIN_SYMBOL_M,
00081 ZHUYIN_SYMBOL_F,
00082 ZHUYIN_SYMBOL_D,
00083 ZHUYIN_SYMBOL_T,
00084 ZHUYIN_SYMBOL_N,
00085 ZHUYIN_SYMBOL_L,
00086 ZHUYIN_SYMBOL_G,
00087 ZHUYIN_SYMBOL_K,
00088 ZHUYIN_SYMBOL_H,
00089 ZHUYIN_SYMBOL_J,
00090 ZHUYIN_SYMBOL_Q,
00091 ZHUYIN_SYMBOL_X,
00092 ZHUYIN_SYMBOL_ZH,
00093 ZHUYIN_SYMBOL_CH,
00094 ZHUYIN_SYMBOL_SH,
00095 ZHUYIN_SYMBOL_R,
00096 ZHUYIN_SYMBOL_Z,
00097 ZHUYIN_SYMBOL_C,
00098 ZHUYIN_SYMBOL_S,
00099 ZHUYIN_SYMBOL_I,
00100 ZHUYIN_SYMBOL_U,
00101 ZHUYIN_SYMBOL_U_DIAERESIS,
00102 ZHUYIN_SYMBOL_A,
00103 ZHUYIN_SYMBOL_O,
00104 ZHUYIN_SYMBOL_E,
00105 ZHUYIN_SYMBOL_E_CIRCUMFLEX,
00106 ZHUYIN_SYMBOL_AI,
00107 ZHUYIN_SYMBOL_EI,
00108 ZHUYIN_SYMBOL_AO,
00109 ZHUYIN_SYMBOL_OU,
00110 ZHUYIN_SYMBOL_AN,
00111 ZHUYIN_SYMBOL_EN,
00112 ZHUYIN_SYMBOL_ANG,
00113 ZHUYIN_SYMBOL_ENG,
00114 ZHUYIN_SYMBOL_ER,
00115 ZHUYIN_SYMBOL_1,
00116 ZHUYIN_SYMBOL_2,
00117 ZHUYIN_SYMBOL_3,
00118 ZHUYIN_SYMBOL_4,
00119 ZHUYIN_SYMBOL_NEUTRAL,
00120 } ZhuYin_Symbol_Id;
00121
00125 #define ZHUYIN_SYMBOL_COUNT ZHUYIN_SYMBOL_NEUTRAL + 1
00126
00130 extern const ZhuYin_Symbol ZHUYIN_SYMBOL_LIST[];
00131
00160 typedef enum{
00161 PINYIN_ACCENT_ALWAYS,
00162 PINYIN_ACCENT_ORIGINAL,
00163 PINYIN_ACCENT_UNIHAN,
00164 PINYIN_ACCENT_TRAILING,
00165 PINYIN_ACCENT_INPUT_METHOD,
00166 PINYIN_ACCENT_NONE
00167 } PinYin_Accent_Format;
00168
00169
00186 typedef enum{
00187 ZHUYIN_TONEMARK_ALWAYS,
00188 ZHUYIN_TONEMARK_ORIGINAL,
00189 ZHUYIN_TONEMARK_INPUT_METHOD,
00190 ZHUYIN_TONEMARK_NUMERICAL,
00191 } ZhuYin_ToneMark_Format;
00192
00193
00194
00195
00196
00197
00212 PinYin *pinYin_new(const char *pinYin_str);
00213
00226 guint pinYin_strip_tone(PinYin* pinYin);
00227
00237 void pinYin_add_tone(PinYin* pinYin, guint tone, gboolean useTrailNumber);
00238
00249 PinYin *pinYin_convert_accent_format(const PinYin *pinYin, PinYin_Accent_Format toFormat, gboolean useTrailNumber);
00250
00251
00259 ZhuYin *pinYin_to_zhuYin(const PinYin* pinYin, ZhuYin_ToneMark_Format toFormat);
00260
00261
00262
00263
00264
00279 ZhuYin *zhuYin_new(const char *zhuYin_str);
00280
00295 guint zhuYin_strip_tone(ZhuYin* zhuYin);
00296
00306 void zhuYin_add_tone(ZhuYin* zhuYin, guint tone, ZhuYin_ToneMark_Format toFormat);
00307
00317 ZhuYin *zhuYin_convert_toneMark_format(const ZhuYin* zhuYin, ZhuYin_ToneMark_Format toFormat);
00318
00327 PinYin *zhuYin_to_pinYin(const ZhuYin* zhuYin, PinYin_Accent_Format toFormat, gboolean useTrailNumber);
00328
00329
00330
00331
00332
00333
00341 ZhuYin_Symbol zhuYin_Symbol_from_id(ZhuYin_Symbol_Id id);
00342
00343
00350 ZhuYin_Symbol_Id zhuYin_Symbol_get_id(ZhuYin_Symbol zSym);
00351
00358 gboolean zhuYin_Symbol_is_initial(ZhuYin_Symbol zSym);
00359
00366 gboolean zhuYin_Symbol_is_medial(ZhuYin_Symbol zSym);
00367
00374 gboolean zhuYin_Symbol_is_final(ZhuYin_Symbol zSym);
00375
00382 gboolean zhuYin_Symbol_is_tone(ZhuYin_Symbol zSym);
00383
00390 guint zhuYin_Symbol_to_toneMark_id(ZhuYin_Symbol zSym);
00391
00398 ZhuYin_Symbol zhuYin_Symbol_from_toneMark_id(guint toneMark_id);
00399
00410 void pinYin_convert_accent_format_scalar_func(sqlite3_context *context, int argc, sqlite3_value **argv);
00411
00422 void pinYin_to_zhuYin_scalar_func(sqlite3_context *context, int argc, sqlite3_value **argv);
00423
00434 void zhuYin_convert_toneMark_format_scalar_func(sqlite3_context *context, int argc, sqlite3_value **argv);
00435
00436
00447 void zhuYin_to_pinYin_scalar_func(sqlite3_context *context, int argc, sqlite3_value **argv);
00448
00449 #endif