comparison src/eval.c @ 4051:42edc5dac33c v7.3.780

updated for version 7.3.780 Problem: char2nr() and nr2char() always use 'encoding'. Solution: Add argument to use utf-8 characters. (Yasuhiro Matsumoto)
author Bram Moolenaar <bram@vim.org>
date Wed, 23 Jan 2013 17:17:10 +0100
parents 80b041b994d1
children 16e8a09e8ab0
comparison
equal deleted inserted replaced
4050:25e5c2ec157a 4051:42edc5dac33c
7852 {"call", 2, 3, f_call}, 7852 {"call", 2, 3, f_call},
7853 #ifdef FEAT_FLOAT 7853 #ifdef FEAT_FLOAT
7854 {"ceil", 1, 1, f_ceil}, 7854 {"ceil", 1, 1, f_ceil},
7855 #endif 7855 #endif
7856 {"changenr", 0, 0, f_changenr}, 7856 {"changenr", 0, 0, f_changenr},
7857 {"char2nr", 1, 1, f_char2nr}, 7857 {"char2nr", 1, 2, f_char2nr},
7858 {"cindent", 1, 1, f_cindent}, 7858 {"cindent", 1, 1, f_cindent},
7859 {"clearmatches", 0, 0, f_clearmatches}, 7859 {"clearmatches", 0, 0, f_clearmatches},
7860 {"col", 1, 1, f_col}, 7860 {"col", 1, 1, f_col},
7861 #if defined(FEAT_INS_EXPAND) 7861 #if defined(FEAT_INS_EXPAND)
7862 {"complete", 2, 2, f_complete}, 7862 {"complete", 2, 2, f_complete},
8001 {"mode", 0, 1, f_mode}, 8001 {"mode", 0, 1, f_mode},
8002 #ifdef FEAT_MZSCHEME 8002 #ifdef FEAT_MZSCHEME
8003 {"mzeval", 1, 1, f_mzeval}, 8003 {"mzeval", 1, 1, f_mzeval},
8004 #endif 8004 #endif
8005 {"nextnonblank", 1, 1, f_nextnonblank}, 8005 {"nextnonblank", 1, 1, f_nextnonblank},
8006 {"nr2char", 1, 1, f_nr2char}, 8006 {"nr2char", 1, 2, f_nr2char},
8007 {"or", 2, 2, f_or}, 8007 {"or", 2, 2, f_or},
8008 {"pathshorten", 1, 1, f_pathshorten}, 8008 {"pathshorten", 1, 1, f_pathshorten},
8009 #ifdef FEAT_FLOAT 8009 #ifdef FEAT_FLOAT
8010 {"pow", 2, 2, f_pow}, 8010 {"pow", 2, 2, f_pow},
8011 #endif 8011 #endif
9301 typval_T *argvars; 9301 typval_T *argvars;
9302 typval_T *rettv; 9302 typval_T *rettv;
9303 { 9303 {
9304 #ifdef FEAT_MBYTE 9304 #ifdef FEAT_MBYTE
9305 if (has_mbyte) 9305 if (has_mbyte)
9306 rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0])); 9306 {
9307 int utf8 = 0;
9308
9309 if (argvars[1].v_type != VAR_UNKNOWN)
9310 utf8 = get_tv_number_chk(&argvars[1], NULL);
9311
9312 if (utf8)
9313 rettv->vval.v_number = (*utf_ptr2char)(get_tv_string(&argvars[0]));
9314 else
9315 rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
9316 }
9307 else 9317 else
9308 #endif 9318 #endif
9309 rettv->vval.v_number = get_tv_string(&argvars[0])[0]; 9319 rettv->vval.v_number = get_tv_string(&argvars[0])[0];
9310 } 9320 }
9311 9321
14358 { 14368 {
14359 char_u buf[NUMBUFLEN]; 14369 char_u buf[NUMBUFLEN];
14360 14370
14361 #ifdef FEAT_MBYTE 14371 #ifdef FEAT_MBYTE
14362 if (has_mbyte) 14372 if (has_mbyte)
14363 buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL; 14373 {
14374 int utf8 = 0;
14375
14376 if (argvars[1].v_type != VAR_UNKNOWN)
14377 utf8 = get_tv_number_chk(&argvars[1], NULL);
14378 if (utf8)
14379 buf[(*utf_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
14380 else
14381 buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
14382 }
14364 else 14383 else
14365 #endif 14384 #endif
14366 { 14385 {
14367 buf[0] = (char_u)get_tv_number(&argvars[0]); 14386 buf[0] = (char_u)get_tv_number(&argvars[0]);
14368 buf[1] = NUL; 14387 buf[1] = NUL;