To: vim_dev@googlegroups.com Subject: Patch 7.4.913 Fcc: outbox From: Bram Moolenaar 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 SungHyun Nam 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 + 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 ///