summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextdocumentfragment.cpp32
-rw-r--r--src/gui/text/qtextdocumentfragment.h1
-rw-r--r--tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp9
3 files changed, 36 insertions, 6 deletions
diff --git a/src/gui/text/qtextdocumentfragment.cpp b/src/gui/text/qtextdocumentfragment.cpp
index 24f2198d4e..f263e96154 100644
--- a/src/gui/text/qtextdocumentfragment.cpp
+++ b/src/gui/text/qtextdocumentfragment.cpp
@@ -266,12 +266,11 @@ void QTextDocumentFragmentPrivate::insert(QTextCursor &_cursor) const
document fragment. Document fragments can also be created by the
static functions, fromPlainText() and fromHtml().
- The contents of a document fragment can be obtained as plain text
- by using the toPlainText() function, or it can be obtained as HTML
+ The contents of a document fragment can be obtained as raw text
+ by using the toRawText() function, or it can be obtained as HTML
with toHtml().
*/
-
/*!
Constructs an empty QTextDocumentFragment.
@@ -358,10 +357,16 @@ bool QTextDocumentFragment::isEmpty() const
}
/*!
- Returns the document fragment's text as plain text (i.e. with no
- formatting information).
+ This function returns the same as toRawText(), but will replace
+ some unicode characters with ASCII alternatives.
+ In particular, no-break space (U+00A0) is replaced by a regular
+ space (U+0020), and both paragraph (U+2029) and line (U+2028)
+ separators are replaced by line feed (U+000A).
+ If you need the precise contents of the document, use toRawText()
+ instead.
- \sa toHtml()
+
+ \sa toHtml(), toRawText()
*/
QString QTextDocumentFragment::toPlainText() const
{
@@ -371,6 +376,21 @@ QString QTextDocumentFragment::toPlainText() const
return d->doc->toPlainText();
}
+/*!
+ Returns the document fragment's text as raw text (i.e. with no
+ formatting information).
+
+ \since 6.4
+ \sa toHtml(), toPlainText()
+*/
+QString QTextDocumentFragment::toRawText() const
+{
+ if (!d)
+ return QString();
+
+ return d->doc->toRawText();
+}
+
#ifndef QT_NO_TEXTHTMLPARSER
/*!
diff --git a/src/gui/text/qtextdocumentfragment.h b/src/gui/text/qtextdocumentfragment.h
index 2283b06c6c..37d7006ae6 100644
--- a/src/gui/text/qtextdocumentfragment.h
+++ b/src/gui/text/qtextdocumentfragment.h
@@ -64,6 +64,7 @@ public:
bool isEmpty() const;
QString toPlainText() const;
+ QString toRawText() const;
#ifndef QT_NO_TEXTHTMLPARSER
QString toHtml() const;
#endif // QT_NO_TEXTHTMLPARSER
diff --git a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
index 24704bec37..eaa29ca5f3 100644
--- a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
+++ b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
@@ -100,6 +100,7 @@ private slots:
void inheritAlignment();
void dontEmitEmptyNodeWhenEmptyTagIsFollowedByCloseTag();
void toPlainText();
+ void toRawText();
void copyTableRow();
void copyTableColumn();
void copySubTable();
@@ -1094,6 +1095,14 @@ void tst_QTextDocumentFragment::toPlainText()
QCOMPARE(doc->blockCount(), 3);
}
+void tst_QTextDocumentFragment::toRawText()
+{
+ // Make sure nbsp, line separator, paragraph separator is preserved
+ doc->setPlainText("Hello\u0A00\u2028\u2029World");
+
+ QCOMPARE(QTextDocumentFragment(doc).toRawText(), "Hello\u0A00\u2028\u2029World");
+}
+
void tst_QTextDocumentFragment::copyTableRow()
{
QTextDocumentFragment frag;