diff --git a/src/characters/Character.h b/src/characters/Character.h index 4c4949f6..08afb5ea 100644 --- a/src/characters/Character.h +++ b/src/characters/Character.h @@ -153,6 +153,15 @@ public: QVector ucs4Str = str.toUcs4(); return stringWidth(ucs4Str.constData(), ucs4Str.length()); } + + inline bool canBeGrouped(bool bidirectionalEnabled, bool isDoubleWidth) const + { + if (QChar::script(character) == QChar::Script_Braille) { + return false; + } + + return character <= 0x7e || (rendition & RE_EXTENDED_CHAR) || (bidirectionalEnabled && !isDoubleWidth); + } }; constexpr bool operator==(const Character &a, const Character &b) diff --git a/src/terminalDisplay/TerminalPainter.cpp b/src/terminalDisplay/TerminalPainter.cpp index f7d31f2f..0feb5b04 100644 --- a/src/terminalDisplay/TerminalPainter.cpp +++ b/src/terminalDisplay/TerminalPainter.cpp @@ -138,24 +138,11 @@ void TerminalPainter::drawContents(Character *image, return currentScript == script; }; - // returns true if it's a braile char, false otherwise. - const auto isBraileChar = [&](int column) -> bool { - char32_t maybeBraile = image[display->loc(column, y)].character; - return maybeBraile >= 0x2800 && maybeBraile <= 0x28FF; - }; - - const auto canBeGrouped = [&](int column) { - if (isBraileChar(x)) { - return false; - } - - return image[display->loc(column, y)].character <= 0x7e || (image[display->loc(column, y)].rendition & RE_EXTENDED_CHAR) - || (bidiEnabled && !doubleWidth); - }; + const Character &char_value = image[display->loc(x, y)]; - if (canBeGrouped(x)) { + if (char_value.canBeGrouped(bidiEnabled, doubleWidth)) { while (isInsideDrawArea(x + len) && hasSameColors(x + len) && hasSameRendition(x + len) && hasSameWidth(x + len) - && hasSameLineDrawStatus(x + len) && isSameScript(x + len) && canBeGrouped(x + len)) { + && hasSameLineDrawStatus(x + len) && isSameScript(x + len) && image[display->loc(x + len, y)].canBeGrouped(bidiEnabled, doubleWidth)) { const uint c = image[display->loc(x + len, y)].character; if ((image[display->loc(x + len, y)].rendition & RE_EXTENDED_CHAR) != 0) { // sequence of characters