Add QTextDocumentFragment::toRawText()

Like QTextDocument::toRawText(), QTextDocumentFragment::toRawText()
does allow access to the raw string without normalizing nbsp,
line separator, paragraph separator unicode characters.

[ChangeLog][QtGui][Text] Added QTextDocumentFragment::toRawText() function.

Task-number: QTBUG-99572
Change-Id: Ia74150a3870ea0e6326fdcda4d9d0410019124ae
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
This commit is contained in:
Kai Köhne 2022-01-05 08:29:21 +01:00
parent f19ce3898e
commit 93c1f481ab
3 changed files with 36 additions and 6 deletions

View File

@ -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
/*!

View File

@ -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

View File

@ -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;