From 3a86b60032bd659c2b12e984abb40cee93568558 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sun, 29 Sep 2024 14:07:21 +0200 Subject: docs: misc Co-authored-by: David Pedersen Co-authored-by: Gregory Anders Co-authored-by: Leo Schlosser Co-authored-by: zeertzjq --- src/nvim/mbyte.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'src/nvim/mbyte.c') diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index 01e720283e..6340ff8c94 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -454,9 +454,6 @@ static bool prop_is_emojilike(const utf8proc_property_t *prop) /// Is only correct for characters >= 0x80. /// When p_ambw is "double", return 2 for a character with East Asian Width /// class 'A'(mbiguous). -/// -/// @note Tables `doublewidth` and `ambiguous` are generated by -/// gen_unicode_tables.lua, which must be manually invoked as needed. int utf_char2cells(int c) { if (c < 0x80) { -- cgit From 23290e7676e6f0a5cb5d9dc9fa1933df815aed33 Mon Sep 17 00:00:00 2001 From: bfredl Date: Sun, 29 Sep 2024 10:05:27 +0200 Subject: feat(editor): handle new multibyte sequences in normal mode replacement while the implementation is not tied to screen chars, it is a reasonable expectation to support the same size. If nvim is able to display a multibyte character, it will accept the same character as input, including in normal mode commands like r{char} --- src/nvim/mbyte.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/nvim/mbyte.c') diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index 6340ff8c94..65f718f925 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -839,6 +839,13 @@ bool utf_composinglike(const char *p1, const char *p2, GraphemeState *state) return arabic_combine(first, second); } +/// same as utf_composinglike but operating on UCS-4 values +bool utf_iscomposing(int c1, int c2, GraphemeState *state) +{ + return (!utf8proc_grapheme_break_stateful(c1, c2, state) + || arabic_combine(c1, c2)); +} + /// Get the screen char at the beginning of a string /// /// Caller is expected to check for things like unprintable chars etc @@ -1852,8 +1859,7 @@ StrCharInfo utfc_next_impl(StrCharInfo cur) while (true) { uint8_t const next_len = utf8len_tab[*next]; int32_t const next_code = utf_ptr2CharInfo_impl(next, (uintptr_t)next_len); - if (utf8proc_grapheme_break_stateful(prev_code, next_code, &state) - && !arabic_combine(prev_code, next_code)) { + if (!utf_iscomposing(prev_code, next_code, &state)) { return (StrCharInfo){ .ptr = (char *)next, .chr = (CharInfo){ .value = next_code, .len = (next_code < 0 ? 1 : next_len) }, -- cgit