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