To: vim_dev@googlegroups.com Subject: Patch 7.3.780 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.3.780 Problem: char2nr() and nr2char() always use 'encoding'. Solution: Add argument to use utf-8 characters. (Yasuhiro Matsumoto) Files: runtime/doc/eval.txt, src/eval.c *** ../vim-7.3.779/runtime/doc/eval.txt 2012-12-05 16:10:21.000000000 +0100 --- runtime/doc/eval.txt 2013-01-23 17:00:52.000000000 +0100 *************** *** 1705,1711 **** 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} cindent( {lnum}) Number C indent for line {lnum} clearmatches() none clear all matches col( {expr}) Number column nr of cursor or mark --- 1716,1722 ---- any call {func} with arguments {arglist} ceil( {expr}) Float round {expr} up changenr() Number current change number ! 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 *************** *** 1862,1868 **** 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} 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} --- 1873,1879 ---- mode( [expr]) String current editing mode mzeval( {expr}) any evaluate |MzScheme| expression nextnonblank( {lnum}) Number line nr of non-blank line >= {lnum} ! 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} *************** *** 2282,2295 **** 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()* 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": > char2nr("á") returns 225 char2nr("á"[0]) returns 195 ! < |nr2char()| does the opposite. cindent({lnum}) *cindent()* Get the amount of indent for line {lnum} according the C --- 2294,2310 ---- redo it is the number of the redone change. After undo it is one less than the number of the undone change. ! char2nr({expr}[, {utf8}]) *char2nr()* Return number value of the first char in {expr}. Examples: > char2nr(" ") returns 32 char2nr("ABC") returns 65 ! < When {utf8} is omitted or zero, the current 'encoding' is used. ! Example for "utf-8": > char2nr("á") returns 225 char2nr("á"[0]) returns 195 ! < 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()* Get the amount of indent for line {lnum} according the C *** ../vim-7.3.779/src/eval.c 2013-01-23 15:53:08.000000000 +0100 --- src/eval.c 2013-01-23 16:57:48.000000000 +0100 *************** *** 7854,7860 **** {"ceil", 1, 1, f_ceil}, #endif {"changenr", 0, 0, f_changenr}, ! {"char2nr", 1, 1, f_char2nr}, {"cindent", 1, 1, f_cindent}, {"clearmatches", 0, 0, f_clearmatches}, {"col", 1, 1, f_col}, --- 7854,7860 ---- {"ceil", 1, 1, f_ceil}, #endif {"changenr", 0, 0, f_changenr}, ! {"char2nr", 1, 2, f_char2nr}, {"cindent", 1, 1, f_cindent}, {"clearmatches", 0, 0, f_clearmatches}, {"col", 1, 1, f_col}, *************** *** 8003,8009 **** {"mzeval", 1, 1, f_mzeval}, #endif {"nextnonblank", 1, 1, f_nextnonblank}, ! {"nr2char", 1, 1, f_nr2char}, {"or", 2, 2, f_or}, {"pathshorten", 1, 1, f_pathshorten}, #ifdef FEAT_FLOAT --- 8003,8009 ---- {"mzeval", 1, 1, f_mzeval}, #endif {"nextnonblank", 1, 1, f_nextnonblank}, ! {"nr2char", 1, 2, f_nr2char}, {"or", 2, 2, f_or}, {"pathshorten", 1, 1, f_pathshorten}, #ifdef FEAT_FLOAT *************** *** 9303,9309 **** { #ifdef FEAT_MBYTE if (has_mbyte) ! rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0])); else #endif rettv->vval.v_number = get_tv_string(&argvars[0])[0]; --- 9303,9319 ---- { #ifdef FEAT_MBYTE if (has_mbyte) ! { ! 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,14366 **** #ifdef FEAT_MBYTE if (has_mbyte) ! buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL; else #endif { --- 14370,14385 ---- #ifdef FEAT_MBYTE if (has_mbyte) ! { ! 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 { *** ../vim-7.3.779/src/version.c 2013-01-23 16:43:07.000000000 +0100 --- src/version.c 2013-01-23 17:06:36.000000000 +0100 *************** *** 727,728 **** --- 727,730 ---- { /* Add new patch number below this line */ + /**/ + 780, /**/ -- A real patriot is the fellow who gets a parking ticket and rejoices that the system works. /// 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 ///