Blob Blame History Raw
To: vim_dev@googlegroups.com
Subject: Patch 7.4.913
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.4.913
Problem:    No utf-8 support for the hangul input feature.
Solution:   Add utf-8 support. (Namsh)
Files:      src/gui.c, src/hangulin.c, src/proto/hangulin.pro, src/screen.c,
            src/ui.c, runtime/doc/hangulin.txt, src/feature.h


*** ../vim-7.4.912/src/gui.c	2015-08-11 19:13:55.138175689 +0200
--- src/gui.c	2015-11-10 14:20:22.653009478 +0100
***************
*** 1223,1230 ****
  	    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);
  	    else
  #endif
  		(void)gui_screenchar(LineOffset[gui.row] + gui.col,
--- 1223,1241 ----
  	    gui.highlight_mask = (cattr | attr);
  #ifdef FEAT_HANGULIN
  	    if (composing_hangul)
! 	    {
! 		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,2580 ****
  #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);
  	else
  	{
  #endif
--- 2583,2601 ----
  #ifdef FEAT_HANGULIN
  	if (composing_hangul
  		    && gui.col == gui.cursor_col && gui.row == gui.cursor_row)
! 	{
! 	    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
*** ../vim-7.4.912/src/hangulin.c	2015-07-21 17:53:11.577527989 +0200
--- src/hangulin.c	2015-11-10 14:20:22.653009478 +0100
***************
*** 1619,1621 ****
--- 1619,1667 ----
      *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;
+ }
*** ../vim-7.4.912/src/proto/hangulin.pro	2013-08-10 13:37:14.000000000 +0200
--- src/proto/hangulin.pro	2015-11-10 14:20:22.653009478 +0100
***************
*** 6,9 ****
--- 6,11 ----
  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 : */
*** ../vim-7.4.912/src/screen.c	2015-08-11 18:52:58.077121515 +0200
--- src/screen.c	2015-11-10 14:20:22.657009438 +0100
***************
*** 10047,10053 ****
  	    if (gui.in_use)
  	    {
  		if (hangul_input_state_get())
! 		    MSG_PUTS_ATTR(" \307\321\261\333", attr);   /* HANGUL */
  	    }
  #endif
  #ifdef FEAT_INS_EXPAND
--- 10047,10059 ----
  	    if (gui.in_use)
  	    {
  		if (hangul_input_state_get())
! 		{
! 		    /* 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
*** ../vim-7.4.912/src/ui.c	2015-09-01 20:31:16.311776122 +0200
--- src/ui.c	2015-11-10 14:20:22.657009438 +0100
***************
*** 1723,1730 ****
--- 1723,1739 ----
      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
  
*** ../vim-7.4.912/runtime/doc/hangulin.txt	2013-08-10 13:24:54.000000000 +0200
--- runtime/doc/hangulin.txt	2015-11-10 14:26:20.313417262 +0100
***************
*** 1,11 ****
! *hangulin.txt*  For Vim version 7.4.  Last change: 2009 Jun 24
  
  
  		  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*
  ------------
--- 1,8 ----
! *hangulin.txt*  For Vim version 7.4.  Last change: 2015 Nov 10
  
  
  		  VIM REFERENCE MANUAL    by Chi-Deok Hwang and Sung-Hyun Nam
  
  
  Introduction					*hangul*
  ------------
***************
*** 17,23 ****
  -------
  Next is a basic option.  You can add any other configure option. >
  
!    ./configure --with-x --enable-multibyte --enable-fontset --enable-hangulinput
  
  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
--- 14,21 ----
  -------
  Next is a basic option.  You can add any other configure option. >
  
!    ./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,43 ****
  	#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.
  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). >
  
! 	:set fileencoding=korea
  
  Keyboard
  --------
--- 24,44 ----
  	#define HANGUL_DEFAULT_KEYBOARD 2
  	#define ESC_CHG_TO_ENG_MODE
  	/* #define X_LOCALE */
  
  Environment variables
  ---------------------
! 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 may want to set 'encoding' and 'fileencodings'.
! Next are examples:
  
! 	:set encoding=euc-kr
! 	:set encoding=utf-8
! 	:set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1
  
  Keyboard
  --------
***************
*** 52,59 ****
  
  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.
  
  $HOME/.Xdefaults: >
      Vim.font: english_font
--- 53,68 ----
  
  Hangul Fonts
  ------------
! 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,105 ****
      *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'.
  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!
  
  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.
  
! Hanja input not yet supported.  And I don't have any plan.
! If you really want to input hanja, just use VIM with hanterm.
  
  Bug or Comment
  --------------
  Send comments, patches and suggestions to:
  
- 				    Chi-Deok Hwang <hwang@mizi.co.kr>
  				    SungHyun Nam <goweol@gmail.com>
  
   vim:tw=78:ts=8:ft=help:norl:
--- 75,112 ----
      *international: True
      Vim*fontList: 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 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 error message.  Be careful!
  
  hangul_font width should be twice than english_font width.
  
  Unsupported Feature
  -------------------
! We don't support Johab font.
! We don't support Hanja input.
! And We don't have any plan to support them.
  
! 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:
  
  				    SungHyun Nam <goweol@gmail.com>
+ 				    Chi-Deok Hwang <...>
  
   vim:tw=78:ts=8:ft=help:norl:
*** ../vim-7.4.912/src/feature.h	2014-11-30 13:34:16.893626683 +0100
--- src/feature.h	2015-11-10 14:30:08.087134574 +0100
***************
*** 677,685 ****
  # 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
--- 677,682 ----
***************
*** 687,693 ****
  #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
  
  /*
--- 684,689 ----
*** ../vim-7.4.912/src/version.c	2015-11-10 14:06:48.765187078 +0100
--- src/version.c	2015-11-10 14:21:28.556347509 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     913,
  /**/

-- 
From "know your smileys":
 :-D	Big smile

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///