]> granicus.if.org Git - vim/commitdiff
patch 8.1.0059: displayed digraph for "ga" wrong with 'encoding' "cp1251" v8.1.0059
authorBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 15:25:22 +0000 (17:25 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 15:25:22 +0000 (17:25 +0200)
Problem:    Displayed digraph for "ga" wrong with 'encoding' "cp1251".
Solution:   Convert from 'encoding' to "utf-8" if needed. (closes #3015)

src/digraph.c
src/testdir/test_digraph.vim
src/version.c

index 6f9c46ff71cb2ff42a14e598ef96ef3ca6f4720b..6909c5b9c7e101571dd82a3c97ad4953c5f108a9 100644 (file)
@@ -1979,14 +1979,37 @@ do_digraph(int c)
  * If not found return NULL.
  */
     char_u *
-get_digraph_for_char(val)
-    int val;
+get_digraph_for_char(int val_arg)
 {
+    int                val = val_arg;
     int                i;
     int                use_defaults;
     digr_T     *dp;
     static      char_u      r[3];
 
+#if defined(FEAT_MBYTE) && defined(USE_UNICODE_DIGRAPHS)
+    if (!enc_utf8)
+    {
+       char_u      buf[6], *to;
+       vimconv_T   vc;
+
+       // convert the character from 'encoding' to Unicode
+       i = mb_char2bytes(val, buf);
+       vc.vc_type = CONV_NONE;
+       if (convert_setup(&vc, p_enc, (char_u *)"utf-8") == OK)
+       {
+           vc.vc_fail = TRUE;
+           to = string_convert(&vc, buf, &i);
+           if (to != NULL)
+           {
+               val = utf_ptr2char(to);
+               vim_free(to);
+           }
+           (void)convert_setup(&vc, NULL, NULL);
+       }
+    }
+#endif
+
     for (use_defaults = 0; use_defaults <= 1; use_defaults++)
     {
        if (use_defaults == 0)
index 271066df41738454e5f8e3a38e0622277fc7fa63..d5b0a7b72e8b324c066a066a751cfb1fa645d242 100644 (file)
@@ -465,4 +465,16 @@ func Test_show_digraph()
   bwipe!
 endfunc
 
+func Test_show_digraph_cp1251()
+  if !has('multi_byte')
+    return
+  endif
+  new
+  set encoding=cp1251
+  call Put_Dig("='")
+  call assert_equal("\n<\xfa>  <|z>  <M-z>  250,  Hex fa,  Oct 372, Digr ='", execute('ascii'))
+  set encoding=utf-8
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index f7c5f2efa1b42c91305c1591d18a31de1511bed2..68b4c26b861396a16bf11795648b8a329e20ec60 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    59,
 /**/
     58,
 /**/