]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.780 v7.3.780
authorBram Moolenaar <Bram@vim.org>
Wed, 23 Jan 2013 16:17:10 +0000 (17:17 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 23 Jan 2013 16:17:10 +0000 (17:17 +0100)
Problem:    char2nr() and nr2char() always use 'encoding'.
Solution:   Add argument to use utf-8 characters. (Yasuhiro Matsumoto)

runtime/doc/eval.txt
src/eval.c
src/version.c

index 6057d61a38fb11404b9221bd17e021a0268f58c6..7594ea98059592de6f4d954e33137ef36da1dafa 100644 (file)
@@ -1716,7 +1716,7 @@ call( {func}, {arglist} [, {dict}])
                                any     call {func} with arguments {arglist}
 ceil( {expr})                  Float   round {expr} up
 changenr()                     Number  current change number
-char2nr( {expr})               Number  ASCII value of first char in {expr}
+char2nr( {expr}[, {utf8}])     Number  ASCII/UTF8 value of first char in {expr}
 cindent( {lnum})               Number  C indent for line {lnum}
 clearmatches()                 none    clear all matches
 col( {expr})                   Number  column nr of cursor or mark
@@ -1873,7 +1873,7 @@ mkdir( {name} [, {path} [, {prot}]])
 mode( [expr])                  String  current editing mode
 mzeval( {expr})                        any     evaluate |MzScheme| expression
 nextnonblank( {lnum})          Number  line nr of non-blank line >= {lnum}
-nr2char( {expr})               String  single char with ASCII value {expr}
+nr2char( {expr}[, {utf8}])     String  single char with ASCII/UTF8 value {expr}
 or( {expr}, {expr})            Number  bitwise OR
 pathshorten( {expr})           String  shorten directory names in a path
 pow( {x}, {y})                 Float   {x} to the power of {y}
@@ -2294,14 +2294,16 @@ changenr()                                              *changenr()*
                redo it is the number of the redone change.  After undo it is
                one less than the number of the undone change.
 
-char2nr({expr})                                                *char2nr()*
+char2nr({expr}[, {utf8}])                                      *char2nr()*
                Return number value of the first char in {expr}.  Examples: >
                        char2nr(" ")            returns 32
                        char2nr("ABC")          returns 65
-<              The current 'encoding' is used.  Example for "utf-8": >
+<              When {utf8} is omitted or zero, the current 'encoding' is used.
+               Example for "utf-8": >
                        char2nr("á")            returns 225
                        char2nr("á"[0])         returns 195
-<              A combining character is a separate character.
+<              With {utf8} set to 1, always treat as utf-8 characters.
+               A combining character is a separate character.
                |nr2char()| does the opposite.
 
 cindent({lnum})                                                *cindent()*
@@ -4371,14 +4373,16 @@ nextnonblank({lnum})                                    *nextnonblank()*
                below it, zero is returned.
                See also |prevnonblank()|.
 
-nr2char({expr})                                                *nr2char()*
+nr2char({expr}[, {utf8}])                              *nr2char()*
                Return a string with a single character, which has the number
                value {expr}.  Examples: >
                        nr2char(64)             returns "@"
                        nr2char(32)             returns " "
-<              The current 'encoding' is used.  Example for "utf-8": >
+<              When {utf8} is omitted or zero, the current 'encoding' is used.
+               Example for "utf-8": >
                        nr2char(300)            returns I with bow character
-<              Note that a NUL character in the file is specified with
+<              With {utf8} set to 1, always return utf-8 characters.
+               Note that a NUL character in the file is specified with
                nr2char(10), because NULs are represented with newline
                characters.  nr2char(0) is a real NUL and terminates the
                string, thus results in an empty string.
index f645e9683e8090abd9f8f68b3cce229a17c65d0d..46a1963de94b3176e9f11c1997793738b5edadae 100644 (file)
@@ -7854,7 +7854,7 @@ static struct fst
     {"ceil",           1, 1, f_ceil},
 #endif
     {"changenr",       0, 0, f_changenr},
-    {"char2nr",                1, 1, f_char2nr},
+    {"char2nr",                1, 2, f_char2nr},
     {"cindent",                1, 1, f_cindent},
     {"clearmatches",   0, 0, f_clearmatches},
     {"col",            1, 1, f_col},
@@ -8003,7 +8003,7 @@ static struct fst
     {"mzeval",         1, 1, f_mzeval},
 #endif
     {"nextnonblank",   1, 1, f_nextnonblank},
-    {"nr2char",                1, 1, f_nr2char},
+    {"nr2char",                1, 2, f_nr2char},
     {"or",             2, 2, f_or},
     {"pathshorten",    1, 1, f_pathshorten},
 #ifdef FEAT_FLOAT
@@ -9303,7 +9303,17 @@ f_char2nr(argvars, rettv)
 {
 #ifdef FEAT_MBYTE
     if (has_mbyte)
-       rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
+    {
+       int     utf8 = 0;
+
+       if (argvars[1].v_type != VAR_UNKNOWN)
+           utf8 = get_tv_number_chk(&argvars[1], NULL);
+
+       if (utf8)
+           rettv->vval.v_number = (*utf_ptr2char)(get_tv_string(&argvars[0]));
+       else
+           rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
+    }
     else
 #endif
     rettv->vval.v_number = get_tv_string(&argvars[0])[0];
@@ -14360,7 +14370,16 @@ f_nr2char(argvars, rettv)
 
 #ifdef FEAT_MBYTE
     if (has_mbyte)
-       buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+    {
+       int     utf8 = 0;
+
+       if (argvars[1].v_type != VAR_UNKNOWN)
+           utf8 = get_tv_number_chk(&argvars[1], NULL);
+       if (utf8)
+           buf[(*utf_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+       else
+           buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+    }
     else
 #endif
     {
index a8cfdc567e82205e0206667743d943000e112113..72b552ae56577c471d2cb5b51b983a2cb88d4a53 100644 (file)
@@ -725,6 +725,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    780,
 /**/
     779,
 /**/