mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 14:08:32 +00:00
vim-patch:8.2.{1536,1540}: charclass() (#19748)
vim-patch:8.2.1536: cannot get the class of a character; emoji widths are wrong Problem: Cannot get the class of a character; emoji widths are wrong in some environments. Solution: Add charclass(). Update some emoji widths. Add script to check emoji widths.4e4473c927
Use latest charclass() docs from Vim. Rewrite DoIt() in emoji_list.vim in Lua. Omit emoji table updates: - emoji_width update looks wrong as these added ranges are only double-width when followed by 0xFE0F. - Other updates are too old. vim-patch:8.2.1540: the user cannot try out emoji character widths Problem: The user cannot try out emoji character widths. Solution: Move the emoji script to the runtime/tools directory.98945560c1
This commit is contained in:
@@ -1182,6 +1182,11 @@ int utf_class_tab(const int c, const uint64_t *const chartab)
|
||||
return 1; // punctuation
|
||||
}
|
||||
|
||||
// emoji
|
||||
if (intable(emoji_all, ARRAY_SIZE(emoji_all), c)) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
// binary search in table
|
||||
while (top >= bot) {
|
||||
mid = (bot + top) / 2;
|
||||
@@ -1194,11 +1199,6 @@ int utf_class_tab(const int c, const uint64_t *const chartab)
|
||||
}
|
||||
}
|
||||
|
||||
// emoji
|
||||
if (intable(emoji_all, ARRAY_SIZE(emoji_all), c)) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
// most other characters are "word" characters
|
||||
return 2;
|
||||
}
|
||||
@@ -2858,3 +2858,14 @@ void f_setcellwidths(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
xfree(cw_table_save);
|
||||
redraw_all_later(NOT_VALID);
|
||||
}
|
||||
|
||||
void f_charclass(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
if (argvars[0].v_type != VAR_STRING
|
||||
|| argvars[0].vval.v_string == NULL
|
||||
|| *argvars[0].vval.v_string == NUL) {
|
||||
emsg(_(e_stringreq));
|
||||
return;
|
||||
}
|
||||
rettv->vval.v_number = mb_get_class((const char_u *)argvars[0].vval.v_string);
|
||||
}
|
||||
|
Reference in New Issue
Block a user