summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChoe Hwanjin <choe.hwanjin@gmail.com>2023-03-05 20:45:46 +0900
committerChoe Hwanjin <choe.hwanjin@gmail.com>2023-03-12 11:23:33 +0900
commit4133add9878f8ffed7c5b69290697ffe634dccc4 (patch)
treeb41bd51d94e57d21c5ebdc177d98f3dccfb9b7ba
parenteb2189dada182848d05466abbae885c3bd4fdba0 (diff)
downloadlibhangul-win32.tar.gz
win32: Add __declspec(dllexport) to function decls.win32
On Win32 platform, `__declspec(dllexport)` is needed to export public functions. Add LIBHANGUL_API macro which automatically specify dllexport or dllimport. For GCC/Clang, visibility attribute will be set. LIBHANGUL_ENABLE_STATIC can be used to ignore export keyword.
-rw-r--r--hangul/CMakeLists.txt13
-rw-r--r--hangul/hangul.h100
2 files changed, 113 insertions, 0 deletions
diff --git a/hangul/CMakeLists.txt b/hangul/CMakeLists.txt
index 14fde95..8e5705b 100644
--- a/hangul/CMakeLists.txt
+++ b/hangul/CMakeLists.txt
@@ -51,6 +51,19 @@ target_compile_definitions(hangul
PRIVATE -DTOP_SRCDIR=\"${CMAKE_SOURCE_DIR}\"
)
+if(WIN32)
+ get_target_property(target_type hangul TYPE)
+ if("${target_type}" STREQUAL "STATIC_LIBRARY")
+ target_compile_definitions(hangul
+ PRIVATE -DLIBHANGUL_ENABLE_STATIC=1
+ )
+ else()
+ target_compile_definitions(hangul
+ PRIVATE -DLIBHANGUL_ENABLE_DLL_EXPORT=1
+ )
+ endif()
+endif()
+
target_include_directories(hangul
PRIVATE "${CMAKE_BINARY_DIR}"
)
diff --git a/hangul/hangul.h b/hangul/hangul.h
index 36156db..4a6a6b1 100644
--- a/hangul/hangul.h
+++ b/hangul/hangul.h
@@ -22,6 +22,36 @@
#include <stdbool.h>
#include <inttypes.h>
+#if defined(_WIN32)
+# if _MSC_VER || __GNUC__
+# define LIBHANGUL_EXPORT __declspec(dllexport)
+# define LIBHANGUL_IMPORT __declspec(dllimport)
+# else
+# define LIBHANGUL_EXPORT
+# define LIBHANGUL_IMPORT
+# endif
+#else
+# ifdef __GNUC__
+# define LIBHANGUL_EXPORT __attribute__((visibility ("default")))
+# define LIBHANGUL_IMPORT __attribute__((visibility ("default")))
+# else
+# define LIBHANGUL_EXPORT
+# define LIBHANGUL_IMPORT
+# endif
+#endif
+
+#if LIBHANGUL_ENABLE_STATIC
+# define LIBHANGUL_EXTERN_SYMBOL
+#else
+# if LIBHANGUL_ENABLE_DLL_EXPORT
+# define LIBHANGUL_EXTERN_SYMBOL LIBHANGUL_EXPORT
+# else
+# define LIBHANGUL_EXTERN_SYMBOL LIBHANGUL_IMPORT
+# endif
+#endif
+
+#define LIBHANGUL_API LIBHANGUL_EXTERN_SYMBOL
+
#ifdef __GNUC__
#define LIBHANGUL_DEPRECATED __attribute__((deprecated))
#else
@@ -40,33 +70,50 @@ enum {
typedef uint32_t ucschar;
+LIBHANGUL_API
bool hangul_is_choseong(ucschar c);
+LIBHANGUL_API
bool hangul_is_jungseong(ucschar c);
+LIBHANGUL_API
bool hangul_is_jongseong(ucschar c);
+LIBHANGUL_API
bool hangul_is_choseong_conjoinable(ucschar c);
+LIBHANGUL_API
bool hangul_is_jungseong_conjoinable(ucschar c);
+LIBHANGUL_API
bool hangul_is_jongseong_conjoinable(ucschar c);
+LIBHANGUL_API
bool hangul_is_jamo_conjoinable(ucschar c);
+LIBHANGUL_API
bool hangul_is_syllable(ucschar c);
+LIBHANGUL_API
bool hangul_is_jamo(ucschar c);
+LIBHANGUL_API
bool hangul_is_cjamo(ucschar c);
+LIBHANGUL_API
ucschar hangul_jamo_to_cjamo(ucschar ch);
+LIBHANGUL_API
const ucschar* hangul_syllable_iterator_prev(const ucschar* str,
const ucschar* begin);
+LIBHANGUL_API
const ucschar* hangul_syllable_iterator_next(const ucschar* str,
const ucschar* end);
+LIBHANGUL_API
int hangul_syllable_len(const ucschar* str, int max_len);
+LIBHANGUL_API
ucschar hangul_jamo_to_syllable(ucschar choseong,
ucschar jungseong,
ucschar jongseong);
+LIBHANGUL_API
void hangul_syllable_to_jamo(ucschar syllable,
ucschar* choseong,
ucschar* jungseong,
ucschar* jongseong);
+LIBHANGUL_API
int hangul_jamos_to_syllables(ucschar* dest, int destlen,
const ucschar* src, int srclen);
@@ -96,53 +143,87 @@ enum {
};
/* library */
+LIBHANGUL_API
int hangul_init();
+LIBHANGUL_API
int hangul_fini();
/* keyboard */
+LIBHANGUL_API
HangulKeyboard* hangul_keyboard_new(void);
+LIBHANGUL_API
HangulKeyboard* hangul_keyboard_new_from_file(const char* path);
+LIBHANGUL_API
void hangul_keyboard_delete(HangulKeyboard *keyboard);
+LIBHANGUL_API
void hangul_keyboard_set_type(HangulKeyboard *keyboard, int type);
+LIBHANGUL_API
unsigned int hangul_keyboard_list_get_count();
+LIBHANGUL_API
const char* hangul_keyboard_list_get_keyboard_id(unsigned index_);
+LIBHANGUL_API
const char* hangul_keyboard_list_get_keyboard_name(unsigned index_);
+LIBHANGUL_API
const HangulKeyboard* hangul_keyboard_list_get_keyboard(const char* id);
+LIBHANGUL_API
const char* hangul_keyboard_list_register_keyboard(HangulKeyboard* keyboard);
+LIBHANGUL_API
HangulKeyboard* hangul_keyboard_list_unregister_keyboard(const char* id);
/* combination */
+LIBHANGUL_API
HangulCombination* hangul_combination_new(void);
+LIBHANGUL_API
void hangul_combination_delete(HangulCombination *combination);
+LIBHANGUL_API
bool hangul_combination_set_data(HangulCombination* combination,
ucschar* first, ucschar* second, ucschar* result, unsigned int n);
/* input context */
+LIBHANGUL_API
HangulInputContext* hangul_ic_new(const char* keyboard);
+LIBHANGUL_API
void hangul_ic_delete(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_process(HangulInputContext *hic, int ascii);
+LIBHANGUL_API
void hangul_ic_reset(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_backspace(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_is_empty(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_has_choseong(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_has_jungseong(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_has_jongseong(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_is_transliteration(HangulInputContext *hic);
+LIBHANGUL_API
bool hangul_ic_get_option(HangulInputContext *hic, int option);
+LIBHANGUL_API
void hangul_ic_set_option(HangulInputContext *hic, int option, bool value);
+LIBHANGUL_API
void hangul_ic_set_output_mode(HangulInputContext *hic, int mode);
+LIBHANGUL_API
void hangul_ic_set_keyboard(HangulInputContext *hic,
const HangulKeyboard *keyboard);
+LIBHANGUL_API
void hangul_ic_select_keyboard(HangulInputContext *hic,
const char* id);
+LIBHANGUL_API
void hangul_ic_connect_callback(HangulInputContext* hic, const char* event,
void* callback, void* user_data);
+LIBHANGUL_API
const ucschar* hangul_ic_get_preedit_string(HangulInputContext *hic);
+LIBHANGUL_API
const ucschar* hangul_ic_get_commit_string(HangulInputContext *hic);
+LIBHANGUL_API
const ucschar* hangul_ic_flush(HangulInputContext *hic);
/* hanja.c */
@@ -150,22 +231,37 @@ typedef struct _Hanja Hanja;
typedef struct _HanjaList HanjaList;
typedef struct _HanjaTable HanjaTable;
+LIBHANGUL_API
HanjaTable* hanja_table_load(const char *filename);
+LIBHANGUL_API
HanjaList* hanja_table_match_exact(const HanjaTable* table, const char *key);
+LIBHANGUL_API
HanjaList* hanja_table_match_prefix(const HanjaTable* table, const char *key);
+LIBHANGUL_API
HanjaList* hanja_table_match_suffix(const HanjaTable* table, const char *key);
+LIBHANGUL_API
void hanja_table_delete(HanjaTable *table);
+LIBHANGUL_API
int hanja_list_get_size(const HanjaList *list);
+LIBHANGUL_API
const char* hanja_list_get_key(const HanjaList *list);
+LIBHANGUL_API
const Hanja* hanja_list_get_nth(const HanjaList *list, unsigned int n);
+LIBHANGUL_API
const char* hanja_list_get_nth_key(const HanjaList *list, unsigned int n);
+LIBHANGUL_API
const char* hanja_list_get_nth_value(const HanjaList *list, unsigned int n);
+LIBHANGUL_API
const char* hanja_list_get_nth_comment(const HanjaList *list, unsigned int n);
+LIBHANGUL_API
void hanja_list_delete(HanjaList *list);
+LIBHANGUL_API
const char* hanja_get_key(const Hanja* hanja);
+LIBHANGUL_API
const char* hanja_get_value(const Hanja* hanja);
+LIBHANGUL_API
const char* hanja_get_comment(const Hanja* hanja);
#ifdef __cplusplus
@@ -181,6 +277,10 @@ unsigned hangul_ic_get_n_keyboards() LIBHANGUL_DEPRECATED;
const char* hangul_ic_get_keyboard_id(unsigned index_) LIBHANGUL_DEPRECATED;
const char* hangul_ic_get_keyboard_name(unsigned index_) LIBHANGUL_DEPRECATED;
+#undef LIBHANGUL_EXPORT
+#undef LIBHANGUL_IMPORT
+#undef LIBHANGUL_EXTERN_SYMBOL
+#undef LIBHANGUL_API
#undef LIBHANGUL_DEPRECATED
#endif /* libhangul_hangul_h */