Mercurial > vim
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; |