fix QChar::isSpace() to handle codepoint U+0085
authorKonstantin Ritt <ritt.ks@gmail.com>
Thu, 6 Oct 2011 12:56:24 +0000 (14:56 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 6 Oct 2011 17:24:26 +0000 (19:24 +0200)
according to the Unicode specs, code point U+0085 should be treated
like a white space character (an exceptional Cc one)

Change-Id: Ib17ae0c4d3cdafe667cafa38b645138ef24c238c
Merge-request: 32
Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
Reviewed-on: http://codereview.qt-project.org/6158
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
src/corelib/tools/qchar.h
src/corelib/tools/qregexp.cpp
tests/auto/corelib/tools/qchar/tst_qchar.cpp

index b82addb..697b506 100644 (file)
@@ -234,7 +234,7 @@ public:
     bool isPunct() const;
     inline bool isSpace() const {
         return ucs == 0x20 || (ucs <= 0x0D && ucs >= 0x09)
-                || (ucs > 127 && isSpace(ucs));
+                || (ucs > 127 && (ucs == 0x0085 || isSpace(ucs)));
     }
     bool isMark() const;
     inline bool isLetter() const {
index 5e2e56e..59a54f3 100644 (file)
@@ -2950,7 +2950,8 @@ int QRegExpEngine::getEscape()
                                                FLAG(QChar::Other_Control)));
         yyCharClass->addRange(0x0000, 0x0008);
         yyCharClass->addRange(0x000e, 0x001f);
-        yyCharClass->addRange(0x007f, 0x009f);
+        yyCharClass->addRange(0x007f, 0x0084);
+        yyCharClass->addRange(0x0086, 0x009f);
         return Tok_CharClass;
     case 'W':
         // see QChar::isLetterOrNumber() and QChar::isMark()
@@ -2991,6 +2992,7 @@ int QRegExpEngine::getEscape()
                                    FLAG(QChar::Separator_Line) |
                                    FLAG(QChar::Separator_Paragraph));
         yyCharClass->addRange(0x0009, 0x000d);
+        yyCharClass->addSingleton(0x0085);
         return Tok_CharClass;
     case 'w':
         // see QChar::isLetterOrNumber() and QChar::isMark()
index 195abcd..7f57471 100644 (file)
@@ -84,6 +84,7 @@ private slots:
     void isLower();
     void isSpace_data();
     void isSpace();
+    void isSpaceSpecial();
     void isTitle();
     void category();
     void direction();
@@ -343,7 +344,7 @@ void tst_QChar::isSpace_data()
     QTest::addColumn<bool>("expected");
 
     for (ushort ucs = 0; ucs < 256; ++ucs) {
-        bool isSpace = (ucs <= 0x0D && ucs >= 0x09) || ucs == 0x20 || ucs == 0xA0;
+        bool isSpace = (ucs <= 0x0D && ucs >= 0x09) || ucs == 0x20 || ucs == 0xA0 || ucs == 0x85;
         QString tag = QString::fromLatin1("0x%0").arg(QString::number(ucs, 16));
         QTest::newRow(tag.toLatin1()) << ucs << isSpace;
     }
@@ -356,6 +357,15 @@ void tst_QChar::isSpace()
     QCOMPARE(QChar(ucs).isSpace(), expected);
 }
 
+void tst_QChar::isSpaceSpecial()
+{
+    QVERIFY(!QChar(QChar::Null).isSpace());
+    QVERIFY(QChar(QChar::Nbsp).isSpace());
+    QVERIFY(QChar(QChar::ParagraphSeparator).isSpace());
+    QVERIFY(QChar(QChar::LineSeparator).isSpace());
+    QVERIFY(QChar(0x1680).isSpace());
+}
+
 void tst_QChar::isTitle()
 {
     for (uint codepoint = 0; codepoint <= UNICODE_LAST_CODEPOINT; ++codepoint) {