From d06c3f4d7f838c8f8ce12c910ea54e3904346e3c Mon Sep 17 00:00:00 2001 From: Mehran Date: Thu, 23 Jul 2026 17:21:25 +0300 Subject: [PATCH] Treat invisible characters as spaces. --- ui/text/text.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ui/text/text.cpp b/ui/text/text.cpp index 3aef7a7a..ac3d6d6e 100644 --- a/ui/text/text.cpp +++ b/ui/text/text.cpp @@ -2328,7 +2328,18 @@ bool IsSpace(QChar ch) { || (ch == QChar::LineSeparator) || (ch == QChar::ObjectReplacementCharacter) || (ch == QChar::CarriageReturn) - || (ch == QChar::Tabulation); + || (ch == QChar::Tabulation) + || (ch == QChar::ByteOrderMark) + || (ch == QChar(8203)) // zero width space + || (ch == QChar(0x200C)) // zero width non-joiner + || (ch == QChar(0x200D)) // zero width joiner + || (ch == QChar(0x2060)) // word joiner + || (ch == QChar(0x1160)) // hangul jungseong filler + || (ch == QChar(0x3164)) // hangul filler + || (ch == QChar(0xFFA0)) // halfwidth hangul filler + || (ch == QChar(0x17B4)) // khmer vowel inherent aq + || (ch == QChar(0x17B5)) // khmer vowel inherent aa + || (ch == QChar(0x2800));// braille pattern blank } bool IsDiacritic(QChar ch) { // diacritic and variation selectors @@ -2357,8 +2368,7 @@ bool IsReplacedBySpace(QChar ch) { bool IsTrimmed(QChar ch) { return ((ch != QChar::ObjectReplacementCharacter) && IsSpace(ch)) - || IsBad(ch) - || (ch == QChar(8203)); // zero width space + || IsBad(ch); } QSize CountOptimalTextSize(