<pre style='margin:0'>
Michael Dickens (michaelld) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e47a4481547c5a28200699acb5d5bb0fdc766b78">https://github.com/macports/macports-ports/commit/e47a4481547c5a28200699acb5d5bb0fdc766b78</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new e47a448 qt4-mac: patches for various fixes.
</span>e47a448 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit e47a4481547c5a28200699acb5d5bb0fdc766b78
</span>Author: Michael Dickens <michaelld@macports.org>
AuthorDate: Sun May 14 20:50:54 2017 -0400
<span style='display:block; white-space:pre;color:#404040;'> qt4-mac: patches for various fixes.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> 1) rename current patch to both fix typo as well as for its actual purpose: to handle frameworks in Makefile creation;
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> 2) add in patch to fix the "-arch ARCH -arch -Xarch" issue from ticket https://trac.macports.org/ticket/54151 and others from years gone by.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> 3) add in patch for commit 0a2f2382 on July 10, 2015 at 7:22:32 AM EDT that was not included in 4.8.7 release, which offers better handling of invalid font tables.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> rev-bump for all to be in effect.
</span>---
aqua/qt4-mac/Portfile | 18 +-
.../patch-better-invalid-fonttable-handling.diff | 650 +++++++++++++++++++++
...make_generators_unix_unixmake.cpp.fix_arch.diff | 87 +++
...ke_generators_unix_unixmake.cpp.framework.diff} | 4 +-
4 files changed, 754 insertions(+), 5 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/Portfile b/aqua/qt4-mac/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 285a570..afd319d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/aqua/qt4-mac/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -11,7 +11,7 @@ PortGroup compiler_blacklist_versions 1.0
</span>
name qt4-mac
version 4.8.7
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 5
</span> set branch [join [lrange [split ${version} .] 0 1] .]
categories aqua
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -154,13 +154,19 @@ patchfiles-append \
</span>
patchfiles-append patch-qmake_project.cpp.diff
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# (13) In QMake: (a) enable correct "-framework foo,bar" parsing as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (13a) In QMake: (a) enable correct "-framework foo,bar" parsing as
</span> # specified by Apple's LD; (b) disable "/Library/Frameworks" as a
# default search path; use "PREFIX/Library/Frameworks" and replace
# PREFIX in post-patch. Also set "PREFIX/lib" as a default library
# search path.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append patch-qmake_generators_unix_unixmakke.cpp.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append patch-qmake_generators_unix_unixmake.cpp.framework.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (13b) In QMake: fix issue for when LFLAGS and env LDFLAGS contain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# multiple "-arch FOO" duplicate flags, which would result in output
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# such as "-arch x86_64 -arch -Xarch_x86_64 ...".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff
</span>
# (14) Allow easy replacement of MACOSX_DEPLOYMENT_TARGET: build for
# just the user's current OS.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -275,6 +281,12 @@ platform darwin {
</span> }
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# (28) Better invalid fonttable handling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Qt commit 0a2f2382 on July 10, 2015 at 7:22:32 AM EDT.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# not included in 4.8.7 release.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append patch-better-invalid-fonttable-handling.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # error out if trying to build on a new OSX version (> 10.12).
platform darwin {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/files/patch-better-invalid-fonttable-handling.diff b/aqua/qt4-mac/files/patch-better-invalid-fonttable-handling.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..1990f36
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/files/patch-better-invalid-fonttable-handling.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,650 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -69,6 +69,16 @@ static inline bool qtransform_equals_no_translate(const QTransform &a, const QTr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template<typename T>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline bool qSafeFromBigEndian(const uchar *source, const uchar *end, T *output)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (source + sizeof(T) > end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *output = qFromBigEndian<T>(source);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Harfbuzz helper functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static HB_Bool hb_stringToGlyphs(HB_Font font, const HB_UChar16 *string, hb_uint32 length, HB_Glyph *glyphs, hb_uint32 *numGlyphs, HB_Bool rightToLeft)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -808,26 +818,38 @@ void QFontEngine::loadKerningPairs(QFixed scalingFactor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *table = reinterpret_cast<const uchar *>(tab.constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const uchar *end = table + tab.size();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(table, end, &version))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned short version = qFromBigEndian<quint16>(table);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (version != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // qDebug("wrong version");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned short numTables = qFromBigEndian<quint16>(table + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 numTables;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(table + 2, end, &numTables))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int offset = 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for(int i = 0; i < numTables; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (offset + 6 > tab.size()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// qDebug("offset out of bounds");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *header = table + offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ushort version = qFromBigEndian<quint16>(header);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ushort length = qFromBigEndian<quint16>(header+2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ushort coverage = qFromBigEndian<quint16>(header+4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header, end, &version))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header + 2, end, &length))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 coverage;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header + 4, end, &coverage))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // qDebug("subtable: version=%d, coverage=%x",version, coverage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(version == 0 && coverage == 0x0001) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (offset + length > tab.size()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -836,7 +858,10 @@ void QFontEngine::loadKerningPairs(QFixed scalingFactor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *data = table + offset + 6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ushort nPairs = qFromBigEndian<quint16>(data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 nPairs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(data, end, &nPairs))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(nPairs * 6 + 8 > length - 6) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // qDebug("corrupt table!");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // corrupt table
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -846,8 +871,21 @@ void QFontEngine::loadKerningPairs(QFixed scalingFactor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int off = 8;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for(int i = 0; i < nPairs; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QFontEngine::KernPair p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- p.left_right = (((uint)qFromBigEndian<quint16>(data+off)) << 16) + qFromBigEndian<quint16>(data+off+2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- p.adjust = QFixed(((int)(short)qFromBigEndian<quint16>(data+off+4))) / scalingFactor;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(data + off, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p.left_right = uint(tmp) << 16;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(data + off + 2, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p.left_right |= tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(data + off + 4, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p.adjust = QFixed(int(short(tmp))) / scalingFactor;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ kerning_pairs.append(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ off += 6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -872,26 +910,31 @@ int QFontEngine::glyphCount() const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QByteArray maxpTable = getSfntTable(MAKE_TAG('m', 'a', 'x', 'p'));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (maxpTable.size() < 6)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return qFromBigEndian<quint16>(reinterpret_cast<const uchar *>(maxpTable.constData() + 4));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const uchar *source = reinterpret_cast<const uchar *>(maxpTable.constData() + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const uchar *end = source + maxpTable.size();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 count = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ qSafeFromBigEndian(source, end, &count);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSymbolFont, int *cmapSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *header = table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (tableSize < 4)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *endPtr = table + tableSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // version check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (qFromBigEndian<quint16>(header) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header, endPtr, &version) || version != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned short numTables = qFromBigEndian<quint16>(header + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- const uchar *maps = table + 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (maps + 8 * numTables > endPtr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 numTables;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header + 2, endPtr, &numTables))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const uchar *maps = table + 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Invalid,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AppleRoman,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -906,8 +949,14 @@ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int tableToUse = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int score = Invalid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int n = 0; n < numTables; ++n) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- const quint16 platformId = qFromBigEndian<quint16>(maps + 8 * n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- const quint16 platformSpecificId = qFromBigEndian<quint16>(maps + 8 * n + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 platformId;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(maps + 8 * n, endPtr, &platformId))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 platformSpecificId;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(maps + 8 * n + 2, endPtr, &platformSpecificId))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch (platformId) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case 0: // Unicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (score < Unicode &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -961,20 +1010,30 @@ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *isSymbolFont = (symbolTable > -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned int unicode_table = qFromBigEndian<quint32>(maps + 8*tableToUse + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint32 unicode_table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(maps + 8 * tableToUse + 4, endPtr, &unicode_table))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!unicode_table || unicode_table + 8 > tableSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!unicode_table)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // get the header of the unicode table
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ header = table + unicode_table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned short format = qFromBigEndian<quint16>(header);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned int length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if(format < 8)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- length = qFromBigEndian<quint16>(header + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- length = qFromBigEndian<quint32>(header + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header, endPtr, &format))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint32 length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (format < 8) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header + 2, endPtr, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ length = tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(header + 4, endPtr, &length))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (table + unicode_table + length > endPtr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -989,7 +1048,7 @@ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Check that none of the latin1 range are in the unicode table
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool unicodeTableHasLatin1 = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int uc=0x00; uc<0x100; ++uc) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (getTrueTypeGlyphIndex(selectedTable, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (getTrueTypeGlyphIndex(selectedTable, length, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unicodeTableHasLatin1 = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -999,7 +1058,7 @@ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool unicodeTableHasSymbols = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!unicodeTableHasLatin1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int uc=0xf000; uc<0xf100; ++uc) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (getTrueTypeGlyphIndex(selectedTable, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (getTrueTypeGlyphIndex(selectedTable, length, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unicodeTableHasSymbols = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1017,12 +1076,17 @@ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return table + unicode_table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, int cmapSize, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- unsigned short format = qFromBigEndian<quint16>(cmap);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const uchar *end = cmap + cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap, end, &format))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (format == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (unicode < 256)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return (int) *(cmap+6+unicode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const uchar *ptr = cmap + 6 + unicode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (unicode < 256 && ptr < end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return quint32(*ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (format == 4) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* some fonts come with invalid cmap tables, where the last segment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ specified end = start = rangeoffset = 0xffff, delta = 0x0001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1031,25 +1095,49 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(unicode >= 0xffff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 segCountX2 = qFromBigEndian<quint16>(cmap + 6);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 segCountX2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 6, end, &segCountX2))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const unsigned char *ends = cmap + 14;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int i = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- for (; i < segCountX2/2 && qFromBigEndian<quint16>(ends + 2*i) < unicode; i++) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (; i < segCountX2/2; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 codePoint;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(ends + 2 * i, end, &codePoint))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (codePoint >= unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const unsigned char *idx = ends + segCountX2 + 2 + 2*i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 startIndex = qFromBigEndian<quint16>(idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 startIndex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(idx, end, &startIndex))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (startIndex > unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ idx += segCountX2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- qint16 idDelta = (qint16)qFromBigEndian<quint16>(idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(idx, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ qint16 idDelta = qint16(tmp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ idx += segCountX2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 idRangeoffset_t = (quint16)qFromBigEndian<quint16>(idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 idRangeoffset_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(idx, end, &idRangeoffset_t))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ quint16 glyphIndex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (idRangeoffset_t) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 id = qFromBigEndian<quint16>(idRangeoffset_t + 2*(unicode - startIndex) + idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(idRangeoffset_t + 2 * (unicode - startIndex) + idx, end, &id))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (id)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ glyphIndex = (idDelta + id) % 0x10000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1059,13 +1147,19 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return glyphIndex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (format == 6) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 tableSize = qFromBigEndian<quint16>(cmap + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 tableSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 2, end, &tableSize))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 firstCode6 = qFromBigEndian<quint16>(cmap + 6);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 firstCode6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 6, end, &firstCode6))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (unicode < firstCode6)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint16 entryCount6 = qFromBigEndian<quint16>(cmap + 8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 entryCount6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 8, end, &entryCount6))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (entryCount6 * 2 + 10 > tableSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1074,9 +1168,14 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ quint16 entryIndex6 = unicode - firstCode6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return qFromBigEndian<quint16>(cmap + 10 + (entryIndex6 * 2));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint16 index = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ qSafeFromBigEndian(cmap + 10 + (entryIndex6 * 2), end, &index);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return index;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (format == 12) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint32 nGroups = qFromBigEndian<quint32>(cmap + 12);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint32 nGroups;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 12, end, &nGroups))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmap += 16; // move to start of groups
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1084,13 +1183,24 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while (left <= right) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int middle = left + ( ( right - left ) >> 1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint32 startCharCode = qFromBigEndian<quint32>(cmap + 12*middle);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint32 startCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 12 * middle, end, &startCharCode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(unicode < startCharCode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ right = middle - 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- quint32 endCharCode = qFromBigEndian<quint32>(cmap + 12*middle + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if(unicode <= endCharCode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return qFromBigEndian<quint32>(cmap + 12*middle + 8) + unicode - startCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint32 endCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 12 * middle + 4, end, &endCharCode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (unicode <= endCharCode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ quint32 index;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!qSafeFromBigEndian(cmap + 12 * middle + 8, end, &index))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return index + unicode - startCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ left = middle + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_mac.mm.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_mac.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -625,7 +625,7 @@ bool QFontEngineMacMulti::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QFontEngineMac::QFontEngineMac(ATSUStyle baseStyle, ATSUFontID fontID, const QFontDef &def, QFontEngineMacMulti *multiEngine)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- : fontID(fontID), multiEngine(multiEngine), cmap(0), symbolCMap(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : fontID(fontID), multiEngine(multiEngine), cmap(0), symbolCMap(false), cmapSize(0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fontDef = def;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ATSUCreateAndCopyStyle(baseStyle, &style);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -747,22 +747,21 @@ bool QFontEngineMac::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!cmap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p'));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- cmap = getCMap(reinterpret_cast<const uchar *>(cmapTable.constData()), cmapTable.size(), &symbolCMap, &size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cmap = getCMap(reinterpret_cast<const uchar *>(cmapTable.constData()), cmapTable.size(), &symbolCMap, &cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!cmap)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbolCMap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!glyphs->glyphs[i] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_mac_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_mac_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,6 +108,7 @@ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ qreal m_maxCharWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QFixed m_xHeight;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QFixed m_averageCharWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mutable int cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class QFontEngineMacMulti : public QFontEngineMulti
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -247,7 +247,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QFontEngineGlyphCache *glyphCache(void *key, QFontEngineGlyphCache::Type type, const QTransform &transform) const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const uchar *getCMap(const uchar *table, uint tableSize, bool *isSymbolFont, int *cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- static quint32 getTrueTypeGlyphIndex(const uchar *cmap, uint unicode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static quint32 getTrueTypeGlyphIndex(const uchar *cmap, int cmapSize, uint unicode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static QByteArray convertToPostscriptFontFamilyName(const QByteArray &fontFamily);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_qpa.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_qpa.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -358,9 +358,9 @@ bool QFontEngineQPA::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (mirrored)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uc = QChar::mirroredChar(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ++glyph_pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -368,7 +368,7 @@ bool QFontEngineQPA::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (mirrored)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uc = QChar::mirroredChar(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if 0 && defined(DEBUG_FONTENGINE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QChar c(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!findGlyph(glyphs[glyph_pos].glyph) && !seenGlyphs.contains(c))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -511,16 +511,16 @@ bool QFontEngineQPA::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyph_t g = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyph_t g = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!g && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- g = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ g = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!g)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!getTrueTypeGlyphIndex(cmap, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!getTrueTypeGlyphIndex(cmap, cmapSize, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_qpf.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_qpf.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -577,9 +577,9 @@ bool QFontEngineQPF::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ++glyph_pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -587,7 +587,7 @@ bool QFontEngineQPF::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (mirrored)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uc = QChar::mirroredChar(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if 0 && defined(DEBUG_FONTENGINE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QChar c(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!findGlyph(glyphs[glyph_pos].glyph) && !seenGlyphs.contains(c))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -786,16 +786,16 @@ bool QFontEngineQPF::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyph_t g = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyph_t g = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!g && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- g = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ g = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!g)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!getTrueTypeGlyphIndex(cmap, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!getTrueTypeGlyphIndex(cmap, cmapSize, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_s60.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_s60.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -77,6 +77,7 @@ QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : m_cFont(cFont)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ , m_symbolCMap(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ , m_openFont(openFont)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ , m_cmapSize(0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!symbianFontTableApiAvailable()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TAny *trueTypeExtension = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -161,10 +162,9 @@ const uchar *QSymbianTypeFaceExtras::cmap() const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (m_cmapTable.isNull()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const QByteArray cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p'));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *cmap = QFontEngine::getCMap(reinterpret_cast<const uchar *>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- (cmapTable.constData()), cmapTable.size(), &m_symbolCMap, &size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_cmapTable = QByteArray(reinterpret_cast<const char *>(cmap), size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (cmapTable.constData()), cmapTable.size(), &m_symbolCMap, &m_cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ m_cmapTable = QByteArray(reinterpret_cast<const char *>(cmap), m_cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return reinterpret_cast<const uchar *>(m_cmapTable.constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -324,6 +324,7 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const unsigned int uc = getChar(characters, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ m_cmapSize,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (isRtl && !m_extras->isSymbolCMap()) ? QChar::mirroredChar(uc) : uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -463,7 +464,7 @@ bool QFontEngineS60::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const unsigned char *cmap = m_extras->cmap();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (QFontEngine::getTrueTypeGlyphIndex(cmap, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (QFontEngine::getTrueTypeGlyphIndex(cmap, m_cmapSize, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_s60_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_s60_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,6 +93,7 @@ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // the Font Table API
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ COpenFont *m_openFont;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mutable MOpenFontTrueTypeExtension *m_trueTypeExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mutable int m_cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class QFontEngineS60 : public QFontEngine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_win.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_win.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -215,9 +215,8 @@ void QFontEngineWin::getCMap()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool symb = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmapTable = getSfntTable(qbswap<quint32>(MAKE_TAG('c', 'm', 'a', 'p')));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmap = QFontEngine::getCMap(reinterpret_cast<const uchar *>(cmapTable.constData()),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- cmapTable.size(), &symb, &size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cmapTable.size(), &symb, &cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!cmap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ttf = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -263,14 +262,14 @@ int QFontEngineWin::getGlyphIndexes(const QChar *str, int numChars, QGlyphLayout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, QChar::mirroredChar(uc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, QChar::mirroredChar(uc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -296,14 +295,14 @@ int QFontEngineWin::getGlyphIndexes(const QChar *str, int numChars, QGlyphLayout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -335,6 +334,7 @@ QFontEngineWin::QFontEngineWin(const QString &name, HFONT _hfont, bool stockFont
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _name = name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmap = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cmapSize = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hfont = _hfont;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logfont = lf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HDC hdc = shared_dc();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -811,9 +811,9 @@ bool QFontEngineWin::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (getTrueTypeGlyphIndex(cmap, uc) == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (getTrueTypeGlyphIndex(cmap, cmapSize, uc) == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (uc < 0x100) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (getTrueTypeGlyphIndex(cmap, uc + 0xf000) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -823,7 +823,7 @@ bool QFontEngineWin::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (getTrueTypeGlyphIndex(cmap, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (getTrueTypeGlyphIndex(cmap, cmapSize, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_win_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_win_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -144,6 +144,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mutable uint widthCacheSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mutable QFixed *designAdvances;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mutable int designAdvancesSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool hasCFFTable() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.10.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..c1e085e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,87 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- qmake/generators/unix/unixmake.cpp.framework
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ qmake/generators/unix/unixmake.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -589,9 +589,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libdirs.append(QMakeLocalFileName("@PREFIX@/lib"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS", "QMAKE_LFLAGS", "QMAKE_LIBS", QString() };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for(int i = 0; !lflags[i].isNull(); i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // warn_msg(WarnLogic, "processPrlFiles: 0: lflags[%d] is '%s'", i, lflags[i].toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QStringList &l = project->values(lflags[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for(int lit = 0; lit < l.size(); ++lit) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QString opt = l.at(lit).trimmed();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // warn_msg(WarnLogic, "processPrlFiles: 1: opt[%d] is '%s'", lit, opt.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(opt.startsWith("-")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(opt.startsWith("-L")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QMakeLocalFileName l(opt.right(opt.length()-2));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -727,6 +729,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for(int lit = 0; lit < l.size(); ++lit) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QString arch("default");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QString opt = l.at(lit).trimmed();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // warn_msg(WarnLogic, "processPrlFiles: 2: opt[%d] is '%s'", lit, opt.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(opt.startsWith("-")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-Xarch")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (opt.length() > 7) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -734,7 +737,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ opt = l.at(++lit);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // warn_msg(WarnLogic, "processPrlFiles: 2: arch is '%s'", arch.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(opt.startsWith("-L") ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-F"))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(!lflags[arch].contains(opt))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -771,6 +774,55 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lflags[arch].append("-framework");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lflags[arch].append(opt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-arch")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // warn_msg(WarnLogic, "%d / %d: %s, %s", lit, l.size (), opt.toLatin1().constData(), l.at(lit).toLatin1().constData(), l.at(1+lit).toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // make sure "-arch" is exact
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (opt.toLower() != "-arch") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ warn_msg(WarnLogic, "Expect '-arch' flag to be standalone; got '%s'; ignoring extra.", opt.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // retrieve the next argument, if it exists
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (++lit >= l.size ()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ warn_msg(WarnLogic, "Lone '-arch' flag; ignoring.");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ QString t_arch = l.at(lit).trimmed().toLower();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // make sure next option is valid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const QString archs[] = { "i386", "x86_64", "ppc", "ppc64", QString() };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int i = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for(; !archs[i].isNull(); ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (t_arch.startsWith(archs[i])) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (archs[i].isNull()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ warn_msg(WarnLogic, "Lone '-arch' flag; ignoring.");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ --lit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // make sure the option is exact
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (archs[i] != t_arch) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ warn_msg(WarnLogic, "Expect ARCH of '-arch ARCH' flag to be exact; got '%s'; ignoring extra.", t_arch.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ t_arch = archs[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // see if this flag is alread in place in the ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // for "default" and the selected arch.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // is "-arch ARCH" already in any set of flags?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool found = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for(int j = 0; j < lflags["default"].size(); ++j) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((lflags[arch].at(j) == "-arch") &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (lflags[arch].at(j+1) == t_arch)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // yes: flag already exists; ignore it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ found = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!found) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // no: add it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ lflags[arch].append("-arch");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ lflags[arch].append(t_arch);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ warn_msg(WarnLogic, "Found duplicate '-arch %s' flag; ignoring.", t_arch.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lflags[arch].append(opt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.framework.diff
</span>similarity index 96%
rename from aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff
rename to aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.framework.diff
<span style='display:block; white-space:pre;color:#808080;'>index 1a93310..814cad2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.framework.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,5 +1,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- qmake/generators/unix/unixmake.cpp.orig 2013-02-24 21:46:23.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ qmake/generators/unix/unixmake.cpp 2013-02-25 11:40:24.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- qmake/generators/unix/unixmake.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ qmake/generators/unix/unixmake.cpp
</span> @@ -472,8 +472,9 @@
UnixMakefileGenerator::findLibraries()
{
</pre><pre style='margin:0'>
</pre>