Improve support for HTML entities in StyledText
authorKai Uwe Broulik <kde@privat.broulik.de>
Wed, 27 May 2015 08:52:59 +0000 (10:52 +0200)
committerKai Uwe Broulik <kde@privat.broulik.de>
Fri, 3 Jul 2015 14:47:14 +0000 (14:47 +0000)
This adds support for the non-breaking space character (&nbsp;) and properly
handling entities that do not end with a semicolon, such as a stray ampersand
in a text.

Change-Id: I2f157c9aa651b27511809d5a47ac07660949a290
Task-number: QTBUG-44869
Task-number: QTBUG-31816
Task-number: QTBUG-33368
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
src/quick/util/qquickstyledtext.cpp
tests/auto/quick/qquickstyledtext/tst_qquickstyledtext.cpp

index 5efe65ef442d5d7d78b4907b9736f4a6ea722a78..6ed32c10e2d0a375826febb7eea4ea71a59c2d08 100644 (file)
@@ -542,6 +542,12 @@ void QQuickStyledTextPrivate::parseEntity(const QChar *&ch, const QString &textI
                 textOut += QChar(38);
             else if (entity == QLatin1String("quot"))
                 textOut += QChar(34);
+            else if (entity == QLatin1String("nbsp"))
+                textOut += QChar(QChar::Nbsp);
+            return;
+        } else if (*ch == QLatin1Char(' ')) {
+            QStringRef entity(&textIn, entityStart - 1, entityLength + 1);
+            textOut += entity + *ch;
             return;
         }
         ++entityLength;
index b76218edb90eb0936a95f3a5f12e818c0b4e853f..816440b1919cae4cb5ac4d5c16be68ea9b01ca11 100644 (file)
@@ -153,6 +153,8 @@ void tst_qquickstyledtext::textOutput_data()
     QTest::newRow("space trailing bold") << "this is <b>bold </b>" << "this is bold " << (FormatList() << Format(Format::Bold, 8, 5)) << false;
     QTest::newRow("img") << "a<img src=\"blah.png\"/>b" << "a  b" << FormatList() << false;
     QTest::newRow("tag mix") << "<f6>ds<b></img><pro>gfh</b><w><w>ghj</stron><ql><sl><pl>dfg</j6><img><bol><r><prp>dfg<bkj></b><up><string>ewrq</al><bl>jklhj<zl>" << "dsgfhghjdfgdfgewrqjklhj" << (FormatList() << Format(Format::Bold, 2, 3)) << false;
+    QTest::newRow("named html entities") << "&gt; &lt; &amp; &quot; &nbsp;" << QLatin1String("> < & \" ") + QChar(QChar::Nbsp) << FormatList() << false;
+    QTest::newRow("invalid html entities") << "a &hello & a &goodbye;" << "a &hello & a " << FormatList() << false;
 }
 
 void tst_qquickstyledtext::textOutput()