I got benchmark result of this patch.
---------------------------
scriptencoding utf-8
function! s:nr2byte(nr)
if a:nr < 0x80
return nr2char(a:nr)
elseif a:nr < 0x800
return nr2char(a:nr/64+192).nr2char(a:nr%64+128)
else
return
nr2char(a:nr/4096%16+224).nr2char(a:nr/64%64+128).nr2char(a:nr%64+128)
endif
endfunction
function! s:nr2enc_char(charcode)
if &encoding == 'utf-8'
return nr2char(a:charcode)
endif
let char = s:nr2byte(a:charcode)
if strlen(char) > 1
let iconv_str = iconv(char, 'utf-8', &encoding)
if iconv_str != ""
let char = strtrans(iconv_str)
endif
endif
return char
endfunction
let s = repeat("helloworld世界", 20000)
let start = reltime()
let text1 = substitute(s, '&#\(\d\+\);','\=s:nr2enc_char(submatch(1))', 'g')
let time1 = reltimestr(reltime(start))
let start = reltime()
let text2 = iconv(substitute(s, '&#\(\d\+\);','\=nr2char(submatch(1), 1)',
'g'), "utf-8", &encoding)
let time2 = reltimestr(reltime(start))
---------------------------
s:nr2enc_char: 18.999306
nr2char: 15.942552
of course, nr2char bits faster.
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php