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 <jiang.jiang@nokia.com>
Reviewed-on: http://codereview.qt-project.org/6158
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
This commit is contained in:
Konstantin Ritt 2011-10-06 14:56:24 +02:00 committed by Qt by Nokia
parent df08cb7090
commit 2bf2bb3daf
3 changed files with 15 additions and 3 deletions

View 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 {

View 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()

View 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) {