1 /* libhangul 2 * Copyright (C) 2004 - 2007 Choe Hwanjin 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19 #ifndef libhangul_hangul_h 20 #define libhangul_hangul_h 21 22 #include <stdbool.h> 23 #include <inttypes.h> 24 25 #ifdef __GNUC__ 26 #define LIBHANGUL_DEPRECATED __attribute__((deprecated)); 27 #else 28 #define LIBHANGUL_DEPRECATED 29 #endif 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 /* hangulctype.c */ 36 enum { 37 HANGUL_CHOSEONG_FILLER = 0x115f, /* hangul choseong filler */ 38 HANGUL_JUNGSEONG_FILLER = 0x1160 /* hangul jungseong filler */ 39 }; 40 41 typedef uint32_t ucschar; 42 43 bool hangul_is_choseong(ucschar c); 44 bool hangul_is_jungseong(ucschar c); 45 bool hangul_is_jongseong(ucschar c); 46 bool hangul_is_choseong_conjoinable(ucschar c); 47 bool hangul_is_jungseong_conjoinable(ucschar c); 48 bool hangul_is_jongseong_conjoinable(ucschar c); 49 bool hangul_is_syllable(ucschar c); 50 bool hangul_is_jamo(ucschar c); 51 bool hangul_is_cjamo(ucschar c); 52 53 ucschar hangul_jamo_to_cjamo(ucschar ch); 54 55 ucschar hangul_choseong_to_jongseong(ucschar ch); 56 ucschar hangul_jongseong_to_choseong(ucschar ch); 57 void hangul_jongseong_dicompose(ucschar ch, ucschar* jong, ucschar* cho); 58 59 const ucschar* hangul_syllable_iterator_prev(const ucschar* str, 60 const ucschar* begin); 61 const ucschar* hangul_syllable_iterator_next(const ucschar* str, 62 const ucschar* end); 63 64 int hangul_syllable_len(const ucschar* str, int max_len); 65 66 ucschar hangul_jamo_to_syllable(ucschar choseong, 67 ucschar jungseong, 68 ucschar jongseong); 69 void hangul_syllable_to_jamo(ucschar syllable, 70 ucschar* choseong, 71 ucschar* jungseong, 72 ucschar* jongseong); 73 int hangul_jamos_to_syllables(ucschar* dest, int destlen, 74 const ucschar* src, int srclen); 75 76 /* hangulinputcontext.c */ 77 typedef struct _HangulKeyboard HangulKeyboard; 78 typedef struct _HangulCombination HangulCombination; 79 typedef struct _HangulBuffer HangulBuffer; 80 typedef struct _HangulInputContext HangulInputContext; 81 82 enum { 83 HANGUL_OUTPUT_SYLLABLE, 84 HANGUL_OUTPUT_JAMO 85 }; 86 87 enum { 88 HANGUL_KEYBOARD_TYPE_JAMO, 89 HANGUL_KEYBOARD_TYPE_JASO, 90 HANGUL_KEYBOARD_TYPE_ROMAJA 91 }; 92 93 /* keyboard */ 94 HangulKeyboard* hangul_keyboard_new(void); 95 void hangul_keyboard_delete(HangulKeyboard *keyboard); 96 void hangul_keyboard_set_value(HangulKeyboard *keyboard, 97 int key, ucschar value); 98 void hangul_keyboard_set_type(HangulKeyboard *keyboard, int type); 99 100 /* combination */ 101 HangulCombination* hangul_combination_new(void); 102 void hangul_combination_delete(HangulCombination *combination); 103 bool hangul_combination_set_data(HangulCombination* combination, 104 ucschar* first, ucschar* second, ucschar* result, unsigned int n); 105 106 /* input context */ 107 HangulInputContext* hangul_ic_new(const char* keyboard); 108 void hangul_ic_delete(HangulInputContext *hic); 109 bool hangul_ic_process(HangulInputContext *hic, int ascii); 110 void hangul_ic_reset(HangulInputContext *hic); 111 bool hangul_ic_backspace(HangulInputContext *hic); 112 113 bool hangul_ic_is_empty(HangulInputContext *hic); 114 bool hangul_ic_has_choseong(HangulInputContext *hic); 115 bool hangul_ic_has_jungseong(HangulInputContext *hic); 116 bool hangul_ic_has_jongseong(HangulInputContext *hic); 117 bool hangul_ic_is_transliteration(HangulInputContext *hic); 118 119 void hangul_ic_set_output_mode(HangulInputContext *hic, int mode); 120 void hangul_ic_set_keyboard(HangulInputContext *hic, 121 const HangulKeyboard *keyboard); 122 void hangul_ic_select_keyboard(HangulInputContext *hic, 123 const char* id); 124 void hangul_ic_set_combination(HangulInputContext *hic, 125 const HangulCombination *combination); 126 void hangul_ic_connect_callback(HangulInputContext* hic, const char* event, 127 void* callback, void* user_data); 128 129 unsigned hangul_ic_get_n_keyboards(); 130 const char* hangul_ic_get_keyboard_id(unsigned index_); 131 const char* hangul_ic_get_keyboard_name(unsigned index_); 132 133 const ucschar* hangul_ic_get_preedit_string(HangulInputContext *hic); 134 const ucschar* hangul_ic_get_commit_string(HangulInputContext *hic); 135 const ucschar* hangul_ic_flush(HangulInputContext *hic); 136 137 /* hanja.c */ 138 typedef struct _Hanja Hanja; 139 typedef struct _HanjaList HanjaList; 140 typedef struct _HanjaTable HanjaTable; 141 142 HanjaTable* hanja_table_load(const char *filename); 143 HanjaList* hanja_table_match_exact(const HanjaTable* table, const char *key); 144 HanjaList* hanja_table_match_prefix(const HanjaTable* table, const char *key); 145 HanjaList* hanja_table_match_suffix(const HanjaTable* table, const char *key); 146 void hanja_table_delete(HanjaTable *table); 147 148 int hanja_list_get_size(const HanjaList *list); 149 const char* hanja_list_get_key(const HanjaList *list); 150 const Hanja* hanja_list_get_nth(const HanjaList *list, unsigned int n); 151 const char* hanja_list_get_nth_key(const HanjaList *list, unsigned int n); 152 const char* hanja_list_get_nth_value(const HanjaList *list, unsigned int n); 153 const char* hanja_list_get_nth_comment(const HanjaList *list, unsigned int n); 154 void hanja_list_delete(HanjaList *list); 155 156 const char* hanja_get_key(const Hanja* hanja); 157 const char* hanja_get_value(const Hanja* hanja); 158 const char* hanja_get_comment(const Hanja* hanja); 159 160 #ifdef __cplusplus 161 } 162 #endif 163 164 #undef LIBHANGUL_DEPRECATED 165 166 #endif /* libhangul_hangul_h */ 167