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:
parent
df08cb7090
commit
2bf2bb3daf
@ -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 {
|
||||
|
@ -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()
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user