From 94583703e12fc46a1ca16718a18579f8db2be0f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 24 Jun 2024 20:21:46 +0200 Subject: [PATCH] vt: don't ignore VS-15 (text presentation) When we encounter either VS-15 or VS-16, set the grapheme width to 1 or 2 explicitly. --- CHANGELOG.md | 2 ++ vt.c | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06225366..4615b3e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -99,12 +99,14 @@ ([#1744][1744]). * Regression: alpha changes through OSC-11 sequences not taking effect until window is resized. +* VS15 being ignored ([#1742][1742]). [1694]: https://codeberg.org/dnkl/foot/issues/1694 [1717]: https://codeberg.org/dnkl/foot/issues/1717 [1718]: https://codeberg.org/dnkl/foot/issues/1718 [1734]: https://codeberg.org/dnkl/foot/issues/1734 [1744]: https://codeberg.org/dnkl/foot/issues/1744 +[1742]: https://codeberg.org/dnkl/foot/issues/1742 ### Security diff --git a/vt.c b/vt.c index a8a0f0fb..41bb305d 100644 --- a/vt.c +++ b/vt.c @@ -852,9 +852,11 @@ action_utf8_print(struct terminal *term, char32_t wc) break; case GRAPHEME_WIDTH_DOUBLE: + new_cc->width = min(grapheme_width + width, 2); + #if defined(FOOT_GRAPHEME_CLUSTERING) if (unlikely(grapheme_clustering && - wc == 0xfe0f && + (wc == 0xfe0e || wc == 0xfe0f) && new_cc->count == 2)) { /* Only emojis should be affected by VS16 */ @@ -862,11 +864,10 @@ action_utf8_print(struct terminal *term, char32_t wc) utf8proc_get_property(new_cc->chars[0]); if (props->boundclass == UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC) - width = 2; + new_cc->width = wc - 0xfe0d; /* 1 for VS-15, 2 for VS-16 */ } #endif - new_cc->width = min(grapheme_width + width, 2); break; case GRAPHEME_WIDTH_WCSWIDTH: