Mercurial > vim
diff src/ui.c @ 714:0f9f4761ad9c v7.0216
updated for version 7.0216
author | vimboss |
---|---|
date | Mon, 06 Mar 2006 23:29:24 +0000 |
parents | 9090f866cd57 |
children | 6252da4e8223 |
line wrap: on
line diff
--- a/src/ui.c +++ b/src/ui.c @@ -1173,7 +1173,7 @@ clip_copy_modeless_selection(both) if (enc_dbcs != 0) len *= 2; /* max. 2 bytes per display cell */ else if (enc_utf8) - len *= 9; /* max. 3 bytes per display cell + 2 composing chars */ + len *= MB_MAXBYTES; #endif buffer = lalloc((long_u)len, TRUE); if (buffer == NULL) /* out of memory */ @@ -1234,6 +1234,7 @@ clip_copy_modeless_selection(both) else if (enc_utf8) { int off; + int i; off = LineOffset[row]; for (i = start_col; i < end_col; ++i) @@ -1245,14 +1246,13 @@ clip_copy_modeless_selection(both) else { bufp += utf_char2bytes(ScreenLinesUC[off + i], bufp); - if (ScreenLinesC1[off + i] != 0) + for (i = 0; i < Screen_mco; ++i) { - /* Add one or two composing characters. */ - bufp += utf_char2bytes(ScreenLinesC1[off + i], + /* Add a composing character. */ + if (ScreenLinesC[i][off + i] == 0) + break; + bufp += utf_char2bytes(ScreenLinesC[i][off + i], bufp); - if (ScreenLinesC2[off + i] != 0) - bufp += utf_char2bytes(ScreenLinesC2[off + i], - bufp); } } /* Skip right halve of double-wide character. */