From ca3400a7d8f24216c7bd7c30bf53e3f41003f75a Mon Sep 17 00:00:00 2001 From: Joongwon Ahn Date: Mon, 26 Aug 2024 07:02:43 +0900 Subject: [PATCH 1/3] Replace hardcoded keyboard list with ones parsed by libhangul --- .../engines/nimf-libhangul/nimf-libhangul.c | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/modules/engines/nimf-libhangul/nimf-libhangul.c b/modules/engines/nimf-libhangul/nimf-libhangul.c index 6af46a8..15f88d1 100644 --- a/modules/engines/nimf-libhangul/nimf-libhangul.c +++ b/modules/engines/nimf-libhangul/nimf-libhangul.c @@ -64,23 +64,6 @@ struct _NimfLibhangulClass NimfEngineClass parent_class; }; -typedef struct { - const gchar *id; - const gchar *name; -} Keyboard; - -static const Keyboard keyboards[] = { - {"2", N_("Dubeolsik")}, - {"2y", N_("Dubeolsik Yetgeul")}, - {"32", N_("Sebeolsik Dubeol Layout")}, - {"39", N_("Sebeolsik 390")}, - {"3f", N_("Sebeolsik Final")}, - {"3s", N_("Sebeolsik Noshift")}, - {"3y", N_("Sebeolsik Yetgeul")}, - {"ro", N_("Romaja")}, - {"ahn", N_("Ahnmatae")} -}; - static HanjaTable *nimf_libhangul_hanja_table = NULL; static HanjaTable *nimf_libhangul_symbol_table = NULL; static gint nimf_libhangul_hanja_table_ref_count = 0; @@ -718,6 +701,8 @@ nimf_libhangul_init (NimfLibhangul *hangul) gchar **hanja_keys; + hangul_init (); + hangul->settings = g_settings_new ("org.nimf.engines.nimf-libhangul"); hangul->method = g_settings_get_string (hangul->settings, "get-method-infos"); hangul->is_double_consonant_rule = @@ -784,6 +769,8 @@ nimf_libhangul_finalize (GObject *object) nimf_key_freev (hangul->hanja_keys); g_object_unref (hangul->settings); + hangul_fini(); + G_OBJECT_CLASS (nimf_libhangul_parent_class)->finalize (object); } @@ -863,8 +850,10 @@ nimf_libhangul_get_method_infos () { g_debug (G_STRLOC ": %s", G_STRFUNC); + hangul_init (); + NimfMethodInfo **infos; - gint n_methods = G_N_ELEMENTS (keyboards); + gint n_methods = hangul_keyboard_list_get_count (); gint i; infos = g_malloc (sizeof (NimfMethodInfo *) * n_methods + 1); @@ -872,8 +861,8 @@ nimf_libhangul_get_method_infos () for (i = 0; i < n_methods; i++) { infos[i] = nimf_method_info_new (); - infos[i]->method_id = g_strdup (keyboards[i].id); - infos[i]->label = g_strdup (gettext (keyboards[i].name)); + infos[i]->method_id = g_strdup (hangul_keyboard_list_get_keyboard_id (i)); + infos[i]->label = g_strdup (hangul_keyboard_list_get_keyboard_name (i)); infos[i]->group = NULL; } From a08b8f6c995dd323a7a4285828183ee7ebfb4e7b Mon Sep 17 00:00:00 2001 From: Joongwon Ahn Date: Tue, 3 Sep 2024 16:58:05 +0900 Subject: [PATCH 2/3] Add instruction for adding hangul keyboard layout --- README.md | 42 +++++++++++++++++++ docs/hangul-combination-default.xml | 40 ++++++++++++++++++ docs/hangul-keyboard-2.xml | 64 +++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 docs/hangul-combination-default.xml create mode 100644 docs/hangul-keyboard-2.xml diff --git a/README.md b/README.md index 1fc8420..a56d6ef 100644 --- a/README.md +++ b/README.md @@ -232,6 +232,48 @@ sudo rpm -ivh ./nimf-1.3.8-2.opensuse_leap.kr.x86_64.rpm ``` +# 한글 자판 배열 추가 + +libhangul에서 사용하는 한글 자판 배열은 두 경로에 XML 파일로 정의됩니다. + +* `/usr/share/libhangul/keyboards` 경로에 설치된 파일은 모든 사용자에게서 인식됩니다. +* `$HOME/.local/share/libhangul/keyboards` 또는 `$XDG_DATA_HOME/libhangul/keyboards` 경로에 설치된 파일은 개별 사용자에게 인식됩니다. + +자판 배열 파일 구조는 기본으로 설치되는 [두벌식 배열 파일](docs/hangul-keyboard-2.xml)과 [자모 기본조합 파일](docs/hangul-combination-deafult.xml)를 참고하세요. 일반적인 구조는 다음과 같습니다. + +```xml + + + + Dubeolsik + 두벌식 + + + + + ... + + + + + + ... + + + + + +``` + +* hangul-keyboard: 자판 배열을 정의하는 루트 요소. + * id: 입력기에서 사용하는 ID 값. + * type: 자판의 유형에 따라 jamo(두벌식), jamo-yet(두벌식 옛한글), jaso(세벌식), jaso-yet(세벌식 옛한글), ro(로마자)로 설정합니다. +* map: 각 키를 눌렀을 때 입력될 문자를 설정합니다. id 값은 0으로 고정합니다. + * item: QWERTY 자판 기준 아스키코드 key에 해당하는 키를 누르면, 유니코드 value에 해당하는 한글 초/중/종성을 입력합니다. key와 value 값은 16진수로 지정합니다. +* combination: 키를 연달아 누를 때 입력될 조합자를 item으로 나열합니다. id 값은 0으로 고정합니다. + * item: first 문자가 입력된 상태에서 second 키를 누르면 result 문자로 바뀝니다. first, second, result는 한글 초/중/종성에 대응되는 16진수 유니코드로 지정합니다. +* include: file 경로의 XML 파일을 읽어 그 자리에 인라인합니다. file 값은 상대경로 또는 절대경로로 설정할 수 있습니다. + # LICENSE * GNU Lesser General Public License v3.0 ([한글 해석](https://olis.or.kr/license/Detailselect.do?lId=1073)) diff --git a/docs/hangul-combination-default.xml b/docs/hangul-combination-default.xml new file mode 100644 index 0000000..53eb30d --- /dev/null +++ b/docs/hangul-combination-default.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/hangul-keyboard-2.xml b/docs/hangul-keyboard-2.xml new file mode 100644 index 0000000..7fdac1d --- /dev/null +++ b/docs/hangul-keyboard-2.xml @@ -0,0 +1,64 @@ + + + + Dubeolsik + 두벌식 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9e21733e583994931b8cc658288d31214fcf1152 Mon Sep 17 00:00:00 2001 From: Joongwon Ahn Date: Tue, 3 Sep 2024 17:05:08 +0900 Subject: [PATCH 3/3] Update README.md - Fix typo - Add documentation for name element --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a56d6ef..b0d0cf7 100644 --- a/README.md +++ b/README.md @@ -239,7 +239,7 @@ libhangul에서 사용하는 한글 자판 배열은 두 경로에 XML 파일로 * `/usr/share/libhangul/keyboards` 경로에 설치된 파일은 모든 사용자에게서 인식됩니다. * `$HOME/.local/share/libhangul/keyboards` 또는 `$XDG_DATA_HOME/libhangul/keyboards` 경로에 설치된 파일은 개별 사용자에게 인식됩니다. -자판 배열 파일 구조는 기본으로 설치되는 [두벌식 배열 파일](docs/hangul-keyboard-2.xml)과 [자모 기본조합 파일](docs/hangul-combination-deafult.xml)를 참고하세요. 일반적인 구조는 다음과 같습니다. +자판 배열 파일 구조는 기본으로 설치되는 [두벌식 배열 파일](docs/hangul-keyboard-2.xml)과 [자모 기본조합 파일](docs/hangul-combination-default.xml)를 참고하세요. 일반적인 구조는 다음과 같습니다. ```xml @@ -268,6 +268,7 @@ libhangul에서 사용하는 한글 자판 배열은 두 경로에 XML 파일로 * hangul-keyboard: 자판 배열을 정의하는 루트 요소. * id: 입력기에서 사용하는 ID 값. * type: 자판의 유형에 따라 jamo(두벌식), jamo-yet(두벌식 옛한글), jaso(세벌식), jaso-yet(세벌식 옛한글), ro(로마자)로 설정합니다. +* name: 설정 창에 나타나는 자판 배열의 이름. xml:lang 값에 따라 지역화된 이름을 설정할 수 있습니다. * map: 각 키를 눌렀을 때 입력될 문자를 설정합니다. id 값은 0으로 고정합니다. * item: QWERTY 자판 기준 아스키코드 key에 해당하는 키를 누르면, 유니코드 value에 해당하는 한글 초/중/종성을 입력합니다. key와 value 값은 16진수로 지정합니다. * combination: 키를 연달아 누를 때 입력될 조합자를 item으로 나열합니다. id 값은 0으로 고정합니다.