Created
January 27, 2012 00:44
-
-
Save mattn/1686178 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r 54d621a3b561 runtime/doc/eval.txt | |
--- a/runtime/doc/eval.txt Thu Jan 26 20:58:26 2012 +0100 | |
+++ b/runtime/doc/eval.txt Fri Jan 27 09:44:06 2012 +0900 | |
@@ -1713,7 +1713,7 @@ | |
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 | |
@@ -1867,7 +1867,7 @@ | |
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} | |
@@ -2283,14 +2283,16 @@ | |
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()* | |
@@ -4333,14 +4335,16 @@ | |
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. | |
diff -r 54d621a3b561 src/eval.c | |
--- a/src/eval.c Thu Jan 26 20:58:26 2012 +0100 | |
+++ b/src/eval.c Fri Jan 27 09:44:06 2012 +0900 | |
@@ -7747,7 +7747,7 @@ | |
{"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}, | |
@@ -7893,7 +7893,7 @@ | |
{"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 | |
@@ -9170,7 +9170,17 @@ | |
{ | |
#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]; | |
@@ -14130,7 +14140,16 @@ | |
#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 | |
{ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment