From 67cb0f6762768ee0d32adef1d7307ff7bb985407 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Thu, 30 Jan 2025 23:40:14 +0900 Subject: Fix editing of text containing surrogate characters. This relates to issue #162. Signed-off-by: Michele Calgaro (cherry picked from commit 9c648bea9bfb1113c070a05b36f78ff006d0877a) --- src/widgets/qtextedit.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/widgets/qtextedit.cpp') diff --git a/src/widgets/qtextedit.cpp b/src/widgets/qtextedit.cpp index bac58af15..73e800be8 100644 --- a/src/widgets/qtextedit.cpp +++ b/src/widgets/qtextedit.cpp @@ -1783,8 +1783,20 @@ void TQTextEdit::doKeyboardAction( KeyboardAction action ) undoRedoInfo.index = cursor->index(); undoRedoInfo.d->text = TQString::null; } - undoRedoInfo.d->text.insert( 0, cursor->paragraph()->at( cursor->index()-1 ), TRUE ); - undoRedoInfo.index = cursor->index()-1; + int cur_idx = cursor->index(); + const TQTextParagraph *para = cursor->paragraph(); + if (para->at(cur_idx - 1)->c.isLowSurrogate() && cur_idx > 1 && + para->at(cur_idx - 2)->c.isHighSurrogate()) + { + undoRedoInfo.d->text.insert( 0, para->at(cur_idx - 1), TRUE ); + undoRedoInfo.d->text.insert( 0, para->at(cur_idx - 2), TRUE ); + undoRedoInfo.index = cursor->index() - 2; + } + else + { + undoRedoInfo.d->text.insert( 0, para->at(cur_idx - 1), TRUE ); + undoRedoInfo.index = cursor->index() - 1; + } } cursor->removePreviousChar(); lastFormatted = cursor->paragraph(); -- cgit v1.2.3