summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools
diff options
context:
space:
mode:
authorLorn Potter <lopotter@ljp-linux-vm.localdomain>2010-06-17 04:11:33 (GMT)
committerLorn Potter <lopotter@ljp-linux-vm.localdomain>2010-06-17 04:11:33 (GMT)
commit8335adf60299b728c0bf7a346a5afd94a3d56712 (patch)
treea8057969ac369ddffec9fa2b92e10cdf1fc319eb /src/corelib/tools
parent0948de26bca9a68a354b436895bdf9e2db9c4288 (diff)
parent30c8d1e3dccc83499ac3d76284cfb2e8d860808a (diff)
downloadQt-8335adf60299b728c0bf7a346a5afd94a3d56712.zip
Qt-8335adf60299b728c0bf7a346a5afd94a3d56712.tar.gz
Qt-8335adf60299b728c0bf7a346a5afd94a3d56712.tar.bz2
Merge branch '4.7' of git://gitorious.org/qt/qt into 4.7
Diffstat (limited to 'src/corelib/tools')
-rw-r--r--src/corelib/tools/qharfbuzz.cpp34
-rw-r--r--src/corelib/tools/qhash.h9
-rw-r--r--src/corelib/tools/qlocale.cpp19
-rw-r--r--src/corelib/tools/qlocale.h2
-rw-r--r--src/corelib/tools/qmap.h9
-rw-r--r--src/corelib/tools/qstring.cpp24
-rw-r--r--src/corelib/tools/qstring.h2
-rw-r--r--src/corelib/tools/qtextboundaryfinder.cpp12
-rw-r--r--src/corelib/tools/qvarlengtharray.h7
-rw-r--r--src/corelib/tools/qvarlengtharray.qdoc49
-rw-r--r--src/corelib/tools/tools.pri5
11 files changed, 111 insertions, 61 deletions
diff --git a/src/corelib/tools/qharfbuzz.cpp b/src/corelib/tools/qharfbuzz.cpp
index 1b6d334..9166a14 100644
--- a/src/corelib/tools/qharfbuzz.cpp
+++ b/src/corelib/tools/qharfbuzz.cpp
@@ -102,45 +102,15 @@ HB_UChar16 HB_GetMirroredChar(HB_UChar16 ch)
return QChar::mirroredChar(ch);
}
-void *HB_Library_Resolve(const char *library, const char *symbol)
+void *HB_Library_Resolve(const char *library, int version, const char *symbol)
{
#ifdef QT_NO_LIBRARY
return 0;
#else
- return QLibrary::resolve(QLatin1String(library), symbol);
+ return QLibrary::resolve(QLatin1String(library), version, symbol);
#endif
}
-void *HB_TextCodecForMib(int mib)
-{
-#ifndef QT_NO_TEXTCODEC
- return QTextCodec::codecForMib(mib);
-#else
- return 0;
-#endif
-}
-
-char *HB_TextCodec_ConvertFromUnicode(void *codec, const HB_UChar16 *unicode, hb_uint32 length, hb_uint32 *outputLength)
-{
-#ifndef QT_NO_TEXTCODEC
- QByteArray data = reinterpret_cast<QTextCodec *>(codec)->fromUnicode((const QChar *)unicode, length);
- // ### suboptimal
- char *output = (char *)malloc(data.length() + 1);
- Q_CHECK_PTR(output);
- memcpy(output, data.constData(), data.length() + 1);
- if (outputLength)
- *outputLength = data.length();
- return output;
-#else
- return 0;
-#endif
-}
-
-void HB_TextCodec_FreeResult(char *string)
-{
- free(string);
-}
-
} // extern "C"
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index 3374c80..0777f06 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -931,7 +931,7 @@ public:
{ return QHash<Key, T>::insertMulti(key, value); }
inline QMultiHash &operator+=(const QMultiHash &other)
- { unite(other); return *this; }
+ { this->unite(other); return *this; }
inline QMultiHash operator+(const QMultiHash &other) const
{ QMultiHash result = *this; result += other; return result; }
@@ -1006,12 +1006,7 @@ Q_INLINE_TEMPLATE int QMultiHash<Key, T>::remove(const Key &key, const T &value)
typename QHash<Key, T>::iterator end(QHash<Key, T>::end());
while (i != end && i.key() == key) {
if (i.value() == value) {
-#if defined(Q_CC_RVCT)
- // RVCT has problems with scoping, apparently.
- i = QHash<Key, T>::erase(i);
-#else
- i = erase(i);
-#endif
+ i = this->erase(i);
++n;
} else {
++i;
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index c000dc8..a51ee81 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -3478,6 +3478,25 @@ QLocale::MeasurementSystem QLocale::measurementSystem() const
}
/*!
+ \since 4.7
+
+ Returns the text direction of the language.
+*/
+Qt::LayoutDirection QLocale::textDirection() const
+{
+ Language lang = language();
+ if (lang == QLocale::Arabic ||
+ lang == QLocale::Hebrew ||
+ lang == QLocale::Persian ||
+ lang == QLocale::Urdu ||
+ lang == QLocale::Syriac)
+ return Qt::RightToLeft;
+
+ return Qt::LeftToRight;
+}
+
+
+/*!
\since 4.5
Returns the localized name of the "AM" suffix for times specified using
diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h
index f2fd892..8b424bb 100644
--- a/src/corelib/tools/qlocale.h
+++ b/src/corelib/tools/qlocale.h
@@ -666,6 +666,8 @@ public:
MeasurementSystem measurementSystem() const;
+ Qt::LayoutDirection textDirection() const;
+
inline bool operator==(const QLocale &other) const;
inline bool operator!=(const QLocale &other) const;
diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h
index 5696ba6..e4b73a1 100644
--- a/src/corelib/tools/qmap.h
+++ b/src/corelib/tools/qmap.h
@@ -977,7 +977,7 @@ public:
{ return QMap<Key, T>::insertMulti(key, value); }
inline QMultiMap &operator+=(const QMultiMap &other)
- { unite(other); return *this; }
+ { this->unite(other); return *this; }
inline QMultiMap operator+(const QMultiMap &other) const
{ QMultiMap result = *this; result += other; return result; }
@@ -1052,12 +1052,7 @@ Q_INLINE_TEMPLATE int QMultiMap<Key, T>::remove(const Key &key, const T &value)
typename QMap<Key, T>::iterator end(QMap<Key, T>::end());
while (i != end && !qMapLessThanKey<Key>(key, i.key())) {
if (i.value() == value) {
-#if defined(Q_CC_RVCT)
- // RVCT has problems with scoping, apparently.
- i = QMap<Key, T>::erase(i);
-#else
- i = erase(i);
-#endif
+ i = this->erase(i);
++n;
} else {
++i;
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 1172a7b..57f79a0 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -4768,6 +4768,10 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1,
CFRelease(thisString);
CFRelease(otherString);
return result;
+#elif defined(Q_OS_SYMBIAN)
+ TPtrC p1 = TPtrC16(reinterpret_cast<const TUint16 *>(data1), length1);
+ TPtrC p2 = TPtrC16(reinterpret_cast<const TUint16 *>(data2), length2);
+ return p1.CompareC(p2);
#elif defined(Q_OS_UNIX)
// declared in <string.h>
int delta = strcoll(toLocal8Bit_helper(data1, length1), toLocal8Bit_helper(data2, length2));
@@ -6916,20 +6920,23 @@ void QString::updateProperties() const
p++;
}
- p = d->data;
- d->righttoleft = false;
+ d->righttoleft = isRightToLeft();
+ d->clean = true;
+}
+
+bool QString::isRightToLeft() const
+{
+ ushort *p = d->data;
+ const ushort * const end = p + d->size;
+ bool righttoleft = false;
while (p < end) {
switch(QChar::direction(*p))
{
case QChar::DirL:
- case QChar::DirLRO:
- case QChar::DirLRE:
goto end;
case QChar::DirR:
case QChar::DirAL:
- case QChar::DirRLO:
- case QChar::DirRLE:
- d->righttoleft = true;
+ righttoleft = true;
goto end;
default:
break;
@@ -6937,8 +6944,7 @@ void QString::updateProperties() const
++p;
}
end:
- d->clean = true;
- return;
+ return righttoleft;
}
/*! \fn bool QString::isSimpleText() const
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index a1c4e77..e52f59f 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -590,7 +590,7 @@ public:
#endif
bool isSimpleText() const { if (!d->clean) updateProperties(); return d->simpletext; }
- bool isRightToLeft() const { if (!d->clean) updateProperties(); return d->righttoleft; }
+ bool isRightToLeft() const;
QString(int size, Qt::Initialization);
diff --git a/src/corelib/tools/qtextboundaryfinder.cpp b/src/corelib/tools/qtextboundaryfinder.cpp
index 9205297..bcddcb2 100644
--- a/src/corelib/tools/qtextboundaryfinder.cpp
+++ b/src/corelib/tools/qtextboundaryfinder.cpp
@@ -131,6 +131,11 @@ static void init(QTextBoundaryFinder::BoundaryType type, const QChar *chars, int
Line break boundaries give possible places where a line break
might happen and sentence boundaries will show the beginning and
end of whole sentences.
+
+ The first position in a string is always a valid boundary and
+ refers to the position before the first character. The last
+ position at the length of the string is also valid and refers
+ to the position after the last character.
*/
/*!
@@ -363,7 +368,8 @@ int QTextBoundaryFinder::toNextBoundary()
++pos;
break;
case Line:
- while (pos < length && d->attributes[pos].lineBreakType < HB_Break)
+ Q_ASSERT(pos);
+ while (pos < length && d->attributes[pos-1].lineBreakType < HB_Break)
++pos;
break;
}
@@ -405,7 +411,7 @@ int QTextBoundaryFinder::toPreviousBoundary()
--pos;
break;
case Line:
- while (pos > 0 && d->attributes[pos].lineBreakType < HB_Break)
+ while (pos > 0 && d->attributes[pos-1].lineBreakType < HB_Break)
--pos;
break;
}
@@ -430,7 +436,7 @@ bool QTextBoundaryFinder::isAtBoundary() const
case Word:
return d->attributes[pos].wordBoundary;
case Line:
- return d->attributes[pos].lineBreakType >= HB_Break;
+ return (pos > 0) ? d->attributes[pos-1].lineBreakType >= HB_Break : true;
case Sentence:
return d->attributes[pos].sentenceBoundary;
}
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index bfede94..4a6bb4b 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -127,6 +127,13 @@ public:
inline T *data() { return ptr; }
inline const T *data() const { return ptr; }
inline const T * constData() const { return ptr; }
+ typedef int size_type;
+ typedef T value_type;
+ typedef value_type *pointer;
+ typedef const value_type *const_pointer;
+ typedef value_type &reference;
+ typedef const value_type &const_reference;
+ typedef qptrdiff difference_type;
private:
friend class QPodList<T, Prealloc>;
diff --git a/src/corelib/tools/qvarlengtharray.qdoc b/src/corelib/tools/qvarlengtharray.qdoc
index 38901e5..ef2dc58 100644
--- a/src/corelib/tools/qvarlengtharray.qdoc
+++ b/src/corelib/tools/qvarlengtharray.qdoc
@@ -302,3 +302,52 @@
\a defaultValue.
*/
+/*!
+ \typedef QVarLengthArray::size_type
+ \since 4.7
+
+ Typedef for int. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::value_type
+ \since 4.7
+
+ Typedef for T. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::difference_type
+ \since 4.7
+
+ Typedef for ptrdiff_t. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::pointer
+ \since 4.7
+
+ Typedef for T *. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::const_pointer
+ \since 4.7
+
+ Typedef for const T *. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::reference
+ \since 4.7
+
+ Typedef for T &. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::const_reference
+ \since 4.7
+
+ Typedef for const T &. Provided for STL compatibility.
+*/
+
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index 4e0ebbc..e579dd5 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -106,8 +106,9 @@ contains(QT_CONFIG, zlib) {
../3rdparty/zlib/uncompr.c \
../3rdparty/zlib/zutil.c
} else:!contains(QT_CONFIG, no-zlib) {
- unix:LIBS_PRIVATE += -lz
-# win32:LIBS += libz.lib
+ symbian:LIBS_PRIVATE += -llibz
+ else:if(unix|win32-g++*):LIBS_PRIVATE += -lz
+ else:LIBS += zdll.lib
}
DEFINES += HB_EXPORT=Q_CORE_EXPORT