summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextengine.cpp8
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp33
2 files changed, 40 insertions, 1 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index d0c2779a65..17a91f5a6a 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1635,8 +1635,14 @@ void QTextEngine::itemize() const
if (analysis->bidiLevel % 2)
--analysis->bidiLevel;
analysis->flags = QScriptAnalysis::LineOrParagraphSeparator;
- if (option.flags() & QTextOption::ShowLineAndParagraphSeparators)
+ if (option.flags() & QTextOption::ShowLineAndParagraphSeparators) {
+ const int offset = uc - string;
+ layoutData->string.detach();
+ string = reinterpret_cast<const ushort *>(layoutData->string.unicode());
+ uc = string + offset;
+ e = uc + length;
*const_cast<ushort*>(uc) = 0x21B5; // visual line separator
+ }
break;
case QChar::Tabulation:
analysis->flags = QScriptAnalysis::Tab;
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index de0c2d6dbe..e778232461 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -142,6 +142,7 @@ private slots:
void xToCursorForLigatures();
void cursorInNonStopChars();
void nbsp();
+ void noModificationOfInputString();
private:
QFont testFont;
@@ -2176,5 +2177,37 @@ void tst_QTextLayout::layoutWithCustomTabStops()
QVERIFY(longWidth > shortWidth);
}
+void tst_QTextLayout::noModificationOfInputString()
+{
+ QString s = QString(QChar(QChar::LineSeparator));
+ {
+ QTextLayout layout;
+ layout.setText(s);
+
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QCOMPARE(s.size(), 1);
+ QCOMPARE(s.at(0), QChar(QChar::LineSeparator));
+ }
+
+ {
+ QTextLayout layout;
+ layout.setText(s);
+
+ QTextOption option;
+ option.setFlags(QTextOption::ShowLineAndParagraphSeparators);
+ layout.setTextOption(option);
+
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QCOMPARE(s.size(), 1);
+ QCOMPARE(s.at(0), QChar(QChar::LineSeparator));
+ }
+}
+
QTEST_MAIN(tst_QTextLayout)
#include "tst_qtextlayout.moc"