summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRitt Konstantin <ritt.ks@gmail.com>2010-02-24 19:13:24 (GMT)
committerThiago Macieira <thiago.macieira@nokia.com>2010-03-05 15:58:07 (GMT)
commit58ea5d52b4f30fc1d029db05b09b60fef49a6f2a (patch)
tree54cb30cb9776fd940f56a778f90943753f99016a
parent7706e9ba3807f9f31a9310f39f0c8b3007f7fb10 (diff)
downloadQt-58ea5d52b4f30fc1d029db05b09b60fef49a6f2a.zip
Qt-58ea5d52b4f30fc1d029db05b09b60fef49a6f2a.tar.gz
Qt-58ea5d52b4f30fc1d029db05b09b60fef49a6f2a.tar.bz2
Unicode character property 'General_Category=Cn' was erroneously ignored
causing two related bugs in QChar::category() and QChar::isPrint(). As described in tr44, 4.2.8 Default Values General_Category character property should be setted to Cn for all codepoints omitted in UCD. Instead they was mapped to QChar::NoCategory (=0) which have no equivalent in Unicode specs and as result was ignored in filtering by binary mask. Merge-request: 480 Reviewed-by: Thiago Macieira <thiago.macieira@nokia.com>
-rw-r--r--tests/auto/qchar/tst_qchar.cpp13
-rw-r--r--util/unicode/main.cpp2
2 files changed, 14 insertions, 1 deletions
diff --git a/tests/auto/qchar/tst_qchar.cpp b/tests/auto/qchar/tst_qchar.cpp
index 547147c..6227c2e 100644
--- a/tests/auto/qchar/tst_qchar.cpp
+++ b/tests/auto/qchar/tst_qchar.cpp
@@ -72,6 +72,7 @@ private slots:
void toLower();
void toTitle();
void toCaseFolded();
+ void isPrint();
void isUpper();
void isLower();
void category();
@@ -218,6 +219,12 @@ void tst_QChar::toCaseFolded()
QVERIFY(QChar::toCaseFolded((ushort)0xb5) == 0x3bc);
}
+void tst_QChar::isPrint()
+{
+ QVERIFY(QChar('A').isPrint());
+ QVERIFY(!QChar(0x1aff).isPrint()); // General_Gategory =Cn
+}
+
void tst_QChar::isUpper()
{
QVERIFY(QChar('A').isUpper());
@@ -259,6 +266,12 @@ void tst_QChar::category()
QVERIFY(QChar::category(0xd900u) == QChar::Other_Surrogate);
QVERIFY(QChar::category(0xdc00u) == QChar::Other_Surrogate);
QVERIFY(QChar::category(0xdc01u) == QChar::Other_Surrogate);
+
+ QVERIFY(QChar::category((uint)0x10fffdu) == QChar::Other_PrivateUse);
+ QVERIFY(QChar::category((uint)0x110000u) == QChar::NoCategory);
+
+ QVERIFY(QChar::category((uint)0x1aff) == QChar::Other_NotAssigned);
+ QVERIFY(QChar::category((uint)0x10ffffu) == QChar::Other_NotAssigned);
}
void tst_QChar::direction()
diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp
index 14d8046..d7ee084 100644
--- a/util/unicode/main.cpp
+++ b/util/unicode/main.cpp
@@ -368,7 +368,7 @@ static int appendToSpecialCaseMap(const QList<int> &map)
struct UnicodeData {
UnicodeData(int codepoint = 0) {
- p.category = QChar::NoCategory;
+ p.category = QChar::Other_NotAssigned; // Cn
p.combiningClass = 0;
p.direction = QChar::DirL;