]> granicus.if.org Git - vim/commitdiff
patch 7.4.913 v7.4.913
authorBram Moolenaar <Bram@vim.org>
Tue, 10 Nov 2015 13:35:18 +0000 (14:35 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 10 Nov 2015 13:35:18 +0000 (14:35 +0100)
Problem:    No utf-8 support for the hangul input feature.
Solution:   Add utf-8 support. (Namsh)

runtime/doc/hangulin.txt
src/feature.h
src/gui.c
src/hangulin.c
src/proto/hangulin.pro
src/screen.c
src/ui.c
src/version.c

index 79ebff1100805761e1b7855ca3f3b2a657aca22e..6aacca77f7de461b530cf430e54118e8c2856c1a 100644 (file)
@@ -1,11 +1,8 @@
-*hangulin.txt*  For Vim version 7.4.  Last change: 2009 Jun 24
+*hangulin.txt*  For Vim version 7.4.  Last change: 2015 Nov 10
 
 
                  VIM REFERENCE MANUAL    by Chi-Deok Hwang and Sung-Hyun Nam
 
-NOTE: The |+hangul_input| feature is scheduled to be removed.  If you want to
-keep it, please send a message to the Vim user maillist.
-
 
 Introduction                                   *hangul*
 ------------
@@ -17,7 +14,8 @@ Compile
 -------
 Next is a basic option.  You can add any other configure option. >
 
-   ./configure --with-x --enable-multibyte --enable-fontset --enable-hangulinput
+   ./configure --with-x --enable-multibyte --enable-hangulinput \
+            --disable-xim
 
 And you should check feature.h.  If |+hangul_input| feature is enabled
 by configure, you can select more options such as keyboard type, 2 bulsik
@@ -26,18 +24,21 @@ or 3 bulsik.  You can find keywords like next in there. >
        #define HANGUL_DEFAULT_KEYBOARD 2
        #define ESC_CHG_TO_ENG_MODE
        /* #define X_LOCALE */
-       /* #define SLOW_XSERVER */
 
 Environment variables
 ---------------------
-You should set LANG variable to Korean locale such as ko or ko_KR.euc.
+You should set LANG variable to Korean locale such as ko, ko_KR.eucKR
+or ko_KR.UTF-8.
 If you set LC_ALL variable, it should be set to Korean locale also.
 
 VIM resource
 ------------
-You should add nexts to your global vimrc ($HOME/.vimrc). >
+You may want to set 'encoding' and 'fileencodings'.
+Next are examples:
 
-       :set fileencoding=korea
+       :set encoding=euc-kr
+       :set encoding=utf-8
+       :set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1
 
 Keyboard
 --------
@@ -52,8 +53,16 @@ If both are set, VIM_KEYBOARD has higher priority.
 
 Hangul Fonts
 ------------
-You can set text font using $HOME/.Xdefaults or in your gvimrc file.
-But to use Hangul, you should set 'guifontset' in your vimrc.
+If you use GTK version of GVIM, you should set 'guifont' and 'guifontwide'.
+For example:
+    set guifont=Courier\ 12
+    set guifontwide=NanumGothicCoding\ 12
+
+If you use Motif or Athena version of GVIM, you should set 'guifontset' in
+your vimrc.  You can set fontset in the .Xdefaults file.
+
+$HOME/.gvimrc: >
+    set guifontset=english_font,hangul_font
 
 $HOME/.Xdefaults: >
     Vim.font: english_font
@@ -66,40 +75,38 @@ $HOME/.Xdefaults: >
     *international: True
     Vim*fontList: english_font;hangul_font:
 
-$HOME/.gvimrc: >
-    set guifontset=english_font,hangul_font
-
 attention! the , (comma) or ; (semicolon)
 
 And there should be no ':set guifont'.  If it exists, then Gvim ignores
 ':set guifontset'.  It means VIM runs without fontset supporting.
 So, you can see only English.  Hangul does not be correctly displayed.
 
-After 'fontset' feature is enabled, VIM does not allow using 'font'.
+After 'fontset' feature is enabled, VIM does not allow using english
+font only in 'font' setting for syntax.
 For example, if you use >
    :set guifontset=eng_font,your_font
 in your .gvimrc, then you should do for syntax >
    :hi Comment guifg=Cyan font=another_eng_font,another_your_font
 If you just do >
    :hi Comment font=another_eng_font
-then you can see a GOOD error message.  Be careful!
+then you can see a error message.  Be careful!
 
 hangul_font width should be twice than english_font width.
 
 Unsupported Feature
 -------------------
-Johab font not yet supported.  And I don't have any plan.
-If you really want to use johab font, you can use the
-hanguldraw.c in gau package.
+We don't support Johab font.
+We don't support Hanja input.
+And We don't have any plan to support them.
 
-Hanja input not yet supported.  And I don't have any plan.
-If you really want to input hanja, just use VIM with hanterm.
+If you really need such features, you can use console version of VIM with a
+capable terminal emulator.
 
 Bug or Comment
 --------------
 Send comments, patches and suggestions to:
 
-                                   Chi-Deok Hwang <hwang@mizi.co.kr>
                                    SungHyun Nam <goweol@gmail.com>
+                                   Chi-Deok Hwang <...>
 
  vim:tw=78:ts=8:ft=help:norl:
index 01f611e381b4227849d86587bc85873ca510f664..c499d9d50a57297cce24a5f5d948a037252e63f9 100644 (file)
 # define ESC_CHG_TO_ENG_MODE           /* if defined, when ESC pressed,
                                         * turn to english mode
                                         */
-# if !defined(FEAT_XFONTSET) && defined(HAVE_X11) && !defined(FEAT_GUI_GTK)
-#  define FEAT_XFONTSET                        /* Hangul input requires xfontset */
-# endif
 # if defined(FEAT_XIM) && !defined(LINT)
        Error: You should select only ONE of XIM and HANGUL INPUT
 # endif
 #if defined(FEAT_HANGULIN) || defined(FEAT_XIM)
 /* # define X_LOCALE */                        /* for OS with incomplete locale
                                           support, like old linux versions. */
-/* # define SLOW_XSERVER */            /* for extremely slow X server */
 #endif
 
 /*
index fc2981c6ca5808db74f651e27762bb7ddb313b83..07365224d303a2de5ca32e949d5d30ee983e798a 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -1223,8 +1223,19 @@ gui_update_cursor(force, clear_selection)
            gui.highlight_mask = (cattr | attr);
 #ifdef FEAT_HANGULIN
            if (composing_hangul)
-               (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
-                       GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0);
+           {
+               char_u *comp_buf;
+               int comp_len;
+
+               comp_buf = hangul_composing_buffer_get(&comp_len);
+               if (comp_buf)
+               {
+                   (void)gui_outstr_nowrap(comp_buf, comp_len,
+                                           GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
+                                           cfg, cbg, 0);
+                   vim_free(comp_buf);
+               }
+           }
            else
 #endif
                (void)gui_screenchar(LineOffset[gui.row] + gui.col,
@@ -2572,9 +2583,19 @@ gui_undraw_cursor()
 #ifdef FEAT_HANGULIN
        if (composing_hangul
                    && gui.col == gui.cursor_col && gui.row == gui.cursor_row)
-           (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
-                   GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
-                   gui.norm_pixel, gui.back_pixel, 0);
+       {
+           char_u *comp_buf;
+           int comp_len;
+
+           comp_buf = hangul_composing_buffer_get(&comp_len);
+           if (comp_buf)
+           {
+               (void)gui_outstr_nowrap(comp_buf, comp_len,
+                                       GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
+                                       gui.norm_pixel, gui.back_pixel, 0);
+               vim_free(comp_buf);
+           }
+       }
        else
        {
 #endif
index 24cf18002d840c6f325d3b166c79b6a81cd69f0f..f02cad8174bea1beff336a7cdc59380bcc9d3a53 100644 (file)
@@ -1619,3 +1619,49 @@ convert_3_to_ks(fv, mv, lv, des)
     *des++ = johab_lcon_to_wan[lv];
     return 8;
 }
+
+    char_u *
+hangul_string_convert(buf, p_len)
+    char_u  *buf;
+    int            *p_len;
+{
+    char_u *tmpbuf = NULL;
+    vimconv_T vc;
+
+    if (enc_utf8)
+    {
+       vc.vc_type = CONV_NONE;
+       if (convert_setup(&vc, (char_u *)"euc-kr", p_enc) == OK)
+       {
+           tmpbuf = string_convert(&vc, buf, p_len);
+           convert_setup(&vc, NULL, NULL);
+       }
+    }
+
+    return tmpbuf;
+}
+
+    char_u *
+hangul_composing_buffer_get(p_len)
+    int            *p_len;
+{
+    char_u *tmpbuf = NULL;
+
+    if (composing_hangul)
+    {
+       int len = 2;
+
+       tmpbuf = hangul_string_convert(composing_hangul_buffer, &len);
+       if (tmpbuf != NULL)
+       {
+           *p_len = len;
+       }
+       else
+       {
+           tmpbuf = vim_strnsave(composing_hangul_buffer, 2);
+           *p_len = 2;
+       }
+    }
+
+    return tmpbuf;
+}
index adfde142ffeceac41b1054b5c30d8f67d31ca583..59e6986bdcffbb51fc02ff8d2c7ccc5af65d30e0 100644 (file)
@@ -6,4 +6,6 @@ void hangul_input_state_toggle __ARGS((void));
 void hangul_keyboard_set __ARGS((void));
 int hangul_input_process __ARGS((char_u *s, int len));
 void hangul_input_clear __ARGS((void));
+char_u *hangul_string_convert __ARGS((char_u *buf, int *p_len));
+char_u *hangul_composing_buffer_get __ARGS((int *p_len));
 /* vim: set ft=c : */
index b1af862d378f10232ba65eadddf3e46dcccd1836..de9e04df68989a0ce35cba9a9c1b0fb4f2a35162 100644 (file)
@@ -10047,7 +10047,13 @@ showmode()
            if (gui.in_use)
            {
                if (hangul_input_state_get())
-                   MSG_PUTS_ATTR(" \307\321\261\333", attr);   /* HANGUL */
+               {
+                   /* HANGUL */
+                   if (enc_utf8)
+                       MSG_PUTS_ATTR(" \355\225\234\352\270\200", attr);
+                   else
+                       MSG_PUTS_ATTR(" \307\321\261\333", attr);
+               }
            }
 #endif
 #ifdef FEAT_INS_EXPAND
index e0e54d92429dc4ac082cc5738fb227baa9cc604e..5438a38c56e1a9adc19e38bc02abae00024f3c13 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -1723,8 +1723,17 @@ push_raw_key(s, len)
     char_u  *s;
     int            len;
 {
+    char_u *tmpbuf;
+
+    tmpbuf = hangul_string_convert(s, &len);
+    if (tmpbuf != NULL)
+       s = tmpbuf;
+
     while (len--)
        inbuf[inbufcount++] = *s++;
+
+    if (tmpbuf != NULL)
+       vim_free(tmpbuf);
 }
 #endif
 
index a0896f8d902e1e40b232979d46741c2cb711db13..1604635aeb7cd4f00a48494ce3f19a21f78a8e39 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    913,
 /**/
     912,
 /**/