textinput/ptihangulcore/inc/hangul.h
branchRCL_3
changeset 3 f5a1e66df979
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/ptihangulcore/inc/hangul.h	Fri Feb 19 23:09:27 2010 +0200
@@ -0,0 +1,170 @@
+/* libhangul
+ * Copyright (c) 2005,2006 Choe Hwanjin
+ * All rights reserved.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef libhangul_hangul_h
+#define libhangul_hangul_h
+
+#include <stdbool.h>
+#include <inttypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* hangulctype.c */
+enum {
+    HANGUL_CHOSEONG_FILLER  = 0x115f,   /* hangul choseong filler */
+    HANGUL_JUNGSEONG_FILLER = 0x1160    /* hangul jungseong filler */
+};
+
+#ifdef __SYMBIAN32__
+typedef uint16_t ucschar;
+#else
+typedef uint32_t ucschar;
+#endif
+
+bool hangul_is_choseong(ucschar c);
+bool hangul_is_jungseong(ucschar c);
+bool hangul_is_jongseong(ucschar c);
+bool hangul_is_choseong_conjoinable(ucschar c);
+bool hangul_is_jungseong_conjoinable(ucschar c);
+bool hangul_is_jongseong_conjoinable(ucschar c);
+bool hangul_is_syllable(ucschar c);
+bool hangul_is_jaso(ucschar c);
+bool hangul_is_jamo(ucschar c);
+
+ucschar hangul_jaso_to_jamo(ucschar ch);
+ucschar hangul_choseong_to_jamo(ucschar ch);
+ucschar hangul_jungseong_to_jamo(ucschar ch);
+ucschar hangul_jongseong_to_jamo(ucschar ch);
+
+ucschar hangul_choseong_to_jongseong(ucschar ch);
+ucschar hangul_jongseong_to_choseong(ucschar ch);
+void    hangul_jongseong_dicompose(ucschar ch, ucschar* jong, ucschar* cho);
+
+const ucschar* hangul_syllable_iterator_prev(const ucschar* str,
+					     const ucschar* begin);
+const ucschar* hangul_syllable_iterator_next(const ucschar* str,
+					     const ucschar* end);
+
+int     hangul_syllable_len(const ucschar* str, int max_len);
+
+ucschar hangul_jaso_to_syllable(ucschar choseong,
+				ucschar jungseong,
+				ucschar jongseong);
+void    hangul_syllable_to_jaso(ucschar syllable,
+				ucschar* choseong,
+				ucschar* jungseong,
+				ucschar* jongseong);
+int     hangul_jamos_to_syllables(ucschar* dest, int destlen,
+				  const ucschar* src, int srclen);
+
+/* hangulinputcontext.c */
+typedef struct _HangulKeyboard        HangulKeyboard;
+typedef struct _HangulCombination     HangulCombination;
+typedef struct _HangulBuffer          HangulBuffer;
+typedef struct _HangulInputContext    HangulInputContext;
+
+enum {
+    HANGUL_OUTPUT_SYLLABLE,
+    HANGUL_OUTPUT_JAMO
+};
+
+enum {
+    HANGUL_KEYBOARD_TYPE_JAMO,
+    HANGUL_KEYBOARD_TYPE_JASO
+};
+
+/* keyboard */
+HangulKeyboard* hangul_keyboard_new(void);
+void    hangul_keyboard_delete(HangulKeyboard *keyboard);
+void    hangul_keyboard_set_value(HangulKeyboard *keyboard,
+				  int key, ucschar value);
+void    hangul_keyboard_set_type(HangulKeyboard *keyboard, int type);
+
+/* combination */
+HangulCombination* hangul_combination_new(void);
+void hangul_combination_delete(HangulCombination *combination);
+bool hangul_combination_set_data(HangulCombination* combination, 
+		     ucschar* first, ucschar* second, ucschar* result, unsigned int n);
+
+/* input context */
+HangulInputContext* hangul_ic_new(const char* keyboard);
+void hangul_ic_delete(HangulInputContext *hic);
+bool hangul_ic_process(HangulInputContext *hic, int ascii);
+void hangul_ic_reset(HangulInputContext *hic);
+bool hangul_ic_backspace(HangulInputContext *hic);
+
+bool hangul_ic_is_empty(HangulInputContext *hic);
+bool hangul_ic_has_choseong(HangulInputContext *hic);
+bool hangul_ic_has_jungseong(HangulInputContext *hic);
+bool hangul_ic_has_jongseong(HangulInputContext *hic);
+
+int  hangul_ic_dvorak_to_qwerty(int qwerty);
+
+void hangul_ic_set_output_mode(HangulInputContext *hic, int mode);
+void hangul_ic_set_keyboard(HangulInputContext *hic,
+			    const HangulKeyboard *keyboard);
+void hangul_ic_select_keyboard(HangulInputContext *hic,
+			       const char* id);
+void hangul_ic_set_combination(HangulInputContext *hic,
+			       const HangulCombination *combination);
+void hangul_ic_connect_callback(HangulInputContext* hic, const char* event,
+				void* callback, void* user_data);
+
+const ucschar* hangul_ic_get_preedit_string(HangulInputContext *hic);
+const ucschar* hangul_ic_get_commit_string(HangulInputContext *hic);
+const ucschar* hangul_ic_flush(HangulInputContext *hic);
+
+/* hanja.c */
+typedef struct _Hanja Hanja;
+typedef struct _HanjaList HanjaList;
+typedef struct _HanjaTable HanjaTable;
+
+HanjaTable*  hanja_table_load(const char *filename);
+HanjaList*   hanja_table_match_exact(const HanjaTable* table, const char *key);
+HanjaList*   hanja_table_match_prefix(const HanjaTable* table, const char *key);
+HanjaList*   hanja_table_match_suffix(const HanjaTable* table, const char *key);
+void         hanja_table_delete(HanjaTable *table);
+
+int          hanja_table_txt_to_bin(const char* txtfilename,
+				    const char* binfilename);
+
+int          hanja_list_get_size(const HanjaList *list);
+const char*  hanja_list_get_key(const HanjaList *list);
+const Hanja* hanja_list_get_nth(const HanjaList *list, unsigned int n);
+const char*  hanja_list_get_nth_key(const HanjaList *list, unsigned int n);
+const char*  hanja_list_get_nth_value(const HanjaList *list, unsigned int n);
+const char*  hanja_list_get_nth_comment(const HanjaList *list, unsigned int n);
+void         hanja_list_delete(HanjaList *list);
+
+const char*  hanja_get_key(const Hanja* hanja);
+const char*  hanja_get_value(const Hanja* hanja);
+const char*  hanja_get_comment(const Hanja* hanja);
+
+
+/* deprecated */
+typedef bool (*HangulICFilter) (ucschar*, ucschar, ucschar, ucschar, void*);
+void hangul_ic_set_filter(HangulInputContext *hic,
+			  HangulICFilter func, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libhangul_hangul_h */