From: Konstantin Ritt Date: Thu, 6 Oct 2011 12:56:24 +0000 (+0200) Subject: fix QChar::isSpace() to handle codepoint U+0085 X-Git-Tag: qt-v5.0.0-alpha1~3312 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2bf2bb3daf32935e3642447d40732998df819556;p=profile%2Fivi%2Fqtbase.git fix QChar::isSpace() to handle codepoint U+0085 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 Reviewed-on: http://codereview.qt-project.org/6158 Reviewed-by: Qt Sanity Bot --- diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h index b82addb..697b506 100644 --- a/src/corelib/tools/qchar.h +++ b/src/corelib/tools/qchar.h @@ -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 { diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 5e2e56e..59a54f3 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -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() diff --git a/tests/auto/corelib/tools/qchar/tst_qchar.cpp b/tests/auto/corelib/tools/qchar/tst_qchar.cpp index 195abcd..7f57471 100644 --- a/tests/auto/corelib/tools/qchar/tst_qchar.cpp +++ b/tests/auto/corelib/tools/qchar/tst_qchar.cpp @@ -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("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) {